R 了解glm$残差和残差(glm)

R 了解glm$残差和残差(glm),r,glm,R,Glm,您能告诉我glm$residuals和resids(glm)返回的是什么吗?其中glm是一个准isson对象。e、 g.如何使用glm$y和glm$linear.PREDICTOR创建它们 glm$残差 n missing unique Mean .05 .10 .25 .50 .75 .90 .95 37715 10042 2174 -0.2574 -2.7538 -2.2661 -1.4480 -0.4381 0

您能告诉我glm$residualsresids(glm)返回的是什么吗?其中glm是一个准isson对象。e、 g.如何使用glm$y和glm$linear.PREDICTOR创建它们

glm$残差

     n missing  unique    Mean     .05     .10   .25  .50     .75     .90     .95

 37715   10042    2174 -0.2574 -2.7538 -2.2661 -1.4480 -0.4381  0.7542  1.9845  2.7749



lowest : -4.243 -3.552 -3.509 -3.481 -3.464
highest:  8.195  8.319  8.592  9.089  9.416
剩余油(glm)


我对泊松分布和准泊松分布了解不够,无法回答您提出的深度问题(即使用模型将变量转换为残差的精确方程),但如果任何混淆是由于使用了什么残差类型以及为什么这两个命令给出了不同的答案,这将有助于:

resid()默认为R中的“偏差”类型。但是,glm()为$residuals向量指定不同的残差

如果您使用的是准泊松族,glm()将指定工作类型的残差,而resid()则默认指定偏差类型

要尝试此方法,您可以使用:

剩余(glm,type=“工作”)

glm$残差

这应该会给你同样的答案(至少在我使用的样本数据集上是这样)

根据R,工作残差是:“IWLS拟合的最终迭代中的残差”

如果您在Google Books上查找“广义线性模型和扩展”(由Hardin和Hilbe编写)一书,您可以访问第4.5节,该节解释了各种类型的残差。

调用残差(模型)将默认为偏差残差,而model$resid将为您提供工作残差。由于链接函数的存在,模型残差的定义并不单一。有偏差、工作、部分、皮尔逊和反应残差。因为它们只依赖于均值结构(而不是方差),所以准泊松和泊松的残差具有相同的形式。有关详细信息,您可以查看
residuals.glm
函数,但以下是一个示例:

counts <- c(18,17,15,20,10,20,25,13,12)
outcome <- gl(3,1,9)
treatment <- gl(3,3)
glm.D93 <- glm(counts ~ outcome + treatment, family=quasipoisson())
glm.D93$resid


#working
resid(glm.D93,type="working")
(counts - glm.D93$fitted.values)/exp(glm.D93$linear)

#deviance
resid(glm.D93,type="dev")
fit <- exp(glm.D93$linear)
poisson.dev <- function (y, mu) 
    sqrt(2 * (y * log(ifelse(y == 0, 1, y/mu)) - (y - mu)))
poisson.dev(counts,fit) * ifelse(counts > fit,1,-1)

#response
resid(glm.D93,type="resp")
counts - fit

#pearson
resid(glm.D93,type="pear")
(counts - fit)/sqrt(fit)

counts这太棒了。现在我只需要了解每种类型的残差在进行回归诊断时最有用的时间。下面亚当推荐的书(“哈丁和希尔贝的广义线性模型和扩展”)似乎很有帮助,还有其他建议吗?哈丁和希尔贝的书很有参考价值!谢谢
counts <- c(18,17,15,20,10,20,25,13,12)
outcome <- gl(3,1,9)
treatment <- gl(3,3)
glm.D93 <- glm(counts ~ outcome + treatment, family=quasipoisson())
glm.D93$resid


#working
resid(glm.D93,type="working")
(counts - glm.D93$fitted.values)/exp(glm.D93$linear)

#deviance
resid(glm.D93,type="dev")
fit <- exp(glm.D93$linear)
poisson.dev <- function (y, mu) 
    sqrt(2 * (y * log(ifelse(y == 0, 1, y/mu)) - (y - mu)))
poisson.dev(counts,fit) * ifelse(counts > fit,1,-1)

#response
resid(glm.D93,type="resp")
counts - fit

#pearson
resid(glm.D93,type="pear")
(counts - fit)/sqrt(fit)