首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glmmTMB,后特别测试和glht

glmmTMB,后特别测试和glht
EN

Stack Overflow用户
提问于 2018-07-13 02:47:30
回答 2查看 4.2K关注 0票数 2

我使用glmmTMB分析负二项式广义线性混合模型(GLMM),其中因变量是计数数据(CT),它是过分散的。

在相关数据帧中有115个样本(行)。有两个固定效应(F1,F2)和一个随机截距(R),其中嵌套了另一个随机效应(NR)。还有一个偏移量,由每个样本中总计数的自然对数(LOG_TOT)组成。

数据框架df的一个例子是:

代码语言:javascript
复制
CT  F1  F2  R   NR  LOG_TOT
77  0   0   1   1   12.9
167 0   0   2   6   13.7
289 0   0   3   11  13.9
253 0   0   4   16  13.9
125 0   0   5   21  13.7
109 0   0   6   26  13.6
96  1   0   1   2   13.1
169 1   0   2   7   13.7
190 1   0   3   12  13.8
258 1   0   4   17  13.9
101 1   0   5   22  13.5
94  1   0   6   27  13.5
89  1   25  1   4   13.0
166 1   25  2   9   13.6
175 1   25  3   14  13.7
221 1   25  4   19  13.8
131 1   25  5   24  13.5
118 1   25  6   29  13.6
58  1   75  1   5   12.9
123 1   75  2   10  13.4
197 1   75  3   15  13.7
208 1   75  4   20  13.8
113 1   8   1   3   13.2
125 1   8   2   8   13.7
182 1   8   3   13  13.7
224 1   8   4   18  13.9
104 1   8   5   23  13.5
116 1   8   6   28  13.7
122 2   0   1   2   13.1
115 2   0   2   7   13.6
149 2   0   3   12  13.7
270 2   0   4   17  14.1
116 2   0   5   22  13.5
94  2   0   6   27  13.7
73  2   25  1   4   12.8
61  2   25  2   9   13.0
185 2   25  3   14  13.8
159 2   25  4   19  13.7
125 2   25  5   24  13.6
75  2   25  6   29  13.5
121 2   8   1   3   13.0
143 2   8   2   8   13.8
219 2   8   3   13  13.9
191 2   8   4   18  13.7
98  2   8   5   23  13.5
115 2   8   6   28  13.6
110 3   0   1   2   12.8
123 3   0   2   7   13.6
210 3   0   3   12  13.9
354 3   0   4   17  14.4
160 3   0   5   22  13.7
101 3   0   6   27  13.6
69  3   25  1   4   12.6
112 3   25  2   9   13.5
258 3   25  3   14  13.8
174 3   25  4   19  13.5
171 3   25  5   24  13.9
117 3   25  6   29  13.7
38  3   75  1   5   12.1
222 3   75  2   10  14.1
204 3   75  3   15  13.5
235 3   75  4   20  13.7
241 3   75  5   25  13.8
141 3   75  6   30  13.9
113 3   8   1   3   12.9
90  3   8   2   8   13.5
276 3   8   3   13  14.1
199 3   8   4   18  13.8
111 3   8   5   23  13.6
109 3   8   6   28  13.7
135 4   0   1   2   13.1
144 4   0   2   7   13.6
289 4   0   3   12  14.2
395 4   0   4   17  14.6
154 4   0   5   22  13.7
148 4   0   6   27  13.8
58  4   25  1   4   12.8
136 4   25  2   9   13.8
288 4   25  3   14  14.0
113 4   25  4   19  13.5
162 4   25  5   24  13.7
172 4   25  6   29  14.1
2   4   75  1   5   12.3
246 4   75  3   15  13.7
247 4   75  4   20  13.9
114 4   8   1   3   13.1
107 4   8   2   8   13.6
209 4   8   3   13  14.0
190 4   8   4   18  13.9
127 4   8   5   23  13.5
101 4   8   6   28  13.7
167 6   0   1   2   13.4
131 6   0   2   7   13.5
369 6   0   3   12  14.5
434 6   0   4   17  14.9
172 6   0   5   22  13.8
126 6   0   6   27  13.8
90  6   25  1   4   13.1
172 6   25  2   9   13.7
330 6   25  3   14  14.2
131 6   25  4   19  13.7
151 6   25  5   24  13.9
141 6   25  6   29  14.2
7   6   75  1   5   12.2
194 6   75  2   10  14.2
280 6   75  3   15  13.7
253 6   75  4   20  13.8
45  6   75  5   25  13.4
155 6   75  6   30  13.9
208 6   8   1   3   13.5
97  6   8   2   8   13.5
325 6   8   3   13  14.3
235 6   8   4   18  14.1
112 6   8   5   23  13.6
188 6   8   6   28  14.1

