一、需要实现的函数(参考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计算功能基因组](个人偶然发现的一个,不算什么底层库)
中的statistics.cpp有相关的函数C++版本
其中包含有chi2cdf、Normal01CDF、GammaLog、SampleGammaLogStandard
其中的IncompleteBeta (不完全beta积分)R中的beta_inc
包含有:WilcoxonRankSum
Sleipnir中还包含贝叶斯相关,聚类相关,SVM等
2. Lapack、BLAS Lapcak不解释,接触计算矩阵类底层必须要用到的,主要是实现了矩阵操作,矩阵分解等,最小二乘。。。BLAS:基础线性代数程序集(主要实现矢量或矩阵乘法)等。
3. GSL(GNU scientific lib.)[线性代数部分采用BLAS来实现]包含有:FFT(傅立叶变换),cdf(相关的概率分布函数)等,功能较全,可以参考。具体参见:
6. pspp:,仿照SPSS的统计类开源软件,PSPP还是一个成长中的项目,目前还不能替代SPSS的全部功能。但其已经可以实现很多基本功能,满足一般用户的需求。PSPP的成长速度很快,新特性在不断被添加到新版本中。我们有理由相信,它能够在不久的将来替代SPSS等商业软件。
7. scilab
:
SCILAB
是由
国家信息、自动化研究院
(INRIA)
的科学家们开发的
“
开放源码
”
软件
。
SCILAB
一词来源于英文
“ScientificLaboratory"
(科学实验室)词头的合并。
Scilab
语言也是一种交互性的数学脚本语言,语法与
MATLAB
语言相近,也以矩阵作为数据的基本组织形式。
Scilab
还有一个可以把
MATLAB
源程序转换为
Scilab
源程序的代码翻译器。参见: