繁体   English   中英

如何更改零膨胀回归模型的反应?

[英]How to change na.action for zero-inflated regression model?

我正在使用pscl包中的功能zeroinfl运行零膨胀负二项式回归模型。

我需要从模型中排除NA以便能够在稍后的分析中针对因变量绘制残差。

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

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某种方式使用naresid吗?

正如人们从zeroinflglm.fit的文档说明所发现的:“'factory-fresh'默认值为na.omit 。” 请注意,由于它应该是一个函数,所以我没有在其两边加上引号,但是该函数会将其接受为名称,因此,是否将其引起引用并不重要。 我将承认我并不真正知道na.omitna.exclude真正区别(与我阅读的残差有关),但是肯定会首先使用默认设置,因为它通常可以提供我想要的回归函数。 因此,尝试将其省略:

zinfl <- zeroinfl(DV ~ factor(IDV) + contr1
           +contr2 + contr3 | factor(IDV) + contr1
           +contr2 + contr3, data=df, 
           subset=(df$var<500) )

由于使用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)

然后,我使用新的数据集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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM