Добавление линии регрессии на ggplot
Я очень стараюсь добавить линию регрессии на ggplot. Сначала я попробовал с abline, но мне не удалось заставить его работать. Тогда я попробовал это...
data = data.frame(x.plot=rep(seq(1,5),10),y.plot=rnorm(50))
ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) +
geom_smooth(method='lm',formula=data$y.plot~data$x.plot)
но это не работает.
4 ответов:
в общем, чтобы предоставить свою собственную формулу, вы должны использовать аргументы
xиyэто будет соответствовать значениям, которые вы предоставили вggplot()- в данном случаеxбудет интерпретироваться какx.plotиyкакy.plot. Более подробную информацию о методах сглаживания и формуле вы можете найти на странице справки functionstat_smooth()как это по умолчанию стат используетсяgeom_smooth().ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + geom_smooth(method='lm',formula=y~x)если вы используете те же значения x и y, которые вы указали в
ggplot()звоните и надо постройте линию линейной регрессии, тогда вам не нужно использовать формулу внутриgeom_smooth(), просто поставитьmethod="lm".ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + geom_smooth(method='lm')
как я понял, в случае, если у вас есть модель установлена на множественной линейной регрессии, указанное решение не будет работать.
вы должны создать свою линию вручную как фрейм данных, который содержит прогнозируемые значения для вашего исходного фрейма данных (в вашем случае
data).Это будет выглядеть так:
# read dataset df = mtcars # create multiple linear model lm_fit <- lm(mpg ~ cyl + hp, data=df) summary(lm_fit) # save predictions of the model in the new data frame # together with variable you want to plot against predicted_df <- data.frame(mpg_pred = predict(lm_fit, df), hp=df$hp) # this is the predicted line of multiple linear regression ggplot(data = df, aes(x = mpg, y = hp)) + geom_point(color='blue') + geom_line(color='red',data = predicted_df, aes(x=mpg_pred, y=hp))# this is predicted line comparing only chosen variables ggplot(data = df, aes(x = mpg, y = hp)) + geom_point(color='blue') + geom_smooth(method = "lm", se = FALSE)
Если вы хотите соответствовать другим типам моделей, например кривой доза-ответ с использованием логистических моделей, вам также нужно будет создать больше точек данных с функцией predict, если вы хотите иметь более плавную линию регрессии:
fit: ваша подгонка кривой логистической регрессии
#Create a range of doses: mm <- data.frame(DOSE = seq(0, max(data$DOSE), length.out = 100)) #Create a new data frame for ggplot using predict and your range of new #doses: fit.ggplot=data.frame(y=predict(fit, newdata=mm),x=mm$DOSE) ggplot(data=data,aes(x=log10(DOSE),y=log(viability)))+geom_point()+ geom_line(data=fit.ggplot,aes(x=log10(x),y=log(y)))
Я нашел эту функцию на блог
ggplotRegression <- function (fit) { `require(ggplot2) ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + geom_point() + stat_smooth(method = "lm", col = "red") + labs(title = paste("Adj R2 = ",signif(summary(fit)$adj.r.squared, 5), "Intercept =",signif(fit$coef[[1]],5 ), " Slope =",signif(fit$coef[[2]], 5), " P =",signif(summary(fit)$coef[2,4], 5))) }`после загрузки функции вы можете просто
ggplotRegression(fit)вы также можете пойти на
ggplotregression( y ~ x + z + Q, data)надеюсь, что это помогает.


Comments