|
计算两组数据的相关性的方法有很多,比如用R语言可以这样算:
c1 <- c(1,2,3)
c2 <- c(2,3,5)
cor(c1,c2)
可以得到两组数据的相关性系数为0.9819805
算相关性的P值用:
cor.test(c1,c2)
得到:
t = 5.1962, df = 1, p-value = 0.121
P值大于0.05,说明相关性不显著
因为对R语言不熟,又需要批量计算,所以就用Perl语言来还原R中的这一过程,发现却不是那么一蹴而就的。
Perl语言中计算correlation的模块可以找到,比如Math::GSL::Statistics模块的gsl_stats_correlation()函数,或者Statistics::Basic中的correlation()函数。但是却没有一个叫做correlation_test的函数或者correlation_pvalue的函数。因此需要手动计算。
首先根据相关性系数r 计算 t值
t=r/sqrt[(1-r2)/(N-2)]
其中N为元素个数
然后利用PDL::GSL::CDF模块中t 检验的概率密度分布函数gsl_cdf_tdist_P,计算2尾测验的P值,用公式:
p_2tail = 2 * (1 - gsl_cdf_tdist_P( abs(t), N-2 ));
这里N-2为自由度,t值要取绝对值。
虽然这看起来很简单,2个Perl模块,2个公式,不过对于不擅长统计学的人来说,找起来确实费一番功夫。而且这只是计算概率的Pearson方法,R语言还支持另外两种计算概率的方法: Kendall和Spearman。
参考资料:
p-Value Calculator for Correlation Coefficients:http://www.danielsoper.com/statcalc3/calc.aspx?id=44
http://search.cpan.org/~etj/PDL-Stats-0.73/GENERATED/PDL/Stats/Basic.pm#t_corr
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-28 08:47
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社