计算 php 中的正态分布概率
Calculate normal distribution probability in php
我需要使用这个 table 从给定的 z 值获得概率:
https://statistics.laerd.com/statistical-guides/img/normal-table-large.png
我确定应该有更好的方法来获取 php 上的这些值,但不知道如何计算它们。
任何帮助将不胜感激。
Table,我相信,是CDF的normal distribution。我使用表达式对它进行编码
error function 近似值。
代码未经测试!
function sgn( $x ) {
if ( $x < 0 )
return -1;
return 1;
}
function erf( $x ) {
$e = exp(-$x*$x);
$e2 = exp(-$x*$x*2);
$q = sqrt(pi())/2 + 31*$e/200 - 341*$e2/8000;
return 2*sgn($x)*sqrt(1-$e)*$q/sqrt(pi());
}
function CDF( $x ) {
return (1 + erf($x / sqrt(2))) / 2;
}
print_r(CDF(0));
print_r(CDF(0.1));
....
更新
这是快速(未经测试!)的代码,用于计算最多 4 个项的 erf()
function erf( $x ) {
$e = exp(-$x*$x);
$t = 1.0 - $e;
$s = 1. + $t*(-1./12. + $t*(-7./480. + $t*( -5./896. +$t * (-787./276480.))));
return 2.*sgn($x)*sqrt($t)*$s/sqrt(pi());
}
我需要使用这个 table 从给定的 z 值获得概率:
https://statistics.laerd.com/statistical-guides/img/normal-table-large.png
我确定应该有更好的方法来获取 php 上的这些值,但不知道如何计算它们。 任何帮助将不胜感激。
Table,我相信,是CDF的normal distribution。我使用表达式对它进行编码 error function 近似值。
代码未经测试!
function sgn( $x ) {
if ( $x < 0 )
return -1;
return 1;
}
function erf( $x ) {
$e = exp(-$x*$x);
$e2 = exp(-$x*$x*2);
$q = sqrt(pi())/2 + 31*$e/200 - 341*$e2/8000;
return 2*sgn($x)*sqrt(1-$e)*$q/sqrt(pi());
}
function CDF( $x ) {
return (1 + erf($x / sqrt(2))) / 2;
}
print_r(CDF(0));
print_r(CDF(0.1));
....
更新
这是快速(未经测试!)的代码,用于计算最多 4 个项的 erf()
function erf( $x ) {
$e = exp(-$x*$x);
$t = 1.0 - $e;
$s = 1. + $t*(-1./12. + $t*(-7./480. + $t*( -5./896. +$t * (-787./276480.))));
return 2.*sgn($x)*sqrt($t)*$s/sqrt(pi());
}