R:如何提高LME4中一般线性混合模型的拟合度?

时间:2017-09-01 13:06:28

标签: r model statistics lme4

堆栈溢出问题 - glmer()

lme4的模型拟合和选择

我仍然相对较新,并且已经尝试了我能想到的所有内容并且谷歌似乎已经碰壁了,所以如果其中一些是基本/不正确,请提前抱歉。我不知道这是否应该分解为几个问题 - 但也许将其作为一个过程提出更有帮助。我真正想知道的是,你怎么知道你所做的模型足以用于假设检验和形成结论。

我正在对大型幼苗动态数据集(来自7467个地块的20258幼苗)进行分析,由于这不是我的数据集,我无法分享这些数据。在这个分析中,我试图确定几个解释变量(茎长度,功能组,同种和异种密度,以及功能组和密度之间的相互作用)如何影响给定幼苗的存活概率 - 使用glmer()函数在lme4。在使用模型之前,我使用scale()函数缩放所有连续变量,并确保所有非连续变量都列为因子,并使用优化器设置和迭代次数来解决一些标准优化器警告。

模型的结构如下(AIC价值低于模型):

themod <- glmer(survival ~ stemlength + group + conspecific density + 
heterospecific density + group:conspecifics + group:heterospecifics 
+group:stemlength + (1|plot) + (1 + conspecifics + heterospecifics|species), 
family=binomial(link = "logit"), data = dataset, 
control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e5)))

AIC:14040(&lt; 2e-16)R平方拟合:0.25441404 R平方随机:0.748984

我在同一个数据集上尝试了几个版本的这些模型,并使用anova比较了AIC值(与下面列出的14128.7的基本模型值进行比较)和dropterm分析(表明所有变量都改善了模型的拟合或者两种方式都没有效果),这个是最适合数据的。我还研究了使用伪R平方值(如Nakawaga等人,2013所述) - 这似乎表明其他模型更适合,但我坚持使用AIC值。请参阅下面的其他模型 - 每个模型都列出了AIC和R平方值。

basemod <- glmer(survival ~ stemlength + conspecifics + heterospecifics + 
(1|plot) + (1|species),          family=binomial(link = "logit"), data = 
dataset, control=glmerControl(optimizer="bobyqa",     
optCtrl=list(maxfun=2e5)))

AIC:14128.7 R平方拟合:0.09298017 R平方随机:0.489361

mod1 <- glmer(survival ~ stemlength + conspecifics + heterospecifics + group 
+ group:conspecifics + group:heterospecifics + (1|plot) + (1 + conspecifics 
+ heterospecifics|species), family=binomial, data = dataset, 
control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e5)))

AIC:14086(&lt; 2e-16)R平方拟合:0.27126705 R平方随机:0.730059

mod2 <- glmer(survival ~ stemlength + conspecifics + heterospecifics + group 
+ (1|plot) + (1 + conspecifics + heterospecifics|species), family=binomial, 
data = dataset, control=glmerControl(optimizer="bobyqa", 
optCtrl=list(maxfun=2e5)))

AIC:14128.7(&lt; 2e-16)R平方拟合:0.35435996 R平方随机:0.798788

为我的模型挑选了一个公式(此处列为theod),我开始测试合适度。根据Bolker等人2009年的建议,我想看看数据是否在不同类别中是同质的,但是看到我有7467个样地和77个物种分成两组进行20258个幼苗,这似乎不可行?也许排除那些非常稀有的物种,即个人很少的物种会好吗?我也可以对图表进行分组以减少总体数量 - 但是由于我使用一般线性混合模型并将图表作为随机效应,我认为分组图表不会产生影响吗?

我还想看看“变换数据的响应是否与连续预测变量成线性关系” - 来自Bolker等人,2009,我认为连续参数在对数几率空间中是线性的 - 或者模型(logodds)的输出,相对于三个连续变量(茎长,同种密度和异种特异密度)中的每一个绘制,显示出线性关系。为此,我使用此代码制作这些图(点击链接):

modvalues <- as.data.frame(cbind(predict(themod))) 
plot(modvalues$V1, dataset$stemlength, , xlab = "Log odds", ylab = "Stem 
length")
abline(lm(dataset$stemlength~modvalues$V1), col="red") 
plot(modvalues$V1, dataset$conspecifics, xlab = "Log odds", ylab = 
"Conspecific densities")
abline(lm(dataset$conspecifics~modvalues$V1), col="red")  
plot(modvalues$V1, dataset$heterospecifics, xlab = "Log odds", ylab = 
"Heterospecific densities") 
abline(lm(dataset$heterospecifics~modvalues$V1), col="red")

Figures showing the relationship between the log odds and the continuous parameters of stemlength, conspecific density and heterospecific density

然而,这些显示出茎长和同种密度可能接近线性关系,但肯定不是异种特异性密度。 第三,我想看看是否有剩余异常值,使用此代码生成的进一步诊断图:

plot(themod, id=0.05,idLabels=~.obs) # shows us outliers

我使用此代码删除了这些异常值:

dfs <- dataset
dfs$resid <- resid(themod)
dfs$fitted <- fitted(themod)
z <- resid(m3)
z <- z[abs(z-mean(z))<2*sd(z)]
newdat <- dfs[dfs$resid %in% z, ] 
themod_noout <- update(themod, data=newdat) 

这改进了一些东西,但是我试图使用此代码删除一些额外的异常值:

newdat2 <- newdat
newdat2 <- newdat2[order(newdat2$resid), ]
newdat2 <- tail(newdat2, -10)
newdat2 <- head(newdat2, -10)
themod_noout2 <- update(themod_noout,data=newdat2)

但是在检查残差时,这导致了一种非常奇怪的模式? 这确实改善了茎长度和可能的同种密度的对数几率空间的线性 - 但不是异种密度(见图 - 点击下面的链接)。

Residual plots showing outliers of the original model (themod), the model after one load of outliers were removed, and the model after two loads were removed

最后,我想知道组内的分布是否与假设分布(二项式)相匹配 - 这再次遇到了具有许多类别的非常大的数据集的问题,但是看到生存只能是二项式也许这不是问题?

但是我会将此作为第二个问题,因为我不能再发布图像链接了。

(我也参观了2015年Bolker的工作实例(我无法发布链接,因为我不具备声誉 - 但它们都适用于小得多的数据集,而且我是&#39;我正在努力将所有这些方法应用到我的过程中。)

所以,我的问题是: 如何从原始模型公式设置/结构中进行选择 - 使用AIC,dropterm,R平方或残差分布的诊断图?

我应该如何比较不同类别的同质性,我应该减少样本方面,还是排除稀有物种?

我的离群值是怎么回事?

这些模型中的任何一个都足够好,我该如何判断?

最后,如果没有 - 我该怎么做才能改进它们,我怎样才能重组我的模型呢?

非常感谢任何有时间和精力去完成这一切的人,并再次为我的无知道歉。干杯!

0 个答案:

没有答案