4

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

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)

感谢所有帮助,

4

3 回答 3

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)

它来自于这样的认识,即绘制两个随机效应之一的预测区间可以通过以下方式完成:

(dotplot(ranef(fm3, postVar=TRUE))$sample)

(dotplot(ranef(fm3, postVar=TRUE))$batch)

我上面提出的建议是错误的(dotplot(ranef(fm3, postVar=TRUE)$batch)即使它确实产生了一些东西)。@juba:感谢您将我指向格子。我找到的组合情节的解决方案更简洁......

于 2013-01-29T17:26:37.913 回答
2

您遇到的问题是ranef()将分析结果存储为列表,而不是数据框。您正在尝试访问此列表,就像访问数据框一样,这就是它不起作用的原因。诀窍是使用方括号 withdotplot来访问列表。然后你可以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) 

在此处输入图像描述

于 2013-01-29T17:27:57.760 回答
0

作为包dotplot的一部分lattice,您必须在一个图表上使用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)

这使 :

在此处输入图像描述

于 2013-01-29T14:43:16.543 回答