Location : Home > Languages > Perl > Package
Title : Math::SymbolicX::Statistics::Distributions
Toolbox Logo

名称

 Math::SymbolicX::Statistics::Distributions - Math::SymbolicX における統計分布の処理


概要

use Math::SymbolicX::Statistics::Distributions ':all';

#####################################################
# 以下には手続き的インタフェースを示す

# ( :all でインクルード)
use Math::SymbolicX::Statistics::Distributions ':functions';

$dist = normal_distribution('mean', 'rmsd');
print $dist->value(mean => 5, rmsd => 2, x => 1);

# 同様に
$dist = gauss_distribution('mean', 'rmsd'); # normal_distribution と同様
$dist = bivariate_normal_distribution( 'mean1', 'rmsd1',
                                       'mean2', 'rmsd2',
                                       'correlation      );

# 式の導入(y*2 は平均、 z^3 は二乗平均平方根標準偏差)
$dist = normal_distribution('y*2', 'z^3');
print $dist->value(x => 0.5, y => 3, z => 0.2);

# 誤差関数を生成 (mean = 0; rmsd = 1)
$dist = normal_distribution(0, 1);
print $dist->value(x => 1);

#########################################################
# 以下にはパーサ/グラマインタフェースを示す。
# 上記に挙げた他のインタフェースとは正確には同じではない。

# ( :all でインクルード)
use Math::SymbolicX::Statistics::Distributions ':grammar';
use Math::Symbolic qw/parse_from_string/;

$dist = parse_from_string('normal()');
print $dist->value(mean => 5, rmsd => 2, x => 1);

# 同様に
$dist = parse_from_string('gauss(mean, rmsd)'); # same as normal()
$dist = parse_from_string( 'bivariate_normal(mean1, rmsd1,'
                                           .'mean2, rmsd2,'
                                           .'correlation  )' );

# 式の導入(y*2 は平均、 z^3 は二乗平均平方根標準偏差)
$dist = parse_from_string('normal(y*2, z^3)');
print $dist->value(x => 0.5, y => 3, z => 0.2);

# 誤差関数を生成 (mean = 0; rmsd = 1)
$dist = parse_from_string('normal(0, 1)');
print $dist->value(x => 1);

# キーワード 'boltzmann', 'bose', 'fermi' についても同様に稼動

説明

 本モジュールはいくつかのよく用いる分布に対する公式にアクセスできるようにしたものである。つまりユーザに好む分布を扱う機械を提供する Math::Symbolic モジュールである。
 モジュールは2つのスタイルで用いることができる。概要の前半で示したような、手続き型インタフェースであるしかしまったく異なるインタフェースも提供している。Math::Symbolic パーサを内部文字列を Math::Symbolic ツリーとしてパースできるように修正するものである。これは概要の後半に示したものである。
 全ての引数は双方のインタフェースでオプションである。
 式が、例えば 'mean' などの代わりに用いられても、Math::Symbolic ツリー としての分布公式に代入されるべきものとして処理する。
 引数の扱いについては後述する。
 用いたいインタフェーススタイルの選択方法についての詳細はエクスポートセクションを見よ。
 モジュールのグラマインタフェース版の引数については、詳細は分布に記述している関数インタフェースに対するものと同じコンセプトである。重要な差異は引数が Math::Symbolic ツリーとしてパースされる文字列でなければならないことである。
 1つ例外がある。もし文字列 'undef' が関数の引数として渡された場合、文字列は実際の undef に変換されるが、以下では問題にしない。

エクスポート

 デフォルトではモジュールはいかなる関数もエクスポートせず、 Math::Symbolic パーサに修正を与えない。Exporter 文法を用いて明示的に行う必要がある。
 もしパラメータを指定せずにモジュールを用いると(use Math:SymbolicX::Statistics::Distributions;) Math::SymbolicX::Statistics::Distributions::normal_distribution() のようにサブルーチン名を指定することで利用可能ではあるが、かなり面倒である。

 以下の関数名を指定することで分布関数をエクスポートすることができる。

use Math::SymbolicX::Statistics::Distributions qw/gauss_distribution/;
# そうすれば
$dist = gauss_distribution(...);

 ':functions' タグを使えば全てインポートできる。

use Math::SymbolicX::Statistics::Distributions qw/:functions/;
...

 または上述の関数名を用いたのと同じ方法で以下のキーワードを利用することで Math::Symbolic パーサを修正することができる。

normal_grammar
gauss_grammar
bivariate_normal_grammar
cauchy_grammar
boltzmann_grammar
bose_grammar
fermi_grammar

 全てのキーワード(normal(), gauss(), bivariate_normal(), cauchy(), boltzmann(), bose(), fermi()) をグラマに追加するには、代わりに :grammar と指定すればよい。
 最後に、モジュールは全ての関数をエクスポートし、全てのキーワードをパーサに追加するためにエクスポータータグ :all をサポートしている。

分布

 以下に挙げるのが本モジュールで生成できる分布の一覧である。

正規(ガウス)分布

 正規(ガウス)分布(Normal/Gauss Distribution)は等値である normal_distribution または gauss_distribution 関数を用いて利用可能である。関数はガウス分布の Math::Symbolic 表現を返す。
 ガウス分布は3つのパラメータ 平均 mu・2乗平均平方根標準偏差 sigma・変数 x をとる。
 関数は2つの引数(オプション)をとる。すなわち、公式を示す Math::Symbolic ツリー(または文字列)に代入すべき 1) mu 及び sigma である。引数が指定されなければ対応する変数は変化しないままである。変数 x は常に式の中に含まれている。
 詳しくは参考資料を見よ。

