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

R: Formula with multiple Conditions and Categorized Surface Plot

我想在 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 因子水平为条件?

首先,让我们制作一些样本输入数据来进行测试。

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))

最后,我们可以使用lattice来绘制数据

library(lattice)
wireframe(pred~age+height|sex+allergic, pd, drape=TRUE)

这给了我们