0

有没有办法通过在 GLMM 中增加权重来处理缺失的观察?

我想知道如何构建一个包含一些观察丢失的计数数据的 GLMM 模型。对我来说,我用黄色的粘板来诱捕瓢虫,它的数据类型是计数。另一个变量是1km半径内的草地面积比率。ID是黄色粘板的ID。每个棉田放 3 孔板。SITES 是不同的棉田。区域是几个站点属于某个区域。我想建立 GLMM 模型:

如您所见,我可以创建如下 GLMM 模型:

library(lme4)
library(glmmTMB)
library(mgcv)

m1 = glmer(ladybeetles ~ Grass.perc + (1|Region\SITE) , data=df, family="poisson" ) #nbinomial tried
m2 = glmmTMB(ladybeetles ~ Grass.perc + (1|Region\SITE) , data=df, family="poisson" ) #nbinomial tried

但是,我不想那样创建它,因为黄色的木板会限制数量的巨大差异。我想对因子变量进行分组并对黄板的整数值求和。因此,我可以这样做:

df = 
   df %>% group_by(Region,SITE) %>% 
   summarise(Ladybeetles = sum(Ladybeetles),
   Grass.perc = mean(Grass.perc),
   
   SampleNum = n()
) # sum ladybeetles of all yellow boards at each field

m1 = glmer(ladybeetles ~ Grass.perc + (1|Region) , data=df, family="poisson" ) #nbinomial tried
m2 = glmmTMB(ladybeetles ~ Grass.perc + (1|Region) , data=df, family="poisson" ) #nbinomial tried


但是,您可能会发现我的数据存在一些问题。 在此处输入图像描述

大多数板在许多领域都是完整的。但是site3,site4,site5有问题:他们由于风或农民的行为而失去了一块板(标记红色填充)。那么我不能像那样总结瓢虫。有人可以建议您可以分组并获得平均值并构建具有高斯或伽马误差分布族的 GLMM 模型。但从个人角度来看,计数类型相关的泊松或负二项分布对我来说支持另一种选择,因为我有很多像这样的其他数据,这些数据经常违反假设。

我想知道是否有任何模型结构对样本数具有权重来构建lme4glmmTMB封装 GLMM 模型,以便在发生特殊情况(如观察丢失)时,它允许我仍然使用泊松或负二项分布函数。所以我添加weight=SampleNum了,但我不知道该weight方法是否正确。希望有人可以帮助我。

glmer(ladybeetles ~ Grass.perc + (1|Region) , 
                      weight = SampleNum , # SampleNum is sample number I can group and create
                      data=df, family="poisson" )

glmmTMB(ladybeetles ~ Grass.perc + (1|Region) , 
                      weight = SampleNum,    # SampleNum   is sample number I can group and create
                      data=df, family="poisson" )

添加weight = SampleNum

这是我的数据。

df = 
structure(list(Region = c("ITI", "ITI", "ITI", "ITI", "ITI", 
"ITI", "ITI", "ITI", "ITI", "ITI", "ITI", "ITI", "ITI", "ITI", 
"ITI", "KZ", "KZ", "KZ", "KZ", "KZ", "KZ", "KZ", "KZ", "KZ", 
"KZ", "KZ", "KZ", "BST", "BST", "BST", "BST", "BST", "BST", "BST", 
"BST", "BST", "BST", "BST", "BST"), SITE = c("site1", "site1", 
"site1", "site2", "site2", "site2", "site3", "site3", "site4", 
"site4", "site5", "site5", "site6", "site6", "site6", "site7", 
"site7", "site7", "site8", "site8", "site8", "site9", "site9", 
"site9", "site10", "site10", "site10", "site11", "site11", "site11", 
"site12", "site12", "site12", "site13", "site13", "site13", "site14", 
"site14", "site14"), ID = c("ID1", "ID2", "ID3", "ID1", "ID2", 
"ID3", "ID1", "ID2", "ID1", "ID3", "ID2", "ID3", "ID1", "ID2", 
"ID3", "ID1", "ID2", "ID3", "ID1", "ID2", "ID3", "ID1", "ID2", 
"ID3", "ID1", "ID2", "ID3", "ID1", "ID2", "ID3", "ID1", "ID2", 
"ID3", "ID1", "ID2", "ID3", "ID1", "ID2", "ID3"), Ladybeetles = c(0L, 
1L, 7L, 7L, 2L, 8L, 4L, 0L, 3L, 3L, 9L, 10L, 22L, 10L, 15L, 0L, 
7L, 1L, 6L, 0L, 0L, 5L, 2L, 2L, 12L, 5L, 5L, 7L, 9L, 6L, 4L, 
5L, 4L, 11L, 13L, 27L, 8L, 1L, 7L), Grass.perc = c(5L, 5L, 5L, 
13L, 13L, 13L, 4L, 4L, 21L, 21L, 13L, 13L, 5L, 5L, 5L, 2L, 2L, 
2L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 10L, 10L, 10L, 11L, 11L, 
11L, 15L, 15L, 15L, 19L, 19L, 19L)), class = "data.frame", row.names = c(NA, 
-39L))
4

1 回答 1

0

我认为这更像是一个CrossValidated问题,但我会试一试(它可能会被迁移)。

tl; dr我认为您不应该尝试像这样进行聚合:这种不平衡的设计正是 GLMM 有用的地方。

我认为您应该使用负二项式或其他过度分散模型:deviance()/的比率df.residual()(过度分散的粗略指南大于 2(如果分散接近 1,则泊松模型将是合适的)。

的随机效应Region估计为零——这并不奇怪,因为您的数据集相当小、相当嘈杂,而且您只有 3 个区域。如果您对区域之间的差异不是很感兴趣,您可以简化模型并替换(1|Region/SITE)为。(1|SITE)

(1|SITE)我用和拟合了模型family = "nbinom2",然后我使用DHARMa包来探索残差 ( plot(ss <- simulateResiduals(model)); plotResiduals(ss, df$Grass.perc))。我发现模式中有一些非线性。我也尝试过nbinom1而不是nbinom2发现它改善了合身性,所以我最终得到:

glmmTMB(Ladybeetles ~ poly(Grass.perc,2) + (1|SITE) ,
             data=df, family="nbinom1" )
于 2021-12-21T02:43:25.773 回答