Чи є Шапіро – Вілк найкращим тестом на нормальність? Чому він може бути кращим, ніж інші тести, такі як Андерсон-Дарлінг?


24

Я десь з літератури читав, що тест Шапіро-Вілка вважається найкращим тестом на нормальність, оскільки для заданого рівня значущості, , ймовірність відхилення нульової гіпотези, якщо вона помилкова, вища, ніж у випадку іншої тести на нормальність.α

Чи можете ви пояснити мені, використовуючи математичні аргументи, якщо це можливо, як саме це працює порівняно з деякими іншими тестами на нормальність (скажімо, тест Андерсона – Дарлінга)?


4
Зауважимо, що потужність залежить від способу, коли нульова гіпотеза помилкова, що для загальноприйнятого тесту на придатність загального призначення може бути будь-яким із незліченних способів. Не перевіряючи, я все-таки вважаю, що кожен із загальних тестів на нормальність є найбільш потужним проти певних альтернатив.
Scortchi

5
Мабуть, не відповідь, яку ви шукаєте, але я б сказав, що найкращий тест на нормальність - це нормальний графік ймовірності, тобто квантильно-квантильний графік спостережуваних значень порівняно з нормальними квантовими. Тест Шапіро-Вілка справді часто оцінюють, але він не може точно сказати, чим ваші дані відрізняються від нормальних. Часто тест позначається несуттєвими відмінностями, оскільки вони є кваліфікованими як великі для великих розмірів вибірки, і протилежна проблема також може вас укусити.
Нік Кокс

Відповіді:


17

По-перше, загальний коментар: Зауважте, що тест Андерсона-Дарлінга призначений для повністю визначених розподілів, тоді як Шапіро-Вілк - для нормалів з будь-яким середнім значенням і дисперсією. Однак, як зазначалося у D'Agostino & Stephens [ 1 ], Андерсон-Дарлінг адаптується дуже зручно до випадку оцінки, схожого на (але швидше конвергується та модифікується способом, який простіше вирішити, ніж тест Лілліфорса для справа Колмогорова-Смірнова). Зокрема, при нормальній, n = 5 , таблицях асимптотичного значення A = A 2 ( 1 + 4[1]н=5можуть бути використані (не перевіряйте на придатність n <5).А=А2(1+4н-25н2)

Я десь з літератури читав, що тест Шапіро-Вілка вважається найкращим тестом на нормальність, оскільки для заданого рівня значущості α, ймовірність відхилення нульової гіпотези, якщо вона помилкова, вища, ніж у випадку іншої нормальності тести.

Як загальне твердження, це помилково.

Які тести на нормальність є "кращими", залежить від того, які класи альтернатив вас цікавлять. Однією з причин, яку Шапіро-Вілк користується популярністю, є те, що вона, як правило, має дуже гарну силу в широкому діапазоні корисних альтернатив. Він з'являється в багатьох дослідженнях влади, і, як правило, працює дуже добре, але це не найкраще.

Знайти альтернативи, під якими він менш потужний.

n=30uу=макс(х)-хв(х)сг(х)н=30у

Андерсон-Дарлінг (скоригований для оцінки параметрів) справляється краще при подвійній експоненції. Момент-косоокість краще справляється з деякими альтернативами перекосу.

Чи можете ви пояснити мені, використовуючи математичні аргументи, якщо це можливо, як саме це працює порівняно з деякими іншими тестами на нормальність (скажімо, тест Андерсона – Дарлінга)?

Я поясню в загальних рисах (якщо ви хочете отримати більш конкретні деталі, то найкращі ставки та деякі пізніші статті, які обговорюють їх):

Розглянемо простіший, але тісно пов'язаний з цим тест - Шапіро-Франція; це фактично функція кореляції між статистикою замовлень і очікуваною статистикою замовлень за нормальності (і як така, досить прямий показник "наскільки пряма лінія" у звичайному графіку QQ). Як я пам'ятаю, Шапіро-Вілк є більш потужним, оскільки він також враховує коваріації між статистикою порядку, створюючи найкращий лінійний оцінювач з QQ-графіку, який потім масштабується . Коли розподіл далеко не нормальний, відношення не близьке до 1.sσс

Для порівняння Андерсон-Дарлінг, як і Колмогоров-Смірнов та Крамер-фон Мізес, базується на емпіричному CDF. Зокрема, він базується на зважених відхиленнях між ECDF та теоретичним ECDF (коефіцієнт зважування для варіації робить його більш чутливим до відхилень у хвості).

Тест Шапіро і Чена (1995) (заснований на інтервалах між статистикою замовлень) часто виявляє дещо більшу силу, ніж у Шапіро-Вілка (але не завжди); вони часто виконують дуже аналогічно.[2]

