У меня есть набор данных 482 наблюдений.
data=Populationfull
Я собираюсь сделать анализ ассоциации генотипа для 3 SNP. Я пытаюсь построить модель для моего анализа, и я использую AOV (у ~ х, данные = ...). Для одной черты у меня есть несколько фиксированных эффектов и ковариат, которые я включил в модель, например так:
Starts <- aov(Starts~Sex+DMRT3+Birthyear+Country+Earnings+Voltsec+Autosec, data=Populationfull) summary(Starts) Df Sum Sq Mean Sq F value Pr(>F) Sex 3 17.90 5.97 42.844 < 2e-16 *** DMRT3 2 1.14 0.57 4.110 0.017 * Birthyear 9 5.59 0.62 4.461 1.26e-05 *** Country 1 11.28 11.28 81.005 < 2e-16 *** Earnings 1 109.01 109.01 782.838 < 2e-16 *** Voltsec 1 12.27 12.27 88.086 < 2e-16 *** Autosec 1 8.97 8.97 64.443 8.27e-15 *** Residuals 463 64.48 0.14 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Я обнаружил, что если я изменил порядок переменных в модели, я получил разные значения p, см. Ниже.
Starts2 <- aov(Starts~Voltsec+Autosec+Sex+DMRT3+Birthyear+Country+Earnings, data=Populationfull) summary(Starts2) Df Sum Sq Mean Sq F value Pr(>F) Voltsec 1 2.18 2.18 15.627 8.92e-05 *** Autosec 1 100.60 100.60 722.443 < 2e-16 *** Sex 3 10.43 3.48 24.962 5.50e-15 *** DMRT3 2 0.82 0.41 2.957 0.05294 . Birthyear 9 3.25 0.36 2.591 0.00638 ** Country 1 2.25 2.25 16.183 6.72e-05 *** Earnings 1 46.64 46.64 334.903 < 2e-16 *** Residuals 463 64.48 0.14 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Почему я получаю разные p-значения в зависимости от того, в каком порядке кодируются переменные / факторы / ковариаты / фиксированные эффекты (?)? Есть ли способ «исправить» это? Может быть, я использую не ту модель? Я все еще новичок в R, поэтому, если вы можете помочь мне с этим, пожалуйста, сделайте это по-настоящему простым, чтобы я мог понять ответ, хе-хе ... Спасибо, надеюсь, кто-то может помочь мне понять это!
Populationfull
чтобы сделать вашу проблему воспроизводимой . Этого не происходит с примером соaov()
страницы справки.summary(aov(yield ~ block + N + P + K, npk)); summary(aov(yield ~ K + P + block + N , npk))
Earnings 1 109.01 109.01 782.838 < 2e-16 ***
ваш второй запускEarnings 1 46.64 46.64 334.903 < 2e-16 ***
. Ваши результаты не совпадают. Начните с проверки, чтобы убедиться, что вы сделали не только переупорядочивание переменных.car
изучить пакет - он реализует ANOVA типа II и типа III, которые не зависят от порядка переменных, в то времяaov
как ANOVA типа I.Ответы:
Проблема возникает из-за способа
aov()
проверки значимости по умолчанию. Он использует так называемый анализ ANOVA «Тип I», в котором тестирование выполняется в том порядке, в котором переменные указаны в вашей модели. Таким образом, в первом примере он определяет, насколько дисперсия объясняется,sex
и проверяет ее значимость, затем какая часть оставшейся дисперсии объясняетсяDMRT3
и проверяет ее значимость в терминах этой оставшейся дисперсии и так далее. Во втором примере,DMRT3
только после того, как оцениваетсяVoltsec
,Autosec
иsex
, в таком порядке, так что остальные меньше дисперсииDMRT3
для объяснения.Если две прогнозирующие переменные коррелируют, то первая, введенная в модель, получит полный «кредит», оставляя меньше различий, чтобы «объясняться» второй, что, таким образом, может показаться менее «статистически значимым», чем первая, даже если это нет, функционально. Этот вопрос и ответ на него объясняют различные типы анализов ANOVA.
Один из способов обойти это - извлечь себя из ограничений классического ANOVA и использовать простую линейную модель с
lm()
R вместоaov()
. Это эффективно анализирует все предикторы параллельно, «исправляя» все предикторы одновременно. В этом случае два коррелированных предиктора могут в конечном итоге иметь большие стандартные ошибки своих оценочных коэффициентов регрессии, и их коэффициенты могут отличаться в разных выборках из совокупности, но, по крайней мере, порядок ввода переменных в спецификацию модели не будет иметь значения.Если ваша переменная ответа является неким типом переменной подсчета, как следует из ее названия
Starts
, то вам, вероятно, не следует использовать ANOVA в любом случае, так как остатки вряд ли будут нормально распределены, как того требует интерпретация p- значения. Переменные счетчика лучше обрабатываются с помощью обобщенных линейных моделей (например,glm()
в R), которые можно рассматривать как обобщениеlm()
для других типов структур остаточных ошибок.источник