これは,Wolfram言語の以前のバージョンに基
づくMathematica 5のためのドキュメントです.
最新のドキュメント(バージョン11.2)もご覧ください.

Documentation / Mathematica / アドオンとリンク / 標準パッケージ / Statistics /

Statistics`LinearRegression`

組込み関数のFitは指定された基礎関数の線形結合として,データのリストの最小2乗フィットを求める.このパッケージの関数RegressDesignedRegressは,決定係数RSquared,分散分析表ANOVATable,平均2乗誤差EstimatedVarianceのような一般的に要求される診断のリストを与えることによりFitを増強する.回帰関数の出力は,必要な情報だけが生成されるように制御することができる.

基礎関数 は予測因子を独立変数の関数として指定する.応答変数の結果的なモデルは,である.ここで 番目の応答, 番目の観測で評価される 番目の基礎関数, 番目の統計誤差を示す.

係数の推定値は,誤差平方和あるいは残差平方和であるを最小化するように計算される.例えば,簡単な線形回帰は基礎関数を, として定義することによって確立できる.ここでを最小化するするものとして求められる.

Regressの使用

Regressの引数はFitの引数と同様の形式を取る.データは,独立変数と関連した応答の観測値からなるベクトルのリストである.基礎関数 は変数として与えられるシンボルの関数でなければならない.3つのシンボルはデータに表現される独立変数に対応する.

データは,データ点のベクトルでもよい.この場合は,Regressはベクトルが値, , ... の独立変数を持つ応答変数の値を表すものと想定する.

Regressでデータを指定する方法

パッケージをロードする.

In[1]:= <<Statistics`LinearRegression`

このデータでは,各ペアの最初の要素が独立変数の値で,2つ目の要素が応答の観測値である.

In[2]:= data = {{0.055, 90}, {0.091, 97}, {0.138, 107},
{0.167, 124}, {0.182, 142}, {0.211, 150},
{0.232, 172}, {0.248, 189}, {0.284, 209},
{0.351, 253}};

データのプロットである.

In[3]:= dplot = ListPlot[data]

Out[3]=

モデル にフィットするための回帰出力である.Chopにより 未満のp値が0に置き換えられる.

In[4]:= (regress = Regress[data, {1, x^2}, x];
Chop[regress, 10^(-6)])

Out[4]=

フィット関数だけが必要なら,Fitを使ってもよい.

In[5]:= func = Fit[data, {1, x^2}, x]

Out[5]=

Regressのオプション

Regressのオプションの中で,2つが計算方法に影響を及ぼす.IncludeConstantはデフォルト設定がTrueとなっており,基礎関数で指定されていなくても定数項をモデルに加える.この定数項なしでモデルをフィットするためにはIncludeConstant -> Falseと指定し,基礎関数に定数を含まないようにする.

Weightsオプションでは,各データ点につき1つずつの重みのリストを指定することにより,重み付き最小2乗が実装できる.デフォルトのWeights -> Automaticは各データ点に対する単一の重みを示す.Weights -> , ... , のとき,パラメータ推定値は重み付き残差平方和を最小化するように選ばれる.

