为什么不计算 OR 的后验分布的标准差,而不是标准误差?您可以使用 MCMC 采样器非常轻松地对其进行数值求解。
这是一些 R 和 JAGS 代码。
################################################################
### ###
### Contingency Table Analysis for Obestity Data ###
### ###
################################################################
# Required Pacakges
library("ggplot2")
library("runjags")
library("parallel") # sets parallelization for MCMC
# set up the model
mod = 'model {
################################################
### Greater than 80th BMI Percentile ###
################################################
# marginal likelihood functions
n11_G ~ dbin(pi_one_G, n1_plus_G)
n21_G ~ dbin(pi_two_G, n2_plus_G)
#priors
pi_one_G ~ dbeta(1,1)
pi_two_G ~ dbeta(1,1)
# transformations
rho_G <- pi_two_G/pi_one_G
theta_G <- pi_two_G*(1-pi_one_G)/(pi_one_G*(1-pi_two_G))
delta_G <- pi_two_G-pi_one_G
}'
# set up the data
Dat = list(n1_plus_G = 108,
n2_plus_G = 88,
n11_G = 68,
n21_G = 44)
# Monitor these variables
Vars = c("pi_one_G","pi_two_G","rho_G","theta_G","delta_G")
# set up MCMC parameters
inits1=list(.RNG.name= "base::Wichmann-Hill",
.RNG.seed= 12341)
inits2=list(.RNG.name= "base::Marsaglia-Multicarry",
.RNG.seed= 12342)
inits3=list(.RNG.name= "base::Super-Duper",
.RNG.seed= 12343)
inits4=list(.RNG.name= "base::Mersenne-Twister",
.RNG.seed= 12344)
chains = 4
burn = 5000
samp = 10000
adapt = 5000
thin = 1
# parallel chains
cl = makeCluster(4)
# MCMC estimation
HjagsOut = run.jags(model = mod, monitor = Vars, data=Dat, n.chains=chains, thin = thin,
burnin = burn, sample = samp, adapt=adapt, method="rjparallel",method.options=list(cl=cl),
inits=list(inits1,inits2,inits3,inits4))
#summarize results
summary(HjagsOut)
plot(HjagsOut, layout=c(4,2))
优势比参数 ( ) 只是来自二项式参数的样本的函数。这当然假设了某些研究设计。在这种情况下,我正在研究儿童 BMI 百分位组(第 80 位及以上或低于 80 位)与对照组和实验组、干预前后的差异。因此,行总数(分别为实验组和对照组的儿童数)是固定的。θG
beta(1,1) 先验等效于 Uniform(0,1) 先验,可以轻松更改为 Jeffreys 的 beta(0.5,0.5) 先验或任何您想要的。