堆栈溢出问题 - 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")
然而,这些显示出茎长和同种密度可能接近线性关系,但肯定不是异种特异性密度。 第三,我想看看是否有剩余异常值,使用此代码生成的进一步诊断图:
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)
但是在检查残差时,这导致了一种非常奇怪的模式? 这确实改善了茎长度和可能的同种密度的对数几率空间的线性 - 但不是异种密度(见图 - 点击下面的链接)。
最后,我想知道组内的分布是否与假设分布(二项式)相匹配 - 这再次遇到了具有许多类别的非常大的数据集的问题,但是看到生存只能是二项式也许这不是问题?
但是我会将此作为第二个问题,因为我不能再发布图像链接了。
(我也参观了2015年Bolker的工作实例(我无法发布链接,因为我不具备声誉 - 但它们都适用于小得多的数据集,而且我是&#39;我正在努力将所有这些方法应用到我的过程中。)
所以,我的问题是: 如何从原始模型公式设置/结构中进行选择 - 使用AIC,dropterm,R平方或残差分布的诊断图?
我应该如何比较不同类别的同质性,我应该减少样本方面,还是排除稀有物种?
我的离群值是怎么回事?
这些模型中的任何一个都足够好,我该如何判断?
最后,如果没有 - 我该怎么做才能改进它们,我怎样才能重组我的模型呢?
非常感谢任何有时间和精力去完成这一切的人,并再次为我的无知道歉。干杯!