使用的明显解决方案 geom_abline :
geom_abline
geom_abline(slope = data.lm$coefficients[2], intercept = data.lm$coefficients[1])
哪里 data.lm 是一个 lm 对象,和 data.lm$coefficients 看起来像这样:
data.lm
lm
data.lm$coefficients
data.lm$coefficients (Intercept) DepDelay -2.006045 1.025109
在实践中是相同的是使用 stat_function 绘制回归线作为x的函数,利用 predict :
stat_function
predict
stat_function(fun = function(x) predict(data.lm, newdata = data.frame(DepDelay=x)))
默认情况下,效率稍低 n=101 计算点数,但更灵活,因为它将为任何支持的模型绘制预测曲线 predict ,如非线性的 npreg 来自包np。
n=101
npreg
注意:如果您使用 scale_x_continuous 要么 scale_y_continuous 某些值可能会被截止 geom_smooth 可能无法正常工作。 使用 coord_cartesian 改为缩放 。
scale_x_continuous
scale_y_continuous
geom_smooth
coord_cartesian
我发现了这个功能 中使用ggplot2 博客
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)
ggplotregression( y ~ x + z + Q, data)
希望这可以帮助。
正如我刚想的那样,如果你有一个 的 拟合多元线性回归的模型 强> ,上述解决方案将无效。
您必须手动创建您的行作为包含原始数据帧的预测值的数据框(在您的情况下) data )。
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)
如果您想要使用其他类型的模型,例如使用逻辑模型的剂量 - 响应曲线,您还需要使用函数预测创建更多数据点,如果您想要更平滑的回归线:
拟合:符合逻辑回归曲线
#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)))
通常,要提供自己的公式,您应该使用参数 x 和 y 这将对应于您提供的值 ggplot() - 在这种情况下 x 将被解释为 x.plot 和 y 如 y.plot 。有关平滑方法和公式的更多信息,请参见功能帮助页面 stat_smooth() 因为它是默认的统计数据 geom_smooth() 。
x
y
ggplot()
x.plot
y.plot
stat_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" 。
method="lm"
ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + geom_smooth(method='lm')