模型对象$residual和R包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

感谢您的帮助。

要获得相等的结果,您应该将type设置为response(默认为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')

相关内容

  • 没有找到相关文章