Как создать доверительный интервал для параметра теста перестановки?

9

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

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

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

Не могли бы вы объяснить (или просто дать код R), как строится доверительный интервал (т.е. для разницы между средними значениями двух выборок в приведенном выше примере)?

РЕДАКТИРОВАТЬ

После некоторого поиска в Google я нашел это интересное чтение .

Джордж Донтас
источник

Ответы:

7

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

Единственное отличие от предыдущего кода состоит в том, что вы генерируете свои образцы случайным образом, а не с перестановками. И вы бы сгенерировали их больше, скажем 1000 например. Получите оценки различий для 1000 копий своего эксперимента. Возьмите отсечки по середине 950 (95%). Это ваш доверительный интервал. Он падает прямо с начальной загрузки.

Вы уже сделали большую часть этого в своем примере. Дифферент длиной 462 предмета. Поэтому вам нужны нижние 2,5% и верхние 2,5% срезы (около 11 элементов на каждом конце).

Используя ваш код раньше ...

y <- sort(dif.treat)
ci.lo <- y[11]
ci.hi <- y[462-11]

С другой стороны, я бы сказал, что 462 немного низок, но вы обнаружите, что начальная загрузка до 10000 дает результаты, которые немного отличаются (вероятно, ближе к среднему).

Думаю, я бы также добавил некоторый простой код, требующий загрузочную библиотеку (на основе вашего предыдущего кода).

diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]])
b <- boot(total, diff, R = 1000)
boot.ci(b)
Джон
источник
Спасибо. Можно ли создавать образцы с использованием sampleи replace=TRUE? Есть ли причина использовать пакет как boot?
Джордж Донтас
Обычно это делается с заменой, поэтому вы хотите установить значение TRUE. Что касается того, почему ... пакет оптимизирован, поэтому он должен работать быстрее .... никогда не рассчитывал время. Это может быть проблемой, если вы установите R большим. И, как видите, код приятный и лаконичный. У этого также есть много особенностей, которые Вы не могли бы легко катить самостоятельно.
Джон
boot.ci возвращает доверительный интервал. Есть ли какая-либо (загрузочная) функция, которая дает значение p.value? (как отношение количества различий, по крайней мере, такого же, как наблюдаемое, к общему количеству сгенерированных образцов)
Джордж Донтас
хорошо, я нашел способ получить это:sum(b$t>=b$t0)/b$R
Джордж Dontas
@ gd047: учтите, что это одностороннее значение p, которое вы вычисляете.
Йорис Мейс
4

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

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

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

Пример: я использую здесь классическую Т-статистику, но использую простой подход к начальной загрузке для расчета эмпирического распределения моей статистики. На основании этого я вычисляю эмпирическое значение p:

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic
t.dist <- apply(
      replicate(1000,sample(c(x,y),11,replace=F)),2,
      function(i){t.test(i[1:5],i[6:11])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value

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

РЕДАКТИРОВАТЬ :

ОК, я неправильно понял вопрос. Если вы хотите рассчитать доверительный интервал для оценки разницы, вы можете использовать код, упомянутый здесь, для начальной загрузки в каждом образце. Имейте в виду, это предвзятая оценка: обычно это дает CI, который является слишком маленьким. Также см. Приведенный там пример как причину, по которой вы должны использовать другой подход для доверительного интервала и значения p.

Йорис Мейс
источник
1
Можете ли вы объяснить, почему тесты перестановок не должны использоваться в наборах данных, что вы не можете рассчитать все возможные перестановки?
Энди У
@Andy W: сначала определите «тест перестановки». для меня тесты перестановок - это точные тесты, использующие каждую возможную перестановку. Это невозможно на больших наборах данных. «Приближенные тесты перестановок» на самом деле являются самым простым методом Монте-Карло и должны рассматриваться именно таким образом. Кроме того, центральная предельная теорема в большинстве случаев гарантирует, что при использовании больших наборов данных соблюдаются предположения о распределении статистики теста. В комплексном тестировании использование тестов перестановки на больших наборах данных делает время вычислений невыносимо долгим без добавления какого-либо значительного значения. my2cents
Йорис Мейс
Я не сказал ничего, как начальный тест перестановки. Я пришел к этому вопросу после прочтения последнего абзаца [РАЗДЕЛ 14.5 | Резюме], в связанном pdf.
Джордж Донтас
@ gd047 Тогда я неправильно понял твой вопрос. Но вы должны действительно держать доверительные интервалы и p.values ​​строго разделены. Доверительный интервал оценивается на основе начальной загрузки в каждой выборке (хотя он смещен по определению), тест перестановки выполняется перестановками по всему набору данных. Это две совершенно разные вещи.
Йорис Мейс
@ Кевин: Код был чертовски правильным. Прочитайте код еще раз: x[6:11]ссылка на аргумент xанонимной функции в приложении. Может быть, сбивает с толку, но ваши изменения дали очень неправильные результаты Пожалуйста, прокомментируйте, что, по вашему мнению, должно быть до редактирования кода. Спасает меня откат. Чтобы избежать дальнейшей путаницы, я изменил это xнаi
Joris Meys
0

Из кода Joris Meys в Ответах, но с изменениями, позволяющими применять его в более чем одной ситуации:

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

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic

t.dist <- apply(
          replicate(1000,sample(c(x,y),length(c(x,y)),replace=F)), 2,
          function(i){t.test(i[1:length(x)],i[length(x)+1:length(c(x,y))])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value
Kevin
источник