PDLにおける統計関数




  1. Perl




  2. モジュール



  3. PDL

基本的な統計関数を紹介します。

最大

一次元のPDL変数から、最大値を求めるには、maxメソッドを使用します。

use PDL::Lite;

# データ
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::Lite;
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::Lite;
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::Lite;
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";