一般线性混合效应(glmer)异方差性建模

时间:2017-08-21 00:55:23

标签: r

我的变量是在一个带有子采样设计的随机区块上测量的,其中我的治疗是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,power等)之后,几乎所有100个响应变量的数据都是非正常和异方差的。大多数变量显示卡方或泊松分布,每个Accesion的方差不同。

Histogram for FTT

到目前为止,我已经开始使用FTT上的glmer()作为响应变量,使用Poisson运行广义线性模型效应。我正在使用此代码:

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

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

Boxplot of Residuals by Accesion

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

vf <- varIdent(form=~Accesion)

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

我希望不同的差异来考虑每个Accesion类别。但我一直收到错误:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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")

正如我所看到做错了一次,需要使用逆方差,以纠正方差。

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

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

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

这解决了方差问题:

Corrected variance residuals boxplot