首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >revoScaleR::rxGlm()问题在rxGlm残差中

revoScaleR::rxGlm()问题在rxGlm残差中
EN

Stack Overflow用户
提问于 2020-04-06 11:55:59
回答 1查看 192关注 0票数 5

我可能在这里找不到答案,因为我不认为revoScaleR包被广泛使用。

如果我使用rxGlm()创建一个GLM,它可以很好地工作。然而,通过rxPredict()获得的模型残差似乎只是“原始”残差(即观测值减去拟合值)。各种转换版本(偏差残差、皮尔逊残差等)好像没时间。

有人知道是否有办法做到这一点吗?我可以使用glm() (具有相同的公式、数据、错误结构、链接函数、权重)和使用residuals(glm_object, type = "deviance")再次运行模型的偏差残差(例如),但这是一个麻烦,因为glm()运行得非常慢(大型数据集,许多模型参数)。

谢谢。

编辑:包括我试图遵循的文献指南:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-16 07:34:08

从您的问题中很难完全理解RevoScaleR包在残差方面提供了什么,以及您到底需要哪些残差。此外,对于残差的术语也有一些混淆,例如这里这里就是一个例子。

有几点/观察可能对你有帮助。

在线性回归中,“原始”与“偏差”残差是相同的。

至少,我从运行glm玩具回归和预测结果中得到了什么,比如:

代码语言:javascript
复制
df <- mtcars
modl <- glm(formula = mpg ~ wt + qsec + am, data = mtcars)
y_hat <- predict(modl)

接下来,计算“原始”残差(预测结果减去实际结果)以及偏差残差:

代码语言:javascript
复制
y <- as.vector(df[["mpg"]])
res_raw <- y - y_hat
res_dev <- residuals(modl, type = "deviance")

这两者是完全相同的:

代码语言:javascript
复制
identical(res_raw, res_dev)
[1] TRUE

我想一旦你进入二元结果,情况就会更复杂。

标准偏差残差的计算公式

标准偏差残差由glmrstandard方法计算。

代码语言:javascript
复制
res_std <- rstandard(modl)

查看getAnywhere(rstandard.glm)可以告诉您如何从偏差残差中手工计算标准化的残差:

代码语言:javascript
复制
function (model, infl = influence(model, do.coef = FALSE), type = c("deviance", 
    "pearson"), ...) 
{
    type <- match.arg(type)
    res <- switch(type, pearson = infl$pear.res, infl$dev.res)
    res <- res/sqrt(summary(model)$dispersion * (1 - infl$hat)) # this is the key line
    res[is.infinite(res)] <- NaN
    res
}

因此,在我的示例中,您将通过运行res/sqrt(summary(modl)$dispersion * (1 - influence(modl)$hat))手动计算标准化残差。所以你需要两样东西:hatdispersion。我假设RevoScaleR提供色散参数。如果RevoScaleR中没有任何东西可以像influence(modl)$hat那样获取hat值,那么就必须从头开始:

代码语言:javascript
复制
X <- as.matrix(df[, c("wt", "qsec", "am")]) # Gets the X variables
X <- cbind(rep(1, nrow(df)), X) # adds column for the constant
hat <- diag(X %*% solve(t(X) %*% X) %*% t(X)) # formula for hat values

现在计算标准化的偏差残差:

代码语言:javascript
复制
res_man <- res_raw/sqrt(summary(modl)$dispersion * (1 - hat))

rstandard派生的内容相同。

代码语言:javascript
复制
head(res_man)
        Mazda RX4     Mazda RX4 Wag        Datsun 710    Hornet 4 Drive Hornet Sportabout           Valiant 
       -0.6254171        -0.4941877        -1.4885771         0.2297471         0.7217423        -1.1790097 
head(res_std)
        Mazda RX4     Mazda RX4 Wag        Datsun 710    Hornet 4 Drive Hornet Sportabout           Valiant 
       -0.6254171        -0.4941877        -1.4885771         0.2297471         0.7217423        -1.1790097 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61059260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档