Location : Home > Languages > Perl > Package
Title : Statistics::Descriptive
Toolbox Logo

名称

 Statistics::Descriptive - 記述統計処理


概要

use Statistics::Descriptive;

$stat = Statistics::Descriptive::Full->new();
$stat->add_data(1,2,3,4); $mean = $stat->mean();
$var  = $stat->variance();
$tm   = $stat->trimmed_mean(.25);
$Statistics::Descriptive::Tolerance = 1e-10;

説明

 本モジュールは記述統計の基本的な関数を提供する。
 オブジェクト指向で設計されており、データ格納と計算用オブジェクトとして2つの異なるタイプ(疎と全)をサポートしている。疎メソッドではデータは格納されずいくつかの関数のみが利用可能である。全メソッドを使えば全データ集合が保持され、他の関数も利用可能となる。
 ゼロ割が起こったときには分母が $Statistics::Descriptive::Tolerance (デフォルトは0)よりも大きいかどうかを確認する。小さすぎる分母であればエラーメッセージを出すために 1e-24 のような小さい正の値に変更することもできる。
 メソッドの多くは(疎も全も)同じ引数による呼び出しを高速にするために値をキャッシュしている。


メソッド

疎メソッド

$stat = Statistics::Descriptive::Sparse->new();

 新しい疎統計メソッドオブジェクトを返す。

$stat->add_data(1,2,3);

 統計変数にデータを追加する。キャッシュされた統計値は自動的に更新される。

$stat->count();

 データ項目の数を返す。

$stat->mean();

 データの平均を返す。

$stat->sum();

 データの和を返す。

$stat->variance();

 データの分散を返す。n-1 で割っている。

$stat->standard_deviation();

 データの標準偏差を返す。n-1 で割っている。

$stat->min();

 データ集合の最小値を返す。

$stat->mindex();

 データセットにおいて最小値を示す添え字を返す。

$stat->max();

 データセットの最大値を返す。

$stat->maxdex();

 データセットにおいて最大値を示す添え字を返す。

$stat->sample_range();

 データセットのレンジ(最大値−最小値)を返す。

全メソッド

 上記の疎メソッド(the Sparse Methods)と同様、現在の結果をキャッシュしている全メソッド(Full Method)は再計算しなくてもよい。同時に複数の値をキャッシュすることもある。

$stat = Statistics::Descriptive::Full->new();

 上記の全てのメソッドを含むよう Statistics::Descriptive::Sparse から継承した新しい統計オブジェクトを生成する。

$stat->add_data(1,2,4,5);

 統計変数に新たなデータを追加する。全ての疎統計値は更新されキャッシュされる。全メソッドからキャッシュされた値はもはや妥当ではないので削除される。
 Note: 空配列とともに add_data を呼び出すとあらゆる全メソッドのキャッシュ値を削除する。疎メソッドのキャッシュ値は変化しない。

$stat->get_data();

 データ配列のコピーを返す。

$stat->sort_data();

 格納されたデータをソートし、mindex 及び maxdex メソッドを更新する。本メソッドは perl の内部ソートを用いている。

$stat->presorted(1);
$stat->presorted();

 非零の引数とともに呼び出された場合には本メソッドはデータが既にソートされていて再ソートする必要がないことを示すフラグを立てる。本クラスにおけるいくつかのメソッドではソートされたデータを要求するものがあり、このフラグは時間を節約する。ソートされたデータをオブジェクトに渡すと本メソッドはデータを再ソートすることを防ぐ。フラグは add_data が呼び出されたときにクリアされる。引数なしで本メソッドを呼び出した場合にはフラグの値を返す。

$x = $stat->percentile(25);
($x, $index) = $stat->percentile(25);

 データをソートし、RFC2330 で定義されるパーセンテージに対応する値を返す。

 たとえば以下の6つの値が与えられたとする。

 -2, 7, 7, 4, 18, -5

 このとき、F(-8) = 0, F(-5) = 1/6, F(-5.0001) = 0, F(-4.999) = 1/6, F(7) = 5/6, F(18) = 1, F(239) = 1 となる。
 異なる測定値及び F(x) から何度抽出したかを回復することができることに留意しよう。値のレンジに関する情報は欠落していない。他方ヒストグラムを用いて測定を要約すれば一般に異なる値に関する情報が欠落するので EDF のほうが好まれる。
 しかしながら EDF を用いてもヒストグラムを用いても観測値の順序に関する情報は欠落する。この欠落は距離が導入されたときには潜在的に重要となる。
 所与のパーセンテージ以上の F(x) を与える最小の x の値を参照して「パーセンタイル」と呼ぶ。したがって F(4) = 3/6 = 50% であるので上記の例における 50 パーセンタイルは 4 であり F(-5) = 1/6 < 25%, F(-2) = 2/6 >= 25% であるので 25パーセンタイルは -2 である。100 パーセンタイルは 18 であり、0 パーセンタイルはマイナス無限大である。15 パーセンタイルも同様である。
   望む精度を保証しないので標本を要約する再にパーセンタイルを用いる際には注意しなければならない。標本数が N である場合には要約すると、標本の精度は 1/N 以下にはできないからである。

RFC2330 - Framework for IP Performance Metrics, Section 11.3. Defining Statistical Distributions. からとった。RFC2330 は http://www.cis.ohio-state.edu/htbin/rfc/rfc2330.html から入手可能である。)
 パーセンタイルメソッドがリストコンテキストで呼び出された場合はパーセンタイルのインデクスを返す。

