Тестування припущення про нормальність для повторних заходів anova? (в R)


11

Отже, припускаючи, що є сенс перевірки припущення про нормальність для anova (див. 1 і 2 )

Як це можна перевірити на R?

Я би сподівався зробити щось на кшталт:

## From Venables and Ripley (2002) p.165.
utils::data(npk, package="MASS")
npk.aovE <- aov(yield ~  N*P*K + Error(block), npk)
residuals(npk.aovE)
qqnorm(residuals(npk.aov))

Що не працює, оскільки "залишки" не мають методу (ані прогнозування щодо цього) для випадку повторних заходів anova.

То що робити в цьому випадку?

Чи можна просто витягнути залишки з однієї і тієї ж моделі без терміну помилки? Я недостатньо знайомий з літературою, щоб знати, чи це дійсно чи ні, заздалегідь дякую за будь-яку пропозицію.

Відповіді:


5

Ви можете не отримати просту відповідь, residuals(npk.aovE)але це не означає, що в цьому об'єкті немає залишків. Зробіть strі подивіться, що в межах рівнів ще є залишки. Я думаю, що вас найбільше зацікавив рівень "У межах"

> residuals(npk.aovE$Within)
          7           8           9          10          11          12 
 4.68058815  2.84725482  1.56432584 -5.46900749 -1.16900749 -3.90234083 
         13          14          15          16          17          18 
 5.08903669  1.28903669  0.35570336 -3.27762998 -4.19422371  1.80577629 
         19          20          21          22          23          24 
-3.12755705  0.03910962  2.60396981  1.13730314  2.77063648  4.63730314 

Моя власна підготовка та практика не полягала в тому, щоб використовувати тестування на нормальність, а не використовувати графіки QQ та паралельне тестування з надійними методами.


Дякую, Двін. Цікаво, кого з різних залишків слід дослідити (крім одного в межах). Ура, Тал
Тал Галілі

npk.aovE - це список з трьох елементів. Перші два - це оцінка параметрів, і нормальність для них не передбачається, тому не здавалося б доцільним тестувати нічого, крім $ Internal. names(npk.aovE)повертає `[1]" (Перехоплення) "" блок "" В межах "`
DWin

@Dwin, ти міг би перевірити останній підхід, який опублікував трев (остання відповідь)? Він використовує свого роду проекцію для обчислення залишків. Для мене це найпростіший підхід, щоб побудувати графік з однорідністю різновидів між групами.
toto_tico

@Dwin, також qqplot, здається, приймає лише lm, а не aov.
toto_tico

2

Іншим варіантом буде використання lmeфункції nlmeпакета (а потім передача отриманої моделі anova). Ви можете використовувати residualsйого вихід.


1

Я думаю, що припущення про нормальність можна оцінити для кожного з повторних заходів, перш ніж проводити аналіз. Я б переробив кадр даних так, щоб кожен стовпець відповідав повторному виміру, а потім виконав shapiro.test для кожного з цих стовпців.

apply(cast(melt(npk,measure.vars="yield"), ...~N+P+K)[-c(1:2)],2,function(x) shapiro.test(x)$p.value)

Дякую gd047 - питання, що ми робимо, коли у нас є складніший сценарій aov (вихід ~ N P K + помилка (блок / (N + K)), npk), чи не тест, який ви пропонуєте зробити роботу?
Тал Галілі

Чи будете ви люб'язно пояснити різницю між сценаріями? На жаль, я недостатньо знайомий із використанням терміна помилки в моделі (до речі, чи можете ви запропонувати гарну книгу про це?). Щойно я запропонував - це спосіб перевірки припущення про нормальність SPSS, як я його вивчив. Дивіться це як приклад goo.gl/p45Bx
Джордж Донтас

Привіт, gd047. Дякую за посилання Те, що я знаю про ці моделі, пов'язане звідси: r-statistics.com/2010/04/… Якщо ви познайомитесь з іншими ресурсами - я хотів би дізнатися про них. Ура, Тал
Тал Галілі

1

Венеблес та Ріплі пояснюють, як робити діагностику залишків для проекту повторних заходів пізніше у своїй книзі (стор. 284), у розділі про випадкові та змішані ефекти.

Функція залишків (або залишок) реалізована для результатів aov для кожного прошарку:

з їх прикладу: oats.aov <- aov(Y ~ N + V + Error(B/V), data=oats, qr=T)

Щоб отримати встановлені значення або залишки:

"Таким чином, fitted(oats.aov[[4]])і resid(oats.aov[[4]])є вектори довжиною 54, що представляють відповідні значення та залишки останнього прошарку."

Що важливо, вони додають:

"Неможливо пов'язати їх однозначно із сюжетами оригінального експерименту."

Для діагностики вони використовують проекцію:

plot(fitted(oats.aov[[4]]), studres(oats.aov[[4]]))
abline(h=0, lty=2)
oats.pr <- proj(oats.aov)
qqnorm(oats.pr[[4]][, "Residuals"], ylab = "Stratum 4 residuals")
qqline(oats.pr[[4]][, "Residuals"])

Вони також показують, що модель можна зробити за допомогою lme, як розмістив інший користувач.


відповідно до цього воно повинно бути [[3]], а не [[4]]. Я перевірив це, і він просто працює для [[3]]
toto_tico

1

Ось два варіанти, з aov і з lme (я думаю, що 2-й є кращим):

require(MASS) ## for oats data set
require(nlme) ## for lme()
require(multcomp) ## for multiple comparison stuff

Aov.mod <- aov(Y ~ N * V + Error(B/V), data = oats)
the_residuals <- aov.out.pr[[3]][, "Residuals"]

Lme.mod <- lme(Y ~ N * V, random = ~1 | B/V, data = oats)
the_residuals <- residuals(Lme.mod)

Оригінальний приклад вийшов без взаємодії ( Lme.mod <- lme(Y ~ N * V, random = ~1 | B/V, data = oats)), але, здається, працює з ним (і дає різні результати, тому щось робить).

І це все...

але для повноти:

1 - Підсумки моделі

summary(Aov.mod)
anova(Lme.mod)

2 - Тест Тукі з повторними заходами anova (3 години на це шукаю !!).

summary(Lme.mod)
summary(glht(Lme.mod, linfct=mcp(V="Tukey")))

3 - Графіки нормальності та гомоскедастичності

par(mfrow=c(1,2)) #add room for the rotated labels
aov.out.pr <- proj(aov.mod)                                            
#oats$resi <- aov.out.pr[[3]][, "Residuals"]
oats$resi <- residuals(Lme.mod)
qqnorm(oats$resi, main="Normal Q-Q") # A quantile normal plot - good for checking normality
qqline(oats$resi)
boxplot(resi ~ interaction(N,V), main="Homoscedasticity", 
        xlab = "Code Categories", ylab = "Residuals", border = "white", 
        data=oats)
points(resi ~ interaction(N,V), pch = 1, 
       main="Homoscedasticity",  data=oats)

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.