## generate one response, two predictors and one factor (random effect)
set.seed(101)
resp <- runif(100,1,100)
pred1<- rnorm(100,
mean=rep(resp[1:50],2)+rep(c(-10,20),each=50),
sd=rep(c(10,5),each=50))
pred2<- rnorm(100, resp-10, 10)
请注意,您可能不应该尝试为只有两个级别的分组变量拟合随机效应 - 这几乎总是会导致估计的随机效应方差为零,这反过来又会将您的预测线放在顶部彼此——我正在从…切换gl(2,50)
到gl(10,10)
…
RF1<-gl(10,10)
d <- data.frame(resp,pred1,pred2,RF1)
#lmer
library(lme4)
mod <- lmer(resp ~ pred1 + pred2 + (1|RF1),data=d)
的开发版本lme4
具有predict()
使这更容易一些的功能...
- 预测等于其平均值的范围,
pred1
反之亦然pred2
。这一切都比它需要的聪明一点,因为它为两个焦点预测变量生成所有值,并一次性用 ggplot 绘制它们......
()
nd <- with(d,
rbind(data.frame(expand.grid(RF1=levels(RF1),
pred1=seq(min(pred1),max(pred1),length=51)),
pred2=mean(pred2),focus="pred1"),
data.frame(expand.grid(RF1=levels(RF1),
pred2=seq(min(pred2),max(pred2),length=51)),
pred1=mean(pred1),focus="pred2")))
nd$val <- with(nd,pred1[focus=="pred1"],pred2[focus=="pred2"])
pframe <- data.frame(nd,resp=predict(mod,newdata=nd))
library(ggplot2)
ggplot(pframe,aes(x=val,y=resp,colour=RF1))+geom_line()+
facet_wrap(~focus,scale="free")
- 或者,只关注
pred1
和生成(小/离散)pred2
值范围的预测......
()
nd <- with(d,
data.frame(expand.grid(RF1=levels(RF1),
pred1=seq(min(pred1),max(pred1),length=51),
pred2=seq(-20,100,by=40))))
pframe <- data.frame(nd,resp=predict(mod,newdata=nd))
ggplot(pframe,aes(x=pred1,y=resp,colour=RF1))+geom_line()+
facet_wrap(~pred2,nrow=1)
您可能希望scale="free"
在最后设置facet_wrap()
... 或使用facet_grid(~pred2,labeller=label_both)
对于演示,如果您只想区分组(即绘制单独的线)而不是识别它们,您可能想要用 替换colour
美学...group