用于过度分散数据的 GLMM

机器算法验证 r 广义线性模型 实验设计 lme4-nlme
2022-04-12 11:03:20

我正在分析柑橘花病的 3 个田间试验(农场 = 3)的数据:响应变量是二项式的,因为花只能生病或健康。

我对比较 5 种杀菌剂喷洒系统(trt=5)特别感兴趣。我对特定农场的效果不感兴趣,它们只是代表我想建议最佳治疗方法的地区的农场总数。

每个农场有 4 个街区(bk=4),包括 2 棵树作为子样本(tree=2),我在其中评估了 100 朵花。

这是数据的快速浏览:

dinc <- within(dinc, { tree_id <- as.factor(interaction(farm, trt, bk, tree)) })

farm      trt      bk   tree   dis   tot  tree_id
<fctr>   <fctr>  <fctr> <fctr><int> <int> <fctr>
iaras   Calendar   1      1     0   100  iaras.Calendar.1.1
iaras   Calendar   1      2     1   100  iaras.Calendar.1.2
iaras   Calendar   2      1     1   100  iaras.Calendar.2.1
iaras   Calendar   2      2     3   100  iaras.Calendar.2.2

我考虑的模型是:

resp <- with(df, cbind(dis, tot-dis)) 

m1 = glmer(resp ~ trt + (1|farm/bk) , family = binomial, data=df) 

我使用GLMM 页面中的 overdisp_fun() 测试了过度分散

        chisq         ratio             p          logp 
 4.191645e+02  3.742540e+00  4.804126e-37 -8.362617e+01 

由于比率(残差 dev/residual df)> 1,并且 p 值 < 0.05,我考虑添加观察水平随机效应(链接)来处理过度离散。

所以现在为模型中的每一行(tree_id)添加了一个随机效果,但我不确定如何包含它。这是我的方法:

m2 = glmer(resp ~ trt + (1|farm/bk) + (1|tree_id), family = binomial, data=df)

我也想知道是否farm应该是固定效果,因为它只有3个级别......

m3 = glmer(resp ~ trt * farm + (1|farm:bk) + (1|tree_id), family = binomial, data=df)

我非常感谢您对我的型号规格的建议...

2个回答

过度分散问题

看起来您正在将计数变量建模为二项式,我认为这是您过度分散的根源。

可以将所有内容建模为二项分布,但每次观察的总数完全相同。另外,患病植物的数量永远不会达到最大值 100,因此它并没有像二项式那样真正被审查。

编辑:因此,您可以轻松地将其报告为总样本中的疾病“比率”。通过这种方式,您可以将疾病的“计数”或比例(疾病/总数)分析为负二项式模型。

EDIT2:因为使用负二项式似乎有些犹豫,这里列出了最近的植物病理学文章(与 OP 相同的学科),将疾病建模为负二项式(Prager et al., 2014 , Mori et al., 2008Passey 等人,2017 年Paiva de Almeida 等人,2016 年

y 变量的直方图看起来像一个零膨胀的负二项式。

在此处输入图像描述

请注意通常在负二项式或泊松中看到的长右尾。

有几种不同的方法来处理这个问题,但这里有一个简单的解决方案:

m4<-glmer.nb(dis ~ trt + (1 | farm/bk),data = dinc)

summary(m4)
overdisp_fun(m4)

我得到以下过度分散结果:

      chisq       ratio         rdf           p 
122.1655582   1.0811111 113.0000000   0.2617332 

看起来不错,对吧?

(编辑:忽略下面的删除线部分)

### 附带问题:你的树是独立的观察

起初,看起来两棵树中的每一棵都应该是随机效应。

但是,农场 1 上的树 1 与农场 2 中的树 1 无法比较。因此,您不希望将树的效果建模为随机效果。想象一下,如果每棵树都是不同的人。除非您对每个人进行多次观察,否则为每个人添加随机效应并不重要。

同样,包括农场“块”对模型并没有真正的影响。


替代模型和最终想法

  • 可能会检查零膨胀负二项式
  • 虽然标准nb的色散看起来不错
  • MASS 包是运行nb模型的另一种方法
  • 此外,您可以将其作为准泊松运行
  • 我将在下面包含一些代码,以防你想追求这个

 require("MASS")

 m5<-glmmPQL(dis ~ trt ,
             random = ~ 1 | farm/bk,
             family = negative.binomial(theta=9.86), 
             data = dinc)

 summary(m5)

 m6<-glmmPQL(dis ~ trt ,
             random = ~ 1 | farm/bk,
             family = quasipoisson(link='log'), 
             data = dinc)

 summary(m6)

祝你的模型好运!


编辑如果您想将此作为“速率”运行,请尝试以下代码:

dinc$dis_prob<- dinc$dis / dinc$tot 

m7<-glmmPQL(dis_prob ~ trt ,
             random = ~ 1 | farm/bk,
             family = quasipoisson(link='log'), 
             data = dinc)

summary(m7)

你是正确的,你已经适当地建模了它。你的每一朵花都“嵌套”在一棵树下,因此彼此并不独立。您的代码适用于您允许截距因树而异的情况。

看起来您还检查了类内相关性(即您使用的 overdisp_fun())。

此外,由于农场具有三个级别,因此将其视为固定是合适的(特别是如果您并不真正关心差异)。在这种情况下,您测试包含固定级别,如果它们没有提高拟合度,那么您可以丢弃它们。

确保您正在检查 AIC 和 BIC 以帮助构建模型。