Функция scipy ks_2samp дает хорошие D_statisti c, но неправильное значение p_value - PullRequest
1 голос
/ 29 мая 2020

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

from scipy.stats import ks_2samp
import numpy as np

x = list(np.random.normal(10, 1, 3000))
y = list(np.random.normal(12, 1, 2000))
d_statistic, p_value = ks_2samp(x, y)

С scipy версиями старше 1.3 я получаю следующие результаты: d_statisti c = 0.67317 и p_value = 0.0

Однако с scipy версии> = 1.3: d_statisti c = 0.6705 и p_value = 0.9904774590824749

Оба дают почти одинаковый d_statisti c, но самые последние версии scipy, похоже, дают мне неправильное p_value, и я не понимаю, почему . Действительно, x и y - это две выборки, которые не принадлежат одной и той же совокупности.

Я провел небольшое исследование, и, поскольку scipy == 1.3 был выпущен «точный» режим, он является режимом по умолчанию для небольших выборок (len (x), len (y) <= 10000, что и в моем случае). Однако, если я изменю режим с «точного» на «асимптотический», я получу те же результаты, что и в самых старых версиях scipy. </p>

d_statistic, p_value = ks_2samp(x, y, mode='asymp')

Есть ли проблема с «точным» режимом при вычислении p_value или я что-то упустил?

Спасибо за вашу помощь, h1t5uj1

1 Ответ

1 голос
/ 03 июня 2020

Для тех, кто столкнется с той же проблемой, что и я. Это ошибка, которая появляется, когда размер выборки превышает несколько тысяч (кредит pvanmulbregt, который решил эту проблему: https://github.com/scipy/scipy/issues/11184). Это должно быть решено в версии 1.5.0 файла scipy. Тем временем вы можете изменить режим с «точного» на «асимп» или просто понизить свою версию scipy.

Надеюсь, это поможет, H1t5uj1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...