การแก้ไขค่า p สำหรับการทดสอบหลายครั้งที่การทดสอบมีความสัมพันธ์กัน (พันธุศาสตร์)


24

ฉันมีค่า p จากการทดสอบจำนวนมากและต้องการทราบว่ามีสิ่งที่สำคัญจริง ๆ หลังจากแก้ไขสำหรับการทดสอบหลายครั้ง ภาวะแทรกซ้อน: การทดสอบของฉันไม่ขึ้นกับใคร วิธีที่ฉันคิด (แตกต่างจากวิธีผลิตภัณฑ์ของฟิชเชอร์, Zaykin และคณะ, Genet Epidemiol , 2002) ต้องการความสัมพันธ์ระหว่างค่า p

เพื่อที่จะประมาณค่าสหสัมพันธ์นี้ขณะนี้ฉันกำลังคิดถึงกรณี bootstrapping ทำการวิเคราะห์และสหสัมพันธ์ผลเวกเตอร์ของค่า p ใครบ้างมีความคิดที่ดีกว่า หรือแม้แต่ความคิดที่ดีกว่าสำหรับปัญหาดั้งเดิมของฉัน (แก้ไขการทดสอบหลายรายการในการทดสอบที่เกี่ยวข้อง)

ความเป็นมา: ฉันกำลังถดถอยอยู่หรือไม่ว่าประชากรของฉันกำลังทุกข์ทรมานจากโรคใดโรคหนึ่งโดยเฉพาะในการมีปฏิสัมพันธ์ระหว่างจีโนไทป์ของพวกเขา (AA, Aa หรือ aa) และ covariate อย่างไรก็ตามจีโนไทป์นั้นมีจำนวนมาก (30-250) ของ Single Nucleotide Polymorphisms (SNPs) ซึ่งแน่นอนว่าไม่เป็นอิสระ แต่อยู่ใน Linkage Disequilibrium

คำตอบ:


29

