2017-04-07 59 views
0

这是一个很长的问题,所以谢谢你的支持。在混合效果模型中绘制二次函数

这里是我的数据

https://www.dropbox.com/s/jo22d68a8vxwg63/data.csv?dl=0

我构建了一个混合效应模型

library(lme4) 
mod <- lmer(sqrt(y) ~ x1 + I(x1^2) + x2 + I(x2^2) + x3 + I(x3^2) + x4 + I(x4^2) + x5 + I(x5^2) + 
     x6 + I(x6^2) + x7 + I(x7^2) + x8 + I(x8^2) + (1|loc) + (1|year), data = data) 

所有预测都是标准化的,我想知道怎么做的x5y变化与变化,同时保持其他变量的平均值(等于0,因为所有变量都被标准化)。

这就是我的做法。

# make all predictors except x5 equal to zero 

data$x1<-0 
data$x2<-0 
data$x3<-0 
data$x4<-0 
data$x6<-0 
data$x7<-0 
data$x8<-0 

# Use the predict function 
library(merTools) 
fitted <- predictInterval(merMod = mod, newdata = data, level = 0.95, n.sims = 1000,stat = "median",include.resid.var = TRUE) 

现在我想绘制作为x5的二次函数拟合。我这样做:

i<-order(data$x5) 

plot(data$x5[i],fitted$fit[i],type="l") 

我预计产生的y曲线为x5二次函数。但正如你所看到的,我得到了下面没有任何二次曲线的曲线。任何人都可以告诉我我在这里做错了什么?

This is what I get

+0

是。我拥有它。 – user53020

+0

我刚刚修改了我的问题,以反映我用merTools预测的结果 – user53020

+0

这对我来说有点令人困惑。如果我从mod中提取x5的系数并自己绘制二次曲线,它是否会解释其他预测变量保持不变的事实。对不起,我的数学/统计数据有点弱。因此混乱。 – user53020

回答

2

我不知道在哪里predictInterval从何而来,但你可以用predict做到这一点。诀窍就是要确保你设定随机效应为0。这里是你如何能做到这一点

newdata <- data 
newdata[,paste0("x", setdiff(1:8,5))] <- 0 
y <- predict(mod, newdata=newdata, re.form=NA) 
plot(data$x5, y) 

re.form=NA部分跌出随机效应

enter image description here

+0

谢谢。 'predictInterval'来自库(merTools) – user53020

相关问题