R包pscl中modelobject $残差和残差(modelobject)之间有什么区别?

时间:2013-07-22 17:53:40

标签: r models pscl

我正在尝试使用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

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

要获得相同的结果,您应将type设置为response(默认为皮尔逊)

 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')