Comment calculer les intervalles de confiance pour les ratios impairs regroupés dans la méta-analyse?


9

J'ai deux ensembles de données provenant d'études d'association à l'échelle du génome. Les seules informations disponibles sont les rapports impairs et leurs intervalles de confiance (95%) pour chaque SNP génotypé. Je veux générer un graphique forestier comparant ces deux rapports de cotes, mais je ne trouve pas le moyen de calculer les intervalles de confiance combinés pour visualiser les effets récapitulatifs. J'ai utilisé le programme PLINK pour effectuer la méta-analyse en utilisant des effets fixes, mais le programme n'a pas montré ces intervalles de confiance.

  • Comment puis-je calculer de tels intervalles de confiance?

Les données disponibles sont:

  • Rapports impairs pour chaque étude,
  • Intervalles de confiance à 95% et
  • Erreurs standard.

Réponses:


10

Dans la plupart des méta-analyses des rapports de cotes, les erreurs standard sont basées sur le journal des rapports de cotes . Alors, savez-vous par hasard comment vos ont été estimés (et quelle métrique ils reflètent? ou )? Étant donné que les sont basés sur , l'erreur standard groupée (sous un modèle à effet fixe) peut être facilement calculée. Commençons par calculer les poids pour chaque taille d'effet: . Deuxièmement, l'erreur standard regroupée est . En outre, laissez-vousseilog(ORi)seiORlog(OR)seilog(ORi)wi=1sei2 log(ORFEM)log(ORFEM)±1,96seFEMseFEM=1wlog(ORFEM)être l'effet commun (modèle à effet fixe). Ensuite, l'intervalle de confiance ("groupé") à 95% est .log(ORFEM)±1.96seFEM

Mise à jour

Étant donné que BIBB a aimablement fourni les données, je suis en mesure d'exécuter la méta-analyse «complète» dans 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

Références

Voir, par exemple, Lipsey / Wilson (2001: 114)


Merci beaucoup pour votre réponse. Les erros standard sont basés sur le Log naturel de l'OR Ln (ORi). Je calcule d'abord les poids pour SE1 (0,0937) = 10,67 et pour SE2 (0,1029) = 9,71. Donc, le SE calculé sous FEM est = 0,2215. L'OR regroupé pour ces SNP est = 0,7645, donc les intervalles de confiance à 95% sont = (0,515-1,228). Suis-je correct ??, si je le fais, je suis inquiet parce que lorsque je compare tous les résultats dans un graphique Forest, les intervalles combinés sont trop grands par rapport aux originaux de chaque étude = étude 1 = IC à 95% (0,63-0,91) OU = 0,75, étude 2 IC à 95% (0,69-1,04) OU = 0,85. Tout va bien?. Merci
BIBB

Non, malheureusement non. Veuillez noter que ma formule pour était erronée, c'est pas . Comme vous pouvez le voir, l'IC à 95% «groupé» est de [0,693; 0,9092]. Je me demande également pourquoi votre RO groupé est différent (0,7645 contre 0,7938). Désolé, je dois y aller mais j'y reviens demain ...1 / ( s e 2 ) 1 / s ew1/(se2)1/se
Bernd Weiss

Merci beaucoup !!!, ce résultat est plus cohérent que le mien. L'OR regroupé que je vous donne était dans la sortie PLINK ... maintenant je suis très préoccupé par tous mes résultats de méta-analyse ... Je ferais mieux d'utiliser R.
BIBB

J'ai inclus un lien vers le livre de Lipsey / Wilson "Méta-analyse pratique" (voir Références). Je suis un peu inquiet que PLINK et mes résultats diffèrent. Savez-vous quelle méthodologie de méta-analyse ils utilisent? Vous devez également tenir compte du fait que je n'ai absolument aucune idée des "études d'association à l'échelle du génome".
Bernd Weiss

Merci pour la solution, je me demande si je peux appliquer la méthode de méta-analyse à mon problème. Ce que je fais, c'est simuler une régression en induisant du bruit. Je lance l'analyse n fois (disons que n est 500) et j'obtiens n OR et CI. Voici le lien vers la question: stats.stackexchange.com/questions/206042/… . Puis-je implémenter la fonction «metagen» en faisant appel à chaque OR log et std err. Est-ce que le biais est introduit avec des valeurs plus élevées den
lukeg

3

En fait, vous pourriez utiliser un logiciel comme METAL qui est spécialement conçu pour les méta-analyses dans le contexte GWA.

Il est gênant que le plink ne donne pas l'intervalle de confiance. Cependant, vous pouvez obtenir le CI car vous avez le OU final (prenez ) et la valeur (d'où le ) pour l'effet fixe.p zlog(OR)pz

La méthode de Bernd est encore plus précise.

Attention, je serais plus préoccupé par la direction de l'effet car il semble que vous n'ayez que des statistiques récapitulatives pour chaque étude mais rien pour être sûr de l'allèle OR. Sauf si vous savez que cela se fait sur le même allèle.

Christian


0

Ceci est un commentaire (ne pas avoir assez de points de rep.). Si vous connaissez la taille de l'échantillon (#cases et #controls) dans chaque étude, et le rapport de cotes pour un SNP, vous pouvez reconstruire le tableau 2x2 de cas / contrôle par a / b (où a et b sont les deux allèles) pour chacune des deux études. Ensuite, vous pouvez simplement ajouter ces chiffres pour obtenir un tableau pour la méta-étude, et l'utiliser pour calculer le rapport de cotes et les intervalles de confiance combinés.


Merci pour votre réponse. Malheureusement, je n'ai pas les fréquences ou les décomptes d'allèles, les auteurs n'ont pas montré ces données, ils ont juste mis les intervalles SNP ID, OR et Confiance (95%). Je viens d'extraire la valeur SE de chaque étude, mais je n'ai pas maintenant à les combiner (SE ou CI) !!!! Aidez-moi!!
BIBB

Oh, vous avez raison - un degré de liberté supplémentaire est nécessaire ici. Habituellement, les auteurs donnent l'allèle freq. (parfois enterré dans info suppl.). Sinon, vous pouvez le trouver à partir d'une source externe comme hapmap (en supposant que le GWAS a été fait sur une population similaire). Autre idée: l'intervalle de confiance lui-même peut vous indiquer la fréquence des allèles. Toutes choses étant égales par ailleurs (taille de l'échantillon et OR), SNP à faible fréquence d'allèle. ont moins de porteurs dans les deux groupes, d'où un intervalle de confiance plus large. Vous pouvez essayer différentes fréquences d'allèles, calculer l'intervalle de confiance pour chacune d'elles et obtenir la fréquence d'allèles. correspondant à ce qui a été signalé
Ou Zuk

J'essaierai de le faire, mais en attendant, je suis curieux de savoir comment PLINK peut calculer le OU groupé uniquement avec ces paramètres: identificateur SNP, OR Odds ratio (ou BETA, etc.) et erreur standard SE de OR (ou utilisateur- champ de poids défini). Vous pouvez vous rendre compte que PLINK n'a pas demandé de fréquences alléliques ... il y a donc un moyen de le faire ...
BIBB

0

Voici le code pour obtenir des CI pour la méta-analyse comme dans 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)
}

Appel de la fonction R:

getCI(log(plinkORs), plinkSEs)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.