我有一个大小为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 = 1 - tcdf(t, N-2).
然而,如果我以这种方式进行,我得到的p值与Matlab计算的p值不同。有人可以解释为什么,或者我在计算中遗漏了什么? 谢谢!
编辑:即使我做了双面测试(P = 2*(1-tcdf(abs(t), N-2))
),我和Matlab的结果仍然存在很多差异。
答案 0 :(得分:2)
您可能认为您的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
您可以看到相关系数进行双边测试。