【问题标题】:Matlab's way of getting p-values for correlationMatlab获取相关p值的方法
【发布时间】:2017-11-26 22:25:03
【问题描述】:

我有一个大小为 N 的向量 A,我想计算 A 与其他向量 B 的相关性的相关系数和 p 值。

我在 Matlab 中使用了 corrcoef,如下所示:

[R, P] = corrcoef(A, B) 

据我了解,对 R(1,2) 这种相关性进行 t 检验以获得等于 P(1,2) 的 p 值意味着计算检验统计量 t = sqrt(N-2)*R./sqrt(1-R.^2) 并通过

获得p值
P = 1 - tcdf(t, N-2). 

但是,如果我以这种方式进行,我得到的 p 值与 Matlab 计算的 p 值不同。有人可以解释为什么,或者我在计算中遗漏了什么吗? 谢谢!

编辑:即使我进行双面测试 (P = 2*(1-tcdf(abs(t), N-2))),我的结果和 Matlab 的结果仍然存在很多差异。

【问题讨论】:

  • p 值表达式不正确。它有时可以给出超过 1 的 p 值。

标签: matlab


【解决方案1】:

认为您的 t-stat 计算公式可能不正确。查看基本统计数据page,我们看到 t-stat 的公式如下所示。

看起来你正在做一个不需要的元素操作。

在 matlab 中做一个测试来证明这一点。

>> a=rand(14,1)

a =

    0.6110
    0.7788
    0.4235
    0.0908
    0.2665
    0.1537
    0.2810
    0.4401
    0.5271
    0.4574
    0.8754
    0.5181
    0.9436
    0.6377
>> b=rand(14,1)

b =

    0.0358
    0.1759
    0.7218
    0.4735
    0.1527
    0.3411
    0.6074
    0.1917
    0.7384
    0.2428
    0.9174
    0.2691
    0.7655
    0.1887

我首先为 a 和 b 创建两个随机向量。

>> [R,p]=corrcoef(a,b)

R =

    1.0000    0.2428
    0.2428    1.0000


p =

    1.0000    0.4030
    0.4030    1.0000

在这种情况下,R(1,2) 是我们的 rho,我的公式完全按照上面的方法计算。

t=R(1,2)*sqrt((length(a)-2)/(1-R(1,2)^2))
t =

    0.8670


>> p=2*(1-tcdf(t,length(a)-2))

p =

    0.4030

您可以看到相关系数进行了 2 边检验。

【讨论】:

  • 感谢您抽出宝贵时间回答!但我仍然不明白为什么做一个元素操作应该是一个问题......结果应该还是一样的,对吧?还。我实际上是在一个函数中使用它,该函数旨在同时处理 scala anr 矢量数据,这就是为什么我的公式是按元素编写的。如果我在向量或标量 R 上使用它也没关系 - 我以这种描述的方式(双面测试)获得的 p 值有时仍然与 Matlab 的不同。 (或者,如果您愿意,在向量 R 上使用它时,生成的 p 值向量的某些元素是不同的。)
  • 不确定您的用例有什么不同,我只是用您的公式重新编写了我的示例项目,并且 t 统计数据与我的公式完全匹配,该公式与 2 面测试的 matlab 输出匹配......检查你的R?
  • 嗯。 R向量看起来很好,它也是由Matlab直接计算出来的。但是一些结果似乎不同,尽管主要是第 4 位(很少更多) - 也许这只是由于舍入错误/不同的计算顺序或其他原因?我在发布问题之前考虑了这个想法,但它似乎仍然有太大的差异。现在我不知道该怎么想了。我想现在反正也没那么重要,但我真的很好奇。
  • 我用不同的随机向量做了一个测试。 p=2*(1-tcdf(t,length(a)-2)) 有时会给出与 corrcoef 相同的值,但有时会不同。在corrcoef的源代码中计算p的子函数比方程复杂得多。
【解决方案2】:

我检查了matlab和octave的相关源代码的p值。 octave的源码比较清楚。

变化

P = 2*(1-tcdf(abs(t), N-2))

s = tcdf(t,N-2);
P = 2 * min(s,1-s);

成功了。然后你会得到与corrcoef 相同的 p 结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2020-07-05
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多