## 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)
LƯU Ý mà bạn nên có lẽ không thể cố gắng để phù hợp với một hiệu ứng ngẫu nhiên cho một biến nhóm chỉ có hai cấp độ - điều này sẽ hầu như luôn dẫn đến một ước tính ngẫu nhiên -phương sai hiệu ứng số không, sẽ lần lượt đặt các dòng được dự đoán của bạn ngay trên đầu mỗi khác - Tôi đang chuyển từ gl(2,50)
sang 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)
Các phiên bản phát triển của lme4
có predict()
chức năng mà làm này dễ dàng hơn một chút ...
- Dự đoán cho một loạt các
pred1
với pred2
bằng trung bình của nó, và ngược lại. Đây là thông minh tất cả một chút so với nó cần được, vì nó tạo ra tất cả các giá trị cho cả hai dự đoán mối và âm mưu chúng với ggplot trong một đi ...
()
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")
- Ngoài ra, tập trung chỉ trên
pred1
và tạo ra những dự đoán cho một (nhỏ/rời rạc) loạt các pred2
giá trị ...
()
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)
Bạn có thể muốn đặt scale="free"
ở vòng facet_wrap()
... hoặc sử dụng facet_grid(~pred2,labeller=label_both)
Đối với bài thuyết trình bạn có thể muốn thay thế colour
thẩm mỹ, với group
, nếu tất cả các bạn muốn phải làm là phân biệt giữa các nhóm (tức là âm mưu các dòng riêng biệt) thay vì xác định chúng ...
Về cơ bản, bạn phải quyết định những gì bạn muốn làm về các biến khác. Quy trình phổ biến nhất là chọn giá trị tham chiếu cho một biến (ví dụ:'pred2' bằng giá trị trung bình của nó) và vẽ độ dốc tương ứng với' pred1' cho giá trị đó. Hoặc bạn có thể chọn một vài giá trị của 'pred2' và vẽ một dòng (tập hợp) cho mỗi dòng, có thể trong các phần con riêng biệt, hoặc (xấu nhất) làm các ô 3D và các mặt phẳng đồ họa' resp ~ f (pred1, pred2) '. –
Cảm ơn bạn Ben, Xin lỗi nhưng tôi không chắc chắn sẽ theo dõi bạn, ý của bạn là chính xác cho "chọn một giá trị tham chiếu cho một biến"? Làm thế nào bạn sẽ làm điều đó trong thực tế? – Oritteropus