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

来源:互联网 发布:网络运行情况通报 编辑:程序博客网 时间:2024/06/03 20:21

一、需要实现的函数(参考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、[gamfitweibfitbetafit,---未实现]

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

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

对比结果工具: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. LapackBLAS  Lapcak不解释,接触计算矩阵类底层必须要用到的,主要是实现了矩阵操作,矩阵分解等,最小二乘。。。BLAS:基础线性代数程序集(主要实现矢量或矩阵乘法)等。

Lapackhttp://www.netlib.org/lapack/

BLAShttp://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.octavehttp://www.gnu.org/software/octave/,Octave最初便是模彷Matlab而设计,自然与Matlab有许多相同的功能。

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

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