【问题标题】:General linear mixed-effect (glmer) heteroscedasticity modelling一般线性混合效应 (glmer) 异方差建模
【发布时间】:2025-12-16 23:30:01
【问题描述】:

我的变量是在具有二次抽样设计的随机区组上测量的,我的处理方法是 23 Accesion。我有 3 个完整的块和每个块 6 个样本。示例数据帧有 4 个响应变量(LH、REN、FTT、DFR)、Accesion(处理)、Bloque(块编号)和 Plot(即用于子采样的变量)。数据的头部是:

  Plot Accesion Bloque   LH  REN FTT DFR
1  221       22      1 20.6 1127  23  88
2  221       22      1 20.5 1638  20  88
3  221       22      1 24.5 1319  16  88
4  221       22      1 21.4  960  17  88
5  221       22      1 25.7 1469  18  88
6  221       22      1 25.8 1658  21  88

因此,在所有类型的转换(log、boxcox、幂等)之后,几乎所有 100 个响应变量的数据都是非正态和异方差的。大多数变量显示卡方或类泊松分布,每个 Accesion 具有不同的方差。

到目前为止,我一直致力于使用 FTT 上的 glmer() 作为响应变量,使用泊松运行广义线性模型效应。我正在使用此代码:

FTTglme = glmer(FTT ~ Accesion + Bloque + (1|Plot), data = Lyc,   
family=poisson(link="identity"))

根据 shapiro.test(),残差是非正态的。我认为,这是因为在残差中观察到的异方差性。作为 Accesion 残差的箱线图,显示了方差的差异:

预计植物种群之间存在异方差性,但我知道它可以在 glme 内部建模。正如我已经调查过的,我应该添加的代码是:

vf <- varIdent(form=~Accesion)

FTTglme = glmer(FTT ~ Accesion + Bloque + (1|Plot), data = Lyc,   
family=poisson(link="identity"), weights = vf)

我希望不同的差异能够解释每个加入类别。但我不断收到错误:

Error in model.frame.default(data = Lyc, weights = varIdent(form = ~Accesion),  : 
  variable lengths differ (found for '(weights)')

有谁知道如何解释glmer() 内的 Accesions 之间的差异差异?

也欢迎任何其他分析数据的建议。

【问题讨论】:

  • (1) 为什么是身份链接? (2) 你试图将nlmelme4 的权重语法混合在一起:这行不通...
  • glmer 有一个权重参数。什么是正确的语法?

标签: r


【解决方案1】:

我已经解决了这个问题。在 glmer() 中, weights 参数对应于与原始向量长度相同的向量。为了模拟异方差性,我生成了一个方差数据框:

VAR<-aggregate(Lyc[,6],by=list(Lyc$Accesion), var)
colnames(VAR)<-c("Accesion", "Var")

这会产生一个数据框处理/方差,它的头部是:

 Accesion       Var
1       22  4.369281
2       23 16.251634
3       24 13.911765
4       25 15.404412
5       26 15.895833
6       27 44.838095

然后我创建一个合并两个数据框的新数据框

Lyc2<-merge(VAR, Lyc, by="Accesion")

正如我看到做错了 1 次,需要使用逆方差来纠正方差。

Lyc2$Var<-(1/Lyc2$Var)

在所有数据步骤之后,我运行代码:

FTTglme = glmer(FTT ~ Accesion + Bloque + (1|Plot), data = Lyc2,    
family=poisson(link="log"), weights = Lyc2$Var)

这解决了差异问题:

【讨论】:

  • 有利于您解决问题。这与估计每个组的不同方差并不完全相同。 *.com/questions/21409340/… 提供了一个链接,但对于您的示例而言,它并不是非常实用,因为它需要为每个组设置单独的虚拟变量...