2013-12-08 4 views
1

Вот типичный пример линейной модели и ggplot:Plotting один предсказатель модели, которая имеет несколько предикторов с 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 

Как я могу построить модель anorexia1 на ggplot?

Могу ли я просто взять перехват (49.77) и оценить (-0.5655) из anorexia1 за Prewt и построить его с помощью geom_abline (..), правильно? Есть ли более простое решение?

ответ

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

Смежные вопросы