我对这个话题非常陌生/在讨论区发帖,所以如果不清楚,我会提前道歉。
我有兴趣在JAGS中执行随机搜索变量选择(SSVS)。我在网上看到了人们执行SSVS的代码(例如http://www4.stat.ncsu.edu/~reich/ABA/code/SSVS我已经复制了下面的代码),但我的理解是,为了执行这种方法,我需要在JAGS中使用spike-slab优先级。尖峰可以是点质量或具有非常窄的方差的分布。查看大多数人的代码,只定义了一个分布(在上面的一个分布中,它们定义了伽玛的分布,β=γ* delta),我相信它们假定尖峰处有一个点质量。
所以我的问题是:
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
答案 0 :(得分:1)
我也(尝试)在JAG中处理一些贝叶斯变量选择。我绝不是这个主题的专家,但也许如果我们聊聊这个,我们可以一起学习。以下是我对此代码中的varibale选择的解释:
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&amp;贝叶斯变量选择的Mallick方法。我目前无法调整尖峰和平板方法,因此估算值会正确混合而不是“卡在”0或1上。
所以我的先辈们的设置更像是:
beta~ dnorm(0,tau)
tau <-(100*(1-gamma))+(0.001*(gamma)) # tau is the inclusion probability
gamma~dbern(0.5)
我发现本文有助于解释不同变量选择方法之间的差异(它进入GVS与SSVS):
如果之前的测试版没有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)
}"