Statistics 测量两个分布之间的差异

Statistics 测量两个分布之间的差异,statistics,distribution,Statistics,Distribution,我有一个样本程序的距离向量。我试图量化它们有多相似。我使用了样本组之间的欧几里德距离(每个值都属于一个桶,我们逐个桶进行比较),这很好。但是,需要对大量样本进行太多的比较 我想知道是否有一种有效的方法来建立一个索引来比较样本。样品是这样的-- 有许多方法可以描述“两种分布之间的差异”。具体和有针对性的回答需要更多关于潜在概率分布的细节 这完全取决于如何定义两个分布之间的差异。给你两个想法: A是一种非参数检验,用于测量两个累积/经验分布函数之间的“距离” 在信息论的语言中,两个分布之间的“距离”

我有一个样本程序的距离向量。我试图量化它们有多相似。我使用了样本组之间的欧几里德距离(每个值都属于一个桶,我们逐个桶进行比较),这很好。但是,需要对大量样本进行太多的比较

我想知道是否有一种有效的方法来建立一个索引来比较样本。样品是这样的--


有许多方法可以描述“两种分布之间的差异”。具体和有针对性的回答需要更多关于潜在概率分布的细节

这完全取决于如何定义两个分布之间的差异。给你两个想法:

  • A是一种非参数检验,用于测量两个累积/经验分布函数之间的“距离”
  • 在信息论的语言中,两个分布之间的“距离”是作为熵的变化来度量的

  • 更新[一年后] 重温这篇文章时,强调以下几点可能很重要:

  • 标准的两样本Kolmogorov-Smirnov(KS)检验假设基础分布是连续的。对于离散数据(原始帖子中的数据似乎是),另一种方法可能是使用两个示例KS测试的引导版本,如
    匹配::KS.boot
    中所示。有关更多详细信息,请参见,例如和
  • 如果原始帖子中的样本数据具有代表性,我不认为基于KS统计的测试或KL差异(或任何其他测试)会有非常有意义的答案。原因是每个样本的值基本上都为零(准确地说,80%以上的值为零)。再加上每个样本21个值的小样本量,意味着没有多少“剩余”来描述任何潜在分布
  • 更一般地说(忽略前一点中指出的限制),要计算所有成对组合的KL散度,可以执行以下操作

    library(entropy)
    library(tidyverse)
    expand.grid(1:length(lst), 1:length(lst)) %>%
        rowwise() %>%
        mutate(KL = KL.empirical(lst[[Var1]], lst[[Var2]]))
    
    由于KL散度不是对称的,我们需要计算成对KL散度矩阵的上下三角部分。为了减少计算时间,可以使用a,它只需要计算成对KL散度矩阵的上三角部分或下三角部分的KL散度(尽管对称KL散度版本本身需要计算两个KL散度,即
    KL(1->2)
    KL(2->1)
    但这可以通过优化的例行程序完成)


  • 这些观测是独立的,我们不想多次接触这些分布,因为我们有数百万个这样的分布。我试着使用库尔贝克-莱布勒散度,我不知道如何解释这些差异的意义。@JoyBangla我不知道你在问什么。数以百万计的观测数据对计算时间影响不大。如果要在不同的发行版之间建立相似性度量,请运行成对KS测试。成对KL发散也是如此。我不知道你所说的“解释差异有多大意义”是什么意思。这似乎更像是一个(基本的)统计问题,在这种情况下,SO不是合适的论坛,我推荐一本基本统计教科书。另请参见。瓦瑟斯坦距离如何?
    library(entropy)
    library(tidyverse)
    expand.grid(1:length(lst), 1:length(lst)) %>%
        rowwise() %>%
        mutate(KL = KL.empirical(lst[[Var1]], lst[[Var2]]))