我有一个问题,就是使用AICc值比较我的昆虫丰度数据的负二项模型,我收到错误信息
"Error in aictab.default(cand.set = model15LT_T, second.ord = T, sort = T, :
Function not yet defined for this object class”
这是我的代码:
model15LT_T = list()
model15LT_T[[1]] = glm.nb(TotalN ~ 1+offset(log(Dates)), data=DAT)
model15LT_T[[2]] = glm.nb(TotalN ~ PC1_0.5+offset(log(Dates)), data=DAT)
model15LT_T[[3]] = glm.nb(TotalN ~ PC2_0.5+offset(log(Dates)), data=DAT)
model15LT_T[[4]] = glm.nb(TotalN ~ PC1_0.5 + PC2_0.5+offset(log(Dates)), data=DAT)
aictab(cand.set = model15LT_T, second.ord = T, sort = T, modnames = c("TotalN.1",
"TotalN.pc1.0.5",
"TotalN.pc2.0.5",
"TotalN.pc1+pc2.0.5"))
但是当我尝试在模型中指定族而不是如下所示使用glm.nb时(除了将glm.nb更改为glm(family = negative.binomial(theta = 1))之外,我复制并粘贴了所有代码。然后错误消息就消失了。
model15LT_T = list()
model15LT_T[[1]] = glm(TotalN ~ 1+offset(log(Dates)), family=negative.binomial (theta=1), data=DAT)
model15LT_T[[2]] = glm(TotalN ~ PC1_0.5+offset(log(Dates)), family=negative.binomial (theta=1), data=DAT)
model15LT_T[[3]] = glm(TotalN ~ PC2_0.5+offset(log(Dates)),family=negative.binomial (theta=1), data=DAT)
model15LT_T[[4]] = glm(TotalN ~ PC1_0.5 + PC2_0.5+offset(log(Dates)), family=negative.binomial (theta=1),data=DAT)
aictab(cand.set = model15LT_T, second.ord = T, sort = T, modnames = c("Total.1",
"Total.PC1",
"Total.PC2",
"Total.PC1+PC2"))
我的问题是:
1)这是否意味着我无法使用glm.nb来使用aictab?
2)如果我必须在glm(TotalN~., family=negative.binomial)
中指定theta值,是否有更好的方法来知道要放入什么值?
答案 0 :(得分:1)
1)情况似乎如此。您可以使用例如手动轻松计算AIC。 glm.nb()返回的对象中的 twologlik -slot
aic1 = 2*(nrow(model15LT_T[[1]]$coef)+1)-model15LT_T[[1]]$twologlik
注意nrow(model15LT_T [[1]] $ coef)+ 1 = 2因为你估计1个回归参数(截距)加上过度离散。
2)如果您已经知道theta而不是以这种方式指定它,但在我看来,除非您有充分的理由在 1处修复它,否则您应该更好地估算它。记住theta是负二项式的过度离散参数。这是一个讨厌对数参数,用于估计对数线性回归的均值,但您不想进行推理。