做你想做的事情的问题容易是ranef()结果不包含你想要的信息,dotplot.ranef.merMod()方法有点太硬编码,无法修改很容易......我将展示一个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")
这必须概括一下以处理向量值随机效应...