Давайте з’ясуємо, чи це хороший тест чи ні. Є набагато більше, ніж просто стверджувати, що це погано, або показати в одному випадку, що він не працює добре. Більшість тестів погано працюють в деяких обставинах, тому часто ми стикаємося з виявленням обставин, за яких будь-який запропонований тест може бути хорошим вибором.
Опис тесту
Як і будь-який тест гіпотез, і цей складається з (а) нульової та альтернативної гіпотези та (b) тестової статистики (коефіцієнт кореляції), призначеної для розмежування між гіпотезами.
Нульова гіпотеза полягає в тому, що дві змінні виходять з одного розподілу. Якщо бути точним, назвемо змінні і і припустимо, що ми спостерігали екземпляри , звані та екземпляри , які називаються . Нульова гіпотеза полягає в тому, що всі екземпляри і незалежні і однаково розподілені (iid).Y n x X x i = ( x 1 , x 2 , … , x n x ) n y Y y i X YХYнхХхi= ( х1, х2, … , Хнх)нуYуiХY
Візьмемо як альтернативну гіпотезу, що (a) всі екземпляри є ідентичними згідно з деяким базовим розподілом і (b) всі екземпляри є iid відповідно до деякого базового розподілу але (c) відрізняється від . (Таким чином, ми не будемо шукати кореляції між , кореляції між , кореляції між та , або відмінності розподілу між 'і ' s окремо: це вважається неправдоподібним.)F X Y F Y F X F Y x i y i x i y j x yХЖХYЖYЖХЖYхiуiхiуjху
Пропонована статистика тесту передбачає, що (називаємо це загальним значенням ) та обчислює коефіцієнт кореляції (де, як завжди, позначає найменший з даних). Назвіть це . n ( x [ i ] , y [ i ] ) [ i ] i th t ( x , y )нх= nун( х[ i ], у[ i ])[ i ]iгоt ( х , у)
Перестановочні тести
У цій ситуації - незалежно від того , що статистика пропонується - ми завжди можемо провести тест перестановки. Згідно з нульовою гіпотезою, ймовірність даних така ж, як ймовірність будь-якої перестановки даних значення. Іншими словами, віднесення половини даних до а другої половини до - це чистий випадковий збіг. Це простий, прямий наслідок припущень та нульової гіпотези, що .( ( x 1 , x 2 , … , x n ) , ( y 1 , y 2 , … , y n ) ) 2 n X Y F X = F Yт( ( х1, х2, … , Хн) , ( у1, у2, … , Ун) )2 нХYЖХ= FY
Тому розподіл вибірки , умовне спостереженнями та , - це розподіл усіх значень досягнутих для всіхперестановки даних. Нас це цікавить, оскільки для будь-якого заданого розміру тесту , такого як (відповідає % надійності), ми побудуємо двосторонню критичну область з розподілу вибірки : вона складається з найбільш крайні % від можливих значеньx i y i t ( 2 n ) ! α α = .05 95 t 100 α tt ( х , у)хiуiт( 2 п ) !αα = .0595т100 αт(з високої сторони, оскільки висока кореляція відповідає аналогічним розподілам, а низька кореляція - ні). Ось так ми визначаємо, наскільки великим повинен бути коефіцієнт кореляції, щоб визначити, що дані надходять з різних розподілів.
Моделювання нульового розподілу вибірки
Тому що(або, якщо вам подобається, , який підраховує кількість способів розділення даних на дві частини розміром ) стає великим навіть для малих , обчислити точно розподіл вибірки, тому ми відбираємо його за допомогою моделювання. (Наприклад, коли , і .) Часто вистачає приблизно тисячі зразків (і безумовно, буде для розвідок, які ми збираємось провести).( 2 н( 2 п ) !2nnnn=16 ( 2n( 2нн) /22 нннn = 16(2п)! ≈2,63×1035( 2нн) /2=300540195 ( 2 п ) ! ≈ 2,63 × 1035
Ми повинні з’ясувати дві речі: по-перше, як виглядає розподіл вибірки під нульовою гіпотезою. По-друге, наскільки добре цей тест розрізняє різні розподіли?
Існує ускладнення: розподіл вибірки залежить від характеру даних. Все, що ми можемо зробити, - це подивитися на реалістичні дані, створені для наслідування всього, що нас цікавить, і сподіваємось, що те, що ми дізнаємось із симуляцій, стосуватиметься власної ситуації.
Впровадження
Для ілюстрації я виконав цю роботу в Росії R
. Він природним чином розпадається на три шматки.
Функція для обчислення статистики тесту . Оскільки я хочу бути трохи більш загальним, моя версія обробляє набори даних різного розміру ( ) шляхом лінійної інтерполяції серед значень у (відсортованому) більшому наборі даних для створення збігів із (відсортованим) меншим набором даних. Оскільки це вже зроблено функцією , я просто беру її результати:t ( х , у)нх≠ nуR
qqplot
test.statistic <- function(x, y) {
transform <- function(z) -log(1-z^2)/2
fit <- qqplot(x,y, plot.it=FALSE)
transform(cor(fit$x, fit$y))
}
Невеликий поворот - непотрібний, але корисний для візуалізації - повторно виражає коефіцієнт кореляції таким чином, що зробить розподіл нульової статистики приблизно симетричним. Ось що transform
робить.
Моделювання розподілу вибірки. Для введення ця функція приймає кількість ітерацій n.iter
разом з двома наборами даних у масивах x
і y
. Він виводить масив n.iter
значень тестової статистики. Внутрішня робота повинна бути прозорою навіть для некористувача R
:
permutation.test <- function(n.iter, x, y) {
z <- c(x,y)
n.x <- length(x)
n.y <- length(y)
n <- length(z)
k <- min(n.x, n.y)
divide <- function() {
i <- sample.int(n, size=k)
test.statistic(z[i], z[-i])
}
replicate(n.iter, divide())
}
Хоча це все, що нам потрібно для проведення тесту, для того щоб його вивчити, ми захочемо повторити тест багато разів. Отже, ми проводимо тест один раз і загортаємо цей код в третій функціональний шар, просто загально названий f
тут, який ми можемо викликати повторно. Щоб зробити його достатньо загальним для широкого дослідження, для введення він приймає розміри наборів даних для імітації ( n.x
і n.y
), кількість ітерацій для кожного тесту перестановки ( n.iter
), посилання на функцію test
для обчислення статистики тесту (ви побачите на мить, чому ми можемо не хотіти жорсткого кодування цього), і дві функції для генерації iid випадкових значень, одна для ( ) і одна для ( ). ВаріантХdist.x
Ydist.y
plot.it
корисно допомогти побачити, що відбувається.
f <- function(n.x, n.y, n.iter, test=test.statistic, dist.x=runif, dist.y=runif,
plot.it=FALSE) {
x <- dist.x(n.x)
y <- dist.y(n.y)
if(plot.it) qqplot(x,y)
t0 <- test(x,y)
sim <- permutation.test(n.iter, x, y)
p <- mean(sim > t0) + mean(sim==t0)/2
if(plot.it) {
hist(sim, xlim=c(min(t0, min(sim)), max(t0, max(sim))),
main="Permutation distribution")
abline(v=t0, col="Red", lwd=2)
}
return(p)
}
Вихід - це імітація "p-значення": частка моделювання дає статистику, яка виглядає більш екстремально, ніж фактично обчислена для даних.
Частини (2) та (3) є надзвичайно загальними: ви можете провести таке дослідження, як для іншого тесту, просто замінивши test.statistic
на якийсь інший розрахунок. Робимо це нижче.
Перші результати
За замовчуванням наш код порівнює дані, отримані з двох рівномірних розподілів. Я дозволю це зробити (для , які є досить невеликими наборами даних, і тому є досить важким тестовим випадком), а потім повторюю це для однорідного нормального порівняння та рівномірного експоненціального порівняння. (Уніфіковані розподіли нелегко відрізнити від звичайних розподілів, якщо ви не маєте трохи більше значень, але експоненціальні розподіли - з високою косою і довгим правим хвостом - зазвичай легко відрізняються від рівномірних розподілів.)н . x = n . у= 1616
set.seed(17) # Makes the results reproducible
n.per.rep <- 1000 # Number of iterations to compute each p-value
n.reps <- 1000 # Number of times to call `f`
n.x <- 16; n.y <- 16 # Dataset sizes
par(mfcol=c(2,3)) # Lay results out in three columns
null <- replicate(n.reps, f(n.x, n.y, n.per.rep))
hist(null, breaks=20)
plot(null)
normal <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=rnorm))
hist(normal, breaks=20)
plot(normal)
exponential <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=function(n) rgamma(n, 1)))
hist(exponential, breaks=20)
plot(exponential)
Зліва - нульовий розподіл значень р, коли і і однакові. Ми сподіваємось, що гістограма близька до рівномірної (приділяючи особливу увагу крайньому лівому кінці, який знаходиться в діапазоні "значущих" результатів) - і він насправді є - і що послідовність значень, отриманих під час моделювання, показаний під ним, виглядає випадковим чином - і це робить. Це добре. Це означає, що ми можемо перейти до наступного кроку, щоб вивчити, як це змінюється, коли і надходять з різних розподілів.ХYХY
Середні графіки тестують рівномірних змінних проти нормальних змінних . Частіше значення p були нижчими, ніж очікувалося. Це вказує на тенденцію цього тесту фактично виявляти різницю. Але це не великий. Наприклад, найменша ліва смуга гістограми показує, що з 1000 запусків (що включає 1000 окремо модельованих наборів даних) p-значення було менше лише приблизно в 110 разів. Якщо ми вважаємо це "значущим", то цей тест має лише приблизно % шансу виявити різницю між рівномірним та нормальним розподілом на основі16хi16уif
0,051116незалежні значення кожного. Це досить низька потужність. Але, можливо, це неминуче, тож давайте продовжимо.
Правий графік аналогічно випробовує рівномірний розподіл проти експонентного. Цей результат химерний. Цей тест частіше за все робить висновок, що однакові дані та експоненціальні дані виглядають однаково. Здається, "думаю", що рівномірні та експоненціальні змінні більш схожі, ніж дві рівномірні змінні! Що тут відбувається?
Проблема полягає в тому, що дані експоненціального розподілу мають, як правило, кілька надзвичайно високих значень. Коли ви робите розсип з тих, хто протирівнює рівномірно розподіленим значенням, то вгорі праворуч від усіх інших буде кілька точок. Це відповідає дуже високому коефіцієнту кореляції. Таким чином, щоразу , коли будь-який з розподілів генерує кілька крайніх значень, коефіцієнт кореляції є страшним вибором для вимірювання того, наскільки різні розподіли. Це призводить до ще однієї ще гіршої проблеми: із збільшенням розмірів набору даних шанси отримати кілька екстремальних спостережень зростають. Таким чином, ми можемо очікувати, що цей тест працюватиме все гірше і гірше у міру збільшення кількості даних. Як дуже жахливо ....
Кращий тест
На оригінальне запитання відповіли негативно. Однак існує відомий, потужний тест на дискримінацію між розподілами: тест Колмогорова-Смірнова. Замість коефіцієнта кореляції він обчислює найбільше вертикальне відхилення від прямої у їх графіку QQ. (Коли дані надходять з одного і того ж розподілу, графік QQ має тенденцію дотримуватися цього рядка. Інакше він десь буде відхилятися; статистика KS вибирає найбільше таке відхилення.)у= х
Ось R
реалізація:
test.statistic <- function(x, y) {
ks.test(x,y)$statistic
}
Це правильно: він вбудований у програмне забезпечення, тому нам залишається лише зателефонувати. Але зачекайте! Якщо ви уважно прочитаєте посібник, ви дізнаєтесь, що (a) тест надає p-значення, але (b) що p-значення (грубо) неправильне, коли обидва є x
і y
наборами даних. Він призначений для використання, коли ви вважаєте, що точно знаєте , з якого розподілу отримані дані, x
і хочете дізнатися, чи це правда. Таким чином, тест належним чином не враховує невизначеність щодо розподілу даних, що y
надійшли.
Без проблем! Рамка для тестування перестановки все ще така ж справедлива. Внісши попередню зміну на test.statistic
все, що нам потрібно зробити, - це повторно виконати попереднє дослідження без змін. Ось результати.
Хоча нульовий розподіл не рівномірний (лівий верхній), він досить рівномірний нижче або близько того, де ми дійсно піклуємося про його значення. Погляд на графік під ним (внизу зліва) показує проблему: статистика KS має тенденцію до об'єднання декількох дискретних значень. (Ця проблема практично відпадає для великих наборів даних.)р = 0,20
Середні (рівномірні та нормальні) та праві (рівномірні проти експоненціальні) гістограми роблять абсолютно правильно: у переважній більшості випадків, коли два розподіли різняться, цей тест дає невеликі p-значення. Наприклад, він має % шансів отримати р-значення менше при порівнянні рівномірного з нормальним на основі 16 значень кожного. Порівняйте це із загальним %, досягнутим тестом на коефіцієнт кореляції.700,0511
Правильна гістограма не настільки гарна, але принаймні зараз у правильному напрямку! Ми вважаємо, що у нього є % шанс виявити різницю між рівномірним та експоненціальним розподілом на рівні % та % шансом зробити це виявлення на рівні % (тому що два бари для р-значення менше загалом перевищує 500 з 1000 ітерацій).30α = 550α = 100.10
Висновки
Таким чином, проблеми з кореляційним тестом не пов'язані з деякими властивими цим труднощам труднощами. Мало того, що кореляційний тест працює дуже погано, він погано порівняно з широко відомим і доступним тестом. (Я б здогадався, що це неприпустимо, це означає, що він завжди буде працювати в середньому гірше, ніж перестановна версія тесту KS, маючи на увазі, що немає жодного приводу використовувати його.)