обсуждение
Тест перестановки генерирует все соответствующие перестановки набора данных, вычисляет назначенную статистику теста для каждой такой перестановки и оценивает фактическую статистику теста в контексте результирующего распределения перестановок статистики. Распространенным способом оценки является отчет о доле статистики, которая (в некотором смысле) «как или более экстремальная», чем фактическая статистика. Это часто называют «р-значением».
Поскольку фактический набор данных является одной из этих перестановок, его статистика обязательно будет среди тех, которые находятся в распределении перестановок. Следовательно, значение p никогда не может быть нулевым.
Если набор данных не очень мал (обычно менее 20-30 общих чисел) или тестовая статистика имеет особенно хорошую математическую форму, практически невозможно создать все перестановки. (Пример, где все перестановки генерируются, появляется в Тесте перестановки в R ). Поэтому компьютерные реализации тестов перестановки обычно выбирают из распределения перестановок. Они делают это путем генерации некоторых независимых случайных перестановок и надеются, что результаты являются репрезентативной выборкой всех перестановок.
Следовательно, любые числа (такие как «p-значение»), полученные из такой выборки, являются только оценщиками свойств распределения перестановок. Вполне возможно - и часто случается, когда эффекты велики - что предполагаемое значение p равно нулю. В этом нет ничего плохого, но сразу возникает вопрос о том, насколько оценочное значение p может отличаться от правильного? Поскольку выборочное распределение пропорции (такой как предполагаемое значение p) является биномиальным, эту неопределенность можно устранить с помощью биномиального доверительного интервала .
Архитектура
Хорошо продуманная реализация будет внимательно следить за обсуждением во всех отношениях. Он будет начинаться с подпрограммы для вычисления статистики теста, так как эта будет сравнивать средние значения двух групп:
diff.means <- function(control, treatment) mean(treatment) - mean(control)
Напишите другую подпрограмму для генерации случайной перестановки набора данных и примените тестовую статистику. Интерфейс этого позволяет вызывающей стороне предоставлять статистику теста в качестве аргумента. Он будет сравнивать первые m
элементы массива (предположительно эталонную группу) с остальными элементами (группа «обработка»).
f <- function(..., sample, m, statistic) {
s <- sample(sample)
statistic(s[1:m], s[-(1:m)])
}
Тест перестановки выполняется сначала путем нахождения статистики для фактических данных (предполагается, что они здесь сохраняются в двух массивах control
и treatment
), а затем нахождения статистики для многих независимых случайных перестановок:
z <- stat(control, treatment) # Test statistic for the observed data
sim<- sapply(1:1e4, f, sample=c(control,treatment), m=length(control), statistic=diff.means)
Теперь вычислите биномиальную оценку значения p и доверительный интервал для него. Один метод использует встроенную binconf
процедуру в HMisc
пакете:
require(Hmisc) # Exports `binconf`
k <- sum(abs(sim) >= abs(z)) # Two-tailed test
zapsmall(binconf(k, length(sim), method='exact')) # 95% CI by default
Нет ничего плохого в том, чтобы сравнить результат с другим тестом, даже если известно, что он не совсем применим: по крайней мере, вы можете получить представление о том, где должен лежать результат. В этом примере (сравнения средств) t-критерий Стьюдента обычно дает хороший результат:
t.test(treatment, control)
Эта архитектура проиллюстрирована в более сложной ситуации с рабочим R
кодом в разделе «Тестируют ли переменные одно и то же распределение» .
пример
100201,5
set.seed(17)
control <- rnorm(10)
treatment <- rnorm(20, 1.5)
После использования предыдущего кода для запуска теста перестановки я нанес на график образец распределения перестановок вместе с вертикальной красной линией, чтобы отметить фактическую статистику:
h <- hist(c(z, sim), plot=FALSE)
hist(sim, breaks=h$breaks)
abline(v = stat(control, treatment), col="Red")
Биноминальный расчет доверительного интервала привел к
PointEst Lower Upper
0 0 0.0003688199
00,000373.16e-05
0,000370,000370,050,010,001
Комментарии
КN к / с( k + 1 ) / ( N+ 1 )N
10102= 1000.0000051,611,7частей на миллион: немного меньше, чем сообщил t-критерий Стьюдента. Хотя данные были получены с помощью обычных генераторов случайных чисел, что оправдывало бы использование t-критерия Стьюдента, результаты теста на перестановку отличаются от результатов t-критерия Стьюдента, поскольку распределения в каждой группе наблюдений не совсем нормальные.
a.random
b.random
b.random
a.random
coding
lncrna