[英]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
吗?
正如人们从zeroinfl
到glm.fit
的文档说明所发现的:“'factory-fresh'默认值为na.omit
。” 请注意,由于它应该是一个函数,所以我没有在其两边加上引号,但是该函数会将其接受为名称,因此,是否将其引起引用并不重要。 我将承认我并不真正知道na.omit
和na.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.