将随机效应和嵌套随机效应作为影响因素来处理。固定效应F1的值为0、1、2、3、4和6,固定效应F2的值为0、8、25和75。我把固定效应看作是连续的,而不是顺序的,因为我想识别因变量CT中单调的单向变化,而不是上下变化。

我以前使用lme4包将数据作为混合模型进行分析:

代码语言:javascript
复制
library(lme4)

m1 <- lmer(CT ~ F1*F2 + (1|R/NR) +
offset(LOG_TOT), data = df, verbose=FALSE)

随后,在多功能组件中使用glht进行事后分析,采用公式方法:

代码语言:javascript
复制
library(multcomp)

glht_fixed1 <- glht(m1, linfct = c(
"F1 == 0",
"F1 + 8*F1:F2 == 0",
"F1 + 25*F1:F2 == 0",
"F1 + 75*F1:F2 == 0",
"F1 + (27)*F1:F2 == 0"))

glht_fixed2 <- glht(m1, linfct = c(
"F2 + 1*F1:F2 == 0",
"F2 + 2*F1:F2 == 0",
"F2 + 3*F1:F2 == 0",
"F2 + 4*F1:F2 == 0",
"F2 + 6*F1:F2 == 0",
"F2 + (3.2)*F1:F2 == 0"))

glht_omni <- glht(m1)

下面是相应的负二项式glmmTMB模型,我现在更喜欢这个模型:

代码语言:javascript
复制
library(glmmTMB)

m2 <- glmmTMB(CT ~ F1*F2 + (1|R/NR) + 
offset(LOG_TOT), data = df, verbose=FALSE, family="nbinom2")

根据Bolker (https://stat.ethz.ch/pipermail/r-sig-mixed-models/2017q3/025813.html)的这一建议,使用glmmTMB进行自组织测试的最佳方法是使用lsmeans (或其最近的等效Ben )。

我听从本的建议,跑

代码语言:javascript
复制
source(system.file("other_methods","lsmeans_methods.R",package="glmmTMB"))

然后,我可以在glmmTMB对象上使用emmeans。例如,

代码语言:javascript
复制
as.glht(emmeans(m2,~(F1 + 27*F1:F2)))

General Linear Hypotheses

Linear Hypotheses:
Estimate
3.11304347826087, 21 == 0 -8.813

但这似乎不正确。我还可以将F1和F2更改为多种因素,然后尝试如下:

代码语言:javascript
复制
as.glht(emmeans(m2,~(week + 27*week:conc)))

     General Linear Hypotheses

Linear Hypotheses:
           Estimate
0, 0 == 0    -6.721
1, 0 == 0    -6.621
2, 0 == 0    -6.342
3, 0 == 0    -6.740
4, 0 == 0    -6.474
6, 0 == 0    -6.967
0, 8 == 0    -6.694
1, 8 == 0    -6.651
2, 8 == 0    -6.227
3, 8 == 0    -6.812
4, 8 == 0    -6.371
6, 8 == 0    -6.920
0, 25 == 0   -6.653
1, 25 == 0   -6.648
2, 25 == 0   -6.282
3, 25 == 0   -6.766
4, 25 == 0   -6.338
6, 25 == 0   -6.702
0, 75 == 0   -6.470
1, 75 == 0   -6.642
2, 75 == 0   -6.091
3, 75 == 0   -6.531
4, 75 == 0   -5.762
6, 75 == 0   -6.612

但是,再次,我不知道如何使这一产出符合我的意愿。如果某个善良的人能告诉我如何正确地使用glht和linfct中的公式到glmmTMB的emmeans场景中,我将非常感激。我已经阅读了所有的手册和小插曲,直到我面红耳赤(或者至少是这样的感觉),但我仍然感到不知所措。作为我的辩护(罪责?)我是个统计学家,如果我在这里问一个很明显的问题的话,我很抱歉。

glht软件和事后特别测试直接传递到glmmADMB包,但glmmADMB比glmmTMB慢10倍。我需要执行这个分析的多次运行,每一个都有300000个负二项式混合模型的例子,所以速度是至关重要的。

非常感谢您的建议和帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-15 09:16:12

根据我优秀的统计顾问的建议,我认为下面的解决方案提供了我以前使用glht和linfct获得的信息。

F1的斜率是在不同的F2水平上用对比和of方法计算F1的两个值(即c(0,1))之间的相依变量的差异。(由于回归是线性的,所以F1的两个值是任意的,只要它们被一个单位分隔,例如c(3,4))。反之亦然,F2的斜坡也是如此。

因此,F1在F2 = 0、8、25、75和27处的斜率(27是F2的平均值):

代码语言:javascript
复制
contrast(emmeans(m1, specs="F1", at=list(F1=c(0,1), F2=0)),list(c(-1,1)))
        (above equivalent to: summary(m1)$coefficients$cond["F1",])
        contrast(emmeans(m1, specs="F1", at=list(F1=c(0,1), F2=8)),list(c(-1,1)))
        contrast(emmeans(m1, specs="F1", at=list(F1=c(0,1), F2=25)),list(c(-1,1)))
        contrast(emmeans(m1, specs="F1", at=list(F1=c(0,1), F2=75)),list(c(-1,1)))
        contrast(emmeans(m1, specs="F1", at=list(F1=c(0,1), F2=27)),list(c(-1,1)))

F2在F1 = 1、2、3、4、6和3.2处的斜率(3.2是F1的平均值,不包括零值):

代码语言:javascript
复制
contrast(emmeans(m1, specs="F2", at=list(F2=c(0,1), F1=0)),list(c(-1,1)))
(above equivalent to: summary(m1)$coefficients$cond["F2",])
contrast(emmeans(m1, specs="F2", at=list(F2=c(0,1), F1=1)),list(c(-1,1)))
contrast(emmeans(m1, specs="F2", at=list(F2=c(0,1), F1=2)),list(c(-1,1)))
contrast(emmeans(m1, specs="F2", at=list(F2=c(0,1), F1=3)),list(c(-1,1)))
contrast(emmeans(m1, specs="F2", at=list(F2=c(0,1), F1=4)),list(c(-1,1)))
contrast(emmeans(m1, specs="F2", at=list(F2=c(0,1), F1=6)),list(c(-1,1)))
contrast(emmeans(m1, specs="F2", at=list(F2=c(0,1), F1=3.2)),list(c(-1,1)))

F1和F2斜坡在F1 =0和F2 =0的相互作用

代码语言:javascript
复制
contrast(emmeans(m1, specs=c("F1","F2"), at=list(F1=c(0,1),F2=c(0,1))),list(c(1,-1,-1,1)))
(above equivalent to: summary(m1)$coefficients$cond["F1:F2",])

emmGrid提供的contrast()对象中,可以根据需要选择斜率(estimate)的估计值、估计斜率的标准差(SE)、估计斜率与零假设斜率之差的Z分值(z.ratio,由estimateemmGrid计算,除以SE)和相应的P值( emmGrid计算的p.value= 2*pnorm(-abs(z.ratio))。

例如:

代码语言:javascript
复制
contrast(emmeans(m1, specs="F1", at=list(F2=c(0,1), F1=0)),list(c(-1,1)))

产量:

代码语言:javascript
复制
NOTE: Results may be misleading due to involvement in interactions
 contrast    estimate          SE df z.ratio p.value
 c(-1, 1) 0.001971714 0.002616634 NA   0.754  0.4511

Postscript添加1.25年后:

以上给出了正确的解,但正如罗素·兰斯所指出的那样,使用正向趋势更容易得到答案。然而,我选择这个答案是正确的,因为可能有一些教学价值,在显示如何计算斜率使用by手段,以找到在预测的因变量中的变化,当自变量变化1。

票数 2
EN

Stack Overflow用户

发布于 2018-07-15 02:32:24

emmeans的第二个参数(emmeans)与glht中的linfct参数不一样,因此不能以相同的方式使用它。您必须按预期的方式调用emmeans()as.glht()函数将结果转换为glht对象,但实际上没有必要这样做,因为emmeans摘要产生类似的结果。

我认为你想得到的结果可以通过

代码语言:javascript
复制
emmeans(m2, ~ F2, at = list(F2 = c(0, 8, 25, 75)))

(使用以预测器作为定量变量的原始模型)。这将计算保持F1平均值的调整后的方法,以及F2的每个指定值。

请查看emmeans()的文档。此外,还有很多小插曲提供了解释和例子--从https://cran.r-project.org/web/packages/emmeans/vignettes/basics.html开始。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51316991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档