【发布时间】:2021-03-15 16:12:51
【问题描述】:
有人可以帮我在 lme4 中的二项式 GLMM 中确定正确的随机变量结构吗?
我将首先尽力解释我的数据。我有被吃掉(1)或没有被吃掉(0)的幼苗的二项式数据,以及植被覆盖的数据。我试图弄清楚植被覆盖率与树木被吃掉的概率之间是否存在关系,因为其他植被是一种食物来源,可以将食草动物吸引到某个森林斑块。
数据收集在分散在国家公园内的约 90 个地块中,历时 9 年。有些测量了所有年份,有些只测量了几年(销毁/新添加的地块)。原始数据集分为 2 个(落叶树与针叶树),均包含约 55.000 个条目。每个地块每次测量大约 100 棵树苗,因此两个单独的数据集可能包含每个地块大约 50 棵树(尽管情况并非总是如此,因为 decid:conif 比率并不总是相等)。每个图由 4 个子图组成。 我知道由于绘图位置可能存在空间自相关,但我们不会对此进行纠正。
每年在同一时期对植被进行调查。植被覆盖在地块级别估计,单个树木(二元)在子地块级别测量。 所有树木都经过测量,因此随着森林自然再生,每个子样地的响应量在子样地和年份之间会有所不同。
很遗憾,我无法分享我的原始数据,但我尝试创建一个包含要点的示例:
#set seed for whole procedure
addTaskCallback(function(...) {set.seed(453);TRUE})
# Generate vector containing individual vegetation covers (in %)
cover1vec <- c(sample(0:100,10, replace = TRUE)) #the ',number' is amount of covers generated
# Create dataset
DT <- data.frame(
eaten = sample(c(0,1), 80, replace = TRUE),
plot = as.factor(rep(c(1:5), each = 16)),
subplot = as.factor(rep(c(1:4), each = 2)),
year = as.factor(rep(c(2012,2013), each = 8)),
cover1 = rep(cover1vec, each = 8)
)
这将生成这个数据集:
>DT
eaten plot subplot year cover1
1 0 1 1 2012 4
2 0 1 1 2012 4
3 1 1 2 2012 4
4 1 1 2 2012 4
5 0 1 3 2012 4
6 1 1 3 2012 4
7 0 1 4 2012 4
8 1 1 4 2012 4
9 1 1 1 2013 77
10 0 1 1 2013 77
11 0 1 2 2013 77
12 1 1 2 2013 77
13 1 1 3 2013 77
14 0 1 3 2013 77
15 1 1 4 2013 77
16 0 1 4 2013 77
17 0 2 1 2012 46
18 0 2 1 2012 46
19 0 2 2 2012 46
20 1 2 2 2012 46
....etc....
80 0 5 4 2013 82
注意 1: 再次澄清一下,在这个例子中,每个 subplot:year 组合的响应数量是相同的,从而使数据平衡,而原始数据集中的情况并非如此。 注意 2: 这个例子不能在 GLMM 中运行,因为我收到了一个奇点警告并且我所有的随机效应测量值都为零。显然我的示例不适合实际使用(因为使用 sample() 导致 0 和 1 的数量太均匀而无法产生足够大的影响?)。
从示例中可以看出,每个 plot:year 组合的封面数据都是相同的。 图是多年测量的(示例中只有 2012 年和 2013 年),因此存在重复测量。 此外,考虑到我们有例如 年份效应,干燥/潮湿年份。
首先我想到了以下模型结构:
library(lme4)
mod1 <- glmer(eaten ~ cover1 + (1 | year) + (1 | plot), data = DT, family = binomial)
summary(mod1)
其中 (1 | year) 应校正年份之间的差异,而 (1 | plot) 应校正重复测量。
但后来我开始思考:与 2013 年在地块 1 中测量的所有树木相比,与 2013 年地块 1 中的(部分相同的)树木相比,它们之间的相似度会更高。 所以,我怀疑这种随机模型结构能否纠正这种图内时间效应。
所以我最好的猜测是添加另一个随机变量,其中考虑了这种“交互”。 我知道有两种方法可以实现这一点:
方法一。 添加随机变量“+ (1 | year:plot)”
方法二。 添加随机变量“+ (1 | year/plot)”
从其他人告诉我的情况来看,我仍然不知道两者之间的区别。 我看到方法 2 相比 方法 1 添加了一个额外的随机变量(year.1),但我不知道如何解释这个额外的随机变量。
作为示例,我使用 方法 2 添加了随机效应摘要(由于我的示例数据存在奇异性问题,因此为零):
Random effects:
Groups Name Variance Std.Dev.
plot.year (Intercept) 0 0
plot (Intercept) 0 0
year (Intercept) 0 0
year.1 (Intercept) 0 0
Number of obs: 80, groups: plot:year, 10; plot, 5; year, 2
谁能解释一下方法 1 和 方法 2 之间的实际区别? 我试图了解正在发生的事情,但无法掌握。
我已经尝试从一位同事那里获得建议,他提到使用 cbind(success, failure) per plot:year 组合可能更合适。 通过这个站点,我发现当 Ntrails > 1 时在二项式模型中使用 cbind,我认为考虑到我们的抽样程序,情况确实如此。
我想知道,如果 cbind 已经用于 plot:year 组合,是否需要添加 plot:year 随机变量? 使用 cbind 时,示例数据如下所示:
>DT3
plot year cover1 Eaten_suc Eaten_fail
8 1 2012 4 4 4
16 1 2013 77 4 4
24 2 2012 46 2 6
32 2 2013 26 6 2
40 3 2012 91 2 6
48 3 2013 40 3 5
56 4 2012 61 5 3
64 4 2013 19 2 6
72 5 2012 19 5 3
80 5 2013 82 2 6
正确的随机模型结构是什么?为什么? 我在想:
可能性A
mod4 <- glmer(cbind(Eaten_suc, Eaten_fail) ~ cover1 + (1 | year) + (1 | plot),
data = DT3, family = binomial)
可能性 B
mod5 <- glmer(cbind(Eaten_suc, Eaten_fail) ~ cover1 + (1 | year) + (1 | plot) + (1 | year:plot),
data = DT3, family = binomial)
但是 cbind(success, failure) 不是已经正确的年份:情节依赖?
可能性C
mod6 <- glmer(cbind(Eaten_suc, Eaten_fail) ~ cover1 + (1 | year) + (1 | plot) + (1 | year/plot),
data = DT3, family = binomial)
因为我还不明白 year:plot 和 year/plot 之间的区别
因此:使用 cbind 方法确实比原始二进制数据更合适吗?为了防止伪复制和其他依赖关系,需要什么随机模型结构?
提前感谢您的时间和投入!
编辑 7/12/20:我添加了一些关于原始数据的额外信息
【问题讨论】:
标签: r glm lme4 mixed-models random-effects