使用JAGS

时间:2017-12-11 17:30:37

标签: regression bayesian

我对这个话题非常陌生/在讨论区发帖,所以如果不清楚,我会提前道歉。

我有兴趣在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

1 个答案:

答案 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):

O’Hara, R.B. & Sillanpää, M.J. (2009). A review of Bayesian variable selection methods: What, how and which. Bayesian Anal., 4, 85–118

或者此博文:https://darrenjw.wordpress.com/2012/11/20/getting-started-with-bayesian-variable-selection-using-jags-and-rjags/

如果之前的测试版没有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) 
}"