-

Використовуйте Shapiro Wilk, оскільки він часто потужний, широко доступний і багато людей знайомі з ним (усуваючи необхідність детально пояснювати, що це таке, якщо ви використовуєте його в папері) - просто не використовуйте його під ілюзією, що це "найкращий тест на нормальність". Немає жодного найкращого тесту на нормальність.

[1]: D'Agostino, RB і Stephens, MA (1986)
Goodness of Fit Techniques ,
Marcel Dekker, New York.

[2]: Chen, L. and Shapiro, S. (1995)
"Альтернативний тест на нормальність, заснований на нормалізованих інтервалах".
Журнал статистичних обчислень та моделювання 53 , 269-287.


Однокласник сказав мені: "Якщо розмір зразка> 50, вам слід скористатися Колмогоровим-Смірновим". Це правильно?
kittygirl

аiσн50

Коротше кажучи, був короткий період після декількох років після 1967 року (початкова публікація праці Лілліфорса), де це, можливо, було б виправданою порадою, але не давно
Glen_b -Встановити Моніку

Коли розмір вибірки> 5000, запуск shapiro.testу R отримає помилку. sample size must be between 3 and 5000Потім, який ще тест слід використовувати?
kittygirl

1. У великій кількості ви майже завжди відхиляєте будь-яку просту модель розподілу (навіть коли це цілком підходяще наближення); може бути доцільніше зробити щось інше (чому ви перевіряєте нормальність?) 2. Це насправді не питання "слід"; немає жодної корисності тесту, яка завжди краща за будь-яку іншу. Просто буває, що Шапіро Вілк досить добре. Однак підходящою альтернативою для великого п є тест Шапіро-Франція. Якщо ви можете знайти реалізацію тесту Чен-Шапіро на великій n (якщо припустити, що це взагалі є вагомою причиною для тестування), врахуйте це.
Glen_b -Встановіть Моніку

12

