如何计算优势比的 SE

机器算法验证 标准错误 优势比
2022-04-13 20:24:46

如果使用 a、b、c 和 d 计数计算优势比,我相信 log(OR) 的方差由下式给出

var_log_OR = (1/a + 1/b + 1/c + 1/d)

因此,可以如下计算 OR 的 95% 置信区间:

SE_log_OR = sqrt(var_log_OR)

CI_lower_log_OR = log(OR) - 1.96*SE_log_OR
CI_upper_log_OR = log(OR) + 1.96*SE_log_OR

CI_lower_OR = exp(CI_lower_log_OR)
CI_upper_OR = exp(CI_upper_log_OR)

但是我们如何计算 OR 的 SE 呢?

3个回答

@FrankHarrell 是正确的,优势比的标准误差是一个有问题的数字,因为您可以通过在相应的对数(优势比)尺度上进行测试来做得更好,因为对数(优势比)的抽样分布更有可能为正态分布。

尽管如此,优势比的标准误差确实存在,即使它没有那么有用。一种可能的估计是使用delta 方法从对数的标准误差(优势比)移动到优势比的标准误差的近似值。

(1/a+1/b+1/c+1/d)×a×db×c

OR 不是计算 SE 的有效量,因为它不能具有对称分布。对其应用 +/- SE 可能会导致负 OR。

为什么不计算 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) 先验或任何您想要的。