Wie werden Konfidenzintervalle für gepoolte ungerade Verhältnisse in der Metaanalyse berechnet?


9

Ich habe zwei Datensätze aus genomweiten Assoziationsstudien. Die einzigen verfügbaren Informationen sind die ungeraden Verhältnisse und ihre Konfidenzintervalle (95%) für jedes genotypisierte SNP. Ich möchte ein Walddiagramm erstellen, in dem diese beiden Quotenverhältnisse verglichen werden, aber ich kann die kombinierten Konfidenzintervalle nicht berechnen, um die Zusammenfassungseffekte zu visualisieren. Ich habe das Programm PLINK verwendet , um die Metaanalyse mit festen Effekten durchzuführen, aber das Programm hat diese Konfidenzintervalle nicht angezeigt .

  • Wie kann ich solche Konfidenzintervalle berechnen?

Die verfügbaren Daten sind:

  • Ungerade Verhältnisse für jede Studie,
  • 95% Konfidenzintervalle und
  • Standardfehler.

Antworten:


10

seilog(ORi)seiORlog(OR)seilog(ORi)wi=1sei2seFEM=1wlog(ORFEM)log(ORFEM)±1.96seFEM

Aktualisieren

Da das BIBB die Daten freundlicherweise zur Verfügung gestellt hat, kann ich die 'vollständige' Metaanalyse in R durchführen.

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

Verweise

Siehe z. B. Lipsey / Wilson (2001: 114)


Vielen Dank für ihre Antwort. Die Standardfehler basieren auf dem natürlichen Log des OR Ln (ORi). Zuerst berechne ich die Gewichte für SE1 (0,0937) = 10,67 und für SE2 (0,1029) = 9,71. Die unter FEM berechnete SE beträgt also = 0,2215. Der gepoolte OR für diese SNPs beträgt = 0,7645, sodass die 95% -Konfidenzintervalle = (0,515-1,228) sind. Bin ich richtig? Wenn ja, mache ich mir Sorgen, denn wenn ich alle Ergebnisse in Waldparzellen vergleiche, sind die kombinierten Intervalle im Vergleich zu den Originalen in jeder Studie zu groß = Studie 1 = 95% CI (0,63-0,91) ODER = 0,75, Studie 2 95% CI (0,69-1,04) OR = 0,85. Es ist alles in Ordnung?. Vielen Dank
BIBB

w1/(se2)1/se

Vielen Dank !!!, dieses Ergebnis ist konsistenter als meins. Das gepoolte ODER, das ich Ihnen gebe, war in der PLINK-Ausgabe ... jetzt bin ich sehr besorgt über alle meine Metaanalyseergebnisse ... Ich sollte besser R.
BIBB

Ich habe einen Link zum Lipsey / Wilson-Buch "Practical Meta-Analysis" eingefügt (siehe Referenzen). Ich mache mir ein bisschen Sorgen, dass PLINKs und meine Ergebnisse unterschiedlich sind. Wissen Sie, welche Metaanalysemethode sie verwenden? Sie sollten auch berücksichtigen, dass ich absolut keine Ahnung von "genomweiten Assoziationsstudien" habe.
Bernd Weiss

Vielen Dank für die Lösung. Ich frage mich, ob ich die Metaanalysemethode auf mein Problem anwenden kann. Was ich tue, ist eine Regression zu simulieren, indem ich etwas Rauschen induziere. Ich führe die Analyse n-mal durch (sagen wir, n ist 500) und erhalte n ORs und CI. Hier ist der Link zur Frage: stats.stackexchange.com/questions/206042/… . Kann ich also die Metagen-Funktion implementieren, die jedes Protokoll ORs und Standardfehler aufruft? Ist Voreingenommenheit mit größeren Werten vonn
Luke

3

Tatsächlich könnten Sie Software wie METAL verwenden, die speziell für Metaanalysen im GWA-Kontext entwickelt wurde.

log(OR)pz

Bernds Methode ist noch präziser.

Beachten Sie, dass ich mir mehr Sorgen um die Effektrichtung machen würde, da Sie anscheinend nur zusammenfassende Statistiken für jede Studie haben, aber nichts, um sicher zu sein, welches das OP-Allel ist. Es sei denn, Sie wissen, dass es auf demselben Allel durchgeführt wird.

Christian


0

Dies ist ein Kommentar (nicht genügend Wiederholungspunkte). Wenn Sie die Stichprobengröße (#cases und #controls) in jeder Studie und das Odds Ratio für einen SNP kennen, können Sie die 2x2-Tabelle von Fall / Kontrolle durch a / b (wobei a und b die beiden Allele sind) für rekonstruieren jede der beiden Studien. Dann können Sie einfach diese Zählungen hinzufügen, um eine Tabelle für die Metastudie zu erhalten, und diese verwenden, um das kombinierte Quotenverhältnis und die Konfidenzintervalle zu berechnen.


Vielen Dank für Ihre Antwort. Leider habe ich keine Allelfrequenzen oder -zählungen, die Autoren haben diese Daten nicht angezeigt, sie haben nur die SNP-ID-, OR- und Konfidenzintervalle (95%) angegeben. Ich habe gerade den SE-Wert aus jeder Studie extrahiert, aber ich kann sie jetzt nicht kombinieren (SE oder CI) !!!! Hilfe!!
BIBB

Oh, Sie haben Recht - hier ist ein weiterer Freiheitsgrad erforderlich. Normalerweise geben die Autoren das Allel freq. (manchmal in Supp. Info begraben.). Wenn nicht, finden Sie es möglicherweise aus einer externen Quelle wie hapmap (vorausgesetzt, das GWAS wurde an einer ähnlichen Population durchgeführt). Eine andere Idee: Das Konfidenzintervall selbst kann Ihnen die Allelfrequenz anzeigen. Wenn alles andere gleich ist (Probengröße und OR), sind SNPs mit niedriger Allelfrequenz. haben weniger Träger in beiden Gruppen, daher ein breiteres Konfidenzintervall. Sie können verschiedene Allelfrequenzen ausprobieren, das Konfidenzintervall für jede berechnen und die Allelfrequenz erhalten. passend zu dem, was gemeldet wurde
oder Zuk

Ich werde versuchen, das zu tun, aber in der Zwischenzeit bin ich gespannt, wie PLINK das gepoolte ODER nur mit den folgenden Parametern berechnen kann: SNP-Identifikator, OR-Quotenverhältnis (oder BETA usw.) und SE-Standardfehler von OR (oder Benutzer-) definiertes Gewichtsfeld). Sie können erkennen, dass PLINK nicht nach Allelfrequenzen gefragt hat ... also gibt es eine Möglichkeit, dies durchzuführen ...
BIBB

0

Hier ist Code zum Abrufen von CIs für die Metaanalyse wie in PLINK:

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-Funktion aufrufen:

getCI(log(plinkORs), plinkSEs)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.