Реализация теста перестановки в Python с номером перестановки в качестве входных данных

5

R хорошо известная библиотека для теста на перестановку, то есть perm. Пример, который меня интересует, заключается в следующем:

 x <- c(12.6, 11.4, 13.2, 11.2, 9.4, 12.0)
 y <- c(16.4, 14.1, 13.4, 15.4, 14.0, 11.3)
 permTS(x,y, alternative="two.sided", method="exact.mc", control=permControl(nmc=30000))$p.value

Результат печати с p-значением: 0.01999933. Обратите внимание, что функция permTS позволяет вводить число перестановок = 30000. Есть ли такая аналогичная импликация в Python?

Я смотрел на Python perm_stat, но это не то, что я ищу, и кажется быть глючным.

Теги:
testing
statistics

1 ответ

13
Лучший ответ

Это возможная реализация теста перестановки с использованием метода monte-carlo:

def exact_mc_perm_test(xs, ys, nmc):
    n, k = len(xs), 0
    diff = np.abs(np.mean(xs) - np.mean(ys))
    zs = np.concatenate([xs, ys])
    for j in range(nmc):
        np.random.shuffle(zs)
        k += diff < np.abs(np.mean(zs[:n]) - np.mean(zs[n:]))
    return k / nmc

обратите внимание, что, учитывая монте-карло характер алгоритма, вы не получите точно такое же число в каждом прогоне:

>>> xs = np.array([12.6, 11.4, 13.2, 11.2, 9.4, 12.0])
>>> ys = np.array([16.4, 14.1, 13.4, 15.4, 14.0, 11.3])
>>> exact_mc_perm_test(xs, ys, 30000)
0.019466666666666667

Ещё вопросы

Сообщество Overcoder
Наверх
Меню