(转载)概率统计方面的底层需要实现的相关函数

转载自http://blog.csdn.net/youjiahui/article/details/8831182

目的:了解一下概率统计方面有哪些函数,至于原作者的C++实现并无意查看更多。

一、需要实现的函数(参考matlab命名规则)

密度函数:normpdf,chi2pdf,fpdf,tpdf

分布函数:normcdf,chi2cdf,fcdf,tcdf

方差、均值:normstat,chi2stat,fstat,tstat

逆累积分布:norminv,chi2inv,finv,tinv

假设检验:ttest,test2,ztest, ,signtest, kstest,kstest2,jbtest,signrank,ranksum

参数估计:unifit、normfit、binofit、expfit、poissfit、[gamfit、weibfit、betafit,—未实现]

betalike、gamlike、normfit、weibfit[只实现输出一个参数]

需要实现全部代码的double vector,matrix三种形式的输入输出

对比结果工具:MATLAB , R ,Eviews,SPSS,SAS (可能几个结果会有不一致)

其中matlab在实现密度函数、分布函数、逆累积分布时是利用函数概念定义,采用的是充分利用matlab自身的矩阵运算快和强大的数值积分微分操作来实现。精度高,需要精度较高时效率降低。

密度函数、分布函数主要参考R的底层在R源码包的src中的nmath下,

其中开头为d代表密度函数   —–对应matlab的pdf

p代表分布函数   —–对应matlab的cdf

q代表分位数———未使用

r 代表按照某种分布生成随机数—未使用

Normal  (guass)

R 中dnorm是直接按照定义操作,在使用时先计算x = (x – mu) /sigma,避免在下面计算时重复进行。

R在pnorm时使用有理切比雪夫来近似结果(参考文章:Rational Chebyshevapproximations for the error function,W. J. Cody, Math. Comp., 1969, 631-637)

Chisq

R 中的dchisq是直接的调用了dgamma,因为卡方分布是伽玛分布的一种特殊形式。在dgamma中调用dpois_raw,计算泊松概率。

R中的pchisq是直接调用pgamma。

F分布,T分布

R中的df,dt,pf,pt

normstat,chi2stat,fstat,tstat

根据matlab代码而写

Norminvfinv chi2inv tinv

参考GSL底层库

在GSL源码的其中的cdf文件夹下

Gaussinv为对应matlab中的norminv

Fdistinv对应matlab中的finv

Chisqinv对应matlab中的chi2inv

Tdistinv对应matlab中的tinv

ttest,test2,ztest,,signtest

参考matlab源码和本身的概念定义

kstest,kstest2,jbtest,signrank,ranksum

kstest、kstest2 参考R的底层 ——— src\library\stats\R下的ks.test.R需要用到src\library\stats\src下的ks.c

signrank,ranksum参考R的底层——-src\library\stats\R下的wilcox.test.R需要用到nmath下的wilcox.c

jbtest参考R的外部加载包tserise包中的test.R  jarque.bera.test

参数估计:

normfit参考概念与定义,参考matlab源码

二、相关底层库

1.Sleipnir[harvard 计算功能基因组](个人偶然发现的一个,不算什么底层库)

http://huttenhower.sph.harvard.edu/sleipnir/

中的statistics.cpp有相关的函数C++版本

其中包含有chi2cdf、Normal01CDF、GammaLog、SampleGammaLogStandard

其中的IncompleteBeta (不完全beta积分)R中的beta_inc

包含有:WilcoxonRankSum

Sleipnir中还包含贝叶斯相关,聚类相关,SVM等

2. Lapack、BLAS  Lapcak不解释,接触计算矩阵类底层必须要用到的,主要是实现了矩阵操作,矩阵分解等,最小二乘。。。BLAS:基础线性代数程序集(主要实现矢量或矩阵乘法)等。

Lapack:http://www.netlib.org/lapack/

BLAS:http://www.netlib.org/blas/

3. GSL (GNU scientific lib.)[线性代数部分采用BLAS来实现]包含有:FFT(傅立叶变换),cdf(相关的概率分布函数)等,功能较全,可以参考。具体参见:http://www.gnu.org/software/gsl/

4. R 强大的概率统计等,加载包有4000多,详见:http://www.r-project.org/ 。R中的各种外部加载包介绍:http://cran.r-project.org/web/packages/available_packages_by_date.html

5.octave:http://www.gnu.org/software/octave/, Octave最初便是模彷Matlab而设计,自然与Matlab有许多相同的功能。

6. pspp:http://www.gnu.org/software/pspp/,仿照SPSS的统计类开源软件,PSPP还是一个成长中的项目,目前还不能替代SPSS的全部功能。但其已经可以实现很多基本功能,满足一般用户的需求。PSPP的成长速度很快,新特性在不断被添加到新版本中。我们有理由相信,它能够在不久的将来替代SPSS等商业软件。

7. scilab:SCILAB 是由法国国家信息、自动化研究院(INRIA)的科学家们开发的“开放源码”软件。SCILAB 一词来源于英文 “ScientificLaboratory”(科学实验室)词头的合并。Scilab语言也是一种交互性的数学脚本语言,语法与MATLAB语言相近,也以矩阵作为数据的基本组织形式。Scilab还有一个可以把MATLAB源程序转换为Scilab源程序的代码翻译器。参见:https://www.scilab.org/

分享到: 更多

Leave a Reply