校正与测试相关的多个测试的p值(遗传)


24

我从很多测试中获得了p值,并且想知道在对多个测试进行校正后是否确实存在一些重要的东西。并发症:我的测试不是独立的。我正在考虑的方法(Fisher's Product Method的一个变体,Zaykin等,Genet Epidemiol,2002)需要p值之间的相关性。

为了估计这种相关性,我目前正在考虑引导情况,运行分析并使p值的结果向量相关联。有谁有更好的主意吗?甚至对我的原始问题有一个更好的主意(更正相关测试中的多个测试)?

背景:我正在逻辑上回归我的受试者是否因其基因型(AA,Aa或aa)与协变量之间的相互作用而患有某种疾病。但是,该基因型实际上是很多(30-250)单核苷酸多态性(SNP),它们肯定不是独立的,而是连锁不平衡。

Answers:


29

这实际上是全基因组分析研究(GWAS)中的热门话题!在这种情况下,我不确定您正在考虑的方法是否最合适。一些作者描述了p值的合并,但是在不同的情况下(复制研究或荟萃分析,例如,(1)为近期评论)。当需要为给定基因推导唯一的p值时,通常使用Fisher方法将SNP p值组合在一起。这样可以在基因水平上工作,并减少后续测试的维数,但是正如您所说的,标记之间的非独立性(由于空间共置或连锁不平衡而产生)会产生偏差。更强大的替代方法依赖于重采样程序,

我对引导(替换)的主要担心是,您正在引入一种人工形式的相关性,换句话说,您将创建虚拟双胞胎,从而改变了Hardy-Weinberg平衡(但也最小化了等位基因频率和检出率)。对于置换方法,情况并非如此,在置换方法中,您置换单个标签并保持基因分型数据不变。通常,plink软件可以为您提供原始的和排列的p值,尽管它(默认情况下)使用带有滑动窗口的自适应测试策略,如果看起来SNP低于该值,则该窗口允许停止运行所有排列(每个SNP为1000)考虑不是“有趣的”;它还具有用于计算maxT的选项,请参见在线帮助

但是,鉴于您正在考虑的SNP数量少,我建议您使用multtest R程序包中实现的基于FDR或maxT的测试(请参阅参考资料mt.maxT),但是针对基因组应用的重采样策略的权威指南是“将多个测试程序与基因组学,Dudoit&van der Laan(施普林格,2008年)。另请参阅JSS中对Andrea Foulkes撰写的有关R的遗传学的书。她在多种测试程序方面拥有丰富的材料。

进一步说明

许多作者指出了这样一个事实,即简单的多重测试校正方法(例如Bonferroni或Sidak)过于严格,无法调整单个SNP的结果。而且,这两种方法都没有考虑到由于LD标记跨基因区域的遗传变异而在SNP之间存在的相关性。提出了其他替代方法,例如用于多重比较的Holm方法的导数(3),隐马尔可夫模型(4),条件或正FDR(5)或其导数(6),仅举几例。在某些情况下,所谓的间隙统计或滑动窗口已被证明是成功的,但是您会在(7)和(8)中找到很好的评论。

我也听说过有效利用单倍型结构或LD的方法,例如(9),但我从未使用过。但是,它们似乎与估计标记之间的相关性更相关,而不是像您想的那样是p值。但是实际上,您可能最好考虑连续测试统计数据之间的依存关系,而不是相关的p值之间的依存关系。

参考文献

  1. RM的Cantor,K的Lange和JS的Sinsheimer。优先考虑GWAS结果:统计方法及其应用建议的回顾。我是J Hum Genet。2010 86(1):6-22。
  2. Corley,RP,Zeiger,JS,Crowley,T等。协会候选基因与青少年反社会药物依赖。药物和酒精依赖性2008 96:90-98。
  3. 达拉马索(C.),盖宁(Génin),E和TrégouetDA。全基因组关联研究中等位基因频率的加权Holm程序。遗传学,2008 180(1):697-702。
  4. Wei,Z,Sun,W,Wang,K和Hakonarson,H . 通过隐马尔可夫模型进行的基因组范围关联研究中的多重检验。Bioinformatics 2009 25(21):2802-2808。
  5. Broberg,P .对未改变基因比例和错误发现率的估计的比较综述。BMC生物信息学2005 6:199。
  6. Need,AC,Ge,D,Weale,ME等。精神分裂症中SNP和CNV的全基因组研究。PLoS基因。2009 5(2):e1000373。
  7. Han,B,Kang,HM和Eskin,E .数百万个相关标记的快速准确的多重测试校正和功效估计。公共科学图书馆遗传学2009
  8. Liang,Y和Kelemen,A . 复杂疾病的基因组研究中分析相关高维snp数据的统计进展和挑战。2008年统计调查2:43-60。-有史以来最好的评论
  9. Nyholt,DR。相互连锁不平衡中单核苷酸多态性多重测试的简单校正。我是J Hum Genet。2004 74(4):765-769。
  10. Nicodemus,KK,Liu,W,Chase,GA,Tsai,YY,and Fallin,MD。使用主成分与单倍型封闭算法在大型单核苷酸多态性研究中进行多次测试校正的I型错误比较。BMC Genetics 2005;6(补充1):S78。
  11. Peng,Q,Zhao,J和Xue,F. 基于PCA的自举置信区间测试涉及多个SNP的基因-疾病关联。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-恢复莫妮卡

尽管丢失了一些Df,但以后很难解释或重新引入(例如,用于计算p值),但您始终可以使用GLM的残差来获得协变量的乘积。
chl 2010年

嗯,逻辑回归的残差?那是合法的吗?
S. Kolassa-恢复莫妮卡

是的,为什么不?删除其他协变量所占的方差,然后使用残差数据进行第二级分析是很常见的。它通常会更快(例如,对于分类协变量,plink相当慢,而对于连续协变量则可以;snpMatrix或者glm()在这一点上执行起来相当好,但是您不能在其中嵌入很多SNP glm())。问题在于,在第二次分析结束时获得校正的p值非常棘手(因为您必须考虑已经估算的参数)。
chl

有关人们如何处理残差的说明,请参见例如p。Heck等人的466。对17种人格特质候选基因的研究证实了HTR2A基因对新奇寻求的影响。基因,大脑与行为(2009)卷。8(4)第464-72页
chl

2

使用诸如bonferroni之类的方法很好,问题是,如果您进行了许多测试,则您不太可能会发现许多“发现”。

您可以使用FDR方法进行相关测试(有关详细信息,请参见此处),问题是我不确定如果您的相关性都是正相关的话,您是否可以提前说。

在R中,您可以使用p.adjust做简单的FDR。对于更复杂的事情,我将看一下multcomp,但是我没有遍历它来寻找依赖情况下的解决方案。

祝好运。


1
嗨,塔尔,谢谢!Bonferroni似乎不适合我-如果我的一个SNP 因果关系,而其他SNP 与之相关,则应该有一个信号,并且Bonferroni一直对我来说过于保守(我通常更喜欢Holm的逐步校正)。您链接并调整的FDR不会考虑合并的证据(FDR仍然需要我了解测试的相关性,即原始问题)。multcomp可能会有帮助,虽然乍一看好像它涉及内多与多个测试单一模式,而我有多个型号。我会更深入...
S. Kolassa-恢复莫妮卡2010年

你好斯蒂芬。我了解,很抱歉无法提供更多帮助。祝好运!Tal
Tal Galili

您好,斯蒂芬,我仍然认为您仍然可以按照Tal的指示在R.p.just中使用method = BY(对于Benjamini Hochberg Yekuteli Procedure)。当然,使用Bonferroni可以很保守。
suncoolsu

suncoolsu,我认为仅当变量之间的相关为正(而非负)时,此方法才有效。干杯。
Tal Galili 2010年


2

我正在寻找一个完全相同的问题的解决方案。我发现的最好的东西是Foulkes Andrea在他的《应用统计遗传学与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临界。α=0.05 ^ T T临界。T^Tcrit.α=0.05T^Tcrit.

如果第个模型组件的,我们将报告第个模型组件的重要性^ T i > T 暴击。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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.