我对这个话题/在讨论板上的帖子非常陌生,所以如果有什么不清楚的地方,我提前道歉。
我对在JAGS中执行随机搜索变量选择(SSVS)很感兴趣。我在网上看到过执行SSVS的人的代码(例如http://www4.stat.ncsu.edu/~reich/ABA/code/SSVS,我复制了下面的代码),但我的理解是,要执行这种方法,我需要在JAGS中使用spike slab。尖峰可以是点质量,也可以是方差非常小的分布。看看大多数人的代码,只定义了一个分布(在上面的一个中,他们定义了一个关于伽马的分布,β=伽马*δ),我相信他们假设的是峰值上的一个点质量。
所以我的问题是:
1)有人能解释一下为什么下面的代码使用SSVS方法吗?例如,我们如何知道这不是使用GVS,这也是另一种使用Gibbs采样器的方法?
2)这是尖峰上的点质量吗?
3)如果我想使用模拟数据来测试Gibbs采样器是否正确地从尖峰/板材中提取,我该怎么做呢?我会为一个尖峰和一个板材编写代码吗?我应该在后面寻找什么来查看它是否正确绘制?
model_string <- "model{
# Likelihood
for(i in 1:n){
Y[i] ~ dpois(lambda[I])
log(lambda[i]) <- log(N[i]) + alpha + inprod(beta[],X[i,])
}
#Priors
for(j in 1:p){
gamma[j] ~ dnorm(0,tau)
delta[j] ~ dbern(prob)
beta[j] <- gamma[j]*delta[j]
}
prob ~ dunif(0,1)
tau ~ dgamma(.1,.1)
alpha ~ dnorm(0,0.1)
}"我也在JAGS的帮助页面上问过:https://sourceforge.net/p/mcmc-jags/discussion/610036/thread/a44343e0/#ab47
发布于 2018-04-13 08:19:25
我还(试图)在JAGs中做一些贝叶斯变量选择的工作。我绝对不是这个话题的专家,但是如果我们多聊聊这个话题,也许我们可以一起学习。以下是我对此代码中的变量选择的解释:
model_string <- "model{
Likelihood
for(i in 1:n){
Y[i] ~ dpois(lambda[I])
log(lambda[i]) <- log(N[i]) + alpha + inprod(beta[],X[i,])
}
Priors
for(j in 1:p){
gamma[j] ~ dnorm(0,tau)
delta[j] ~ dbern(prob) # delta has a Bernoulli distributed prior (so it can only be 1:included or 0:notincluded)
beta[j] <- gamma[j]*delta[j] # delta is the inclusion probability
}
prob ~ dunif(0,1) # This is then setting an uninformative prior around the probability of a varible being included into the model
tau ~ dgamma(.1,.1)
alpha ~ dnorm(0,0.1)
}"我尝试注释掉模型中的变量选择部分。上面的代码看起来与Kuo & Mallick的贝叶斯变量选择方法非常相似。我目前在调整spike和slab方法时遇到了麻烦,因此估计值正确地混合在一起,而不是“卡住”在0或1上。
所以我的前科设置得更像这样:
beta~ dnorm(0,tau)
tau <-(100*(1-gamma))+(0.001*(gamma)) # tau is the inclusion probability
gamma~dbern(0.5)我发现这篇文章有助于解释不同变量选择方法之间的差异(它涉及到GVS和SSVS):
O’Hara, R.B. & Sillanpää, M.J. (2009). A review of Bayesian variable selection methods: What, how and which. Bayesian Anal., 4, 85–118
如果之前的测试版上没有SSVS,那么之前的版本看起来更像这样:
Priors
for(j in 1:p){
beta[j] <- ~ dnorm(0,0.01) # just setting a normally (or whatever drstribution you're working in) distributed prior around beta.
}
tau ~ dgamma(.1,.1)
alpha ~ dnorm(0,0.1)
}"https://stackoverflow.com/questions/47758236
复制相似问题