首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R中的"rstanarm“软件包中获得标准化系数?

从R中的"rstanarm“软件包中获得标准化系数?
EN

Stack Overflow用户
提问于 2018-03-17 02:56:32
回答 1查看 513关注 0票数 2

我想知道是否有可能(或者建议)从stan_glm()包中获得rstanarm的标准化系数?(在文件中没有发现任何具体内容)

我能把所有的变量标准化为正常回归吗?(见下文)

示例:

代码语言:javascript
复制
library("rstanarm")
fit <- stan_glm(wt ~ vs*gear, data = mtcars)

标准化:

代码语言:javascript
复制
design <- wt ~ vs*gear

vars <- all.vars(design)

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

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

回答 1

Stack Overflow用户

回答已采纳

发布于 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)),然后对其他感兴趣的操作重复这个过程。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49332080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档