Зрозуміло, що прочитане вами порівняння не включало SnowsPenultimateNormalityTest ( http://cran.r-project.org/web/packages/TeachingDemos/TeachingDemos.pdf ), оскільки воно має найвищу можливу потужність серед усіх альтернатив. Тож слід вважати "найкращим", якщо влада є єдиною увагою (зауважте, мої думки чітко упереджені, але задокументовані у посиланні / документації).

Однак я погоджуюся з коментарем Ніка Кокса, що найкращий тест - це сюжет, а не формальний тест, оскільки питання "Досить нормально" набагато важливіше, ніж "Цілком нормально". Якщо ви хочете змістовного тесту, то я б запропонував поєднати сюжет qq з методологією в цій роботі:

Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne, DF та Wickham, H. (2009) Статистичні висновки для дослідницького аналізу даних та діагностики моделі Філ. Транс. Р. Соц. A 2009 367, 4361-4383 doi: 10.1098 / rsta.2009.0120

Однією з реалізацій цього є vis.testфункція в пакеті TeachingDemos для R (той же пакет, що і SnowsPenultimateNormalityTest).


1
Я погоджуюсь з настроями, але погляд на сюжети QQ не є великим рішенням, якщо хочеться зробити багато чого з більш ніж 10-20 змінних.
Ендрю М

Ми друкуємо графіки QQ на додаток до тестів на нормальність. Вони не ексклюзивні, а додаткові інструменти.
Аксакал

2
@Andrew M Отже, чи переглядає результати 100 чи 1000 Shapiro-Wilk чи інші тести, що вам більше подобається? Не важко автоматизувати перегляд сюжетів QQ, скажімо, 25 за один раз. Часто погляду достатньо, щоб побачити (буквально) справжню проблему.
Нік Кокс

10

Я спізнююсь на вечірку, але відповім посиланням на опубліковане рецензоване дослідження. Причина, чому я не відповідаю на питання "Так / Ні", це те, що це складніше, ніж може здатися. Немає жодного тесту, який був би найпотужнішим для зразків, що надходять із будь-якого розповсюдження з або без залишків. Активні люди можуть сильно зменшити потужність одного тесту і збільшити для іншого. Деякі тестові роботи краще, коли зразок походить від симетричного розподілу тощо.

  • Генрі С. Тоуд, Тестування на нормальність , 2002 р. - Це найповніша книга з цього питання. Якби мені довелося придумати це до простої відповіді, то SW у всіх випадках не є більш потужним, ніж AD. Ось два уривки для задоволення від читання.

З розділу 7.1.5: Виходячи з потужності, вибір тесту безпосередньо пов'язаний з наявною інформацією або з припущеннями, зробленими щодо альтернативи. Чим конкретніша альтернатива, тим більш специфічним і потужнішим буде тест; це також призведе до найнадійніших рекомендацій.

і

Кс2А2

  • Ромао, Ксав'є, Раймундо Дельгадо та Анібал Коста. "Емпіричне порівняння потужностей одновимірних тестів на придатність для нормальності". Журнал статистичних обчислень та моделювання 80.5 (2010): 545-591. Це останнє опубліковане дослідження на цю тему, яку я знаю.

Дослідження стосується виконання 33 тестів на нормальність для різних розмірів вибірки, враховуючи кілька рівнів значущості та для ряду симетричних, асиметричних та модифікованих нормальних розподілів. Загальні рекомендації щодо тестування на нормальність, отримані в результаті дослідження, визначаються відповідно до характеру ненормальності

Якщо ви дійсно хочете звести їх дослідження до так / ні, то відповідь ТАК. Тест Шапіро-Вілкса здається трохи більш потужним у більшості випадків, ніж Андерсон-Дарлінг. Вони рекомендують тест Shapiro Wilk, коли ви не маєте на увазі конкретного альтернативного розподілу. Однак якщо вас цікавить ця тема, документ варто прочитати. Принаймні подивіться на таблиці.

  • Едіт Сейєр, Тести на нормальність: Порівняння потужності , в Міжнародній енциклопедії статистичної науки, 2014 р. - опитування опублікованих досліджень з цього питання. Знову ж таки, відповідь залежить від вибірки та ваших знань щодо альтернативного розподілу, але тривіалізованою відповіддю було б ТАК, Шапіро-Вілк, як правило, більш потужний, але не завжди.

  • Генрі С. Тоуд, тести на нормальність , в Міжнародній енциклопедії статистичної науки, 2014 р. - Опис популярних тестів на нормальність. Його рекомендація:

А2

Тепер це стосувалося одноманітних тестів. У Thode (2002) також є багатофакторний тест, цензуровані дані, звичайні суміші, тестування на наявність залишків та багато іншого.


9

Більш серйозна відповідь на подальше це питання і особливо продовження зацікавленості @ silverfish. Один із підходів до відповіді на подібні запитання - це запустити кілька моделей для порівняння. Нижче наведено деякий код R, який моделює дані за різними альтернативами та робить кілька тестів на нормальність та порівнює потужність (та довірчий інтервал потужності, оскільки потужність оцінюється за допомогою моделювання). Я дещо підкоригував розміри вибірки, тому що це було нецікаво, коли багато повноважень були близькими до 100% або 5%, я виявив круглі цифри, які давали повноваження близько 80%. Усі бажаючі могли легко взяти цей код і змінити його для різних припущень, різних альтернатив тощо.

Ви можете бачити, що існують альтернативи, для яких деякі тести роблять краще, а інші - гірше. Тоді важливим питанням є те, які альтернативи є найбільш реалістичними для ваших наукових питань / області. За цим дійсно слід продовжувати моделювання впливу типів ненормативності інтересу на інші тести, що проводяться. Деякі з цих типів ненормальності сильно впливають на інші нормальні тести, інші не впливають на них сильно.

> library(nortest)
> 
> simfun1 <- function(fun=function(n) rnorm(n), n=250) {
+   x <- fun(n)
+   c(sw=shapiro.test(x)$p.value, sf=sf.test(x)$p.value, ad=ad.test(x)$p.value,
+     cvm=cvm.test(x)$p.value, lillie=lillie.test(x)$p.value, 
+     pearson=pearson.test(x)$p.value, snow=0)
+ }
> 
> ### Test size using null hypothesis near true
> 
> out1 <- replicate(10000, simfun1())
> apply(out1, 1, function(x) mean(x<=0.05))
     sw      sf      ad     cvm  lillie pearson    snow 
 0.0490  0.0520  0.0521  0.0509  0.0531  0.0538  1.0000 
> apply(out1, 1, function(x) prop.test(sum(x<=0.05),length(x))$conf.int)  #$
             sw         sf         ad        cvm     lillie    pearson      snow
[1,] 0.04489158 0.04776981 0.04786582 0.04671398 0.04882619 0.04949870 0.9995213
[2,] 0.05345887 0.05657820 0.05668211 0.05543493 0.05772093 0.05844785 1.0000000
> 
> ### Test again with mean and sd different
> 
> out2 <- replicate(10000, simfun1(fun=function(n) rnorm(n,100,5)))
> apply(out2, 1, function(x) mean(x<=0.05))
     sw      sf      ad     cvm  lillie pearson    snow 
 0.0482  0.0513  0.0461  0.0477  0.0515  0.0506  1.0000 
> apply(out2, 1, function(x) prop.test(sum(x<=0.05),length(x))$conf.int)  #$
             sw         sf         ad        cvm     lillie    pearson      snow
[1,] 0.04412478 0.04709785 0.04211345 0.04364569 0.04728982 0.04642612 0.9995213
[2,] 0.05262633 0.05585073 0.05043938 0.05210583 0.05605860 0.05512303 1.0000000
> 
> #### now for the power under different forms of non-normality
> 
> ## heavy tails, t(3)
> rt3 <- function(n) rt(n, df=3)
> 
> out3 <- replicate(10000, simfun1(fun=rt3, n=75))
There were 50 or more warnings (use warnings() to see the first 50)
> round(apply(out3, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.788   0.831   0.756   0.726   0.624   0.440   1.000 
> round(apply(out3, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.780 0.824 0.748 0.717  0.614   0.431    1
[2,] 0.796 0.838 0.765 0.734  0.633   0.450    1
> 
> 
> ## light tails, uniform
> u <- function(n) runif(n)
> 
> out4 <- replicate(10000, simfun1(fun=u, n=65))
> round(apply(out4, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.906   0.712   0.745   0.591   0.362   0.270   1.000 
> round(apply(out4, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.900 0.703 0.737 0.581  0.353   0.261    1
[2,] 0.911 0.720 0.754 0.600  0.372   0.279    1
> 
> ## double exponential, Laplace
> de <- function(n) sample(c(-1,1), n, replace=TRUE) * rexp(n)
> 
> out5 <- replicate(10000, simfun1(fun=de, n=100))
> round(apply(out5, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.796   0.844   0.824   0.820   0.706   0.477   1.000 
> round(apply(out5, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.788 0.837 0.817 0.813  0.697   0.467    1
[2,] 0.804 0.851 0.832 0.828  0.715   0.486    1
> 
> ## skewed, gamma(2,2)
> g22 <- function(n) rgamma(n,2,2)
> 
> out6 <- replicate(10000, simfun1(fun=g22, n=50))
Warning message:
In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out6, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.954   0.930   0.893   0.835   0.695   0.656   1.000 
> round(apply(out6, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.950 0.925 0.886 0.827  0.686   0.646    1
[2,] 0.958 0.935 0.899 0.842  0.704   0.665    1
> 
> ## skewed, gamma(2,2)
> g99 <- function(n) rgamma(n,9,9)
> 
> out7 <- replicate(10000, simfun1(fun=g99, n=150))
> round(apply(out7, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.844   0.818   0.724   0.651   0.526   0.286   1.000 
> round(apply(out7, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.836 0.810 0.715 0.642  0.516   0.277    1
[2,] 0.851 0.826 0.732 0.660  0.536   0.294    1
> 
> ## tails normal, middle not
> mid <- function(n) {
+   x <- rnorm(n)
+   x[ x > -0.5 & x < 0.5 ] <- 0
+   x
+ }
> 
> out9 <- replicate(10000, simfun1(fun=mid, n=30))
Warning messages:
1: In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
2: In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out9, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.374   0.371   0.624   0.739   0.884   0.948   1.000 
> round(apply(out9, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.365 0.362 0.614 0.730  0.878   0.943    1
[2,] 0.384 0.381 0.633 0.747  0.890   0.952    1
> 
> ## mixture on variance
> mv <- function(n, p=0.1, sd=3) {
+   rnorm(n,0, ifelse(runif(n)<p, sd, 1))
+ }
> 
> out10 <- replicate(10000, simfun1(fun=mv, n=100))
Warning message:
In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out10, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.800   0.844   0.682   0.609   0.487   0.287   1.000 
> round(apply(out10, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.792 0.837 0.673 0.599  0.477   0.278    1
[2,] 0.808 0.851 0.691 0.619  0.497   0.296    1
> 
> ## mixture on mean
> mm <- function(n, p=0.3, mu=2) {
+   rnorm(n, ifelse(runif(n)<p, mu, 0), 1)
+ }
> 
> out11 <- replicate(10000, simfun1(fun=mm, n=400))
> round(apply(out11, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.776   0.710   0.808   0.788   0.669   0.354   1.000 
> round(apply(out11, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.768 0.701 0.801 0.780  0.659   0.344    1
[2,] 0.784 0.719 0.816 0.796  0.678   0.363    1

Дякуємо, що додали цю відповідь, яка є приємним доповненням до вашої попередньої. Ніякого зневаги не було призначено до вашої іншої відповіді, яка є одним з моїх улюблених у SE!
Срібна рибка

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