Давайте выясним, хороший ли это тест или нет. Это намного больше, чем просто заявить, что это плохо, или показать в одном случае, что это не работает. В некоторых случаях большинство тестов работают плохо, поэтому часто мы сталкиваемся с определением обстоятельств, при которых любой предлагаемый тест может быть хорошим выбором.
Описание теста
Как и любой тест гипотезы, он состоит из (а) нулевой и альтернативной гипотезы и (б) тестовой статистики (коэффициента корреляции), предназначенной для различения гипотез.
Нулевая гипотеза состоит в том, что две переменные происходят из одного и того же распределения. Чтобы быть точным, назовем переменные 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
. Это естественно падает на три части.
Функция для вычисления статистики теста . Поскольку я хочу быть немного более общим, моя версия обрабатывает наборы данных разных размеров ( n x ≠ n y ) путем линейной интерполяции между значениями в (отсортированном) большем наборе данных для создания совпадений с (отсортированным) меньшим набором данных. Поскольку это уже сделано функцией , я просто беру ее результаты:t(x,y)nx≠nyR
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, одна для ( ) и одна для Y ( ). ОпцияXdist.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
другим вычислением. Мы делаем это ниже.
Первые результаты
По умолчанию наш код сравнивает данные, взятые из двух равномерных распределений. Я позволю этому сделать это (для , которые являются довольно небольшими наборами данных и поэтому представляют собой сравнительно сложный тестовый случай), а затем повторяю это для сравнения с равномерно-нормальным и экспоненциально-равномерным сравнением. (Равномерные распределения нелегко отличить от нормальных распределений, если только у вас не больше 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)
XYИксY
16Икся16Yяf
0,051116независимые значения от каждого. Это довольно низкая мощность. Но, возможно, это неизбежно, так что давайте продолжим.
Правые графики аналогичным образом проверяют равномерное распределение против экспоненциального. Этот результат странный. Этот тест чаще всего приводит к выводу, что унифицированные данные и экспоненциальные данные выглядят одинаково. Кажется, «думают», что равномерные и экспоненциальные переменные более похожи, чем две однородные переменные! Что тут происходит?
Проблема заключается в том, что данные из экспоненциального распределения будут иметь несколько чрезвычайно высоких значений. Когда вы создадите диаграмму рассеяния для равномерно распределенных значений, тогда будет несколько точек далеко справа вверху от всех остальных. Это соответствует очень высокому коэффициенту корреляции. Таким образом, всякий раз , когда любое из распределений генерирует несколько экстремальных значений, коэффициент корреляции является ужасным выбором для измерения того, насколько различны распределения. Это приводит к еще одной еще более серьезной проблеме: по мере увеличения размеров набора данных шансы получить несколько экстремальных наблюдений возрастают. Таким образом, мы можем ожидать, что этот тест будет выполняться хуже и хуже с увеличением объема данных. Как ужасно ...
Лучший тест
Y= х
Вот R
реализация:
test.statistic <- function(x, y) {
ks.test(x,y)$statistic
}
Это верно: оно встроено в программное обеспечение, поэтому нам остается только вызвать его. Но ждать! Если руководство внимательно читать, вы узнаете , что (а) тестовые поставки р-значение , а (б) , что р-значение (грубо) неправильные , когда оба x
и y
являются наборы данных. Он предназначен для использования, когда вы уверены, что точно знаете , из какого источника x
поступили данные, и хотите узнать, правда ли это. Таким образом, тест не позволяет должным образом учесть неопределенность в отношении распределения данных y
.
Нет проблем! Тестовая структура перестановок все еще так же действительна. Сделав предыдущее изменение в test.statistic
, все, что нам нужно сделать, это повторно запустить предыдущее исследование, без изменений. Вот результаты.
p=0.20
700.0511
30α=550α=100.10
Выводы
Таким образом, проблемы с корреляционным тестом не связаны с некоторыми сложностями в этой настройке. Корреляционный тест не только очень плохо работает, но и плох по сравнению с широко известным и доступным тестом. (Я предполагаю, что это недопустимо, что означает, что он всегда будет работать в среднем хуже, чем версия теста KS с перестановкой, подразумевая, что нет никаких оснований его использовать).