Исправление значений p для нескольких тестов, где тесты коррелированы (генетика)


24

У меня есть p значений из многих тестов, и я хотел бы знать, есть ли на самом деле что-то существенное после исправления для множественного тестирования. Сложность: мои тесты не являются независимыми. Метод, о котором я думаю (вариант метода продукта Фишера, Зайкин и др., Genet Epidemiol , 2002), нуждается в корреляции между значениями p.

Чтобы оценить эту корреляцию, я сейчас думаю о случаях начальной загрузки, проведении анализа и корреляции результирующих векторов значений p. У кого-нибудь есть идея получше? Или даже лучшая идея для моей первоначальной проблемы (исправление для многократного тестирования в связанных тестах)?

Справочная информация: Я логистически регрессирую, страдают ли мои пациенты от определенного заболевания из-за взаимодействия между их генотипом (AA, Aa или AA) и ковариатой. Тем не менее, генотип на самом деле много (30-250) одиночных нуклеотидных полиморфизмов (SNP), которые, конечно, не являются независимыми, но в неравновесном сцеплении.

Ответы:


29

Это действительно горячая тема в аналитических исследованиях Genomewide (GWAS)! Я не уверен, что метод, о котором вы думаете, является наиболее подходящим в этом контексте. Пул p-значений был описан некоторыми авторами, но в другом контексте (исследования репликации или мета-анализ, см., Например, (1) для недавнего обзора). Комбинирование p-значений SNP по методу Фишера обычно используется, когда требуется получить уникальное p-значение для данного гена; это позволяет работать на уровне генов и уменьшать размерность последующего тестирования, но, как вы сказали, отсутствие независимости между маркерами (возникающими в результате пространственной колокации или дисбаланса сцепления, LD) вносит смещение. Более мощные альтернативы полагаются на процедуры повторной выборки,

Моя основная проблема с начальной загрузкой (с заменой) заключается в том, что вы вводите искусственную форму родства, или, другими словами, вы создаете виртуальных близнецов, что приводит к изменению равновесия Харди-Вайнберга (но также минимальной частоты аллелей и скорости вызовов). Это не относится к перестановочному подходу, когда вы переставляете отдельные метки и сохраняете данные генотипирования как есть. Обычно программное обеспечение plink может выдавать вам необработанные и переставленные p-значения, хотя оно использует (по умолчанию) стратегию адаптивного тестирования со скользящим окном, которое позволяет прекратить выполнение всех перестановок (скажем, 1000 на SNP), если выясняется, что SNP ниже рассмотрение не "интересно"; у него также есть опция для вычисления maxT, см. онлайн-справку .

Но учитывая небольшое количество SNP, которые вы рассматриваете, я бы предложил полагаться на тесты на основе FDR или maxT, реализованные в пакете multtest R (см. mt.maxT), Но полное руководство по стратегиям повторной выборки для геномного приложения - это несколько процедур тестирования с приложениями к Genomics , от Dudoit & van der Laan (Springer, 2008). Смотрите также книгу Андреа Фулкса о генетике с R , которая рецензируется в JSS. У нее отличный материал по нескольким процедурам тестирования.

Дальнейшие заметки

Многие авторы указывали на тот факт, что простые методы коррекции множественного тестирования, такие как Bonferroni или Sidak, слишком строги для корректировки результатов для отдельных SNP. Кроме того, ни один из этих методов не принимает во внимание корреляцию, которая существует между SNP из-за LD, который маркирует генетическое изменение между областями гена. Были предложены другие альтернативы, такие как производная от метода Холма для множественного сравнения (3), скрытая марковская модель (4), условная или положительная FDR (5) или ее производная (6), чтобы назвать несколько. Так называемая статистика разрывов или скользящее окно в некоторых случаях оказались успешными, но вы найдете хороший обзор в (7) и (8).

Я также слышал о методах, которые эффективно используют структуру гаплотипов или LD, например (9), но я никогда не использовал их. Однако они скорее связаны с оценкой корреляции между маркерами, а не с p-значением, которое вы имели в виду. Но на самом деле, вы могли бы лучше подумать с точки зрения структуры зависимостей между последовательными тестовыми статистиками, чем между коррелированными p-значениями.

