使用ggplot绘制具有多个预测变量的模型的一个预测变量

时间:2013-12-08 09:40:38

标签: r plot ggplot2 lm

以下是线性模型和ggplot的典型示例:

require(ggplot2)

utils::data(anorexia, package = "MASS")

anorex.1 <- glm(Postwt ~ Prewt + Treat + offset(Prewt),
                family = gaussian, data = anorexia)
coef(anorex.1)

   (Intercept)       Prewt   TreatCont     TreatFT 
     49.7711090  -0.5655388  -4.0970655   4.5630627 


ggplot(anorexia, aes(y=Postwt, x=Prewt)) + geom_point() + geom_smooth(method='lm', se=F)

我的问题是geom_smooth(...)所做的回归与anorex.1的模型不同,但是:

coef(lm(Postwt ~ Prewt, data=anorexia))

     (Intercept)       Prewt 
      42.7005802   0.5153804 

如何在ggplot上绘制模型anorexia1

我可以为anorexia1Prewt的截距(49.77)和估计(-0.5655),并用geom_abline(..)绘制它,是否正确?有更简单的解决方案吗?

1 个答案:

答案 0 :(得分:3)

由于您的模型包含两个预测变量(级别的不同截距值)以及偏移变量,因此无法直接将其包含在geom_smooth()中。一种方法是为dat.new的所有三个级别创建包含Prewt值的新数据框Treat。然后使用此新数据框使用模型预测所有级别的Postwt值,并将预测值添加到新数据框

new.dat<-data.frame(Treat=rep(levels(anorexia$Treat),each=100),
                    Prewt=rep(seq(70,95,length.out=100),times=3))
anorexia.2<-data.frame(new.dat,Pred=predict(anorex.1,new.dat))
head(anorexia.2)
  Treat    Prewt     Pred
1   CBT 70.00000 80.18339
2   CBT 70.25253 80.29310
3   CBT 70.50505 80.40281
4   CBT 70.75758 80.51253
5   CBT 71.01010 80.62224
6   CBT 71.26263 80.73195

现在绘制原始数据框中的原始点,并使用包含预测的新数据框添加线条。

ggplot(anorexia,aes(x=Prewt,y=Postwt,color=Treat))+geom_point()+
  geom_line(data=anorexia.2,aes(x=Prewt,y=Pred,color=Treat))

enter image description here