1

我正在使用zeroinfl来自的函数运行一个零膨胀负二项式回归模型pscl

我需要从模型中排除 NA,以便能够在分析后期根据因变量绘制残差。

因此,我想设置na.action="na.exclude". 对于非零膨胀负二项式回归模型(glm.nbglm包中使用),我可以毫无问题地做到这一点,例如。

fm_nbin <- glm.nb(DV ~ factor(IDV) + contr1
               +contr2 + contr3, data=df, 
               subset=(df$var<500), na.action="na.exclude")
fm_nbin.res = resid(fm_nbin) 
plot(fm_nbin.res~df$var)  

工作正常。但是,当我对零膨胀模型执行相同操作时,它不起作用:

zinfl <- zeroinfl(DV ~ factor(IDV) + contr1
               +contr2 + contr3 | factor(IDV) + contr1
               +contr2 + contr3, data=df, 
               subset=(df$var<500), na.action="na.exclude")
zinfl.res = resid(zinfl) 
plot(zinfl.res~df$var)

给出错误

Error in function (formula, data = NULL, subset = NULL, na.action = na.fail,  : 
  variable lengths differ (found for 'df$var')

我应该使用其他命令从回归中排除 NA 吗?

编辑: 是我能找到的最接近的答案。它可以以某种方式应用于我的问题吗?另外,可以naresid以某种方式应用吗?

4

2 回答 2

1

正如人们通过跟踪从zeroinflto的文档发现的那样glm.fit:“'工厂新鲜'默认值是na.omit。” 请注意,我没有在它周围加上引号,因为它应该是一个函数,但该函数将接受它作为一个名称,所以它是否被引用并不重要。我承认我真的不知道如何na.omitna.exclude真正不同(与我阅读的残差有关),但肯定会首先使用默认设置,因为它通常提供我想要的回归函数。所以试着把它排除在外:

zinfl <- zeroinfl(DV ~ factor(IDV) + contr1
           +contr2 + contr3 | factor(IDV) + contr1
           +contr2 + contr3, data=df, 
           subset=(df$var<500) )
于 2013-05-04T16:58:33.230 回答
0

由于在回归模型中使用na.omit(df)na.action="na.exclude"似乎不起作用的选项zeroinfl,我发现了另一种(间接)实现该选项的方法,NA在回归中被排除在外。

首先,由于我的原始数据集包含的变量远多于回归变量和结果变量,因此我创建了一个新数据集,其中仅包含我在回归模型中使用的变量;并且还对 的值设置条件以var在回归中包含观察结果:

df1 <- subset(df, var<500, select=c("DV", "IDV", "contr1", "contr2", "contr3"))
df1 <- na.omit(df1)

然后我使用新的 dataset 运行与上面相同的代码df1,效果很好:

zinfl <- zeroinfl(DV ~ factor(IDV) + contr1
           +contr2 + contr3 | factor(IDV) + contr1
           +contr2 + contr3, data=df1)
zinfl.res = resid(zinfl) 
plot(zinfl.res~df1$DV)
于 2013-05-06T09:37:43.720 回答