Почему значения p меняются по значимости при изменении порядка ковариат в модели aov?

10

У меня есть набор данных 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, поэтому, если вы можете помочь мне с этим, пожалуйста, сделайте это по-настоящему простым, чтобы я мог понять ответ, хе-хе ... Спасибо, надеюсь, кто-то может помочь мне понять это!

Rbeginner
источник
3
Пожалуйста, предоставьте некоторые примеры данных, Populationfullчтобы сделать вашу проблему воспроизводимой . Этого не происходит с примером со aov()страницы справки. summary(aov(yield ~ block + N + P + K, npk)); summary(aov(yield ~ K + P + block + N , npk))
MrFlick
Значения p меняются, потому что изменилось все поле значений. ваш первый запуск Earnings 1 109.01 109.01 782.838 < 2e-16 ***ваш второй запуск Earnings 1 46.64 46.64 334.903 < 2e-16 ***. Ваши результаты не совпадают. Начните с проверки, чтобы убедиться, что вы сделали не только переупорядочивание переменных.
1
ТАКЖЕ: во второй модели вы используете Earn, а не Earnings ... если есть две переменные с разными именами, это может быть проблемой, если это не опечатка при копировании в пространство вопросов SO.
Да, значения меняются, но почему? Я использовал одни и те же столбцы из одного и того же фрейма данных в обеих моделях («Доходы против доходов» во второй модели состоит в том, что я написал неправильно, я исправил это сейчас).
Rbeginner
1
Это происходит потому, что у вас несбалансированный дизайн. Вы найдете много помощи по этому поводу, если вы будете искать на этом форуме или просто Google "несбалансированный ANOVA в R". Я бы порекомендовал carизучить пакет - он реализует ANOVA типа II и типа III, которые не зависят от порядка переменных, в то время aovкак ANOVA типа I.
Медленный Лорис

Ответы:

15

Проблема возникает из-за способа aov()проверки значимости по умолчанию. Он использует так называемый анализ ANOVA «Тип I», в котором тестирование выполняется в том порядке, в котором переменные указаны в вашей модели. Таким образом, в первом примере он определяет, насколько дисперсия объясняется, sexи проверяет ее значимость, затем какая часть оставшейся дисперсии объясняется DMRT3и проверяет ее значимость в терминах этой оставшейся дисперсии и так далее. Во втором примере, DMRT3только после того, как оценивается Voltsec, Autosecи sex, в таком порядке, так что остальные меньше дисперсии DMRT3для объяснения.

Если две прогнозирующие переменные коррелируют, то первая, введенная в модель, получит полный «кредит», оставляя меньше различий, чтобы «объясняться» второй, что, таким образом, может показаться менее «статистически значимым», чем первая, даже если это нет, функционально. Этот вопрос и ответ на него объясняют различные типы анализов ANOVA.

Один из способов обойти это - извлечь себя из ограничений классического ANOVA и использовать простую линейную модель с lm()R вместо aov(). Это эффективно анализирует все предикторы параллельно, «исправляя» все предикторы одновременно. В этом случае два коррелированных предиктора могут в конечном итоге иметь большие стандартные ошибки своих оценочных коэффициентов регрессии, и их коэффициенты могут отличаться в разных выборках из совокупности, но, по крайней мере, порядок ввода переменных в спецификацию модели не будет иметь значения.

Если ваша переменная ответа является неким типом переменной подсчета, как следует из ее названия Starts, то вам, вероятно, не следует использовать ANOVA в любом случае, так как остатки вряд ли будут нормально распределены, как того требует интерпретация p- значения. Переменные счетчика лучше обрабатываются с помощью обобщенных линейных моделей (например, glm()в R), которые можно рассматривать как обобщение lm()для других типов структур остаточных ошибок.

магистр педагогических наук
источник