5

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

如果我使用它创建一个 GLMrxGlm()就可以了。然而,可用的模型残差rxPredict()似乎只是“原始”残差,即观察值减去拟合值。各种转换版本(偏差残差、皮尔逊残差等)似乎不可用。

有谁知道是否有办法实现这一目标?我可以glm()通过使用(使用相同的公式、数据、误差结构、链接函数、权重)再次运行模型并使用 来获得模型的偏差残差(例如)residuals(glm_object, type = "deviance"),但这很麻烦,因为glm()运行速度非常慢(大型数据集,很多模型参数)。

谢谢。

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

在此处输入图像描述

4

1 回答 1

3

从您的问题中很难完全理解该RevoScaleR软件包在残差方面提供了什么以及您需要哪些残差。此外,关于残差的术语存在相当多的混淆,例如这里这里的例子。

尽管如此,一些观点/观察可能会对您有所帮助。

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

至少我从运行玩具回归glm和预测结果中得到的结果是:

df <- mtcars
modl <- glm(formula = mpg ~ wt + qsec + am, data = mtcars)
y_hat <- predict(modl)

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

y <- as.vector(df[["mpg"]])
res_raw <- y - y_hat
res_dev <- residuals(modl, type = "deviance")

这两个是相同的:

identical(res_raw, res_dev)
[1] TRUE

我想一旦你进入二元结果等,它就会更加复杂。

计算标准化偏差残差的公式

glm使用该rstandard方法计算标准化偏差残差。

res_std <- rstandard(modl)

查看getAnywhere(rstandard.glm)告诉您如何根据偏差残差手动计算标准化残差:

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提供了色散参数。如果无法获得帽子值RevoScaleRinfluence(modl)$hat则必须从头开始:

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

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

res_man <- res_raw/sqrt(summary(modl)$dispersion * (1 - hat))

与派生的相同rstandard

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 
于 2020-04-16T07:34:08.683 回答