对两个词典执行双样本 Kolmogorov-Smirnov 检验

Perform two-sample Kolmogorov-Smirnov test on two dictionaries

我有两个字典,其中包含两个离散分布:A={1: 300, 2: 400, 4: 20,...}B={2: 100, 3: 200 , 4: 75,...}。我想检查它们的相似程度,我想执行两个样本 Kolmogorov-Smirnov test.

我检查了 scipy function 但它似乎只适用于 numpy 数组,我如何在我的数据上执行它?

也许将您的字典值转换为 numpy 数组:

import numpy as np
import scipy
a = np.array(list(A.values()))
b = np.array(list(B.values()))
scipy.stats.ks_2samp(a, b)

您可以轻松地将数据转换为 numpy.array

import numpy as np

my_keys = sorted(set([*A.keys(), *B.keys()]))

A_array = np.array(A.get(key,0) for key in my_keys)
B_array = np.array(B.get(key,0) for key in my_keys)

我注意到 AB 没有相同的键(例如,B 似乎不包含键“1”) - 所以你需要支付注意那个。我找到键的并集并在字典中不存在键时将值强加为 0 的原因(我假设在这种情况下,您对该特定键没有任何观察)。

现在两个数组可以兼容进行测试了。

您可以创建一个 pandas 数据框来轻松处理 N/A 值。然后 运行 您对生成的数据框列的统计信息。 显然你不能比较两个没有相同键的系列。

data_frame = pd.DataFrame(dict(s1=A,s2=B)).dropna()
stats = stats.ks_2samp(data_frame.iloc[:, 0], data_frame.iloc[:, 1])