Обговорення
Тест перестановки генерує всі відповідні перестановки набору даних, обчислює призначену статистику тесту для кожної такої перестановки і оцінює фактичну статистику тесту в контексті отриманого перестановкою розподілу статистики. Поширений спосіб його оцінювати - повідомляти про частку статистичних даних, які є (в деякому сенсі) "як або більш крайніми", ніж фактичні статистичні. Це часто називають "р-значенням".
Оскільки фактичний набір даних є однією з таких перестановок, його статистика обов'язково буде серед тих, що виявляються в рамках розподілу перестановок. Тому значення р ніколи не може бути нульовим.
Якщо набір даних дуже малий (як правило, менше приблизно 20-30 загальних чисел) або тестова статистика має особливо гарну математичну форму, неможливо здійснити генерацію всіх перестановок. (Приклад, коли генеруються всі перестановки, з’являється на тесті перестановки в Р. ). Тому комп'ютерні реалізації тестів на перестановку зазвичай вибирають з розподілу перестановки. Вони роблять це шляхом створення деяких незалежних випадкових перестановок і сподіваються, що результати є репрезентативним зразком усіх перестановок.
Тому будь-які числа (наприклад, "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)
Тепер обчисліть біноміальну оцінку р-значення та довірчий інтервал для нього. Один метод використовує вбудовану 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-050,000370,000370,050,010,001
Коментарі
кN к / н( k + 1 ) / ( N+ 1 )N
10102= 1000,0000051.611.7частин на мільйон: трохи менше, ніж повідомляв тест Student. Хоча дані генерувались із звичайними генераторами випадкових чисел, що могло б виправдати використання t-тесту Стьюдента, результати перестановки перестановки відрізняються від результатів тесту Стьюдента, оскільки розподіли в межах кожної групи спостережень не є абсолютно нормальними.
a.randomb.randomb.randoma.randomcodinglncrna