在一个图中的两个随机效应的Dotplot

时间:2013-01-29 14:39:19

标签: r lme4

如果我制作一个带有两个随机效果的简单混合效果模型:

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)

感谢所有帮助,

3 个答案:

答案 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) 

enter image description here

答案 2 :(得分:0)

由于dotplotlattice包的一部分,您必须使用grid.layoutviewports来在一个图表上显示多个图表。

这是一种并排显示两个点图的方法,但由于我对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)

给出了:

enter image description here