使用aictab比较负二项模型(glm.nb)时获取错误消息

时间:2017-01-23 14:56:26

标签: r

我有一个问题,就是使用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值,是否有更好的方法来知道要放入什么值?

1 个答案:

答案 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是负二项式的过度离散参数。这是一个讨厌对数参数,用于估计对数线性回归的均值,但您不想进行推理。