Weightsは応答の純関数を指定することもできる.例えば,を最小化するためのパラメータ推定値を選ぶためにはWeights -> (Sqrt[#] &)と設定する.

RegressionReportBasisNamesの両オプションは出力の形式と内容に関係する.RegressionReportが指定されていないと,Regressは自動的にParameterTableRSquaredAdjustedRSquaredEstimatedVarianceANOVATableの値を含むリストを与える.これらのオブジェクトで,デフォルトのSummaryReportが構成される.RegressionReportオプションはデフォルトのセット以上(あるいは以下)の結果が出力に含まれるように,単独のオブジェクトあるいはオブジェクトのリストを指定するために使われる.RegressionReportValues[Regress]Regress関数のRegressionReportリストに含まれる可能性のあるオブジェクトを与える.

オプションBasisNamesを使うと,ParameterTableおよびParameterCITableのような表で予測因子のヘディングに名前を付けることができる.

回帰関数はSingularValuesあるいはStudentTCIで指定できるオプションならどれを取ることもできる.特に,内部異常値展開の数値的許容差はToleranceを使って指定し,仮説検定・信頼区間の信頼水準はConfidenceLevelを使って指定する.

RegressionReportのオプション設定の一部とRegressionReportによって指定されるリストに含むことのできるオブジェクト

分散分析表のANOVATableは,指定されたモデルを定数項のみを含む小さいモデルと比較する.IncludeConstant -> Falseと指定されていれば,小さい方のモデルがデータに還元される.この表にはモデルによる(Modelというラベルの付いた行)自由度,平方和,平均平方および残差による(Errorというラベルの付いた行)自由度,平方和,平均平方が含まれる.残差平均平方はEstimatedVarianceでも使え,残差平方和をその自由度で除算することにより計算される.F検定は平均平方の比を使って2つのモデルを比較する.Fの値が大きい場合は,小さい方のモデルを支持する帰無仮説が棄却される.

それぞれの基礎関数の重要性を評価するためには,RegressionReportParameterTableに設定するか,RegressionReportによって指定されたリストにParameterTableを入れるかすることによって得られるパラメータ表から,パラメータ推定値についての情報を得ることができる.この表には推定値,その標準誤差,各パラメータがゼロかどうかを検定するためのt統計量が含まれる.得られた統計量を自由度 は標本サイズ, は予測因子の数)のt分布と比較することで,p値が計算される.パラメータ推定値の信頼区間もt分布に基づいており,ParameterCITableを指定することで求められる.ParameterConfidenceRegionはすべてのフィットパラメータの楕円の結合信頼領域を指定する.ParameterConfidenceRegion[, , ... ]は,基礎関数の完全集合の部分集合である基礎関数, , ... に関連するフィットパラメータの結合条件信頼領域を指定する.

重相関係数の平方は決定係数と呼ばれ,総平方和に対するモデルの平方和の比によって与えられる.これは予測因子と応答変数との関係を示す要約統計量である.AdjustedRSquaredとして定義され,モデルの次の部分集合を比較するのに使える調整された値を与える.変動係数は,応答変数の平均に対する残差平方平均平方根の比で与えられる.応答が厳密に正である場合に,誤差変動の相対度数を測定するために変動係数が使われることがある.

MeanPredictionCITableの各行は,独立変数のそれぞれの値における平均応答の信頼区間を与える.SinglePredictionCITableの各行は,独立変数の各値における単独の観測応答の信頼区間を与える.MeanPredictionCITableは回帰曲線を含む可能性の高い領域を与え,SinglePredictionCITableはすべての可能な観測を含む可能性の高い領域を与える.

以下の例では,残差,単独の観測の予測応答の信頼区間表,パラメータ結合信頼領域のみが生成される.

In[6]:= regress = Regress[data, {1, x^2}, x,
RegressionReport ->
{FitResiduals, SinglePredictionCITable,
ParameterConfidenceRegion}]

Out[6]=

出力から抽出された残差のリストである.

In[7]:= errors = FitResiduals /. regress

Out[7]=

観測された応答,予測応答,予測された応答の標準誤差,信頼区間も抽出できる.

In[8]:= {observed, predicted, se, ci} =
Transpose[(SinglePredictionCITable /. regress)[[1]]];

これで,診断の目的で残差に対する予測応答をプロットすることができるようになった.

In[9]:= ListPlot[Transpose[{predicted, errors}]]

Out[9]=

予測応答,信頼区間の上限と下限各々が対応する 値とペアになっている.

In[10]:= (xval = Map[First, data];
predicted = Transpose[{xval, predicted}];
lowerCI = Transpose[{xval, Map[First, ci]}];
upperCI = Transpose[{xval, Map[Last, ci]}]);

関数MultipleListPlotをロードする.

In[11]:= <<Graphics`MultipleListPlot`

これで,生データ,フィットしたカーブ,1つの観測の予測応答に対する95%の信頼区間が表示される.

In[12]:= MultipleListPlot[
data, predicted, lowerCI, upperCI,
SymbolShape -> {PlotSymbol[Diamond], None, None,
None},
PlotJoined -> {False, True, True, True},
PlotStyle -> {Automatic, Automatic,
Dashing[{.05, .05}], Dashing[{.05, .05}]}
]

Out[12]=

関数ShowGraphicsEllipsoidオブジェクトを表示するために使うことができる.以下は回帰パラメータの95%の結合信頼領域である.

In[13]:= Show[Graphics[ParameterConfidenceRegion /. regress],
Axes -> True, AxesLabel -> {"Constant","x Squared"}]

Out[13]=

このパッケージではデータとフィットを評価するための多くの診断を提供している.HatDiagonalは,独立変数の各観測が異常かどうかを測定して,各点のてこ比を与える.CookDPredictedResponseDeltaは影響診断であり,同時に独立変数と応答変数が異常であるかどうかを測定する.残念ながら,これらの診断は1つの外れ値を検出する場合にのみ有用である.特に診断は1つの外れ値を示すこともあるが,その観測を削除して診断を再計算すると他の外れ値を示す可能性がある.これらの診断はすべてこのマスク効果の対象となる.診断については,D. A. Belsley,E. Kuh,R. E. Welsch共著の「Regression Diagnostics: Identifying Influential Data and Sources of Collinearity」(John Wiley & Sons, 1980)およびR. D. Cook著「Detection of influential observations in linear regression」(Technometrics, 19, 1977)で詳述されている.

外れ値検出のための診断

診断の中には各基礎関数がフィットにどの程度寄与しているか,あるいは基礎関数が共線関係に関与しているかどうかを示すものもある.SequentialSumOfSquaresベクトルの要素の和はANOVATableにリストされるモデルの平方和を与える.各要素は,各(不定数)基礎関数を順にモデルに加えることにより得られるモデルの平方和の増加量に対応する.PartialSumOfSquaresベクトルの各要素は,対応する(不定数)基礎関数を他の基礎関数すべてで構成されるモデルに加えることにより,モデルの平方和における増加量を与える.SequentialSumOfSquaresは単変量多項モデルの次数を決定するのに便利であり,PartialSumOfSquaresは予測因子の大きな集合を小さくするのに便利である.VarianceInflationあるいはEigenstructureTableも予測因子集合の整頓に使用できる.

基礎関数の評価と共線性の検出のための診断

1階の自己回帰過程が存在するかどうかのテストには,ダービン・ワトソン(Durbin-Watson)のd統計量が有用である.2に近い値は,回帰モデルの潜在的仮定となる相関関係のない誤差を示す.

相関誤差の診断

ここで言及していない他の統計は,キャッチャー行列を使って計算することができる.この行列は予測因子がパラメータベクトルについて持っている情報をすべてキャッチする.この行列はRegressionReportオプションでCatcherMatrixを指定することによりRegressからエキスポートすることができる.

予測因子によって提供されるパラメータ情報を記述する行列

線形回帰がもとのデータではなく,既存の計画行列に適用されることがよくある.計画行列とは,独立変数の観測値において評価された基礎関数を含むリストである.データがすでに,対応する応答データのベクトルを持つ計画行列の形式であるなら,Regressで提供される解析と同じ解析にDesignedRegressを使うことができる.DesignMatrixはデータを計画行列の形式にする.

計画行列を使った線形回帰の関数

DesignMatrixRegressと同じ引数を取る.これはDesignedRegressに必要な引数を得るため,あるいは基礎関数を正しく指定したかどうかを調べるために使うことができる.DesignMatrixを使うときは,IncludeConstant -> Falseが指定されていない限り,常に定数項が含まれる.RegressのオプションでIncludeConstant以外はすべてDesignedRegressでも受け入れられる.RegressionReportValues[DesignedRegress]DesignedRegress関数のRegressionReportリストに含まれる可能性のある値を与える.

以下は既出の回帰解析で使用された計画行列である.

In[14]:= mat = DesignMatrix[data, {1, x^2}, x]

Out[14]=

観測された応答のベクトルである.

In[15]:= response = Map[Last, data]

Out[15]=

DesignedRegressの結果はRegressの結果と同一である.出力に指定された予測因子名がParameterTableに現れていることに注目のこと.

In[16]:= DesignedRegress[mat, response, BasisNames ->
{"Constant","x Squared"}] // Chop[#, 10^(-6)]&

Out[16]=

計画行列の特異値分解を使う線形回帰

DesignedRegressは計画行列の特異値分解も受け入れる.回帰に重みが付いていなければ,このアプローチにより計画行列分解の再計算が省略できる.

計画行列の特異値分解である.

In[17]:= svd = SVD[mat];

いくつかの応答に関心がある場合は,以下の方法により計画行列分解の再計算が省略できる.

In[18]:= DesignedRegress[svd, response,
RegressionReport -> BestFitParameters]

Out[18]=