$stat->median();

 データをソートし、データの中央値を返す。

$stat->harmonic_mean();

 データの調和平均を返す。データに0が含まれていたり、逆数の和が0である場合にはこの平均は定義されない。この場合には undef を返す。

$stat->geometric_mean();

 データの幾何平均を返す。

$stat->mode();

 データのモードを返す。

$stat->trimmed_mean(ltrim[,utrim]);

 trimmed_mean(ltrim) はデータの低いほうの断片を削除した後の平均を返す。trimmed_mean(ltrim,utrim) はデータから低いほうの断片を削除し、高いほうの断片を削除した後の平均を返す。本メソッドは解析前にデータをソートする。
 All calls to trimmed_mean() の呼び出しは2度目の計算を行わなくてよいようにすべてキャッシュしている。

$stat->frequency_distribution($partitions);
$stat->frequency_distribution(\@bins);
$stat->frequency_distribution();

 frequency_distribution($partitions) はデータを $partition 個の集合に分割し($partition は 1 よりも大きい)各分割に属する要素の数を数える。キーが各分割の用いた数値であるような連想配列を返す。データ集合の最小値はキーではないが、最大値は常にキーとなる。特定の分割キーに対する要素の数は前の分割のキーよりも大きく、現在の分割のキー以下であるような要素の数である。たとえば

$stat->add_data(1,1.5,2,2.5,3,3.5,4);
%f = $stat->frequency_distribution(2);
for (sort {$a <=> $b} keys %f) {
   print "key = $_, count = $f{$_}\n";
}

は、2.5以下の要素が4つ、2.5より大きい要素が3つあるので以下の出力を行う。

key = 2.5, count = 4
key = 4, count = 3

 frequency_distribution(\@bins) は分配のために用いたビンを提供する。このことによりトリムされたまたはサンプル分布のように非一様な分布を扱うことができる。@bins は単調で少なくとも1つの要素を含まなければならない。ビンの集合が全体の返り値を含まない限り標本数よりも小さいことに留意すること。
 引数なしで frequency_distribution() を呼び出した場合、(存在していれば)最後の分布が計算される。

$stat->least_squares_fit();
$stat->least_squares_fit(@x);

 least_squares_fit() は @x の定義値またはデフォルトでは 1..$stat->count() に対しデータを最小二乗法で回帰式を導出する。以下の4つの要素 ($q, $m, $r, $rms) を返す。ただし

 エラーまたはゼロ割の場合には空のリストを返す。
 返される配列は以下のような作業でハッシュ構造に押し込まれる。

my %hash = ();
@hash{'q', 'm', 'r', 'err'} = $stat->least_squares_fit();

 引数なしで least_squares_fit() を呼び出した場合にはデフォルトでは現在のレンジを用いるので結果をキャッシュしない。


報告されているエラー

 頻繁にメールは読んでいるが、本モジュールを担当してから家族に子ども2人と犬1匹が増えたため、返事までの時間は少しまってほしい。エラー報告の時には以下の情報を含んで欲しい。


著者

 Colin Kuskie

 e-mail アドレスは http://www.perl.com または http://search.cpan.org/author/COLINK/ で見つけることができるだろう。


参照

 RFC2330, Framework for IP Performance Metrics
 The Art of Computer Programming, Volume 2, Donald Knuth.
 Handbook of Mathematica Functions, Milton Abramowitz and Irene Stegun.
 Probability and Statistics for Engineering and the Sciences, Jay Devore.


著作権

 Copyright (c) 1997,1998 Colin Kuskie. All rights reserved.
 本プログラムはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。

 Copyright (c) 1998 Andrea Spinelli. All rights reserved.
 本プログラムはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。

 Copyright (c) 1994,1995 Jason Kastner. All rights reserved.
 本プログラムはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。


更新履歴

v2.3

November 1998
 Andrea Spinelli により提供されたゼロ割を防ぎ、未定義の振る舞いに対する返り値の一貫性を確保。モジュールのテストベンチも提供してもらった。
 頻度分布の計算に関するバグ修正。警告してくれた Nick Tolli に感謝。
  ActiveState インストールツールで使いやすいように Makefile.PL に4行追加。perl5.004_04 でも稼動することを確認。まだ perl5.005xx では確認していない。

v2.2

March 1998
 0 及び -1 をデータとして送る問題を修正。 0 : true ? false 問題。
 AUTOLOAD/DESTROY/Carp バグを修正。とても変。

v2.1

August 1997
 インタフェース変換に伴う統計アルゴリズムのエラーを修正。

v2.0

August 1997
 キャッシュ値の削除に関するエラーを修正(なんとキャッシュされていなかった!)、 sort_data と前ソートメソッドを追加。

June 1997
 Jason から Colin へモジュールの所有権が委譲。
 オブジェクト指向インタフェースに変更し、分布関数を修正、mindex, maxdex を追加。

v1.1

April 1995
 LeastSquaresFit 及び FrequencyDistribution を追加。

v1.0

March 1995
 comp.lang.perl にリリースし、アーカイブサイトにも置く。

v.20

December 1994
 Anno Siegel との長大で有益なメールのやり取りの後に大修正。

v.10

December 1994
 最初のコンセプト。perl5-porters リストにリリース。

Toolbox Logo
Updated : 2007/08/29