นี่เป็นหัวข้อที่น่าสนใจในการศึกษาวิเคราะห์ Genomewide (GWAS)! ฉันไม่แน่ใจว่าวิธีการที่คุณคิดว่าเหมาะสมที่สุดในบริบทนี้คืออะไร การรวมกลุ่มของค่า p ถูกอธิบายโดยผู้เขียนบางคน แต่ในบริบทที่แตกต่างกัน (การศึกษาการจำลองแบบหรือการวิเคราะห์เมตาดูเช่น (1) สำหรับการตรวจสอบล่าสุด) การรวม SNP p-values ​​โดยวิธีของฟิชเชอร์มักใช้เมื่อต้องการได้ค่า p-value ที่ไม่ซ้ำกันสำหรับยีนที่กำหนด สิ่งนี้ช่วยให้สามารถทำงานในระดับยีนและลดปริมาณมิติข้อมูลของการทดสอบที่ตามมา แต่ในขณะที่คุณกล่าวว่าการไม่เป็นอิสระระหว่างเครื่องหมาย (เกิดจากการวางตำแหน่งเชิงพื้นที่ ทางเลือกที่มีประสิทธิภาพมากขึ้นต้องอาศัยขั้นตอนการสุ่มตัวอย่างใหม่

ข้อกังวลหลักของฉันเกี่ยวกับ bootstraping (ที่มีการแทนที่) อาจเป็นได้ว่าคุณกำลังแนะนำรูปแบบที่เกี่ยวข้องหรือในคำอื่น ๆ ที่คุณสร้างฝาแฝดเสมือนดังนั้นการเปลี่ยนแปลงสมดุล Hardy-Weinberg (แต่ยังความถี่อัลลีลขั้นต่ำและอัตราการโทร) นี่จะไม่ใช่กรณีที่มีวิธีการเปลี่ยนรูปแบบที่คุณเปลี่ยนแปลงฉลากแต่ละรายการและเก็บข้อมูลจีโนไทป์ตามที่เป็นอยู่ โดยทั่วไปซอฟต์แวร์plinkสามารถให้ค่า p และค่า raw แก่คุณแม้ว่าจะใช้ (โดยค่าเริ่มต้น) กลยุทธ์การทดสอบแบบปรับกับหน้าต่างบานเลื่อนที่ช่วยให้หยุดการทำงานของพีชคณิตทั้งหมด (พูด 1,000 ต่อ SNP) หากปรากฏว่า SNP ภายใต้ การพิจารณาไม่ใช่ "น่าสนใจ" ก็ยังมีตัวเลือกสำหรับการคำนวณ maxT ดูที่ความช่วยเหลือออนไลน์

แต่ได้รับจำนวนต่ำของ SNPs คุณกำลังพิจารณาผมจะขอแนะนำให้อาศัย FDR หรือ maxT ทดสอบเป็นดำเนินการในmulttestแพคเกจ R (ดูmt.maxT) แต่แนวทางที่ชัดเจนในการ resampling กลยุทธ์สำหรับการประยุกต์ใช้จีโนมเป็นขั้นตอนการทดสอบหลายด้วยการประยุกต์ใช้ในการ ฟังก์ชั่นจาก Dudoit & van der Laan (Springer, 2008) ดูหนังสือ Andrea Foulkes เกี่ยวกับพันธุศาสตร์ด้วย Rซึ่งได้รับการตรวจสอบใน JSS เธอมีเนื้อหาที่ยอดเยี่ยมในการทดสอบหลายขั้นตอน

หมายเหตุเพิ่มเติม

ผู้เขียนหลายคนชี้ให้เห็นถึงความจริงที่ว่าวิธีการแก้ไขการทดสอบหลายอย่างง่าย ๆ เช่น Bonferroni หรือ Sidak นั้นเข้มงวดเกินไปสำหรับการปรับผลลัพธ์สำหรับ SNP แต่ละตัว ยิ่งไปกว่านั้นวิธีการเหล่านี้ไม่ได้คำนึงถึงความสัมพันธ์ที่มีอยู่ระหว่าง SNPs เนื่องจาก LD ซึ่งแท็กการเปลี่ยนแปลงทางพันธุกรรมทั่วภูมิภาคของยีน ทางเลือกอื่นมีผึ้งที่เสนอเช่นวิธีอนุพันธ์ของ Holm สำหรับการเปรียบเทียบหลายแบบ (3), Hidden Markov Model (4), FDR แบบมีเงื่อนไขหรือเชิงบวก (5) หรืออนุพันธ์ของมัน (6) เพื่อชื่อไม่กี่ สถิติช่องว่างที่เรียกว่าหรือหน้าต่างบานเลื่อนได้รับการพิสูจน์แล้วว่าประสบความสำเร็จในบางกรณี แต่คุณจะพบการตรวจสอบที่ดีใน (7) และ (8)

ฉันเคยได้ยินถึงวิธีการที่ใช้โครงสร้าง haplotype หรือ LD อย่างมีประสิทธิภาพเช่น (9) แต่ฉันไม่เคยใช้เลย อย่างไรก็ตามพวกเขาดูเหมือนจะเกี่ยวข้องกับการประเมินความสัมพันธ์ระหว่างเครื่องหมายมากกว่าค่า p ตามที่คุณต้องการ แต่ในความเป็นจริงคุณอาจคิดว่าในแง่ของโครงสร้างการพึ่งพาระหว่างสถิติการทดสอบต่อเนื่องดีกว่าระหว่างค่า p ที่สัมพันธ์กัน

อ้างอิง

  1. คันทอร์, RM, Lange, K และ Sinsheimer, JS ผลการจัดลำดับความสำคัญ GWAS: ทบทวนวิธีการทางสถิติและข้อเสนอแนะสำหรับการประยุกต์ใช้ของพวกเขา Am J Hum Genet 2010 86 (1): 6–22
  2. Corley, RP, Zeiger, JS, Crowley, T และคณะ สมาคมยีนที่มีการพึ่งพายาเสพติดในวัยรุ่นต่อต้านสังคม การติดยาและแอลกอฮอล์ในปี 2008 96: 90–98
  3. Dalmasso, C, Génin, E และTrégouet DA บัญชีขั้นตอนถ่วงน้ำหนัก - โฮล์มสำหรับความถี่อัลลีลในการศึกษาสมาคมจีโนม พันธุศาสตร์ 2008 180 (1): 697–702
  4. เหว่ย, Z Sun, W, วัง, K, และHákonarsonเอชศึกษาสมาคมการทดสอบหลายในจีโนมทั้งผ่านที่ซ่อนมาร์คอฟรุ่น ชีวสารสนเทศศาสตร์ 2552 25 (21): 2802-2808
  5. Broberg, P. ทบทวนเปรียบเทียบประมาณการของสัดส่วนยีนไม่เปลี่ยนแปลงและอัตราการค้นพบที่ผิดพลาด BMC ชีวสารสนเทศศาสตร์ 2005 6: 199
  6. ต้องการ AC, Ge, D, Weale, ME, et a. จีโนมกว้างสืบสวนของ SNPs และ CNVs ในโรคจิตเภท PLoS Genet 2009 5 (2): e1000373
  7. Han, B, Kang, HM, และ Eskin, E. การแก้ไขการทดสอบหลายอย่างรวดเร็วและแม่นยำและการประมาณค่าพลังงานสำหรับเครื่องหมายหลายล้านที่สัมพันธ์กัน PLoS Genetics 2009
  8. เหลียง, Y และ Kelemen, A. สถิติความก้าวหน้าและความท้าทายสำหรับการวิเคราะห์ความสัมพันธ์ข้อมูล SNP มิติสูงในการศึกษาจีโนมสำหรับโรคที่ซับซ้อน การสำรวจสถิติ 2551 2: 43–60 - รีวิวล่าสุดที่ดีที่สุด
  9. Nyholt, DR การแก้ไขที่ง่ายสำหรับการทดสอบหลายระดับสำหรับเดี่ยวเบื่อหน่ายความหลากหลายในการเชื่อมโยงการเสียสมดุลกับแต่ละอื่น ๆ Am J Hum Genet 2004 74 (4): 765–6969
  10. Nicodemus, KK, Liu, W, Chase, GA, Tsai, YY และ Fallin, MD การเปรียบเทียบความผิดพลาดแบบสำหรับการแก้ไขการทดสอบหลายในขนาดใหญ่การศึกษาความแตกต่างเดียวเบื่อหน่ายโดยใช้องค์ประกอบหลักเมื่อเทียบกับการปิดกั้น haplotype อัลกอริทึม BMC พันธุศาสตร์ 2548; 6 (Suppl 1): S78
  11. Peng, Q, Zhao, J และ Xue, F. การทดสอบช่วงความเชื่อมั่น bootstrap ที่ใช้ PCA สำหรับการเชื่อมโยงยีนโรคที่เกี่ยวข้องกับ SNP หลายตัว BMC Genetics 2010, 11: 6
  12. Li, M, Romero, R, Fu, WJ และ Cui, Y (2010) การติดต่อการทำแผนที่ของ haplotype-haplotype กับการปรับเปลี่ยนเชือก BMC Genetics 2010, 11:79 - แม้ว่าจะไม่เกี่ยวข้องโดยตรงกับคำถาม แต่ก็ครอบคลุมการวิเคราะห์ที่ใช้ haplotype / เอฟเฟ็กต์ epistatic

1
ว้าวขอบคุณมากสำหรับปัญหานี้! ฉันเข้าใจความสามารถของคุณเกี่ยวกับการบูตสแตรปและฉันเกือบจะมั่นใจ ฉันคิดว่าอาการแทรกซ้อนที่สำคัญของฉันคือ covariate ที่เป็นตัวเลขที่ฉันมีซึ่งจำเป็นอย่างแน่นอน (ไม่ว่าจะด้วยตัวเองหรือในการมีปฏิสัมพันธ์กับจีโนไทป์) และดูเหมือนว่าจะแยกแยะ mt.maxT และ plink แม้ว่าฉันอาจต้องมองอีกครั้ง แต่แน่นอนฉันจะขุดผ่านการอ้างอิงที่คุณให้!
S. Kolassa - Reinstate Monica

คุณสามารถทำงานกับส่วนที่เหลือของ GLM ของคุณเพื่อขับรถโควาเรียของคุณแม้ว่าคุณจะสูญเสีย Df บางอย่างซึ่งจะเป็นการยากที่จะอธิบายหรือนำกลับมาใช้ใหม่ในภายหลัง (เช่นสำหรับคำนวณค่า p)
chl

หืมเหลือจากการถดถอยโลจิสติกของฉัน? นั่นจะถูกต้องตามกฎหมายหรือไม่
S. Kolassa - Reinstate Monica

ใช่ทำไมล่ะ ไม่ใช่เรื่องผิดปกติที่จะลบความแปรปรวนที่ covariates คิดไว้แล้วย้ายไปยังการวิเคราะห์ระดับที่สองด้วยข้อมูลที่เหลือของคุณ มันมักจะเร็วกว่า (ตัวอย่างเช่นการ plink ค่อนข้างช้ากับ covariates ที่เป็นหมวดหมู่ในขณะที่ใช้ได้กับต่อเนื่องsnpMatrixหรือเพียงแค่glm()ทำงานได้ดีขึ้นในจุดนี้ แต่คุณไม่สามารถฝัง SNP จำนวนมากภายในglm()... ); ปัญหาคือการได้รับ p-value ที่ถูกต้องเมื่อสิ้นสุดการวิเคราะห์ครั้งที่ 2 นั้นค่อนข้างยุ่งยาก (เพราะคุณต้องคำนึงถึงพารามิเตอร์ที่ประมาณไว้แล้ว)
chl

สำหรับภาพประกอบว่าผู้คนทำงานกับคนตกค้างได้อย่างไรให้ดูตัวอย่างที่ p 466 ของ Heck และคณะ การตรวจสอบยีนผู้สมัคร 17 คนสำหรับลักษณะบุคลิกภาพยืนยันผลของยีน HTR2A ในการค้นหาสิ่งแปลกใหม่ ฉบับ, สมอง, และพฤติกรรม (2009) ฉบับที่ 8 (4) pp. 464-72
chl

2

การใช้วิธีการอย่าง bonferroni นั้นใช้ได้ปัญหาคือถ้าคุณมีการทดสอบมากมายคุณไม่น่าจะพบ "การค้นพบ" มากมาย

คุณสามารถใช้วิธีการ FDR สำหรับการทดสอบตามลำดับ (ดูรายละเอียดที่นี่ ) ปัญหาคือฉันไม่แน่ใจว่าคุณสามารถพูดตรงๆได้หรือไม่ถ้าความสัมพันธ์ของคุณเป็นสิ่งที่ดีทั้งหมด

ใน R คุณสามารถทำ FDR ง่าย ๆ ด้วย p.adjust สำหรับสิ่งที่ซับซ้อนมากขึ้นฉันจะดูที่multcompแต่ฉันไม่ได้ผ่านมันเพื่อดูวิธีแก้ไขในกรณีที่พึ่งพา

โชคดี.


1
สวัสดี Tal ขอบคุณ! Bonferroni ดูเหมือนจะไม่เหมาะกับฉัน - หากหนึ่งใน SNP ของฉันเป็นสาเหตุและอื่น ๆ ที่เกี่ยวข้องกับมันควรมีสัญญาณและ Bonferroni มักจะดูอนุรักษ์นิยมเกินไปสำหรับฉัน (ฉันมักชอบแก้ไขแบบขั้นตอนของโฮล์ม) FDR ที่คุณเชื่อมโยงไปยังและ p.adjust ไม่พิจารณาหลักฐานรวม (และ FDR ยังต้องการให้ฉันเข้าใจความสัมพันธ์ของการทดสอบของฉันคำถามเดิม) Multcomp อาจช่วยได้ แต่ในครั้งแรกดูเหมือนว่ามันจะเกี่ยวข้องกับการทดสอบหลายอย่างในรุ่นเดียวในขณะที่ฉันมีหลายรุ่น ฉันจะขุดลึกลงไป ...
เอส. Kolassa - Reinstate Monica

สวัสดีสเตฟาน ฉันเข้าใจขอโทษที่ไม่ช่วยอะไรอีก โชคดี! Tal
Tal Galili

สวัสดีสเตฟานฉันยังคิดว่าคุณยังคงสามารถใช้วิธี = BY (สำหรับกระบวนการ Benjamini Hochberg Yekuteli) ใน p.adjust ใน R ตามที่ Tal แนะนำ แน่นอนการใช้ Bonferroni สามารถอนุรักษ์
suncoolsu

suncoolsu ฉันคิดว่าวิธีนี้ใช้ได้เฉพาะเมื่อความสัมพันธ์เป็นค่าบวก (ไม่ใช่ค่าลบ) ระหว่างตัวแปร ไชโย
Tal Galili

2

ฉันคิดว่า Multivariate Normal Models กำลังถูกใช้เพื่อจำลองค่า p ที่สัมพันธ์กันและเพื่อให้ได้การแก้ไขการทดสอบที่หลากหลาย การแก้ไขการทดสอบที่หลากหลายอย่างรวดเร็วและแม่นยำและการประมาณค่าพลังงานสำหรับเครื่องหมายที่สัมพันธ์กันหลายล้านรายการ PLoS Genet 2009พูดถึงพวกเขาและยังให้การอ้างอิงอื่น ๆ ฟังดูคล้ายกับสิ่งที่คุณพูดถึง แต่ฉันคิดว่านอกเหนือจากการแก้ไข p-value ทั่วโลกที่แม่นยำยิ่งขึ้นความรู้โครงสร้าง LD ควรใช้เพื่อลบผลบวกปลอมที่เกิดจากเครื่องหมายที่มีความสัมพันธ์กับเครื่องหมายที่เป็นสาเหตุ


2

ฉันกำลังมองหาวิธีแก้ปัญหาการทำงานสำหรับปัญหาเดียวกันทั้งหมด ผมพบว่าดีที่สุดคือNull ไม่ จำกัด เงินทุนที่นำโดยโฟล์คส์เอนเดรียในหนังสือของเขาประยุกต์สถิติพันธุศาสตร์กับ R (2009) ตรงกันข้ามกับบทความและหนังสืออื่น ๆ ทั้งหมดที่เขาเห็นว่าเป็นการถดถอยโดยเฉพาะ นอกจากวิธีการอื่น ๆ แล้วเขายังแนะนำให้ 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
+    }
+ }

TestStatBootT^Tcrit.α=0.05T^Tcrit.

iTi^>Tcrit.

ขั้นตอนสุดท้ายสามารถทำได้ด้วยรหัสนี้

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.