lme4 中毛毛虫图的选项,按因素分组以直观地识别时间趋势

Options for caterpillar plots in lme4, grouping by factor to visually identify temporal trends

我正在使用 lme4 中的 lmer 函数分析一个庞大而复杂的数据集。我正在使用 lattice 和 dotplot 来生成我的随机效应的毛虫图。有没有一种方法可以通过数据集中的一个因子或连续变量对我的毛毛虫图进行颜色编码?也使用过 qqmath,我可能只需要帮助理解如何使用 "groups" 参数。这将有助于讨论点。

library("lme4")
data(package = "lme4")

summary(grouseticks)

fit1<-lmer(TICKS~1+(1|LOCATION), grouseticks)
rr1<-ranef(fit1, condVar = TRUE)
dotplot(rr1)
#We get a nice caterpillar plot of intecepts and variances by location, is there any way to color code those
#blue intercept points by another factor, such as year? 

做你想做的事 容易 的问题是 ranef() 结果不包括你想要的信息,而 dotplot.ranef.merMod() 方法有点太 hard-coded 不容易修改...我将展示一个 ggplot 解决方案。如果您坚持使用 lattice 解决方案,请尝试检查 lme4:::dotplot.ranef.merMod 并查看是否可以按照以下解决方案对其进行调整。

library("lme4")

fit1 <- lmer(TICKS~1+(1|LOCATION), grouseticks)
rr1 <- ranef(fit1, condVar = TRUE)
lattice::dotplot(rr1)

这个问题对于这个特定的数据集没有多大意义,因为这些位置是跨年不规则采样的:

yrtab <- with(grouseticks,table(LOCATION,YEAR))
head(yrtab)
    YEAR
## LOCATION 95 96 97
##        1  0  5  3
##        2  0  0  3
##        3  0  7  0
##        4  3  6 11
##        5  0  3  0
##        6  0  9  0

...但只是为了继续这个例子,让我们计算每个位置的 modal 采样年(即,采样次数最多的年份 --对于领带,我们将选择第一年,因为它最简单,这只是一个例子)

yrvec <- 95:97
yrmode <- with(grouseticks,yrvec[apply(yrtab,1,which.max)])
dd <- data.frame(LOCATION=rownames(yrtab),yrmode)

现在我们需要得到正确形状的随机效应数据,并提取标准误差:

## extract conditional mode and square root
## (c() works on simple attr(.,"postVar") -- would have
##  to be more careful with vector-valued random effects
rr2 <- data.frame(LOCATION=rownames(rr1[[1]]),
                  int=unname(rr1[[1]]),
                  se=sqrt(c(attr(rr1[[1]],"postVar"))))
## combine with other variables
rr3 <- merge(rr2,dd)
## prepare for caterpillar by ordering locations by est. value
rr4 <- transform(rr3,LOCATION=reorder(LOCATION,int))
library("ggplot2"); theme_set(theme_bw())
ggplot(rr4,aes(LOCATION,int,ymin=int-1.96*se,ymax=int+1.96*se))+
    geom_pointrange(aes(colour=factor(yrmode)))+coord_flip()+
        scale_colour_discrete(name="year")

这必须稍微概括一下才能处理 vector-valued 随机效应 ...