テストが相関する複数のテストのp値の修正(遺伝学)


24

私は多くのテストからp値を取得しており、複数のテストを修正した後に実際に重要なものがあるかどうかを知りたいと思っています。複雑さ:私のテストは独立していません。私が考えている方法(FisherのProduct Methodの変形、Zaykin et al。、Genet Epidemiol、2002年)では、p値間の相関が必要です。

この相関を推定するために、現在、ケースのブートストラップ、分析の実行、およびp値の結果ベクトルの相関について考えています。誰かがより良いアイデアを持っていますか?または、元の問題のより良いアイデア(相関テストでの複数のテストの修正)ですか?

背景:遺伝子型(AA、Aaまたはaa)と共変量との相互作用により、被験者が特定の病気にかかっているかどうかをロジスティックに回帰しています。ただし、遺伝子型は実際には大量(30〜250)の一塩基多型(SNP)であり、これらは確かに独立ではなく、連鎖不平衡にあります。

回答:


29

これは実際、ゲノムワイド解析研究(GWAS)のホットトピックです!あなたが考えている方法がこの文脈で最も適切かどうかはわかりません。一部の著者はp値のプーリングを説明しましたが、別の文脈で行っています(複製研究またはメタ分析。最近のレビューについては(1)などを参照してください)。フィッシャーの方法によるSNP p値の組み合わせは、通常、特定の遺伝子の一意のp値を導きたい場合に使用されます。これにより、遺伝子レベルでの作業が可能になり、その後のテストの次元数を減らすことができますが、あなたが言ったように、マーカー間の非独立性(空間コロケーションまたは連鎖不均衡、LDから生じる)はバイアスを導入します。より強力な代替手段は、リサンプリング手順に依存しています。

ブートストラップ(置換)での私の主な懸念は、人工的な形の関連性を導入すること、または言い換えると仮想双子を作成することです。したがって、ハーディワインバーグ平衡を変更します(最小対立遺伝子頻度と呼び出し率も)。これは、個々のラベルを置換し、ジェノタイピングデータをそのまま保持する置換アプローチでは当てはまりません。通常、plinkソフトウェアは生および置換されたp値を提供できますが、SNPが以下のように見える場合、すべての置換(SNPごとに1000など)の実行を停止できるスライディングウィンドウを備えた適応テスト戦略を使用します(デフォルト)考慮は「興味深い」ではありません。maxTを計算するオプションもあります。オンラインヘルプを参照してください。

しかし、検討しているSNPの数が少ないことを考えると、multtest Rパッケージで実装されているFDRベースまたはmaxTテストに依存することをお勧めします(参考文献を参照mt.maxT)が、ゲノムアプリケーションのリサンプリング戦略の決定的なガイドは、 Genomics、Dudoit&van der Laanから(Springer、2008)。JSSでレビューされているRによる遺伝学に関するAndrea Foulkesの本も参照してください。彼女は複数のテスト手順に関する素晴らしい資料を持っています。

さらなる注記

多くの著者は、BonferroniやSidakなどの単純な複数のテスト修正方法は、個々のSNPの結果を調整するには厳しすぎるという事実を指摘しています。さらに、これらの方法はいずれも、遺伝子領域全体の遺伝的変異をタグ付けするLDによるSNP間に存在する相関を考慮に入れていません。いくつか例を挙げると、多重比較のためのホルム法の微分(3)、隠れマルコフモデル(4)、条件付きまたは正のFDR(5)またはその微分(6)など、他の代替案が提案されています。いわゆるギャップ統計またはスライディングウィンドウがいくつかのケースで成功していることが証明されていますが、(7)および(8)で適切なレビューを見つけることができます。

また、ハプロタイプ構造またはLDを効果的に使用する方法、例えば(9)を聞いたことがありますが、私はそれらを決して使用しませんでした。ただし、これらは、あなたが意図したp値ではなく、マーカー間の相関の推定に関連しているようです。しかし、実際には、相関するp値間よりも、連続するテスト統計間の依存関係構造の観点から考える方が適切です。

参照資料

  1. カントール、RM、ランゲ、Kおよびジンスハイマー、JS GWAS結果の優先順位付け:統計的手法のレビューとそれらのアプリケーションの推奨事項。アムJハムジェネット。2010 86(1):6–22。
  2. Corley、RP、Zeiger、JS、Crowley、T et al。青少年における候補遺伝子と反社会的薬物依存との関連。薬物およびアルコール依存症2008 96:90–98。
  3. Dalmasso、C、Génin、E、TrégouetDA。ゲノムワイド関連研究における対立遺伝子頻度の加重ホルム手順会計。遺伝学2008 180(1):697–702。
  4. Wei、Z、Sun、W、Wang、K、およびHakonarson、H 。隠れマルコフモデルを介したゲノムワイド関連研究における複数のテスト。バイオインフォマティクス2009 25(21):2802-2808。
  5. Broberg、P. 未変化の遺伝子の割合と誤発見率の推定値の比較レビュー。BMC Bioinformatics 2005 6:199。
  6. Need、AC、Ge、D、Weale、MEなど 統合失調症におけるSNPおよびCNVのゲノムワイド調査。PLoS Genet。2009 5(2):e1000373。
  7. Han、B、Kang、HM、およびEskin、E 。数百万の相関マーカーの迅速かつ正確な複数のテスト補正および電力推定。PLoS遺伝学2009
  8. Liang、YおよびKelemen、A . 複雑な疾患のゲノム研究における相関する高次元のsnpデータを分析するための統計的進歩と課題。統計調査2008 2:43–60。-史上最高の最新レビュー
  9. ナイホルト、DR。互いに連鎖不平衡にある一塩基多型のための複数のテストのための簡単な修正。アムJハムジェネット。2004 74(4):765–769。
  10. Nicodemus、KK、Liu、W、Chase、GA、Tsai、YY、およびFallin、MD。主成分対ハプロタイプブロッキングアルゴリズムを使用した大規模な単一ヌクレオチド多型研究における複数のテスト修正のタイプIエラーの比較。BMC Genetics 2005; 6(補足1):S78。
  11. Peng、Q、Zhao、J、およびXue、F 。複数のSNPが関与する遺伝子疾患関連のPCAベースのブートストラップ信頼区間テスト。BMC Genetics 2010、11:6
  12. Li、M、Romero、R、Fu、WJ、およびCui、Y(2010)。ハプロタイプとハプロタイプの相互作用と適応LASSOのマッピング。BMC Genetics 2010、11:79-質問に直接関係はありませんが、ハプロタイプに基づく分析/エピスタシス効果をカバーしています

