在一篇不错的博客文章和其中的链接论文之后,我想我可能会玩弄一些贝叶斯变量选择。我在rjags(我是个新手)中编写了一个程序,并获取了埃克森美孚的价格数据,以及一些不太可能解释其回报的东西(例如钯金价格)和其他应该高度相关的东西(比如 SP500 )。
运行lm()
,我们看到有强有力的证据表明模型过度参数化,但绝对应该排除钯:
Call:
lm(formula = Exxon ~ 0 + SP + Palladium + Russell + OilETF +
EnergyStks, data = chkr)
Residuals:
Min 1Q Median 3Q Max
-1.663e-03 -4.419e-04 3.099e-05 3.991e-04 1.677e-03
Coefficients:
Estimate Std. Error t value Pr(>|t|)
SP 0.51913 0.19772 2.626 0.010588 *
Palladium 0.01620 0.03744 0.433 0.666469
Russell -0.34577 0.09946 -3.476 0.000871 ***
OilETF -0.17327 0.08285 -2.091 0.040082 *
EnergyStks 0.79219 0.11418 6.938 1.53e-09 ***
转换为退货后,我尝试运行这样的简单模型
model {
for (i in 1:n) {
mean[i]<-inprod(X[i,],beta)
y[i]~dnorm(mean[i],tau)
}
for (j in 1:p) {
indicator[j]~dbern(probindicator)
betaifincluded[j]~dnorm(0,taubeta)
beta[j] <- indicator[j]*betaifincluded[j]
}
tau~dgamma(1,0.01)
taubeta~dgamma(1,0.01)
probindicator~dbeta(2,8)
}
但我发现,几乎不管所选伽玛分布的参数如何,我得到的答案都是非常荒谬的,例如每个变量的包含概率不变 20%。
我也得到了非常小的回归系数,我愿意容忍它,因为这应该是一个选择模型,但这仍然看起来很奇怪。
Mean SD Naive SE Time-series SE
SP beta[1] -4.484e-03 0.10999 0.003478 0.007273
Palladium beta[2] 1.422e-02 0.16646 0.005264 0.011106
Russell beta[3] -2.406e-03 0.08440 0.002669 0.003236
OilETF beta[4] -4.539e-03 0.14706 0.004651 0.005430
EnergyStks beta[5] -1.106e-03 0.07907 0.002500 0.002647
SP indicator[1] 1.980e-01 0.39869 0.012608 0.014786
Palladium indicator[2] 1.960e-01 0.39717 0.012560 0.014550
Russell indicator[3] 1.830e-01 0.38686 0.012234 0.013398
OilETF indicator[4] 1.930e-01 0.39485 0.012486 0.013229
EnergyStks indicator[5] 2.070e-01 0.40536 0.012819 0.014505
probindicator 1.952e-01 0.11981 0.003789 0.005625
tau 3.845e+03 632.18562 19.991465 19.991465
taubeta 1.119e+02 107.34143 3.394434 7.926577
贝叶斯变量选择真的那么糟糕/敏感吗?还是我犯了一些明显的错误?