具有零膨胀数据的混合效应模型 - 使用来自 'pscl' 包的 zeroinfl() 的错误消息
Mixed effects model with zero inflated data - Error message using zeroinfl() from 'pscl' package
我在使用 'pscl' 包中的 zeroinfl()
函数时遇到问题。以下是我的情况概述:
我试图查明地块中的非本地茎密度是否受到该地块的焦点物种的影响。我正在使用混合效应模型,随机效应是站点(我在 6 个不同的站点收集数据)。这是使用 'lme4' 包中的 glmer()
函数的混合模型的样子:
nonstem.model <- glmer(nonstem ~ focalspecies + (1|site), family = "poisson", data = data, na.action=na.omit)
问题是我的数据是零膨胀的,这意味着有很多地块没有非本地物种存在。所以我尝试使用 'pscl' 包中的 zeroinfl()
函数。
nonstem.ZIP = zeroinfl(nonstem ~ focalspecies + (1|site), dist="poisson", link = "logit", data = data)
但是我收到一条错误消息:
Error in contrasts<-
(*tmp*
, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels In
addition: Warning message: In Ops.factor(1, site) : ‘|’ not meaningful
for factors
所以我想我这里不能有随机效果,所以我把它改成了固定效果。
nonstem.ZIP = zeroinfl(nonstem ~ focalspecies + site, dist="poisson", link = "logit", data = data)
但是,现在我收到此错误消息:
Error in solve.default(as.matrix(fit$hessian)) : system is
computationally singular: reciprocal condition number = 4.70937e-36
如果我将分布从 "poisson" 更改为 "negbin",则会出现类似的错误消息:
Error in solve.default(as.matrix(fit$hessian)) : system is
computationally singular: reciprocal condition number = 2.92265e-19
有谁知道这条错误信息是什么意思?或者如果我可以使用不同的 package/function?任何帮助深表感谢。
关于您的评论,您可以使用基数 R stats::anova
来比较两个模型。
这是一个使用来自 glmmTMB
的 Salamanders
示例数据的可重现示例
library(glmmTMB);
fit1 = glmmTMB(
count ~ spp * mined + (1|site),
zi = ~ spp * mined,
data = Salamanders,
family = poisson);
fit2 = glmmTMB(
count ~ spp + mined + (1|site),
zi = ~ spp + mined,
data = Salamanders,
family = poisson);
anova(fit1, fit2)
#Data: Salamanders
#Models:
#fit2: count ~ spp + mined + (1 | site), zi=~spp + mined, disp=~1
#fit1: count ~ spp * mined + (1 | site), zi=~spp * mined, disp=~1
# Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
#fit2 17 1785.5 1861.4 -875.75 1751.5
#fit1 29 1778.1 1907.7 -860.04 1720.1 31.405 12 0.001708 **
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
功劳到期的功劳:示例是根据 here.
调整的
我在使用 'pscl' 包中的 zeroinfl()
函数时遇到问题。以下是我的情况概述:
我试图查明地块中的非本地茎密度是否受到该地块的焦点物种的影响。我正在使用混合效应模型,随机效应是站点(我在 6 个不同的站点收集数据)。这是使用 'lme4' 包中的 glmer()
函数的混合模型的样子:
nonstem.model <- glmer(nonstem ~ focalspecies + (1|site), family = "poisson", data = data, na.action=na.omit)
问题是我的数据是零膨胀的,这意味着有很多地块没有非本地物种存在。所以我尝试使用 'pscl' 包中的 zeroinfl()
函数。
nonstem.ZIP = zeroinfl(nonstem ~ focalspecies + (1|site), dist="poisson", link = "logit", data = data)
但是我收到一条错误消息:
Error in
contrasts<-
(*tmp*
, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels In addition: Warning message: In Ops.factor(1, site) : ‘|’ not meaningful for factors
所以我想我这里不能有随机效果,所以我把它改成了固定效果。
nonstem.ZIP = zeroinfl(nonstem ~ focalspecies + site, dist="poisson", link = "logit", data = data)
但是,现在我收到此错误消息:
Error in solve.default(as.matrix(fit$hessian)) : system is computationally singular: reciprocal condition number = 4.70937e-36
如果我将分布从 "poisson" 更改为 "negbin",则会出现类似的错误消息:
Error in solve.default(as.matrix(fit$hessian)) : system is computationally singular: reciprocal condition number = 2.92265e-19
有谁知道这条错误信息是什么意思?或者如果我可以使用不同的 package/function?任何帮助深表感谢。
关于您的评论,您可以使用基数 R stats::anova
来比较两个模型。
这是一个使用来自 glmmTMB
Salamanders
示例数据的可重现示例
library(glmmTMB);
fit1 = glmmTMB(
count ~ spp * mined + (1|site),
zi = ~ spp * mined,
data = Salamanders,
family = poisson);
fit2 = glmmTMB(
count ~ spp + mined + (1|site),
zi = ~ spp + mined,
data = Salamanders,
family = poisson);
anova(fit1, fit2)
#Data: Salamanders
#Models:
#fit2: count ~ spp + mined + (1 | site), zi=~spp + mined, disp=~1
#fit1: count ~ spp * mined + (1 | site), zi=~spp * mined, disp=~1
# Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
#fit2 17 1785.5 1861.4 -875.75 1751.5
#fit1 29 1778.1 1907.7 -860.04 1720.1 31.405 12 0.001708 **
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
功劳到期的功劳:示例是根据 here.
调整的