## 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
, если все, что вы хотите сделать, это различать группы (т.е. рисовать отдельные линии), а не идентифицировать их...
person
Ben Bolker
schedule
15.07.2013
pred2
, равное ее среднему значению) и построить график наклона по отношению кpred1
для этого значения. Или вы можете выбрать несколько значенийpred2
и построить (набор) линий для каждого из них, возможно, в отдельных подграфиках, или (самое уродливое) вместо этого сделать трехмерные графики и построить плоскостиresp~f(pred1,pred2)
. - person Ben Bolker   schedule 15.07.2013