从 R 中的 "rstanarm" 包中获取标准化系数?

Obtaining Standardized coefficients from "rstanarm" package in R?

我想知道是否有可能(也许推荐)从 rstanarm 包中的 stan_glm() 获得 标准化系数 ? (未在文档中找到任何具体内容

我可以像正常回归那样对所有变量进行标准化吗? (见下文)

示例:

library("rstanarm")
fit <- stan_glm(wt ~ vs*gear, data = mtcars)

标准化:

design <- wt ~ vs*gear

vars <- all.vars(design)

stand.vars <- lapply(mtcars[, vars], scale)

fit <- stan_glm(stand.vars, data = mtcars)

我不会说肯定推荐,但我建议你不要减去样本均值除以结果的样本标准差,因为估计的不确定性在这两个统计数据中,不会传播到后验分布。

预测变量的标准化更具争议性。您可以这样做,但是这会使使用新数据进行后验预测变得更加困难,因为您必须记住从新数据中减去旧均值并除以旧标准差。

计算效率最高的方法是保持变量不变,但指定 non-default 参数 QR = TRUE,特别是如果您不打算修改系数的默认(正常)先验反正。 如果对标准化系数感兴趣,则可以对后验系数进行标准化 after-the-fact。为此,您可以这样做 X <- model.matrix(fit) sd_X <- apply(X, MARGIN = 2, FUN = sd)[-1] sd_Y <- apply(posterior_predict(fit), MARGIN = 1, FUN = sd) beta <- as.matrix(fit)[ , 2:ncol(X), drop = FALSE] b <- sweep(sweep(beta, MARGIN = 2, STATS = sd_X, FUN = `*`), MARGIN = 1, STATS = sd_Y, FUN = `/`) summary(b)

然而,标准化回归系数只是给出了变量之间具有可比性的假象,并没有说明一个标准差差异的相关性,尤其是对于虚拟变量。如果您的问题真的是操纵这个预测变量或那个预测变量是否会对结果变量产生更大的影响,那么只需模拟这些操作就像 PPD_0 <- posterior_predict(fit) nd <- model.frame(fit) nd[ , 2] <- nd[ , 2] + 1 # for example PPD_1 <- posterior_predict(fit, newdata = nd) summary(c(PPD_1 - PPD_0)) 并对其他感兴趣的操作重复该过程。