以下是线性模型和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
?
我可以为anorexia1
取Prewt
的截距(49.77)和估计(-0.5655),并用geom_abline(..)绘制它,是否正确?有更简单的解决方案吗?
答案 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))