我想知道是否有可能(或者建议)从stan_glm()包中获得rstanarm的标准化系数?(在文件中没有发现任何具体内容)
我能把所有的变量标准化为正常回归吗?(见下文)
示例:
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)发布于 2018-03-17 03:56:53
我不会说这是肯定推荐的,但我建议你不要减去样本平均数,除以结果的样本标准差,因为这两个统计中的估计不确定性不会传播到后验分布。
标准化的预测是值得商榷的。你可以这样做,但它使用新数据进行后验预测变得更困难,因为你必须记住从新数据中减去旧的均值,然后除以旧的标准差。
计算效率最高的方法是保留变量本身,但指定非默认参数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)),然后对其他感兴趣的操作重复这个过程。
https://stackoverflow.com/questions/49332080
复制相似问题