2変数正規分布

 2変数正規分布(Bivariate normal distributions)は関数 bivariate_normal_distribution を用いて利用可能である。関数は2変数正規分布の Math::Symbolic 表現を返す。
 2変数正規分布は以下の7つのパラメータをとる。
 第1変数に対する平均 mu1・第1変数に対する標準偏差 sigma1・第2変数に対する平均 mu2・第2変数に対する標準偏差 sigma2・第1変数 x1・第2変数 x2・第1変数と第2変数の相関係数 sigma12 である。
 関数は5つの引数(オプション)をとる。すなわち、公式を示す Math::Symbolic ツリー(または文字列)に代入すべき 1) mu1, 2) sigma1, 3) mu1, 4) sigma1, 5) sigma12 をとる。
 引数が指定されなければ対応する変数は変化しないままである。変数 x1 及び x2 は常に式の中に含まれている。
 詳しくは参考資料を見よ。

コーシー分布

 コーシー分布(Cauchy distributions)は関数 cauchy_distribution を用いて利用可能である。関数はコーシー分布の Math::Symbolic 表現を返す。
 コーシー分布は3つのパラメータ 中央値 m・曲線の半値全幅 lambda・変数 x をとる。
 関数は2つの引数(オプション)をとる。すなわち、公式を示す Math::Symbolic ツリー(または文字列)に代入すべき 1) m, 2) lambda をとる。
 引数が指定されなければ対応する変数は変化しないままである。変数 x は常に式の中に含まれている。
 詳しくは参考資料を見よ。

ボルツマン分布

 ボルツマン分布(Boltzmann distributions)は関数 boltzmann_distribution を用いて利用可能である。関数はボルツマン分布の Math::Symbolic 表現を返す。
 ボルツマン分布は4つのパラメータ エネルギー E・エネルギーの状態数を記述する重みファクタ gs・温度 T・化学的ポテンシャル mu をとる。
 関数は4つの引数(オプション)をとる。すなわち、公式を示す Math::Symbolic ツリー(または文字列)に代入すべき 1) E, 2) gs, 3) T, 4) mu をとる。
 引数が指定されなければ対応する変数は変化しないままである。公式は N = gs * e^(-(E-mu)/(k_B*T)) である。
 詳しくは参考資料を見よ。なおボルツマン定数 k_B の値は 1.3807 * 10^-23 J/K としている。

フェルミ分布

 フェルミ分布(Fermi distributions)は関数 fermi_distribution を用いて利用可能である。関数はフェルミ分布の Math::Symbolic 表現を返す。
 フェルミ分布は4つのパラメータ エネルギー E・エネルギーの状態数を記述する重みファクタ gs・温度 T・化学的ポテンシャル mu をとる。
 関数は4つの引数(オプション)をとる。すなわち、公式を示す Math::Symbolic ツリー(または文字列)に代入すべき 1) E, 2) gs, 3) T, 4) mu をとる。
 引数が指定されなければ対応する変数は変化しないままである。公式は N = gs / ( e^((E-mu)/(k_B*T)) + 1) である。
 詳しくは参考資料を見よ。なおボルツマン定数 k_B の値は 1.3807 * 10^-23 J/K としている。


参考資料

 Math::SymbolicMath::Symbolic::ParserMath::SymbolicX::ParserExtensionFactory などの関連する全モジュールを見よ。
 本モジュールの最新バージョンは http://steffen-mueller.net または CPAN で入手可能である。
 本コードに実装されているいくつかの分布については MathWorld サイトで確認できる。


著者

 Steffen Muler, <symbolic-module at steffen-mueller dot net>


著作権とライセンス

 Copyright (C) 2005, 2006 by Steffen Mueller

 本ライブラリはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。Perl 5.6.0、利用者の選択によっては Perl 5以降の入手可能なバージョンで利用可能である。

Toolbox Logo
Updated : 2007/05/14