PHPで統計関数を使えるようにするライブラリにstatsがあります。その使い方を説明します。
pearを使ってインストールします。
# pear install stats
/etc/php.iniに以下を追加します。
extension = stats.so
ポアソン分布のパラメーターλはある事象が単位時間に起きる平均の数です。例えば1日に平均4回電話がかかってくるとすると、1日に電話のなる回数とその確率は以下のように計算できます。
<?php $lambda = 4; for($x = 0 ; $x <= 10 ; $x ++){ printf("$x: %.5f\n", stats_dens_pmf_poisson($x, $lambda)); }
累積分布確率は以下のように計算できます。
<?php $lambda = 4; for($x = 0 ; $x <= 10 ; $x ++){ printf("$x: %.5f\n", stats_cdf_poisson($x, $lambda, 1)); }
1がでる確率が1/6であるさいころを10回振って、1が2回でる確率を以下のように計算します。
<?php $p = 1 / 6; var_dump(stats_dens_pmf_binomial(2, 10, $p));
累積分布確率(stats_cdf_binomial)は以下のように計算できます。
<?php $p = 1 / 6; for($x = 0 ; $x <= 10 ; $x ++){ printf("$x: %.5f %.5f\n", stats_dens_pmf_binomial($x, 10, $p), stats_cdf_binomial($x, 10, $p, 1)); }
カイ二乗分布の確率密度関数(stats_dens_chisquare)と累積分布関数(stats_cdf_chisquare)は以下のように使用します。
<?php $f = 1; for($x = 0 ; $x <= 10 ; $x ++){ printf("$x: %.5f %.5f\n", stats_dens_chisquare($x, $f), stats_cdf_chisquare($x, $f, 1)); }
本来stats_cdf_関数群は最後の引数に2を指定することで逆関数(確率からxを求める)になるはずですが、バグのためなりません。解決方法はこちらにありますが、面倒そうなのでやりません。