正态分布的分布函数及分位数的算法和编程技巧,本文主要内容关键词为:正态分布论文,位数论文,算法论文,函数论文,编程技巧论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
一般统计学教科书对正态分布的分布函数和分位数的算法较少介绍,本文在分析算法的基础上,用TRUE BASIC语言编写程序,讨论如何用计算机语言表现统计算法。
一、密度函数和分布函数
设连续随机变量x的密度函数为:
二、分布函数值和分位数的算法
(一)分布函数值的算法
(4)式不能被求解成为简单初等函数,所以不能直接用定义初等复合函数的方法计算其值,需要借助比较复杂的算法。一种比较直观的算法是把正态密度函数(1)式展开为泰勒级数,然后,对泰勒级数的各项求定积分,最后相加各项数值即得分布函数F(t)的值。
因为:
所以:
计算过程分为以下几步:
1.确定t的数值,代入(7)式;
2.(7)式是一个无穷级数,计算时只能对前面有限项相加。选择项数越多,结果愈准确。但数值精确度并不要求无限高,若4<t<5,选45项可使精度达到10[-7]以上;若t<4,选取20项就足够了。
3.定义一个中间函数JSX(t,n);用它表示每个级数项的值:
还有其它一些算法如连分式逼近、近似初等函数式等,这里给出一种近似初等函数式算法,不讨论推导过程:
这种算法有足够的精度且简单易行,其程序编写也比较简单,本文不讨论这种算法的编程。在后面的程序中,F(t)用NMLP(t)表示。
(二)分位数的算法
前面讨论的是根据给定的t值,计算出一个介于0与1之间的概率值F(t)(被称为分布函数值)的算法;现在讨论先给出一个概率值p,再求一个数值t[,p]使F(t[,p])=p,t[,p]为对应于概率p的正态分布的分位数。
根据(7)的定义,有下述等式:
这是一个求解非线性方程的问题,可用“基于二阶展开的迭代法”求解。
△是一个微增量,如果找到一个数值t[,0]使△足够小,则t[,0]为满足(12)式的t[,p],因为(12)式是(11)的近似展开式。
按上述算法从某个初始值开始通过多次迭代,可使△小于某个给定的误差值。具体算法如下:1.给定一个初始值t[,0],若t[,0]等于0,(13)式无意义,不妨设置为一个很小的数如0.00001;
2.计算(14)式中各变量的值;
3.按(13)式计算△,若(13)无实根解(即分子根号内的数值小于0),取:……(15)
4.如果△非足够小,在t[,0]上加一个小数,再按第2步计算△,通过试算发现:如果加上由(13)或(15)式计算的△,会有较大的误差,不妨加上△/4(分母也可为2,3,5等);
5.重复2,3,4的计算步骤直到△小于给定的误差值ε。
上述算法的计算框图如下
三、编程方法
按前面讨论的算法编程,把所有计算结果都设计成外部自定义函数,正态分布函数值用NMLP(T)表示,其变量是标准正态分布随机变量;正态分布分位数值用NMLT(P)表示,其自变量是标准正态分布随机变量小于某数值的概率。在计算这两个函数时还用到阶乘函数FACT(N),级数项函数JSX(T,N),正态分布密度函数及其一阶层数函数等。这些自定义函数在其他统计分析中(如回归分析,抽样估计,假设检验)被调用起来十分方便。