Location : Home > Languages > Perl > Package Title : Statistics::Regression |
![]() |
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
デバッグのために使う。
$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.
![]() |
Updated : 2008/08/17 |