如果我制作一个带有两个随机效果的简单混合效果模型:
library(lme4)
(fm3 <- lmer(strength ~ 1 + (1 | batch) + (1 | sample), Pastes))
我可以像这样访问随机效果:
ranef(fm3)
ranef(fm3)$batch
ranef(fm3)$sample
我无法将随机效果绘制在彼此相邻的两个单独的点图中。 下面的代码确实绘制了两个图,但我没有管理重新编码,以便我可以分别绘制每个图:
dotplot(ranef(fm3, postVar=TRUE))
以下似乎对我来说是合乎逻辑的,但它不正确
dotplot(ranef(fm3, postVar=TRUE)$batch)
感谢所有帮助,
答案 0 :(得分:2)
以下代码可以解决问题:
print((dotplot(ranef(fm3, postVar=TRUE))$sample), position=c(0, .5, 1, 1), more=TRUE)
print((dotplot(ranef(fm3, postVar=TRUE))$batch), position=c(0, 0, 1, .5)
它来自于认识到可以通过以下方式绘制两个rando效果之一的预测区间:
(dotplot(ranef(fm3, postVar=TRUE))$sample)
和
(dotplot(ranef(fm3, postVar=TRUE))$batch)
我上面提出的建议是错误的(dotplot(ranef(fm3, postVar=TRUE)$batch)
,即使它确实产生了某些东西)。
@juba:谢谢你把我指向格子。我找到的用于组合图的解决方案更简洁......
答案 1 :(得分:2)
您遇到的问题是ranef()
将分析结果存储为列表,而不是数据框。您正在尝试访问此列表,因为您将访问数据框,这就是它无法工作的原因。诀窍是使用带有dotplot
的双方括号来访问列表。然后,您可以使用grid.arrange
快速组合您的图表(或者您可以使用@juba解决方案)。
library(lme4)
fm3 <- lmer(strength ~ 1 + (1 | batch) + (1 | sample), Pastes)
d1 <- ranef(fm3, postVar=TRUE)
#double square bracket access the lists in d1
a <- dotplot(d1)[["batch"]]
b <- dotplot(d1)[["sample"]]
#grid.arrange combines your plots
library(gridExtra)
grid.arrange(a,b, nrow=1)
答案 2 :(得分:0)
由于dotplot
是lattice
包的一部分,您必须使用grid.layout
和viewports
来在一个图表上显示多个图表。
这是一种并排显示两个点图的方法,但由于我对lattice
很陌生,所以肯定会有更好更清洁的方法:
grid.newpage()
pushViewport(viewport(0.25,0.5,.5,1))
print(dotplot(rnorm(100)),newpage=FALSE)
upViewport()
pushViewport(viewport(.75,.5,.5,1))
print(dotplot(runif(100)),newpage=FALSE)
给出了: