Matlab获取相关性p值的方法

时间:2016-08-17 14:23:33

标签: matlab

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

我在Matlab中使用了corrcoef,类似这样:

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

根据我的理解,对此相关性进行t检验R(1,2)以获得等于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的结果仍然存在很多差异。

1 个答案:

答案 0 :(得分:2)

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

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

您可以看到相关系数进行双边测试。