1
うわー、このすべてのトラブルに行ってくれてありがとう!ブートストラップについてのあなたの不安を理解しており、ほぼ確信しています。私の主な複雑さは、(それ自体または遺伝子型との相互作用で)確かに必要な数値共変量であり、それはmt.maxTとplinkを除外しているようですが、私は再びplinkを調べる必要があるかもしれません。しかし、私はあなたが提供した参考文献を確かに掘り下げます!
S. Kolassa -復活モニカ

GLMの残差を使っていつでも共変量に乗ることができますが、後で説明や再導入が困難なDfを失いました(p値の計算など)。
chl

うーん、ロジスティック回帰からの残差?それは合法でしょうか?
S. Kolassa -復活モニカ

はい、なぜですか?他の共変量によって説明された分散を削除してから、残差データを使用して第2レベルの分析に進むことは珍しくありません。多くの場合、より高速です(たとえば、カテゴリ共変量ではplinkがかなり遅くなりますが、連続共変量では問題ありません。snpMatrixまたはglm()、この点で非常に優れたパフォーマンスを発揮しますが、多くのSNPを埋め込むことはできませんglm())。問題は、2回目の分析の最後に修正されたp値を取得するのがかなり難しいことです(既に推定されたパラメーターを考慮する必要があるため)。
chl

人々が残差でどのように作業しているかの例については、例えばpをご覧ください。ヘック等の466。人格特性の17の候補遺伝子の調査により、新規性の追求に対するHTR2A遺伝子の効果が確認されました。遺伝子、脳、および行動(2009)vol。8(4)pp。464-72
chl

2

bonferroniのようなメソッドを使用するのは問題ありませんが、問題は、多くのテストがある場合、多くの「発見」を見つける可能性が低いことです。

従属テストのFDRアプローチを使用できます(詳細については、こちらを参照)。問題は、相関関係がすべて正の相関関係である場合、前もって言うことができるかどうかわかりません。

Rでは、p.adjustを使用して簡単なFDRを実行できます。より複雑なことについては、multcompを参照しますが、依存関係の場合の解決策を確認することはしませんでした。

がんばろう。


1
こんにちはタル、ありがとう!ボンフェローニは私にはふさわしくないと思われます-私のSNPの1つ因果関係があり、他のSNP それに関連している場合、シグナルがあるはずです。リンク先のFDRとp.adjustは、結合された証拠を考慮しません(FDRでは、元の質問であるテストの相関関係を理解する必要があります)。それは内に複数のテストでより多くを扱うように一見それはそうけれどもmultcompは、役立つかもしれない単一のモデル私が持っているのに対し、複数のモデルを。私は...深く掘るだろう
S. Kolassa -復活モニカ

こんにちはステファン。助かりませんでした。がんばろう!タル
タルガリリ

こんにちはステファン、まだTalが指摘したように、Rのp.adjustでmethod = BY(Benjamini Hochberg Yekuteli Procedure)を使用できると思います。間違いなく、Bonferroniの使用は保守的です。
suncoolsu

suncoolsu、この方法は変数間の相関が正(負ではない)の場合にのみ機能すると思います。乾杯。
タルGalili

2

多変量正規モデルは、相関のあるp値をモデル化し、適切なタイプの複数のテスト修正を得るために使用されていると思います。 数百万の相関マーカーの迅速かつ正確な複数のテスト補正と電力推定。PLoS Genet 2009はそれらについて語り、他の参考資料も提供します。あなたが話していたことに似ていますが、私はより正確なグローバルなp値補正を得る以外に、LD構造の知識も原因マーカーと相関するマーカーから生じる偽陽性を除去するために使用されるべきだと思います。


2

私はまったく同じ問題の実用的なソリューションを探しています。私が見つけた最高のものは、Foulkes Andreaの著書Applied Statistical Genetics with R(2009)で紹介されたNull Unrestricted Bootstrapです。他のすべての記事や書籍とは異なり、彼は特に回帰について考えています。他の方法に加えて、彼はNull Unrestricted Bootstrapを推奨しています。これは、残差を簡単に計算できない場合に適しています(私の場合のように、それぞれが同じ応答変数と異なる切り取りを持つ多くの独立した回帰(基本的に単純な相関)をモデル化する場合)。このメソッドは、maxTメソッドとも呼ばれることがわかりました

> 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
+    }
+ }

すべてのTestStatBootマトリックスを取得したら(行にブートストラップ複製があり、列にブートストラップがあります)T^ 統計情報) Tクリティカル。 私たちは正確に観察します α=0.05 より重要なのパーセント T^ 統計(より重要なのは、絶対値が Tクリティカル。)。

報告します -番目のモデルコンポーネントが重要な場合、 T^>Tクリティカル。

最後のステップはこのコードで達成できます

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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.