李雷廷的个人博客分享 http://blog.sciencenet.cn/u/llt001

博文

利用Perl计算相关性系数的P值

已有 10807 次阅读 2015-11-28 17:29 |系统分类:科研笔记

计算两组数据的相关性的方法有很多,比如用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。

参考资料:

http://stackoverflow.com/questions/919031/how-do-i-get-t-statistics-and-p-values-of-correlations-in-perl

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

 




https://blog.sciencenet.cn/blog-656335-939436.html

上一篇:SourceTree vs GitHub Desktop
下一篇:Wiley网站打开速度好慢啊
收藏 IP: 218.2.227.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的精选博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-28 08:47

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部