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

Я пытаюсь реализовать тест Колмогорова-Смирнова с двумя выборками из пакета Scipy, чтобы проверить, есть ли разница в распределении двух выборок. Образцы представляют собой футболки размеров (S, M, L, XL и XXL), проданные в два разных периода. Я хочу проверить, различается ли распределение размеров между двумя периодами.

Моя проблема заключается в том, что я получаю очень разные результаты, когда предварительно вычисляю проценты от общего количества для каждого размера по сравнению с использованием необработанных данных. Я не понимаю этого, поскольку проценты по-прежнему представляют одно и то же распределение.

Вот код, который я использовал (x и y — необработанные данные, x1 и y1 — рассчитанные проценты):

from scipy.stats import ks_2samp

x = (254, 526, 576, 622, 409)
y = (92, 214, 366, 365, 287)

x1 = (10.6, 21.9, 24.0, 25.9, 17.1)
y1 = (7.0, 16.2, 27.7, 27.7, 21.7)


print(ks_2samp(x, y))
print(ks_2samp(x1, y1))

И это два разных результата, которые я получаю:

Ks_2sampResult (статистика = 0,80000000000000004, pvalue = 0,03614619076928504) Ks_2sampResult (статистика = 0,400000000000000002, pvalue = 0,69740487802059081)


person DavidK11    schedule 04.06.2017    source источник


Ответы (1)


Тест инвариантен относительно масштабирования данных, если к обеим выборкам применяется одно и то же масштабирование. Преобразовав выборки в проценты, вы применили различное масштабирование к двум выборкам. В частности, вы умножили первый набор данных на 100/2387, а второй набор данных умножили на 100/1324.


Кстати, я не думаю, что тест Колмогорова-Смирнова (КС) подходит для этих данных. Тест KS предназначен для образцов из непрерывного распределения. Я хотел бы смоделировать ваши данные как наблюдаемые частоты в выборке из дискретного распределения, пространство выборки которого равно {S, M, L, XL, XXL}. Одним из распространенных инструментов для анализа таких данных является критерий хи-квадрат для таблицы непредвиденных обстоятельств, который реализован в scipy как scipy.stats.chi2_contingency:

In [110]: x
Out[110]: array([254, 526, 576, 622, 409])

In [111]: y
Out[111]: array([ 92, 214, 366, 365, 287])

In [112]: a = np.vstack((x, y))

In [113]: a
Out[113]: 
array([[254, 526, 576, 622, 409],
       [ 92, 214, 366, 365, 287]])

In [114]: from scipy.stats import chi2_contingency

In [115]: chi2, p, dof, expected = chi2_contingency(a)

In [116]: p
Out[116]: 2.1980217327784848e-08

Будьте осторожны с интерпретацией этого, потому что "при достаточном количестве данных все имеет значение".

person Warren Weckesser    schedule 04.06.2017
comment
Спасибо за ответ, который прояснил это для меня. - person DavidK11; 08.06.2017