我有两个来自全基因组关联研究的数据集。唯一可用的信息是每个基因分型 SNP 的奇数比及其置信区间 (95%)。我想生成一个比较这两个优势比的森林图,但我找不到计算组合置信区间以可视化汇总效果的方法。我使用程序PLINK使用固定效应执行荟萃分析,但程序没有显示这些置信区间。
- 如何计算这样的置信区间?
可用的数据是:
- 每项研究的奇数比,
- 95% 置信区间和
- 标准错误。
我有两个来自全基因组关联研究的数据集。唯一可用的信息是每个基因分型 SNP 的奇数比及其置信区间 (95%)。我想生成一个比较这两个优势比的森林图,但我找不到计算组合置信区间以可视化汇总效果的方法。我使用程序PLINK使用固定效应执行荟萃分析,但程序没有显示这些置信区间。
可用的数据是:
在优势比的大多数荟萃分析中,标准误差基于对数优势比。那么,您是否碰巧知道您的是如何估算的(以及它们反映的指标是什么?或)?鉴于基于,则可以轻松计算合并标准误差(在固定效应模型下)。首先,让我们计算每个效应大小的权重:。其次,合并标准误差是。此外,让是共同效应(固定效应模型)。然后,("pooled") 95% 置信区间为。
更新
由于 BIBB 友好地提供了数据,我能够在 R 中运行“完整”元分析。
library(meta)
or <- c(0.75, 0.85)
se <- c(0.0937, 0.1029)
logor <- log(or)
(or.fem <- metagen(logor, se, sm = "OR"))
> (or.fem <- metagen(logor, se, sm = "OR"))
OR 95%-CI %W(fixed) %W(random)
1 0.75 [0.6242; 0.9012] 54.67 54.67
2 0.85 [0.6948; 1.0399] 45.33 45.33
Number of trials combined: 2
OR 95%-CI z p.value
Fixed effect model 0.7938 [0.693; 0.9092] -3.3335 0.0009
Random effects model 0.7938 [0.693; 0.9092] -3.3335 0.0009
Quantifying heterogeneity:
tau^2 < 0.0001; H = 1; I^2 = 0%
Test of heterogeneity:
Q d.f. p.value
0.81 1 0.3685
Method: Inverse variance method
参考
实际上,您可以使用专门为 GWA 环境中的元分析设计的METAL等软件。
plink 没有给出置信区间很尴尬。但是,您可以获得 CI,因为您有最终的 OR(取)和值(因此是)以获得固定效果。
Bernd 的方法更加精确。
请注意,我会更担心效果方向,因为看起来您只有每项研究的摘要统计数据,但无法确定哪个是 OR 等位基因。除非你知道它是在同一个等位基因上完成的。
基督教
这是一条评论(没有足够的代表点数)。如果您知道每项研究中的样本量(#cases 和 #controls)以及 SNP 的优势比,您可以通过 a/b(其中 a 和 b 是两个等位基因)重建 2x2 病例/对照表两项研究中的每一项。然后,您可以将这些计数相加以获得元研究表,并使用它来计算组合的优势比和置信区间。
以下是在 PLINK 中获取用于元分析的 CI 的代码:
getCI = function(mn1, se1, method){
remov = c(0, NA)
mn = mn1[! mn1 %in% remov]
se = se1[! mn1 %in% remov]
vars <- se^2
vwts <- 1/vars
fixedsumm <- sum(vwts * mn)/sum(vwts)
Q <- sum(((mn - fixedsumm)^2)/vars)
df <- length(mn) - 1
tau2 <- max(0, (Q - df)/(sum(vwts) - sum(vwts^2)/sum(vwts)) )
if (method == "fixed"){ wt <- 1/vars } else { wt <- 1/(vars + tau2) }
summ <- sum(wt * mn)/sum(wt)
if (method == "fixed")
varsum <- sum(wt * wt * vars)/(sum(wt)^2)
else varsum <- sum(wt * wt * (vars + tau2))/(sum(wt)^2)
summtest <- summ/sqrt(varsum)
df <- length(vars) - 1
se.summary <- sqrt(varsum)
pval = 1 - pchisq(summtest^2,1)
pvalhet = 1 - pchisq(Q, df)
L95 = summ - 1.96*se.summary
U95 = summ + 1.96*se.summary
# out = c(round(c(summ,L95,U95),2), format(pval,scientific=TRUE), pvalhet)
# c("OR","L95","U95","p","ph")
# return(out)
out = c(paste(round(summ,3), ' [', round(L95,3), ', ', round(U95,3), ']', sep=""),
format(pval, scientific=TRUE), round(pvalhet,3))
# c("OR","L95","U95","p","ph")
return(out)
}
调用 R 函数:
getCI(log(plinkORs), plinkSEs)