ggplot:将回归线扩展为具有不同线型的预测值

奥丹

是否有一种简单的方法可以将虚线从实线回归线的末端延伸到预测值?

以下是我的基本尝试:

x = rnorm(10)
y = 5 + x + rnorm(10,0,0.4)

my_lm <- lm(y~x)
summary(my_lm)

my_intercept <- my_lm$coef[1]
my_slope <- my_lm$coef[2]
my_pred = predict(my_lm,data.frame(x = (max(x)+1)))

ggdf <- data.frame( x = c(x,max(x)+1), y = c(y,my_pred), obs_Or_Pred = c(rep("Obs",10),"Pred") )

ggplot(ggdf, aes(x = x, y = y, group = obs_Or_Pred ) ) +
     geom_point( size = 3, aes(colour = obs_Or_Pred) ) + 
     geom_abline( intercept = my_intercept, slope = my_slope, aes( linetype = obs_Or_Pred ) )

这没有给出我希望看到的输出。我在SO上查看了其他答案,但没有看到任何简单的东西。我想出的最好的方法是:

ggdf2 <- data.frame( x = c(x,max(x),max(x)+12), y = c(y,my_intercept+max(x)*my_slope,my_pred), obs_Or_Pred = c(rep("Obs",8),"Pred","Pred"), show_Data_Point = c(rep(TRUE,8),FALSE,TRUE) )

ggplot(ggdf2, aes(x = x, y = y, group = obs_Or_Pred ) ) +
     geom_point( data = ggdf2[ggdf2[,"show_Data_Point"],] ,size = 3, aes(colour = obs_Or_Pred) ) + 
     geom_smooth( method = "lm", se=F, aes(colour = obs_Or_Pred, linetype=obs_Or_Pred) )
 

这样给出的输出是正确的,但是我必须包括一个额外的列,用于指定是否要显示数据点。如果不这样做,我将得到这两个图的第二个,在拟合回归线的末尾有一个额外的点:

在此处输入图片说明

有没有一种简单的方法可以告诉ggplot从线性模型中预测出单个点并在其上绘制一条虚线?

eipi10

您可以仅使用实际数据绘制点,并构建预测数据框以添加线。请注意,它max(x)出现了两次,因此它可以是Obs线和Pred线的端点我们还使用了一种shape美学方法,以便我们可以删除原本会出现在的图例键中的点标记Pred

# Build prediction data frame
pred_x = c(min(x),rep(max(x),2),max(x)+1)
pred_lines = data.frame(x=pred_x,
                        y=predict(my_lm, data.frame(x=pred_x)),
                        obs_Or_Pred=rep(c("Obs","Pred"), each=2))

ggplot(pred_lines, aes(x, y, colour=obs_Or_Pred, shape=obs_Or_Pred, linetype=obs_Or_Pred)) +
  geom_point(data=data.frame(x,y, obs_Or_Pred="Obs"), size=3) +
  geom_line(size=1) +
  scale_shape_manual(values=c(16,NA)) +
  theme_bw()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章