2017-08-21 718 views
4

我的变量是在一个随机区块上进行测量的,采用子采样设计,其中我的治疗是23 Accesion。我有3个完整的块和每块6个样本。示例数据框包含4个响应变量(LH,REN,FTT,DFR),访问(处理),Bloque(块号)和Plot(即子采样的变量)。数据的头是:一般线性混合效应(glmer)异方差模型

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 

因此,该数据是所有类型的转换(日志,boxcox,电源等)后,非正常和异方差几乎所有的100个响应变量。大多数变量显示每个Accesion具有不同方差的卡方或泊松样分布。

Histogram for FTT

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

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

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

Boxplot of Residuals by Accesion

的异方差是植物种群之间的预期,但我知道它可以在里面glme进行建模。我要补充,我已经研究的代码是:

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

有谁知道如何计算方差的Accesions之间的glmer()里面的区别是什么?

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

+0

(1)为什么一个身份链接? (2)你试图混合'nlme'和'lme4'语法的权重:这是行不通的... –

+0

glmer得到了一个权重参数。什么是正确的sintax? –

回答

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 

然后,我创建一个新的数据帧合并两个dataframes

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) 

修复该问题方差:

Corrected variance residuals boxplot

+0

有利于您解决问题。这与估计每组的不同差异并不完全相同。 https://stackoverflow.com/questions/21409340/how-to-allow-for-factor-specific-variance-of-random-effect-in-lme给出了一个链接,但它对于你的例子并不是非常实用,因为它需要为每个组设置单独的虚拟变量... –