【问题标题】:Obtaining Standardized coefficients from "rstanarm" package in R?从 R 中的“rstanarm”包中获取标准化系数?
【发布时间】:2018-03-17 02:56:32
【问题描述】:

我想知道是否有可能(并且可能推荐)从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)

【问题讨论】:

    标签: r bayesian stan rstan rstanarm


    【解决方案1】:

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

    标准化预测变量更值得商榷。你可以这样做,但它使使用新数据进行后验预测变得更加困难,因为你必须记住从新数据中减去旧均值并除以旧标准差。

    计算效率最高的方法是让变量保持原样,但指定非默认参数QR = TRUE,特别是如果您无论如何都不打算修改系数的默认(正常)先验。 如果对标准化系数感兴趣,您可以在事后标准化后验系数。为此,您可以这样做 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)) 并对其他感兴趣的操作重复该过程。

    【讨论】:

    • 您可能想做类似nd &lt;- with(original_data, data.frame(x1 = seq(from = small, to = big, length.out = 100), x2 = mean(x2), x3 = mean(x3))) 的操作,然后用newdata = nd 调用posterior_predict。然而,这种将其他预测变量保持在平均值的想法可能令人怀疑,尤其是对于离散预测变量。此外,只要平均值是相关的,它可能应该是给定正在变化的变量的条件平均值。
    猜你喜欢
    • 2014-08-09
    • 2014-09-23
    • 1970-01-01
    • 2021-01-12
    • 2019-07-06
    • 2018-09-11
    • 1970-01-01
    • 2013-10-09
    • 2020-06-05
    相关资源
    最近更新 更多