Ссылки

  1. Кантор Р.М., Ланге К и Синшеймер Дж.С. Приоритетность результатов GWAS: обзор статистических методов и рекомендаций по их применению . Am J Hum Genet. 2010 86 (1): 6–22.
  2. Corley, RP, Zeiger, JS, Crowley, T et al. Ассоциация генов кандидатов с антисоциальной лекарственной зависимостью у подростков . Зависимость от наркотиков и алкоголя 2008 96: 90–98.
  3. Dalmasso, C, Génin, E and Trégouet DA. Взвешенная процедура учета всех частот в исследованиях геномной ассоциации . Генетика 2008 180 (1): 697–702.
  4. Вей, З., Сун, В., Ван, К. и Хаконарсон, Х. Множественное тестирование в исследованиях ассоциаций по всему геному с помощью скрытых марковских моделей . Биоинформатика 2009 25 (21): 2802-2808.
  5. Броберг П. Сравнительный обзор оценок доли неизмененных генов и частоты ложных открытий . BMC Bioinformatics 2005 6: 199.
  6. Нужно, AC, Ge, D, Weale, ME, и др. Геномное исследование SNP и CNV при шизофрении . PLoS Genet. 2009 5 (2): e1000373.
  7. Хан Б., Кан Г.М., Эскин Э. Быстрая и точная множественная проверка коррекции и оценки мощности для миллионов коррелированных маркеров . PLoS Genetics 2009
  8. Лян, Y и Келемен, A. Статистические достижения и проблемы для анализа коррелированных многомерных данных snp в геномном исследовании сложных заболеваний . Статистические обзоры 2008 2: 43–60. - лучший недавний обзор
  9. Nyholt, DR. Простая поправка для многократного тестирования для однонуклеотидных полиморфизмов в неравновесном сцеплении друг с другом . Am J Hum Genet. 2004 74 (4): 765–769.
  10. Никодим К.К., Лю В., Чейз Г.А., Цай Ю.Ю. и Фаллин М.Д. Сравнение ошибки типа I для множественных тестовых исправлений в исследованиях больших однонуклеотидных полиморфизмов с использованием основных компонентов по сравнению с алгоритмами блокирования гаплотипов . BMC Genetics 2005; 6 (Приложение 1): S78.
  11. Пэн, Q, Чжао, J, и Сюэ, 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. Но я непременно покопаюсь в ссылках, которые вы предоставили!
С. Коласса - Восстановить Монику

Вы всегда можете поработать с остатками вашего GLM, чтобы прогнать свои ковариаты, хотя вы потеряли некоторое значение Df, которое потом будет трудно учесть или повторно ввести (например, для вычисления p-значения).
ЧЛ

Хм, остатки от моей логистической регрессии? Это было бы законно?
С. Коласса - Восстановить Монику

Да, почему бы и нет? Нередко удаляют дисперсию, учитываемую другими ковариатами, а затем переходят к анализу 2-го уровня с вашими остаточными данными. Часто это происходит быстрее (например, plink довольно медленно работает с категориальными ковариатами, в то время как это нормально для непрерывных ковриков, snpMatrixили просто glm()работает намного лучше в этом вопросе, но вы не можете встроить много SNP в glm()...); проблема в том, что получить исправленное значение p в конце вашего второго анализа довольно сложно (потому что вы должны учитывать уже оцененные параметры).
CHL

Для иллюстрации того, как люди работают с остатками, см., Например, стр. 466 Heck et al. Изучение 17 генов-кандидатов по личностным признакам подтверждает влияние гена HTR2A на поиск новизны. Гены, мозг и поведение (2009) том. 8 (4) , стр 464-72.
CHL

2

Использование такого метода, как bonferroni - это хорошо, проблема в том, что если у вас много тестов, вы вряд ли найдете много «открытий».

Вы можете использовать подход FDR для зависимых тестов ( подробности см. Здесь ), проблема в том, что я не уверен, что вы можете сказать заранее, если все ваши корреляции положительные.

В R вы можете сделать простой FDR с p.adjust. Для более сложных вещей я бы посмотрел на multcomp , но я не прошел через это, чтобы найти решения в случаях зависимостей.

Удачи.


1
Привет Тал, спасибо! Бонферрони не кажется мне подходящим - если один из моих SNP является причинно-следственным, и другие связаны с ним, должен быть сигнал, и Бонферрони всегда выглядел слишком консервативным для меня (я обычно предпочитаю пошаговую коррекцию Холма). FDR, на который вы ссылаетесь, и p.adjust не рассматривают комбинированные доказательства (а FDR по-прежнему требует от меня понимания корреляции моих тестов, первоначального вопроса). multcomp может помочь, хотя на первый взгляд кажется, что он больше работает с несколькими тестами в рамках одной модели, тогда как у меня есть несколько моделей. Я буду копать глубже ...
С. Коласса - Восстановить Монику

Привет Стефан. Я понимаю, извините, что не помогаю больше. Удачи! Тал
Тал Галили

Здравствуйте, Стефан, я все еще думаю, что вы все еще можете использовать метод = BY (для процедуры Бенджамини Хохберга Йекутели) в p.adjust в R, как указано Tal. Определенно, использование Бонферрони может быть консервативным.
Suncoolsu

Suncoolsu, я думаю, что этот метод работает только тогда, когда корреляция между переменными положительная (не отрицательная). Приветствия.
Тал Галили

2

Я думаю, что многовариантные нормальные модели используются для моделирования коррелированных значений p и для получения правильного типа множественных тестовых поправок. Быстрая и точная множественная проверка коррекции и оценки мощности для миллионов коррелированных маркеров. PLoS Genet 2009 рассказывает о них, а также дает другие ссылки. Это звучит похоже на то, о чем вы говорили, но я думаю, что помимо получения более точной глобальной коррекции p-значения, знание структуры LD также следует использовать для удаления ложных срабатываний, возникающих из маркеров, связанных с причинными маркерами.


2

Я ищу рабочее решение точно такой же проблемы. Лучшее, что я нашел - это Null Unrestricted Bootstrap, представленный Foulkes Andrea в его книге « Прикладная статистическая генетика с R» (2009) . В отличие от всех других статей и книг, он рассматривает именно регрессии. Помимо других методов он советует использовать 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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.