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

名称

 Statistics::Regression - 重みつき線形回帰用パッケージ


概要

use Statistics::Regression;

# regression オブジェクトを生成
my $reg = Statistics::Regression->new( 
   3, "sample regression", 
   [ "const", "someX", "someY" ] 
);

# 点を追加
$reg->include( 2.0, [ 1.0, 3.0, -1.0 ] );
$reg->include( 1.0, [ 1.0, 5.0, 2.0 ] );
$reg->include( 20.0, [ 1.0, 31.0, 0.0 ] );
$reg->include( 15.0, [ 1.0, 11.0, 2.0 ] );

# 結果を出力
$reg->print(); 

# 以下を出力:
# ****************************************************************
# Regression 'sample regression'
# ****************************************************************
# Theta[0='const']=       0.2950
# Theta[1='someX']=       0.6723
# Theta[2='someY']=       1.0688
# R^2= 0.808, N= 4
# ****************************************************************

# 係数及び R^2 の値を取得するには
my @theta = $reg->theta;
my $rsq   = $reg->rsq;

説明

 Regression.pm は線形重回帰パッケージである。すなわち、N 個の観測点と k 種類の独立変数 x と1つの y を与えられたときに、以下のような形の線形式に適合するような係数 c を推定する。

y= c(0)*x(0) + c(1)*x1 + c(2)*x2 + ... + c(k)*xk

 N は k 以上、通常はかなり大きくなければならない。統計の教科書を見れば回帰とは何かを説明しているだろう。たいていの場合、ユーザは切片をフィッティングさせるために各オブザベーションに x(0) として定数 (1) を提供する。


アルゴリズム

Original Algorithm (ALGOL-60):

 W. M. Gentleman, University of Waterloo, "Basic Description For Large, Sparse Or Weighted Linear Least Squares Problems (Algorithm AS 75)," Applied Statistics (1974) Vol 23; No. 3

INTERNALS

 R = Rbar は上三角行列で、対角要素が 1 になるように正規化されている。D は行列をスケーリングするための対角行列である。これに対応して以下のように書ける。

X' X  = R' D R

 (thetacov での)後退代入ルーチンでは R 行列の逆行列を適用する。(もちろん上三角行列である。) この行列を H とする。H = R^(-1)

(X' X)^(-1) = [(R' D^(1/2)') (D^(1/2) R)]^(-1)
            = [ R^-1 D^(-1/2) ] [ R^-1 D^(-1/2) ]'

Remarks

 このアルゴリズムは統計的には標準である。新しいオブザベーションの追加はいつでもできる(ただし重みをもって!)。しかし少し時間がかかる。格納空間は2次である(indep 変数)。実際には無限のオブザベーションを扱うことができる。


メソッド

new

my $reg = Statistics::Regression->new($n, $name, \@var_names)

 各オブザベーションに関する変数を受け取り、Statistics::Regression オブジェクトとして括弧つきデータ構造を返す。オプションでこの回帰を参照する名称を取る。X 係数に対応する k*1 配列である。

dump

$reg->dump

 デバッグのために使う。

print

$reg->print

 係数・R^2・N を出力する。サンプルは概要を見よ。

include

$n = $reg->include( $y, [ $x1, $x2, $x3 ... $xk ], $weight );

 新しいオブザベーションを追加する。重みはオプションである。重みを -1 とするとオブザベーションを削除する。含まれているオブザベーションを数を返す。

theta

$theta = $reg->theta
@theta = $reg->theta

 係数のベクトルを計算し、返す。スカラコンテキストでは配列参照を返し、リストコンテキストで係数のリストを返す。

rsq, adjrsq, sigmasq, ybar, sst, k, n

$rsq = $reg->rsq; # etc...

 これらのメソッドは共通の補足情報を提供する。rsq, adjrsq, sigmasq, sst, ybar はチェックされていないがおおよそ正しい。結果は後の利用のために格納される。しかしこれは簡単に計算できるので無用かも知れない。


バグ/問題


バージョン

 0.15


著者

 Gentleman がこのアルゴリズムを開発した。Ivo Welch により拡張された。 Alan Miller (alan@dmsmelb.mel.dms.CSIRO.AU) が R^2 を計算するよりよい方法を指摘した。Ivan Tubert-Brohman は標準の CPAN ディストリビューションにするラッピングの支援をしてくれた。


ライセンス

 本モジュールは GPL ライセンスの下で自由な公的利用ができるよう公開されている。

 (C) Ivo Welch, 2001,2004.

Toolbox Logo
Updated : 2008/08/17