Перевірте, чи змінюються змінні однакового розподілу


16

Якщо ви хочете перевірити, чи дві змінні дотримуються одного і того ж розподілу, чи було б хорошим тестом просто сортувати обидві змінні, а потім перевірити їх співвідношення? Якщо він високий (щонайменше 0,9?), То змінні, швидше за все, походять з одного розподілу.

Під поширенням тут я маю на увазі «нормальний», «чі-квадрат», «гамма» тощо.

Відповіді:


35

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

Опис тесту

Як і будь-який тест гіпотез, і цей складається з (а) нульової та альтернативної гіпотези та (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 )нх=нун(х[i],у[i])[i]iгот(х,у)

Перестановочні тести

У цій ситуації - незалежно від того , що статистика пропонується - ми завжди можемо провести тест перестановки. Згідно з нульовою гіпотезою, ймовірність даних така ж, як ймовірність будь-якої перестановки даних значення. Іншими словами, віднесення половини даних до а другої половини до - це чистий випадковий збіг. Це простий, прямий наслідок припущень та нульової гіпотези, що .( ( 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ЖХ=ЖY

Тому розподіл вибірки , умовне спостереженнями та , - це розподіл усіх значень досягнутих для всіхперестановки даних. Нас це цікавить, оскільки для будь-якого заданого розміру тесту , такого як (відповідає % надійності), ми побудуємо двосторонню критичну область з розподілу вибірки : вона складається з найбільш крайні % від можливих значеньx i y i t ( 2 n ) ! α α = .05 95 t 100 α tт(х,у)хiуiт(2н)!αα=.0595т100αт(з високої сторони, оскільки висока кореляція відповідає аналогічним розподілам, а низька кореляція - ні). Ось так ми визначаємо, наскільки великим повинен бути коефіцієнт кореляції, щоб визначити, що дані надходять з різних розподілів.

Моделювання нульового розподілу вибірки

Тому що(або, якщо вам подобається, , який підраховує кількість способів розділення даних на дві частини розміром ) стає великим навіть для малих , обчислити точно розподіл вибірки, тому ми відбираємо його за допомогою моделювання. (Наприклад, коли , і .) Часто вистачає приблизно тисячі зразків (і безумовно, буде для розвідок, які ми збираємось провести).( 2 н(2н)!2nnnn=16 ( 2n(2нн)/22нннн=16(2п)! 2,63×1035(2нн)/2=300 540 195(2н)!2.63×1035

Ми повинні з’ясувати дві речі: по-перше, як виглядає розподіл вибірки під нульовою гіпотезою. По-друге, наскільки добре цей тест розрізняє різні розподіли?

Існує ускладнення: розподіл вибірки залежить від характеру даних. Все, що ми можемо зробити, - це подивитися на реалістичні дані, створені для наслідування всього, що нас цікавить, і сподіваємось, що те, що ми дізнаємось із симуляцій, стосуватиметься власної ситуації.

Впровадження

Для ілюстрації я виконав цю роботу в Росії R. Він природним чином розпадається на три шматки.

  1. Функція для обчислення статистики тесту . Оскільки я хочу бути трохи більш загальним, моя версія обробляє набори даних різного розміру ( ) шляхом лінійної інтерполяції серед значень у (відсортованому) більшому наборі даних для створення збігів із (відсортованим) меншим набором даних. Оскільки це вже зроблено функцією , я просто беру її результати:т(х,у)нхнуRqqplot

    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робить.

  2. Моделювання розподілу вибірки. Для введення ця функція приймає кількість ітерацій 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())
    }
  3. Хоча це все, що нам потрібно для проведення тесту, для того щоб його вивчити, ми захочемо повторити тест багато разів. Отже, ми проводимо тест один раз і загортаємо цей код в третій функціональний шар, просто загально названий fтут, який ми можемо викликати повторно. Щоб зробити його достатньо загальним для широкого дослідження, для введення він приймає розміри наборів даних для імітації ( n.xі n.y), кількість ітерацій для кожного тесту перестановки ( n.iter), посилання на функцію testдля обчислення статистики тесту (ви побачите на мить, чому ми можемо не хотіти жорсткого кодування цього), і дві функції для генерації iid випадкових значень, одна для ( ) і одна для ( ). ВаріантХdist.xYdist.yplot.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на якийсь інший розрахунок. Робимо це нижче.

Перші результати

За замовчуванням наш код порівнює дані, отримані з двох рівномірних розподілів. Я дозволю це зробити (для , які є досить невеликими наборами даних, і тому є досить важким тестовим випадком), а потім повторюю це для однорідного нормального порівняння та рівномірного експоненціального порівняння. (Уніфіковані розподіли нелегко відрізнити від звичайних розподілів, якщо ви не маєте трохи більше значень, але експоненціальні розподіли - з високою косою і довгим правим хвостом - зазвичай легко відрізняються від рівномірних розподілів.)н.х=н.у=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уif0,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

Хоча нульовий розподіл не рівномірний (лівий верхній), він досить рівномірний нижче або близько того, де ми дійсно піклуємося про його значення. Погляд на графік під ним (внизу зліва) показує проблему: статистика KS має тенденцію до об'єднання декількох дискретних значень. (Ця проблема практично відпадає для великих наборів даних.)p=0,20

Середні (рівномірні та нормальні) та праві (рівномірні проти експоненціальні) гістограми роблять абсолютно правильно: у переважній більшості випадків, коли два розподіли різняться, цей тест дає невеликі p-значення. Наприклад, він має % шансів отримати р-значення менше при порівнянні рівномірного з нормальним на основі 16 значень кожного. Порівняйте це із загальним %, досягнутим тестом на коефіцієнт кореляції.700,0511

Правильна гістограма не настільки гарна, але принаймні зараз у правильному напрямку! Ми вважаємо, що у нього є % шанс виявити різницю між рівномірним та експоненціальним розподілом на рівні % та % шансом зробити це виявлення на рівні % (тому що два бари для р-значення менше загалом перевищує 500 з 1000 ітерацій).30α=550α=100.10

Висновки

Таким чином, проблеми з кореляційним тестом не пов'язані з деякими властивими цим труднощам труднощами. Мало того, що кореляційний тест працює дуже погано, він погано порівняно з широко відомим і доступним тестом. (Я б здогадався, що це неприпустимо, це означає, що він завжди буде працювати в середньому гірше, ніж перестановна версія тесту KS, маючи на увазі, що немає жодного приводу використовувати його.)


Дуже приємне пояснення, і мені подобається бачити, як інші роблять симуляції. У мене все ще виникають проблеми з тим, чому співвідношення, здається, мало передбачить (чи ми навіть не можемо сказати так багато?). Крім того, єдиний розпливчастий (але критична частина для розуміння того, чому KS працює) - це про рядок "x = y" ("він обчислює найбільше вертикальне відхилення від лінії y = x в їх QQ-графіці.") розподіл, QQ сюжет має тенденцію слідувати цій лінії. "). Дякуючи за докладені зусилля, я багато чому навчився
PascalVKooten

1
Це все легко знайти у Вікіпедії через очевидні пошуки :-). Що стосується кореляції, проблема полягає в тому, що змінні можуть бути сильно корельованими, але мати абсолютно різні розподіли; насправді існують послідовності розподілів, які довільно «віддаляються один від одного» (в інтуїтивному розумінні), тоді як розподіл їх коефіцієнта кореляції стає довільно близьким до у великих наборах даних. Це робить коефіцієнт кореляції поганим дискримінатором розподілу. 1
whuber

KS перевіряє, чи отримано два набори даних від однієї функції розподілу, тобто їх CDF однакові. Мені здається, що ОП може шукати тест, який скаже, що Exp (0,1) - це те саме, що Exp (100), а Normal (0, 5) - те саме, що нормальне (10, .2) ). KS взагалі цього не робить, і взагалі це, мабуть, неможливо (і я не знаю, коли ви цього хочете). Але деякий тест на те, наскільки деформується одне в інше, може працювати в простих випадках (наприклад, центрування та стандартизація нормально поводяться з нормалами, але не є експонентами).
Дугал

@Dougal Я перечитав ваш коментар. Чи правильно сказати, що, коли ми згадуємо, що "розподіли однакові", ми маємо на увазі, що CDF є однаковими?
PascalVKooten

@PascalvKooten "Розподіл" - це слово, яке звикає означати різні речі в різних контекстах. Однак, як правило, я вважаю, що зазвичай "розподіл" означає щось, визначене певним CDF (або його еквівалентом); "нормальний" або "гамма" відносяться до сімей розподілів, які визначають певний розподіл за їх значеннями параметрів (наприклад, та для нормального). мкσ2
Дугал

5

Ні, кореляція не є хорошим випробуванням цього.

x <- 1:100 #Uniform
y <- sort(rnorm(100)) #Normal
cor(x,y) #.98

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


0

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

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

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

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


(1) Мій аналіз виявляє, що очікування, виражене в першому реченні, не виправдане: з достатньо великою кількістю змінних, якщо один з розподілів має короткі хвости, а інший має лише невеликий шанс виявити більш екстремальні значення, то співвідношення має тенденцію бути надмірно високим. (2) Коли ви "моделюєте ... проти різних розподілів", як ви контролюєте кілька тестів, що залежать від цього рецепта?
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.