PDLにおける統計関数
基本的な統計関数を紹介します。
最大
一次元のPDL変数から、最大値を求めるには、maxメソッドを使用します。
use PDL; # データ my $nums = pdl [4, 2, 7]; # 最大値 my $max = $nums->max;
PDL::Ufuncモジュールは、PDL変数から統計値を計算するための関数を提供しています。
最小
最小値を求めるにはminメソッドを使用します。
# 最小値 my $min = $nums->min;
合計
合計を求めるにはsumメソッドを使用します。
# 合計 my $total = $nums->sum;
平均
平均を求めるにはavgメソッドを使用します。
my $average = $nums->avg;
中央値
中央値を求めるにはmedianメソッドを使用します。
my $median = $nums->median;
中央値とは、すべての値を並べたときに真ん中にくる値のことです。
最頻値
最頻値を求めるにはmodeメソッドを使用します。
my $mode = $nums->mode;
最頻値とは、もっとも多く出現する値のことです。
ソート
ソートを昇順で行うにはqsortメソッドを使用します。
# 昇順ソート my $nums_sort_asc = $nums->qsort;
ソートを降順で行うには、昇順ソートとスライスと組み合わせます。
use PDL::NiceSlice; my $nums_sort_desc = $nums_sort_asc(-1:0);"-1:0"の意味は、最初の-1というのは、最後の要素ということを意味します。0というのは最初の要素を意味します。"-1:0"で、最後の要素から最初の要素までという意味になって、順番を逆転させることができます。
サンプル
実行できるサンプルです。
use strict; use warnings; use PDL; use PDL::NiceSlice; # データの作成 my $nums = pdl [4, 4, 2, 2, 2, 7]; # 最大値 my $max = $nums->max; # 最小値 my $min = $nums->min; # 合計 my $total = $nums->sum; # 平均 my $average = $nums->avg; # 中央値 my $median = $nums->median; # 最頻値 my $mode = $nums->mode; print "Max: $max\n"; print "Min: $min\n"; print "Total: $total\n"; print "Average: $average\n"; print "Median: $median\n"; print "Mode: $mode\n"; # 昇順ソート my $nums_sort_asc = $nums->qsort; # 降順ソート(昇順ソートとスライスと組み合わせる) my $nums_sort_desc = $nums_sort_asc(-1:0); print "$nums_sort_asc\n"; print "$nums_sort_desc\n";
PDL::Stats::Basicのインストール
以下の統計関数はPDL::Stats::Basicと呼ばれるモジュールによって利用することができるようになります。PDL::Statsをインストールする必要があります。
cpan PDL::Stats;
PDL::Stats::Basicを読み込むとPDL::Stats::Basicで定義されている関数がPDL変数から利用できるようになります。
use PDL::Stats::Basic;
分散
分散を求めるには、varメソッドを使用します。
use PDL; use PDL::Stats::Basic; # データ my $nums = pdl [4, 2, 7]; # 分散 my $variance = $nums->var;
不偏分散
不偏分散を求めるには、var_unbiasedメソッドを使用します。
# 不偏分散 my $variance = $nums->var_unbiased;
不偏分散は分母が(n - 1)です。
標準偏差
標準偏差を求めるには、stdvメソッドを使用します。
# 標準偏差 my $stdv = $nums->stdv;
標準偏差の意味は、データの散らばり具合を示すものです。標準偏差の数式は「分散の正の平方根」です。分散もデータの散らばり具合を示すものですが、単位が元のデータと異なるので、元のデータとの比較が難しくなります。正の平方根をとって標準偏差にすれば、単位が元のデータの単位と同じになります。
不偏標準偏差
不偏標準偏差を求めるには、stdv_unbiasedメソッドを使用します。
# 不偏標準偏差 my $stdv = $nums->stdv_unbiased;
不偏標準偏差の数式は「不偏分散の正の平方根」です。
標準誤差
標準誤差を求めるには、seメソッドを使用します。
# 標準誤差 my $se = $nums->se;
偏差平方和
偏差平方和を求めるには、ssメソッドを使用します。
# 偏差平方和 my $ss = $nums->ss;
歪度
歪度を求めるには、skewメソッドを使用します。
# 歪度 my $skew = $nums->skew;
不偏歪度
不偏歪度を求めるには、skew_unbiasedメソッドを使用します。
# 不偏歪度 my $skew_unbiased = $nums->skew_unbiased;
尖度
尖度を求めるには、kurtメソッドを使用します。
# 尖度 my $kurt = $nums->kurt;
不偏尖度
不偏尖度を求めるには、kurt_unbiasedメソッドを使用します。
# 不偏尖度 my $kurt_unbiased = $nums->kurt_unbiased;
サンプル
実行できるサンプルです。
use strict; use warnings; use PDL; use PDL::Stats::Basic; # データ my $nums = pdl [4, 2, 7, 3, 5]; # 分散 my $variance = $nums->var; # 不偏分散 my $variance_unbiased = $nums->var_unbiased; # 標準偏差 my $stdv = $nums->stdv; # 不偏標準偏差 my $stdv_unbiased = $nums->stdv_unbiased; # 標準誤差 my $se = $nums->se; # 偏差平方和 my $ss = $nums->ss; # 歪度 my $skew = $nums->skew; # 不偏歪度 my $skew_unbiased = $nums->skew_unbiased; # 尖度 my $kurt = $nums->kurt; # 不偏尖度 my $kurt_unbiased = $nums->kurt_unbiased; print "Variance: $variance\n"; print "Unbiased variance:$variance_unbiased\n"; print "Standard deviation: $stdv\n"; print "Unbiased standard deviation: $stdv_unbiased\n"; print "Standard error: $se\n"; print "Sum of squared deviations: $ss\n"; print "Skew: $skew\n"; print "Unbiased Skew: $skew\n"; print "Kurtosis: $kurt\n"; print "Unbiased kurtosis: $kurt_unbiased\n";