【问题标题】:How should I interpret a Spearman's rank correlation significance of zero?我应该如何解释 Spearman 的秩相关显着性为零?
【发布时间】:2015-06-28 23:23:50
【问题描述】:

我正在使用corr 计算两个向量之间的 Spearman 等级相关系数。

[rho, p] = corr(freq_type1, freq_type2, 'type', 'Spearman');

这些向量表示不同类型文档中术语的频率。例如,type1 可能是网页,type2 可能是报纸文章。所以每个向量freq_type1freq_type2n 的1,其中n 是我词汇表中的术语数。我计算等级相关性的原因是我想能够说明不同类型文档之间词汇表的频率是否不同。我对每个向量进行归一化,以便排名对应于每个词汇术语出现在文档中的百分比。

上面的调用返回 rho = .8879 和 p = 0

据我了解,当 p 很小时,相关性很显着,但这非常小,我有点担心。

我的第一个想法是该函数可能没有为 Spearman 方法返回 p 值。为了测试该方法,我尝试计算两个随机向量的相关性。

[rho, p] = corr(rand(5,1), rand(5,1), 'type', 'Spearman');

这将返回 rho = 0.80 和 p = 1.3,因此该函数似乎正在运行。

这就是我的数据分布在 loglog 图上的样子。

Matlab documentation for corr 开始,Spearman 的 p 值是使用置换分布计算的。

这是我对这个计算如何工作的理解,建立在关于 permutation testing 的维基百科文章的基础上。最初,相关系数计算为 “检验统计量的观察值,T(obs)”。 然后将两个输入集混合在一起,并测试混合数据点的所有可能重采样的相关系数。检验的单侧 p 值计算为相关性大于或等于 T(obs) 的采样排列的比例。检验的两侧 p 值是它小于或等于 T(obs) 的比例。

因此,要使 p 值为零,我需要使采样排列的所有相关系数都大于或小于 T(obs)。这似乎极不可能,因为我的数据点并不完全在一条线上。

排名相关性是否要求数据以均值为中心或其他约束?

这是一个link to the data on Dropbox,如果你想看看你是否得到相同的结果。

【问题讨论】:

  • 我建议您在统计堆栈交换网站上发布一个问题/寻找答案 - 这个问题不是编程问题。此外,我建议您发布指向 matlab 函数文档的链接,以便人们查找。
  • @TryHard 问题中有一个指向文档的链接,但我可以将它放在问题的前面以便更清楚。我将研究这个问题是否适合统计堆栈交换。
  • 我唯一的评论是(而且我对这个主题并不熟悉)这听起来很奇怪:“如果所有重采样的相关系数相同,则数据集没有关系。”你能提供更直接的链接来支持该声明?
  • @TryHard 我回去查看了我的来源,我肯定误解了 p 值计算。我已经更新了我的问题,以明确说明我在描述我对 p 值计算的理解,并更正了该描述。
  • 我不得不同意你的结果很奇怪。有什么方法可以链接到数据?

标签: matlab correlation


【解决方案1】:

您必须在其他地方寻找深入的统计建议,但我可以展示 Octave(MATLAB 克隆)代码正在做什么(顺便说一句,它返回的结果与您观察到的完全相同)。以下是用观察值注释的相关代码:

    % --> from previous computations, R =  0.88786, NN=1540

    % SIGNIFICANCE TEST
    tmp = 1 - R.*R;

    % --> tmp =  0.21171

    t   = R.*sqrt(max(NN-2,0)./tmp);

    % --> t =  75.675

    sig = tcdf(t,NN-2);

    % --> sig =  1

    sig  = 2 * min(sig,1 - sig);

    % --> sig = 0  (same as p which is reported)

同样,您可能想咨询更熟悉统计数据的人以了解这些步骤,但我的结论是,是的,鉴于数据集的庞大规模,毫无疑问存在显着(非零)相关性。

【讨论】:

    【解决方案2】:

    我同意 p=0 很奇怪。但对我来说,这是你的第二个例子,表明一切都不好。 “p = 1.3”表示它没有给出标准的 p 值,因为 p 是概率,因此必须介于 0 和 1 之间。您的 p>1!!

    我用

    cor.test(datafr$variable1, datafr$variable2, method="spearman")

    这会返回一个标准的 rho 和 p :但我从未尝试过使用您描述的向量(而不仅仅是数据集)。

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 2011-12-28
      • 2018-05-09
      • 2018-02-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多