我想在R中为线性回归模型制作3D图:我希望显示线性模型的回归平面的表面。 我有2个连续变量(比如AGE,HEIGHT)和2个因子(SEX,ALLERGIC)。我想显示LM w.r.t的预测值。 2个连续变量以每个因子的指定水平为条件,例如
ILLNESS = AGE|{SEX==MALE + ALLERGIC==YES} + HEIGHT|{SEX==MALE + ALLERGIC==YES} +
AGE|{SEX==MALE + ALLERGIC==YES}*HEIGHT|{SEX==MALE + ALLERGIC==YES}
这是我想到的结果:
第一个问题:有没有很酷的功能,你可以很容易地做到这一点? 第二个问题:如果没有,我如何编写公式,我可以在> 1因子水平上进行条件化?
答案 0 :(得分:1)
首先,让我们制作一些样本输入数据,以便进行测试。
set.seed(15)
dd <- data.frame(
sex = sample(c("M","F"), 200, replace=T),
allergic = sample(c("YES","NO"), 200, replace=T),
age = runif(200, 18,65),
height = rnorm(200, 6, 2)
)
expit <- function(x) exp(x)/(exp(x)+1)
dd <- transform(dd,
illness=expit(-1+(sex=="M")*.8-0.025*age*ifelse(sex=="M",-1,1)+.16*height*ifelse(allergic=="YES",-1,1)+rnorm(200))>.5
)
现在我们定义要通过
预测的值集gg<-expand.grid(sex=c("M","F"), allergic=c("YES","NO"))
vv<-expand.grid(age=18:65, height=3:9)
然后我们拟合一个模型,并使用预测函数计算我们希望绘制的曲面上每个点的响应。
mm <- glm(illness~sex+allergic+age+height, dd, family=binomial)
pd<-do.call(rbind, Map(function(sex, allergic) {
nd <- cbind(vv, sex=sex, allergic=allergic)
cbind(nd, pred=predict(mm, nd, type="response"))
}, sex=gg$sex, allergic=gg$allergic))
最后,我们可以使用晶格来绘制数据
library(lattice)
wireframe(pred~age+height|sex+allergic, pd, drape=TRUE)
给我们