Из вашего вопроса немного сложно понять, что предоставляет пакет 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
Я думаю, что это сложнее, когда вы попадаете в бинарные результаты и т.д. c.
Формула для вычисления остатков стандартизированного отклонения
Остатки стандартизированного отклонения вычисляются из 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))
. Итак, вам нужны две вещи: hat
и dispersion
. Я предполагаю, что RevoScaleR
обеспечивает параметр дисперсии. Если в RevoScaleR
нет ничего, как influence(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