Проверьте, соответствуют ли переменные тому же распределению

16

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

Под распределением здесь я имею в виду «нормальный», «хи-квадрат», «гамма» и т. Д.

PascalVKooten
источник

Ответы:

35

Давайте выясним, хороший ли это тест или нет. Это намного больше, чем просто заявить, что это плохо, или показать в одном случае, что это не работает. В некоторых случаях большинство тестов работают плохо, поэтому часто мы сталкиваемся с определением обстоятельств, при которых любой предлагаемый тест может быть хорошим выбором.

Описание теста

Как и любой тест гипотезы, он состоит из (а) нулевой и альтернативной гипотезы и (б) тестовой статистики (коэффициента корреляции), предназначенной для различения гипотез.

Нулевая гипотеза состоит в том, что две переменные происходят из одного и того же распределения. Чтобы быть точным, назовем переменные X и Y и предположим, что мы наблюдали nx экземпляров X , называемых xi=(x1,x2,,xnx) , и ny экземпляров Y , называемых yi . Нулевая гипотеза состоит в том, что все экземпляры X и Y независимы и одинаково распределены (iid).

Возьмем в качестве альтернативной гипотезы, что (а) все экземпляры идентифицированы согласно некоторому базовому распределению F X и (b) все экземпляры Y идентифицированы согласно некоторому базовому распределению F Y, но (c) F X отличается от F Y . (Таким образом, мы не будем искать корреляции между x i , корреляции между y i , корреляции между x i и y j или различия в распределении между x 's или yXFXYFYFXFYxiyixiyjxyотдельно: это считается не правдоподобным.)

Предлагаемая тестовая статистика предполагает, что (назовите это общее значение n ), и вычисляет коэффициент корреляции ( x [ i ] , y [ i ] ) (где, как обычно, [ i ] обозначает i- й наименьший данных). Назовите это t ( x , y ) .nx=nyn(x[i],y[i])[i]itht(x,y)

Тесты перестановок

В этой ситуации - независимо от того, какая статистика предлагается - мы всегда можем провести тест перестановки. Согласно нулевой гипотезе, вероятность данных ( ( x 1 , x 2 , , x n ) , ( y 1 , y 2 , , y n ) ) равна вероятности любой перестановки 2 n значения данных. Другими словами, назначение половины данных X, а другой половины Yt((x1,x2,,xn),(y1,y2,,yn))2nXYэто чисто случайное совпадение. Это простое, прямое следствие н.о.р. предположений и нулевая гипотеза , что .FX=FY

Следовательно, выборочное распределение , обусловленное наблюдениями x i и y i , является распределением всех значений t, достигнутых для всех ( 2 n ) ! перестановки данных. Мы заинтересованы в этом, потому что для любого заданного предполагаемого размера теста α , такого как α = 0,05 (что соответствует 95 % достоверности), мы построим двустороннюю критическую область из выборочного распределения t : оно состоит из наиболее экстремальногоt(x,y)xiyit(2n)!αα=.0595t % из возможных значений т (на высокой стороне, таквысокаякорреляции согласуется с аналогичным распределением и низкой корреляцией нет). Вот как мы определяем, насколько большим должен быть коэффициент корреляции, чтобы решить, что данные поступают из разных распределений.100αt

Имитация нулевого распределения выборки

Потому что (или, если хотите, ( 2 н(2n)!, который подсчитывает количество способов разбиенияданных2nна две части размераn), становится большим даже при малыхn, практически невозможно точно рассчитать распределение выборки, поэтому мы производим выборку с использованием моделирования. (Например, когдаn=16, ( 2n(2nn)/22nnnn=16и(2n)! 2,63×1035.) Часто достаточно около тысячи образцов (и, безусловно, будет достаточно для исследований, которые мы собираемся провести).(2nn)/2=300 540 195(2n)!2.63×1035

Нам нужно выяснить две вещи: во-первых, как выглядит распределение выборки при нулевой гипотезе. Во-вторых, насколько хорошо этот тест различает разные распределения?

Есть сложность: распределение выборки зависит от характера данных. Все, что мы можем сделать, - это смотреть на реалистичные данные, созданные для того, чтобы имитировать то, чем мы заинтересованы в изучении, и надеяться, что то, что мы узнаем из моделирования, будет применяться к нашей собственной ситуации.

Реализация

Чтобы проиллюстрировать, я выполнил эту работу в R. Это естественно падает на три части.

  1. Функция для вычисления статистики теста . Поскольку я хочу быть немного более общим, моя версия обрабатывает наборы данных разных размеров ( n xn y ) путем линейной интерполяции между значениями в (отсортированном) большем наборе данных для создания совпадений с (отсортированным) меньшим набором данных. Поскольку это уже сделано функцией , я просто беру ее результаты:t(x,y)nxnyRqqplot

    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, одна для ( ) и одна для Y ( ). ОпцияXdist.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другим вычислением. Мы делаем это ниже.

Первые результаты

По умолчанию наш код сравнивает данные, взятые из двух равномерных распределений. Я позволю этому сделать это (для , которые являются довольно небольшими наборами данных и поэтому представляют собой сравнительно сложный тестовый случай), а затем повторяю это для сравнения с равномерно-нормальным и экспоненциально-равномерным сравнением. (Равномерные распределения нелегко отличить от нормальных распределений, если только у вас не больше 16 значений, но экспоненциальные распределения - имеющие высокую асимметрию и длинный правый хвост - обычно легко отличить от равномерных распределений.)n.x=n.y=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)

Correlation test results

XYИксY

16Икся16Yяf0,051116независимые значения от каждого. Это довольно низкая мощность. Но, возможно, это неизбежно, так что давайте продолжим.

Правые графики аналогичным образом проверяют равномерное распределение против экспоненциального. Этот результат странный. Этот тест чаще всего приводит к выводу, что унифицированные данные и экспоненциальные данные выглядят одинаково. Кажется, «думают», что равномерные и экспоненциальные переменные более похожи, чем две однородные переменные! Что тут происходит?

Проблема заключается в том, что данные из экспоненциального распределения будут иметь несколько чрезвычайно высоких значений. Когда вы создадите диаграмму рассеяния для равномерно распределенных значений, тогда будет несколько точек далеко справа вверху от всех остальных. Это соответствует очень высокому коэффициенту корреляции. Таким образом, всякий раз , когда любое из распределений генерирует несколько экстремальных значений, коэффициент корреляции является ужасным выбором для измерения того, насколько различны распределения. Это приводит к еще одной еще более серьезной проблеме: по мере увеличения размеров набора данных шансы получить несколько экстремальных наблюдений возрастают. Таким образом, мы можем ожидать, что этот тест будет выполняться хуже и хуже с увеличением объема данных. Как ужасно ...

Лучший тест

Yзнак равноИкс

Вот Rреализация:

test.statistic <- function(x, y) {
  ks.test(x,y)$statistic
}

Это верно: оно встроено в программное обеспечение, поэтому нам остается только вызвать его. Но ждать! Если руководство внимательно читать, вы узнаете , что (а) тестовые поставки р-значение , а (б) , что р-значение (грубо) неправильные , когда оба xи yявляются наборы данных. Он предназначен для использования, когда вы уверены, что точно знаете , из какого источника xпоступили данные, и хотите узнать, правда ли это. Таким образом, тест не позволяет должным образом учесть неопределенность в отношении распределения данных y.

Нет проблем! Тестовая структура перестановок все еще так же действительна. Сделав предыдущее изменение в test.statistic, все, что нам нужно сделать, это повторно запустить предыдущее исследование, без изменений. Вот результаты.

K-S test study

p=0.20

700.0511

30α=550α=100.10

Выводы

Таким образом, проблемы с корреляционным тестом не связаны с некоторыми сложностями в этой настройке. Корреляционный тест не только очень плохо работает, но и плох по сравнению с широко известным и доступным тестом. (Я предполагаю, что это недопустимо, что означает, что он всегда будет работать в среднем хуже, чем версия теста KS с перестановкой, подразумевая, что нет никаких оснований его использовать).

Whuber
источник
Очень хорошее объяснение, и мне нравится видеть, как другие делают некоторые симуляции. Мне все еще трудно понять, почему корреляция, кажется, немного предсказывает (или мы даже не можем так много сказать?). Кроме того, единственная расплывчатая (но важная часть для понимания того, почему работает KS) - это линия «x = y» («она вычисляет наибольшее вертикальное отклонение от линии y = x на их графике QQ». (Когда данные поступают из того же распределение, сюжет QQ имеет тенденцию следовать этой линии. "). Спасибо за усилия, хотя, я многому научился
PascalVKooten
1
1
KS проверяет, пришли ли два набора данных из одной и той же функции распределения, т.е. их CDF одинаковы. Однако мне кажется, что OP может искать тест, который скажет, что Exp (0.1) - это то же самое, что Exp (100), а Normal (0, 5) - то же самое, что Normal (10, .2 ). KS вообще этого не делает, и вообще-то, наверное, вообще невозможно (и я не знаю, когда вы этого захотите). Но некоторая проверка того, насколько деформируемо одно в другое, может сработать в простых случаях (например, центрирование и стандартизация будут обрабатывать нормали прилично, но не экспоненциально).
Дугал
@ Дугал Я перечитал твой комментарий. Правильно ли говорить, что когда мы говорим, что «распределения одинаковы», мы имеем в виду, что CDF одинаковы?
PascalVKooten
μσ2
5

Нет, корреляция не является хорошей проверкой этого.

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

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

Питер Флом - Восстановить Монику
источник
0

Если существует достаточно большое количество переменных, это может показать большую корреляцию с упорядоченными по размеру значениями. Тем не менее, он не кажется особенно полезным методом, не в последнюю очередь потому, что он предоставляет мало средств для оценки уверенности в том, что они могут использовать одну и ту же модель.

Проблема, с которой вы можете столкнуться, заключается в том, что у вас есть модели со схожим средним значением и асимметрией, но с разницей в эксцессе, поскольку умеренное количество измерений может подходить достаточно хорошо, чтобы выглядеть достаточно хорошо коррелированными.

Представляется более разумным смоделировать обе переменные по разным распределениям, чтобы увидеть, какая из них наиболее вероятна, и сравнить результаты.

Может быть некоторая заслуга в нормализации обоих значений, сортировке и построении каждого из них - это позволит вам увидеть, как сравниваются совпадения, - и вы можете построить возможную модель для обоих, что будет связано с тем, что вы предложили, но вместо того, чтобы ожидая конкретного ответа, просто наглядное представление о близости распределений.

Дэвид Бертон
источник
(1) Мой анализ показывает, что ожидание, выраженное в первом предложении, не подтверждается: при достаточно большом количестве переменных, если одно из распределений имеет короткие хвосты, а другое имеет лишь небольшой шанс показать более экстремальные значения, то корреляция имеет тенденцию быть чрезмерно высокой. (2) Когда вы «моделируете ... для разных дистрибутивов», как вы контролируете множественные зависимые тесты, которые подразумеваются этим предписанием?
whuber