## 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
หลายค่าและพล็อตบรรทัด (ชุด) สำหรับแต่ละค่า อาจเป็นในแผนย่อยแยกกัน หรือ (น่าเกลียดที่สุด) ทำพล็อต 3 มิติและพล็อตระนาบresp~f(pred1,pred2)
แทน - person Ben Bolker   schedule 15.07.2013