scipy.stats.ks_2samp
уже поддерживает то, что вы хотите. Вам просто нужно указать направление, в котором вы хотите проверить, то есть какой образец считается большим или меньшим, чем другой.
Эта опция для установки alternative
, однако, доступна только начиная с scipy 1.3.0.
ks_2samp(a, b, alternative='less') # get p-value for testing if a < b
ks_2samp(a, b, alternative='greater') # get p-value for testing if a > b
Редактировать: Чтобы определить значение x, где произошло наибольшее различие, вы можете использовать эту функцию (в основном копирование-вставка из источника ks_2samp
):
def ks_2samp_x(data1, data2, alternative="two-sided"):
data1 = np.sort(data1)
data2 = np.sort(data2)
n1 = data1.shape[0]
n2 = data2.shape[0]
data_all = np.concatenate([data1, data2])
# using searchsorted solves equal data problem
cdf1 = np.searchsorted(data1, data_all, side='right') / n1
cdf2 = np.searchsorted(data2, data_all, side='right') / n2
cddiffs = cdf1 - cdf2
minS = np.argmin(cddiffs) # ks_2samp uses np.min or np.max respectively
maxS = np.argmax(cddiffs) # now we get instead the index in data_all
alt2Dvalue = {'less': minS, 'greater': maxS, 'two-sided': max(minS, maxS)}
d_arg = alt2Dvalue[alternative]
return data_all[d_arg]