【问题标题】:Implementing a 2-sample KS test with 3D data in Python在 Python 中使用 3D 数据实现 2 样本 KS 测试
【发布时间】:2016-09-25 03:06:11
【问题描述】:

我有两个 3D 分布,我想对这两个样本运行 Kolmogorov–Smirnov test 以测量它们的相似性。 scipy.stats 有一个在1 dimension 中实现的 2 样本 K-S 测试的实现,我在2 dimensions 中找到了一个实现,但在 3 维(或 N 维)中没有一个实现。

有人可以对 3D 分布实施 2 样本 K-S 检验吗?

【问题讨论】:

  • 嗨,斯坦利,这个问题是指使用 scipy.stats.ks_2samp(),我已经在我的问题中链接到该函数。该函数仅处理一维分布。我的问题是关于 3D 分布的,我觉得我在标题中已经非常清楚了,并且在正文中提到了 3 次——你能删除重复的标志吗?
  • @roving 标志将在 20 天左右后自动失效。
  • @StanleyR 不是骗子,请更新或删除您的评论。

标签: python scipy statistics similarity


【解决方案1】:

KS 测试不容易推广到多个维度;见the Wikipedia article on the KS test on that question。即使您可以找到或创建合适的概括,我想知道您是否真的想这样做,因为显着性测试通常在大型数据集上无用。

如果您想量化分布之间的差异,我的建议是考虑基于熵的量,例如互信息或 Kullback-Leibler 散度。

也许你可以在这里多说一下你的目标。

【讨论】:

  • 当然!我有一些风洞内的昆虫飞行数据。我有他们飞行的动力学模型。为了拟合我的模型参数,我正在运行一个优化算法,它模拟一个轨迹集合,并根据观察到的飞行集合对它们进行评分。
  • 为了对每个集合进行评分,我获取了每个运动学的分量(速度 x、y、z、加速度 xyz、位置 xyz、曲率)并计算了 Kullback-Liebler 散度。这给了我关于曲率 DKL 的问题(曲率以长尾分布,如果尾部中的箱不完全相同,DKL 会惩罚)。这就是为什么我决定改用 KS 测试,这让我解决了分箱问题。 3D KS 测试会给我一个统计分数,告诉我轨迹集合是否以与参考集合相同的方式分布。
  • 我忘了说,对于我的最终得分,我只是取了所有 DKL 的总和 sum(DKL(velocity_xcomponent_targ, velocity_xcomponent_ref) + DKL(velocity_ycomponent_targ, velocity_ycomponent_ref) + ...) 或最近, sum(ks_2samp(运动学组件))
  • 由于您正在模拟飞行,因此轨迹肯定很重要,而不仅仅是昆虫在某个时间点的分布。也许合适的拟合优度是模拟轨迹与具有相同初始条件的实际轨迹的距离。
  • 好的,这是有道理的,我明白你为什么专注于发行版。请注意,KS 比较度量,因此您需要的泛化是计算任意子集的度量(即总质量)并寻找最大差异。可能出于您的目的,仅考虑球体、椭球体或盒子或类似的东西就足够了。我不认为这可以简化为重复的一维问题。您可能最终为此编写了一些代码,但如果没有,至少这可以让您了解要查找的内容。如果有趣,我会尝试更详细地说明它。
猜你喜欢
  • 2021-04-14
  • 2019-09-30
  • 2018-09-15
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 2017-12-26
  • 2011-12-15
  • 1970-01-01
相关资源
最近更新 更多