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

名称

 Statistics::DEA - 離散指数平滑


概要

use Statistics::DEA;

my $dea = Statistics::DEA->new($alpha, $max_gap);

while (($data, $time) = some_data_source(...)) {
	...
	$dea->update($data, $time);
	print $dea->average(), "\n";
	print $dea->standard_deviation(), "\n";
	print $dea->completeness($time), "\n";
	...
}

説明

 Statistics::DEA モジュールはデータにズレ(gap)が存在する場合にも、指数的に減衰する平均と標準偏差を計算するために利用される。このアルゴリズムは初期値バイアス(initial value bias)とギャップ後バイアス(post gap bias)を無視している。

new

my $dea = Statistics::DEA->new($alpha, $max_gap);

 新しい指数平均オブジェクトを生成する。
 $alpha はデータの指数減衰(exponential decay)を指し、0(含む)から1(含まない)までの値をとる。この値が小さいほどデータの減衰は速くなり、大きいと遅くなる。古いデータの重みは -1/log(alpha) (対数は自然対数)の時間に応じて減衰する値となる。
 $max_gap はデータが失われたときからの時間差の最大値である。時間間隔が dt で更新されているなら、$max_gap として N*dt を用い、N-1 まで値を増加させていく。それをしたくなければ dt を用いる。

update

$dea->update($data, $time);

 指定された時刻における新しいデータによる平均を更新する。この時刻のパラメータはデータ同士の時間差(time gap)で示す。もしデータに時間差がなければ、単調増加、つまり $time++ として処理する。

average

my $avg = $dea->average();

 現在の平均を返す。機能的には avg() でも同様である。

standard_deviation

my $std_dev = $dea->standard_deviation();

 現在の標準偏差を返す。機能的には std_dev() でも同様である。

completeness

my $completeness = $dea->completeness($time);

 現在の completeness を返す。実際のデータの現在の平均と標準偏差にどの程度基づいているかを示す。$max_gap より大きい時間間隔の更新はこの値を小さくし、 $max_gap より小さい時間間隔の更新の列は徐々に初期値から増加していく。(最小値は 0 、最大値は 1 である。)
 $time は現在時間を表示すべきである。これは最終アップデート時刻よりも新しくなければならない。

alpha

my $alpha = $dea->alpha();

はデータの現在の指数減衰を返す。また

$dea->alpha($alpha);

はデータの指数減衰を設定する。

max_gap

my $alpha = $dea->max_gap();

は現在の最大時間差(time gap)を返す。

$dea->max_gap($max_gap);

は最大時間差を設定する。


著者

 Jarkko Hietaniemi, <jhi@iki.fi>


ライセンス

 このライブラリはフリーソフトであり、本ライブラリはフリーソフトウェアであり、Perl自身の配布条件と同等の条件のもとで変更/再配布してもよい。


献辞

 このアイデアとコードは the Doctor Dobb's Journal Algorithm Alley(September 1998) の記事、"Discontiguous Exponential Averaging"(John C. Gunther)から許可を得て利用している。
 彼はこの文書に対する価値ある示唆をしてくれたし Perl を使わずにバグフィクスもしてくれた。したがってこの文書におけるエラーは擬似コードの Perl 化の際に紛れ込んだものである。

Toolbox Logo
Updated : 2006/07/20