【发布时间】:2020-07-02 16:24:56
【问题描述】:
我在 R 中构建了一个贝叶斯回归模型,并尝试使用它从不在训练集中的记录 X 进行预测。问题是,无论我如何更改 X 中一个自变量的值,预测都保持不变!有人可以阐明如何使用贝叶斯回归模型进行预测吗?这里有一些代码可以让你了解我在做什么:
install.packages("BMA")
library(BMA)
D_for_Bayes_tweaked <- D_for_Bayes
bfit1 <- bic.glm(f = as.formula('freq_iso_chng2 ~ cpi_gasoline_proj + vhcl_age_proj + vhcl_sale_ltruck_proj',), data = D_for_Bayes[D_for_Bayes$year >= 2003 & D_for_Bayes$year <= 2019,], glm.family = Gamma(link = "log"))
(p1 <- predict(bfit1, newdata = D_for_Bayes[D_for_Bayes$year >= 2003 & D_for_Bayes$year <= 2020,], type = "response"))
cpi_gasoline_proj_change <- 0.025
new_gas_cpi <- D_for_Bayes[D_for_Bayes$year == 2020,]$cpi_gasoline_proj + cpi_gasoline_proj_change
D_for_Bayes_tweaked[D_for_Bayes_tweaked$year == 2020,]$cpi_gasoline_proj <- new_gas_cpi
bfit2 <- bic.glm(f = as.formula('freq_iso_chng2 ~ cpi_gasoline_proj + vhcl_age_proj + vhcl_sale_ltruck_proj',), data = D_for_Bayes_tweaked[D_for_Bayes_tweaked$year >= 2003 & D_for_Bayes_tweaked$year <= 2019,], glm.family = Gamma(link = "log"))
(p2 <- predict(bfit2, newdata = D_for_Bayes_tweaked[D_for_Bayes_tweaked$year >= 2003 & D_for_Bayes_tweaked$year <= 2020,], type = "response"))
【问题讨论】:
-
不熟悉
BMA,但您是否正在为新X 安装第二个模型?如果是这样,可能是你的问题。尝试使用第一个模型来预测调整后的数据。 -
不,唯一需要调整的数据是测试数据。 bfit1 和 bfit2 是相同的,但我将一组预测变量输入 bfit1 并将一组更改的预测变量输入 bfit2。无论如何,我确实尝试使用 bfit1 预测 D_for_Bayes_tweaked 中的值,当我使用 bfit1 预测 D_for_Bayes 中的值时,我得到了相同的预测。
-
嗨!这个问题更多的是关于理论统计,可能不是 stack.overflow 主题。 2 cmets: 1 如果 ypu 正在运行贝叶斯回归,我真的建议使用包 rstanarm。 2 贝叶斯预测是通过后验预测分布来完成的,在贝叶斯正态正态相关性中很容易通过分析得到
-
这并不是真正的理论。底线是,我需要知道这行代码在做什么: (p1 = 2003 & D_for_Bayes$year
-
“我将一组预测变量输入 bfit1 并将一组更改后的预测变量输入 bfit2” 这两个模型都会给您类似的答案,因为您正在拟合它们来预测相同的响应。他们可能有不同的系数估计,但预测可能几乎相同。在给定的情况下,模型总是尽可能地预测响应。
标签: r regression prediction bayesian