NegBin 回归没有有效系数

机器算法验证 r 回归 负二项分布
2022-04-09 18:18:11

我正在对一些数据(5 个预测变量,1 个响应)进行多重回归。由于响应是离散且非负的,我想我会尝试泊松回归。但是,数据明显过度分散(方差 > 均值),所以我现在正在尝试负二项式回归。

我能够使用此代码拟合模型。

library(MASS)
model.nb <- glm.nb(Response ~ Pred1 + Pred2 + Pred3 + Pred4 + Pred5 - 1, data=d)

现在我想看看是否可以通过包含预测变量之间的交互来获得更好的拟合。但是,当我尝试这样做时,出现以下错误。

> model.nb.intr <- glm.nb(Response ~ Pred1 * Pred2 * Pred3 * Pred4 * Pred5 - 1, data=d)
Error: no valid set of coefficients has been found: please supply starting values

有什么想法可能导致这种情况吗?

3个回答

在跳转到包含所有交互的模型之前,您可以尝试仅添加 2-way 交互:

model.nb.intr <- glm.nb(Response ~ (Pred1 + Pred2 + Pred3 + Pred4 + Pred5)^2 - 1, data=d)

glm.fit您的模型太复杂,计算机无法计算出一些合理的起始值,这些起始值在迭代时不会导致无限偏差。

你有足够的数据来估计所有这些相互作用吗?您认为所有预测变量相互影响是合理的吗?如果没有,请考虑哪些预测变量可能相互作用并仅包含这些术语。

该错误要求您提供一些起始值以使其工作。为此,您需要提供一个参数值向量作为参数start来自?glm

   start: starting values for the parameters in the linear predictor.

您需要提供 31 个模型参数(我希望您有 1000 多个数据点?)start,按以下顺序:

> colnames(model.matrix(Y ~ Pred1*Pred2*Pred3*Pred4*Pred5 -1, data = DF))
 [1] "Pred1"                         "Pred2"                        
 [3] "Pred3"                         "Pred4"                        
 [5] "Pred5"                         "Pred1:Pred2"                  
 [7] "Pred1:Pred3"                   "Pred2:Pred3"                  
 [9] "Pred1:Pred4"                   "Pred2:Pred4"                  
[11] "Pred3:Pred4"                   "Pred1:Pred5"                  
[13] "Pred2:Pred5"                   "Pred3:Pred5"                  
[15] "Pred4:Pred5"                   "Pred1:Pred2:Pred3"            
[17] "Pred1:Pred2:Pred4"             "Pred1:Pred3:Pred4"            
[19] "Pred2:Pred3:Pred4"             "Pred1:Pred2:Pred5"            
[21] "Pred1:Pred3:Pred5"             "Pred2:Pred3:Pred5"            
[23] "Pred1:Pred4:Pred5"             "Pred2:Pred4:Pred5"            
[25] "Pred3:Pred4:Pred5"             "Pred1:Pred2:Pred3:Pred4"      
[27] "Pred1:Pred2:Pred3:Pred5"       "Pred1:Pred2:Pred4:Pred5"      
[29] "Pred1:Pred3:Pred4:Pred5"       "Pred2:Pred3:Pred4:Pred5"      
[31] "Pred1:Pred2:Pred3:Pred4:Pred5"

我会使用第一个模型中的系数来填充前 5 个起始值,然后你对其他值的处理取决于你。您可以尝试将它们全部从 1 开始,看看这是否会使模型适合?

您还可以从pscl中的代码中受益,它可以适合障碍和零膨胀模型来计算数据。

如果您对 R 不满意,您可以使用 AD 模型生成器来拟合这个模型和更复杂的模型,它是http://admb-project.org上提供的免费软件。ADMB 允许您以多种方式对过度分散进行建模,而不是局限于 GLM 范式。如果你有兴趣,我可以给你建议。