4

我正在尝试使用包使用零膨胀泊松回归构建一些模型pscl,并且在操纵了变成 的输出对象之后zeroinfl,我发现做residuals(fm_zip)不等于fm_zip$residuals.

以下是我正在谈论的示例:

library("pscl")
data("bioChemists", package = "pscl")
fm_zip <- zeroinfl(art ~ . | 1, data = bioChemists)
names(fm_zip)
fm_zip$residuals
residuals(fm_zip)
all.equal(fm_zip$residuals,residuals(fm_zip))
qplot(fm_zip$residuals,residuals(fm_zip))

正如您可能意识到的那样,结果并不相同。我会说这两种方式都是等价的,但似乎它们不是。你能解释一下这有什么问题吗?根据残差 R 帮助,这两种选择应该返回差异(observed - fitted)。相比之下,我对普通的线性回归做了同样的事情,它们是相等的。

我的 R 版本是:

sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)...

并且包版本是pscl_1.04.4

任何帮助表示赞赏。

4

1 回答 1

3

要获得相同的结果,您应该设置typeresponse(默认情况下为 pearson)

 all.equal(fm_zip$residuals,residuals(fm_zip,'response'))
[1] TRUE

来自?residuals.zeroinfl

残差方法可以计算原始残差(观察到的 - 拟合)和 Pearson 残差(由方差函数的平方根缩放的原始残差)。

perason方差定义为:

mu <- predict(fm_zip, type = "count")
phi <- predict(fm_zip, type = "zero")
theta1 <- switch(fm_zip$dist, poisson   = 0, 
                              geometric = 1, 
                              negbin    = 1/object$theta)
variance <- fm_zip$fitted.values * (1 + (phi + theta1) * mu)

编辑 不要犹豫阅读后面的代码,它通常是学习的来源,您也可以避免许多混淆。要获取背后的代码S3 method residuals.zeroinfl,您可以使用以下内容:

getS3method('residuals','zeroinfl')
于 2013-07-22T17:57:59.130 回答