R:具有多个条件和分类表面图的公式

时间:2015-04-16 16:53:58

标签: r regression

我想在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}

这是我想到的结果:

enter image description here

第一个问题:有没有很酷的功能,你可以很容易地做到这一点? 第二个问题:如果没有,我如何编写公式,我可以在> 1因子水平上进行条件化?

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)

给我们

enter image description here