2

我想为一些 numpy 数组(每个数组的长度不同)制作一组可比较的经验 CDF,并将它们存储在 pandas 数据框中:

a = scipy.randn(100)
b = scipy.randn(500)
# ECDF from statmodels
cdf_a = ECDF(a)
cdf_b = ECDF(b)

问题是它们cdf_a.x, cdf_a.y的长度不同cdf_b.x, cdf_b.y,我希望它们的长度相同,即使用相同数量的 bin 来计算 CDF,以便可以从 pandas DataFrame 以相同的比例绘制它们。这是不可能的:

df = pandas.DataFrame({"cdf_a": cdf_a.y, "cdf_b": cdf_b.y})

由于 cdf 的长度不同。在计算 CDF 时如何分箱ab使用类似的箱,以便我得到可比较的相同长度的向量?

这是最好的解决方案吗?

bins = np.linspace(0, 1, 10)
v1 = cdf_a(bins)
v2 = cdf_b(bins)
4

2 回答 2

1

我们在拟合优度测试中使用它的方式是堆叠数组,因此它们是在所有点上定义的,来自两个数组的点。

然后使用 np.searchsorted 得到排名,数据集 1 中低于 x 的点数和数据集 2 中低于 x 的点数。

如果我没记错的话,看看 scipy.stats.ks_2samp

data1 = np.sort(data1)
data2 = np.sort(data2)
data_all = np.concatenate([data1,data2])
cdf1 = np.searchsorted(data1,data_all,side='right')/(1.0*n1)
cdf2 = (np.searchsorted(data2,data_all,side='right'))/(1.0*n2)
于 2013-04-03T22:36:22.863 回答
0

看来这是一个很好的解决方案:

bins = np.linspace(0, 1, 10)
v1 = cdf_a(bins)
v2 = cdf_b(bins)

然后len(v1) == len(v2),这些可以绘制为a, b相同比例的 CDF。

于 2013-04-03T22:32:55.817 回答