Korrigieren von p-Werten für mehrere Tests, bei denen Tests korreliert sind (Genetik)

24

Ich habe p-Werte aus vielen Tests und möchte wissen, ob es nach der Korrektur für mehrere Tests tatsächlich etwas Bedeutendes gibt. Die Komplikation: Meine Tests sind nicht unabhängig. Die Methode, über die ich nachdenke (eine Variante von Fisher's Product Method, Zaykin et al., Genet Epidemiol , 2002), benötigt die Korrelation zwischen den p-Werten.

Um diese Korrelation abzuschätzen, denke ich derzeit über Bootstrapping-Fälle nach, führe die Analysen durch und korreliere die resultierenden Vektoren der p-Werte. Hat jemand eine bessere Idee? Oder sogar eine bessere Idee für mein ursprüngliches Problem (Korrektur für mehrere Tests in korrelierten Tests)?

Hintergrund: Ich regressiere logistisch, ob meine Probanden aufgrund der Wechselwirkung zwischen ihrem Genotyp (AA, Aa oder aa) und einer Kovariate an einer bestimmten Krankheit leiden oder nicht. Der Genotyp ist jedoch tatsächlich eine Menge (30-250) von Einzel-Nucleotid-Polymorphismen (SNPs), die sicherlich nicht unabhängig sind, sondern sich im Kopplungs-Gleichgewicht befinden.

S. Kolassa - Setzen Sie Monica wieder ein
quelle

Antworten:

29

Dies ist ein aktuelles Thema in Genomwide Analysis Studies (GWAS)! Ich bin mir nicht sicher, ob die Methode, an die Sie denken, in diesem Zusammenhang am besten geeignet ist. Das Poolen von p-Werten wurde von einigen Autoren beschrieben, jedoch in einem anderen Kontext (Replikationsstudien oder Metaanalyse, siehe z. B. (1) für eine aktuelle Übersicht). Das Kombinieren von SNP-p-Werten nach der Fisher-Methode wird im Allgemeinen verwendet, um einen eindeutigen p-Wert für ein bestimmtes Gen abzuleiten. Dies ermöglicht es, auf Genebene zu arbeiten und das Ausmaß der Dimensionalität nachfolgender Tests zu reduzieren, aber wie Sie sagten, führt die Nichtunabhängigkeit zwischen Markern (die sich aus räumlicher Colokation oder Bindungsdisiquilibrium, LD, ergibt) zu einer Verzerrung. Stärkere Alternativen basieren auf Resampling-Verfahren.

Mein Hauptanliegen beim Bootstraping (mit Ersatz) wäre, dass Sie eine künstliche Form der Verwandtschaft einführen oder mit anderen Worten virtuelle Zwillinge erzeugen, wodurch das Hardy-Weinberg-Gleichgewicht (aber auch die minimale Allelfrequenz und Anrufrate) verändert wird. Dies wäre bei einem Permutationsansatz nicht der Fall, bei dem Sie einzelne Labels permutieren und die Genotypisierungsdaten unverändert lassen. Normalerweise kann die Plink- Software rohe und permutierte p-Werte liefern, obwohl sie (standardmäßig) eine adaptive Teststrategie mit einem Schiebefenster verwendet, mit der die Ausführung aller Permutationen (z. B. 1000 pro SNP) gestoppt werden kann, wenn sich das SNP darunter befindet Überlegung ist nicht "interessant"; Es gibt auch die Möglichkeit, maxT zu berechnen. Weitere Informationen finden Sie in der Online-Hilfe .

Aber angesichts der geringen Zahl von SNPs Sie erwägen, würde ich auf FDR-basierten oder MAXT Tests wie in der Umsetzung empfiehlt unter Berufung multtest R - Paket (siehe mt.maxT), aber die definitive Leitfaden für Strategien Resampling für genomische Anwendung ist Multiple Testverfahren mit Anwendungen zu Genomics von Dudoit & van der Laan (Springer, 2008). Siehe auch Andrea Foulkes 'Buch über Genetik mit R , das in der JSS besprochen wird. Sie hat großartiges Material zu verschiedenen Testverfahren.

Weitere Hinweise

Viele Autoren haben darauf hingewiesen, dass einfache Mehrfachtest-Korrekturmethoden wie Bonferroni oder Sidak zu streng sind, um die Ergebnisse für die einzelnen SNPs anzupassen. Darüber hinaus berücksichtigt keine dieser Methoden die Korrelation zwischen SNPs aufgrund von LD, die die genetische Variation über Genregionen hinweg markiert. Andere Alternativen wurden vorgeschlagen, wie eine Ableitung der Holmschen Methode für Mehrfachvergleiche (3), das Hidden-Markov-Modell (4), das bedingte oder positive FDR (5) oder eine Ableitung davon (6), um nur einige zu nennen. Sogenannte Gap Statistics oder Sliding Window haben sich in einigen Fällen als erfolgreich erwiesen, aber in (7) und (8) finden Sie eine gute Übersicht.

Ich habe auch von Methoden gehört, die die Haplotypstruktur oder LD effektiv nutzen, zB (9), aber ich habe sie nie verwendet. Sie scheinen jedoch eher mit der Schätzung der Korrelation zwischen Markern zu tun zu haben, nicht mit dem von Ihnen gemeintem p-Wert. Tatsächlich sollten Sie jedoch besser an die Abhängigkeitsstruktur zwischen aufeinanderfolgenden Teststatistiken als zwischen korrelierten p-Werten denken.

Verweise

  1. Cantor, RM, Lange, K und Sinsheimer, JS. Priorisierung der GWAS-Ergebnisse: Ein Überblick über statistische Methoden und Empfehlungen für deren Anwendung . Bin J Hum Genet. 2010 86 (1): 6–22.
  2. RP Corley, JS Zeiger, T Crowley et al. Assoziation von Kandidatengenen mit antisozialer Drogenabhängigkeit bei Jugendlichen . Drogen- und Alkoholabhängigkeit 2008 96: 90–98.
  3. Dalmasso, C, Génin, E und Trégouet DA. Ein Weighted-Holm-Verfahren, das Allelfrequenzen in genomweiten Assoziationsstudien berücksichtigt . Genetics 2008 180 (1): 697–702.
  4. Wei, Z, Sun, W, Wang, K und Hakonarson, H. Multiple Tests in genomweiten Assoziationsstudien mit Hidden-Markov-Modellen . Bioinformatics 2009 25 (21): 2802 & ndash; 2808.
  5. Broberg, P. Eine vergleichende Übersicht über Schätzungen des Anteils unveränderter Gene und der Rate falscher Entdeckungen . BMC Bioinformatics 2005 6: 199.
  6. Need, AC, Ge, D, Weale, ME, et al. Eine genomweite Untersuchung von SNPs und CNVs bei Schizophrenie . PLoS Genet. 2009 5 (2): e1000373.
  7. Han, B, Kang, HM und Eskin, E. Schnelle und genaue Mehrfachprüfkorrektur und Leistungsschätzung für Millionen korrelierter Marker . PLoS Genetics 2009
  8. Liang, Y und Kelemen, A. Statistische Fortschritte und Herausforderungen bei der Analyse korrelierter hochdimensionaler snp-Daten in Genomstudien für komplexe Krankheiten . Statistische Erhebungen 2008 2: 43–60. - Die beste Rezension aller Zeiten
  9. Nyholt, DR. Eine einfache Korrektur für mehrere Tests auf Einzelnukleotidpolymorphismen im Bindungsungleichgewicht . Bin J Hum Genet. 2004 74 (4): 765–769.
  10. Nikodemus, KK, Liu, W, Chase, GA, Tsai, YY und Fallin, MD. Vergleich von Typ I-Fehlern für mehrere Testkorrekturen in großen Einzelnukleotid-Polymorphismusstudien unter Verwendung von Hauptkomponenten im Vergleich zu Haplotyp-Blockierungsalgorithmen . BMC Genetics 2005; 6 (Suppl 1): S78.
  11. Peng, Q, Zhao, J und Xue, F. PCA-basierte Bootstrap-Konfidenzintervalltests für Gen-Krankheits-Assoziationen mit mehreren SNPs . BMC Genetics 2010, 11: 6
  12. Li, M, Romero, R, Fu, WJ und Cui, Y (2010). Abbildung von Haplotyp-Haplotyp-Wechselwirkungen mit adaptivem LASSO . BMC Genetics 2010, 11:79 - obwohl nicht direkt mit der Frage verbunden, deckt es die Haplotyp-basierte Analyse / den epistatischen Effekt ab
chl
quelle
1
Wow, danke, dass du dir die Mühe gemacht hast! Ich verstehe Ihre Bedenken in Bezug auf Bootstrapping und bin fast überzeugt. Ich denke, meine Hauptkomplikation ist die numerische Kovariate, die ich mit Sicherheit haben werde (entweder für sich oder in Wechselwirkung mit dem Genotyp), und die mt.maxT und plink auszuschließen scheint, obwohl ich mich möglicherweise erneut mit plink befassen muss. Aber ich werde die von Ihnen angegebenen Referenzen auf jeden Fall durchgehen!
S. Kolassa - Wiedereinsetzung von Monica
Sie können immer mit den Residuen Ihres GLM arbeiten, um die Kovariaten zu beseitigen, obwohl Sie einige Df verloren haben, die schwer zu erklären oder später wieder einzuführen sind (z. B. für die Berechnung des p-Werts).
chl
Hm, Reste aus meiner logistischen Regression? Wäre das legitim?
S. Kolassa - Wiedereinsetzung von Monica
Ja, warum nicht? Es ist nicht ungewöhnlich, die von anderen Kovariaten berücksichtigte Varianz zu entfernen und dann mit Ihren Residuendaten die Analyse der 2. Ebene fortzusetzen. Es ist oft schneller (zum Beispiel ist das Plinken bei kategorialen Kovariaten ziemlich langsam, während es bei kontinuierlichen Kovariaten in Ordnung ist; snpMatrixoder glm()es ist in diesem Punkt einfach besser, aber Sie können nicht viele SNPs in glm()... einbetten ). Das Problem ist, dass es ziemlich schwierig ist, den korrigierten p-Wert am Ende Ihrer zweiten Analyse zu erhalten (weil Sie die bereits geschätzten Parameter berücksichtigen müssen).
chl
Ein Beispiel dafür, wie Personen mit Residuen arbeiten, finden Sie auf S. 32. 466 von Heck et al. Die Untersuchung von 17 Kandidatengenen auf Persönlichkeitsmerkmale bestätigt die Auswirkungen des HTR2A-Gens auf die Suche nach Neuheiten. Gene, Gehirn und Verhalten (2009) vol. 8 (4) S. 464-72
Chl
2

Die Verwendung einer Methode wie bonferroni ist in Ordnung. Das Problem ist, dass Sie bei vielen Tests wahrscheinlich nicht viele "Entdeckungen" finden.

Sie können sich für abhängige Tests an den FDR-Ansatz halten ( Einzelheiten finden Sie hier ). Das Problem ist, dass ich nicht sicher bin, ob Sie im Voraus sagen können, ob Ihre Korrelationen alle positiv sind.

In R können Sie mit p.adjust einen einfachen FDR durchführen. Für komplexere Dinge würde ich mir multcomp anschauen , aber ich habe es nicht durchgesehen, um nach Lösungen für Fälle von Abhängigkeiten zu suchen .

Viel Glück.

Tal Galili
quelle
1
Hallo Tal, danke! Bonferroni nicht angemessen scheint mir - wenn einer meiner SNPs ist kausal und andere sind mit ihm verbunden ist , gibt ein Signal sein sollte, und Bonferroni hat immer zu konservativ sieht mir (ich in der Regel Holm schrittweise Korrektur bevorzugen). Der FDR, auf den Sie verlinken, und p.adjust berücksichtigen keine kombinierten Beweise (und der FDR verlangt immer noch, dass ich die Korrelation meiner Tests verstehe, die ursprüngliche Frage). multcomp kann helfen, obwohl es auf den ersten Blick so aussieht, als würde es sich eher um mehrere Tests innerhalb eines einzelnen Modells handeln, während ich mehrere Modelle habe. Ich werde tiefer graben ...
S. Kolassa - Monica
Hallo Stephan. Ich verstehe, tut mir leid, dass ich nicht mehr geholfen habe. Viel Glück! Tal
Tal Galili
Hallo Stephan, ich denke immer noch, dass du die Methode = BY (für Benjamini Hochberg Yekuteli Procedure) in p.adjust in R verwenden kannst, wie von Tal gezeigt. Auf jeden Fall kann Bonferroni konservativ sein.
Suncoolsu
suncoolsu, ich denke, dass diese Methode nur funktioniert, wenn die Korrelation zwischen den Variablen positiv (nicht negativ) ist. Prost.
Tal Galili
2

Ich denke, dass multivariate Normalmodelle verwendet werden, um die korrelierten p-Werte zu modellieren und die richtige Art von mehrfachen Testkorrekturen zu erhalten. Schnelle und genaue Korrektur mehrerer Tests und Leistungsschätzung für Millionen von korrelierten Markern. PLoS Genet 2009 spricht darüber und gibt auch andere Hinweise. Es klingt ähnlich wie das, worüber Sie gesprochen haben, aber ich denke, abgesehen von einer genaueren globalen p-Wert-Korrektur sollte das Wissen über die LD-Struktur auch verwendet werden, um falsche Positive zu entfernen, die von Markern herrühren, die mit kausalen Markern korrelieren.

grosse Bandbreite
quelle
2

Ich suche eine funktionierende Lösung für genau das gleiche Problem. Das Beste, was ich gefunden habe, ist das Null Unrestricted Bootstrap, das Foulkes Andrea in seinem Buch Applied Statistical Genetics with R (2009) vorgestellt hat . Im Gegensatz zu allen anderen Artikeln und Büchern berücksichtigt er speziell die Regressionen. Neben anderen Methoden empfiehlt er den Bootstrap Null Unrestricted, der geeignet ist, wenn man Residuen nicht einfach berechnen kann (wie in meinem Fall, wenn ich viele unabhängige Regressionen (im Grunde einfache Korrelationen) modelliere , die jeweils dieselbe Antwortvariable und einen unterschiedlichen Snip aufweisen). Ich fand, dass diese Methode auch die maxT- Methode genannt wird.

> attach(fms)
> Actn3Bin <- > data.frame(actn3_r577x!="TT",actn3_rs540874!="AA",actn3_rs1815739!="TT",actn3_1671064!="GG")
> Mod <- summary(lm(NDRM.CH~.,data=Actn3Bin))
> CoefObs <- as.vector(Mod$coefficients[-1,1]) 
> B <-1000
> TestStatBoot <- matrix(nrow=B,ncol=NSnps)
> for (i in 1:B){
+    SampID <- sample(1:Nobs,size=Nobs, replace=T)
+    Ynew <- NDRM.CH[!MissDat][SampID]
+    Xnew <- Actn3BinC[SampID,]
+    CoefBoot <- summary(lm(Ynew~.,data=Xnew))$coefficients[-1,1]
+    SEBoot <- summary(lm(Ynew~.,data=Xnew))$coefficients[-1,2]
+    if (length(CoefBoot)==length(CoefObs)){
+       TestStatBoot[i,] <- (CoefBoot-CoefObs)/SEBoot
+    }
+ }

TestStatBootT^Tkrit.α=0,05T^Tkrit.

ichTich^>Tkrit.

Der letzte Schritt kann mit diesem Code durchgeführt werden

p.value<-0.05 # The target alpha threshold
digits<-1000000
library(gtools) # for binsearch

pValueFun<-function(cj)
{
   mean(apply(abs(TestStatBoot)>cj/digits,1,sum)>=1,na.rm=T)
}
ans<-binsearch(pValueFun,c(0.5*digits,100*digits),target=p.value)
p.level<-(1-pnorm(q=ans$where[[1]]/digits))*2 #two-sided.
Adam Ryczkowski
quelle