如何在荟萃分析中计算合并奇数比的置信区间?


9

我有两个来自全基因组关联研究的数据集。唯一可用的信息是每种基因型SNP的奇数比及其置信区间(95%)。我想生成一个比较这两个比值比的森林图,但是我找不到计算组合的置信区间以可视化汇总效果的方法。我使用程序PLINK使用固定效果执行荟萃分析,但该程序未显示这些置信区间。

  • 如何计算置信区间?

可用数据为:

  • 每个研究的赔率,
  • 95%的置信区间和
  • 标准错误。

Answers:


10

在大多数比值比分析中,标准误差基于对数比值。那么,您是否偶然知道您的是如何估算的(它们反映了什么度量标准?或)?假定基于,则可以轻松计算合并的标准误差(在固定效应模型下)。首先,让我们计算每种效果大小的权重:。其次,合并的标准错误为。此外,让seilog(ORi)seiORlog(OR)seilog(ORi)wi=1sei2seFEM=1wlog(ORFEM)是共同效果(固定效果模型)。然后,(“合并的”)95%置信区间为。log(ORFEM)±1.96seFEM

更新资料

由于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

参考文献

参见,例如,Lipsey / Wilson(2001:114)


非常感谢您的回复。标准错误基于OR Ln(ORi)的自然对数。首先,我计算SE1(0.0937)= 10.67和SE2(0.1029)= 9.71的权重。因此,在FEM下计算的SE为= 0.2215。这些SNP的合并OR为= 0.7645,因此95%置信区间为=(0.515-1.228)。我是对的吗?如果可以,我很担心,因为当我比较所有森林图的结果时,与每个研究中的原始结果相比,合并间隔太大=研究1 = 95%CI(0.63-0.91)OR = 0.75,研究2 95%CI(0.69-1.04)OR = 0.85。一切还好吗?谢谢
BIBB

不,不幸的是没有。请注意,我的公式是错误的,它是而不是。如您所见,“合并”的95%CI为[0.693; 0.9092]。我也想知道为什么您的合并OR有所不同(0.7645与0.7938)。抱歉,我得走了,但我明天再来...w1/(se2)1/se
Bernd Weiss

非常感谢!!!结果比我的要一致。我给您的汇总OR在PLINK输出中...现在我非常担心我的所有荟萃分析结果...我最好使用
R。– BIBB

我包括了Lipsey / Wilson的书“实用的荟萃分析”的链接(请参阅参考资料)。我有点担心PLINK和我的结果会有所不同。您知道他们使用什么荟萃分析方法吗?您还应该考虑到,我绝对不了解“全基因组关联研究”。
Bernd Weiss

感谢您的解决方案,我想知道是否可以将meta分析方法应用于我的问题。我所做的是通过引入一些噪声来模拟回归。我运行了n次分析(例如n为500),并获得了n个OR和CI。这是问题的链接:stats.stackexchange.com/questions/206042/…。因此,我可以实现对每个日志OR和标准错误进行调用的“元数据”功能。引入了更大的偏见n
lukeg '16

3

实际上,您可以使用像METAL这样的软件,该软件是专门为GWA环境中的荟萃分析设计的。

plink没有给出置信区间是很尴尬的。但是,您可以得到CI,因为您具有最终的OR(取)和值(因此为)以获得固定效果。log(OR)pz

Bernd的方法更为精确。

请注意,我会更担心效果的方向,因为看起来每个研究只有摘要统计信息,但无法确定哪个是OR等位基因。除非您知道它是在同一等位基因上完成的。

基督教


0

这是一条评论(没有足够的代表得分)。如果您知道每项研究的样本量(#cases和#controls)以及SNP的优势比,则可以通过a / b(其中a和b是两个等位基因)来重建2x2病例/对照表。两项研究中的每一项。然后,您只需将这些计数相加即可获得元研究的表格,然后使用该表格来计算组合的比值比和置信区间。


谢谢您的回答。不幸的是,我没有等位基因频率或计数,作者没有显示这些数据,他们只是输入了SNP ID,OR和Confidence间隔(95%)。我只是从每个研究中提取SE值,但是现在不合并它们(SE或CI)!!!帮帮我!!
BIBB

哦,您是对的-这里还需要更多自由度。通常,作者给出等位基因频率。(有时隐藏在补充信息中。)。如果没有,您可能会从hapmap之类的外部来源找到它(假设GWAS是在相似人群中完成的)。另一个想法:置信区间本身可以告诉您等位基因频率。所有其他条件都相同(样本量和OR),等位基因频率低的SNP。两组中的载波都较少,因此置信区间较大。您可以尝试不同的等位基因频率,计算每一个的置信区间,并获得等位基因频率。匹配报道的内容
或Zuk

我会尝试这样做,但与此同时,我对PLINK如何仅使用以下参数来计算合并的OR感到好奇:SNP识别符,OR赔率(或BETA等)和OR的SE标准错误(或用户-定义的重量字段)。您可以意识到PLINK并没有询问等位基因频率...所以有一种方法可以执行此操作...
BIBB

0

如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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.