Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

線形回帰

はじめに

データ model は、予測変数と応答変数間の関係を明確に説明します。線形回帰は、モデルの係数が線形であるデータ モデルを当てはめます。線形回帰の最も一般的なタイプは、最小二乗近似 です。最小二乗近似では、直線と多項式を近似できます。

量間の関係をモデル化する前に、それらの量間に線形関係がある場合には相関解析を行うことが適切です。変数が非線形関係をもつ可能性があっても、相関分析では見つけることができないことに注意してください。詳細は、線形相関を参照してください。

MATLAB® の基本的な近似 UI を利用すると、データを近似することでモデル係数を計算し、データの上にモデルをプロットできます。例については、例: 基本的な近似 UI の使用を参照してください。MATLAB の関数 polyfit と関数 polyval を用いて、係数について線形であるモデルをデータに当てはめることもできます。例については、プログラムによる近似を参照してください。

非線形モデルを使用してデータに当てはめなければならない場合、関係を線形にするように変数を変換します。あるいは、Statistics and Machine Learning Toolbox™ の関数 nlinfit または Optimization Toolbox™ の関数 lsqcurvefit を使用するか、Curve Fitting Toolbox™ の関数を適用して、非線形関数を直接近似させます。

ここでは以下の方法を説明します。

  • \ 演算子を使用して単純な線形回帰を実行します。

  • データ近似が適切であるかどうかを調べるために、相関解析を用いて 2 つの量が関連しているかどうかを決めます。

  • データに線形モデルを近似する

  • 残差をプロットし、パターンを調べて、適合度を評価する

  • 適合度 R2 と調整された R2 の尺度を計算する

単純な線形回帰

この例では、accidents データセットを使用して、単純な線形回帰を実行する方法を説明します。また、回帰を評価するために決定係数 R2 を計算する方法も説明します。accidents データセットには、米国の州における死亡交通事故についてのデータが含まれています。

線形回帰は、従属 (または応答) 変数 y と 1 つ以上の独立 (または予測子) 変数 x1,...,xn の関係をモデル化します。単純な線形回帰では、次の関係式を使用して 1 つの独立変数のみを考慮します。

y=β0+β1x+ϵ,

ここで、β0 は y 切片、β1 は勾配 (または回帰係数)、ϵ は誤差項です。

(x1,y1)(x2,y2)、...、(xn,yn) で与えられた n 個の x および y の観測値のセットから始めます。単純な線形回帰関係式を使用して、これらの値から連立線形方程式を形成します。これらの方程式を次のように行列形式で表します。

[y1y2yn]=[1x11x21xn][β0β1].

以下を考えます。

Y=[y1y2yn],X=[1x11x21xn],B=[β0β1].

これで、関係式は Y=XB となります。

MATLAB では、mldivide演算子を B = X\Y のように使用して B を求めることができます。

データセット accidents から、事故データを y に、州の人口データを x に読み込みます。\ 演算子を使用して、州の事故件数と州の人口間の線形回帰関係式 y=β1x を求めます。\ 演算子は最小二乗回帰を実行します。

load accidents
x = hwydata(:,14); %Population of states
y = hwydata(:,4); %Accidents per state
format long
b1 = x\y
b1 = 
     1.372716735564871e-04

b1 は勾配または回帰係数です。線形関係式は、y=β1x=0.0001372x です。

関係式を使用して、州ごとの事故件数 yCalcx から計算します。実際の値 y と計算された値 yCalc をプロットして、回帰を可視化します。

yCalc1 = b1*x;
scatter(x,y)
hold on
plot(x,yCalc1)
xlabel('Population of state')
ylabel('Fatal traffic accidents per state')
title('Linear Regression Relation Between Accidents & Population')
grid on

Figure contains an axes object. The axes object with title Linear Regression Relation Between Accidents & Population, xlabel Population of state, ylabel Fatal traffic accidents per state contains 2 objects of type scatter, line.

モデルに y 切片 β0y=β0+β1x として含めることで、近似を改善します。x に 1 の列をパディングし、\ 演算子を使用して、β0 を計算します。

X = [ones(length(x),1) x];
b = X\y
b = 2×1
102 ×

   1.427120171726538
   0.000001256394274

この結果は、関係式 y=β0+β1x=142.7120+0.0001256x を表しています。

同じ図上にプロットして関係式を可視化します。

yCalc2 = X*b;
plot(x,yCalc2,'--')
legend('Data','Slope','Slope & Intercept','Location','best');

Figure contains an axes object. The axes object with title Linear Regression Relation Between Accidents & Population, xlabel Population of state, ylabel Fatal traffic accidents per state contains 3 objects of type scatter, line. These objects represent Data, Slope, Slope & Intercept.

図では、2 つの近似の結果は同じように見えます。より高精度な近似を見つける方法の 1 つは、決定係数 R2 を計算することです。R2 はモデルがデータをいかによく予測できるかを示す 1 つの尺度で、01 の値をとります。R2 の値が大きいほど、モデルのデータ予測の精度が高くなります。

ここで、yˆ は計算された y の値を表し、yy の平均値で、R2 は以下のように定義されます。

R2=1-i=1n(yi-yˆi)2i=1n(yi-y)2.

R2 の値を比較することで、2 つの近似のうち、より高精度な近似を判断します。R2 の値が示すとおり、y 切片を含む 2 番目の近似の方が高精度です。

Rsq1 = 1 - sum((y - yCalc1).^2)/sum((y - mean(y)).^2)
Rsq1 = 
   0.822235650485566

Rsq2 = 1 - sum((y - yCalc2).^2)/sum((y - mean(y)).^2)
Rsq2 = 
   0.838210531103428

近似の残差と適合度

残差は、応答 (従属) 変数の "観測された" 値とモデルで "予測される" 値の差です。データを適切なモデルで近似すると、残差はランダムな誤差に近づきます。つまり、残差の分布が認識できるパターンを示すことはありません。

線形モデルを使用して近似を生成するには、残差の二乗和を最小化しなければなりません。この最小化により、最小二乗近似と呼ばれる値が生成されます。残差のプロットを視覚的に調べることにより、近似の「適合度」について知ることができます。残差プロットがパターンをもつ場合 (すなわち、残差データ点がランダムな散布図をもつように見えない)、このランダム性はモデルがデータを適切に近似していないことを示します。

データの状況に従って近似を評価します。たとえば、データを近似する目的が物理的意味をもつ係数を抽出することである場合、モデルがデータの物理を反映していることが重要です。近似の適合度を評価する際は、データが何を表すか、データがどのように測定されたか、さらにデータがどのようにモデル化されたかについて理解することが重要です。

適合度の尺度の 1 つは、決定係数、つまり R2 (r の二乗と読む) です。この統計は、モデルの近似から得られる値がモデルで予測しようとする従属変数にどれくらい近いかを示します。統計学者は、近似したモデルからの残差分散を使用して R2 を定義します。

R2 = 1 – SSresid / SStotal

SSresid は、回帰からの二乗した残差の合計です。SStotal は、従属変数の平均の差を二乗した合計です ("総二乗和")。どちらも正のスカラー値です。

基本的な近似ツールを使用する場合の R2 の計算方法については、決定係数 R2を参照してください。R2 統計の計算とその多変量一般化の詳細については、引き続きこちらをお読みください。

例: 多項式近似からの R2 の計算

多項式回帰の係数から R2 を導出して、以下の例が示すように、線形モデルで説明される y 内の分散の程度を調べることができます。

  1. データ ファイル count.dat の変数 count の最初の 2 列から 2 つの変数 xy を作成します。

    load count.dat
    x = count(:,1);
    y = count(:,2);

  2. polyfit を使用して、x から y を予測する線形回帰を計算します。

    p = polyfit(x,y,1)
    
    p =
        1.5229   -2.1911
    

    p(1) は傾きで p(2) は線形予測子の切片です。また、基本的な近似 UI を使用して回帰係数を取得することもできます。

  3. p を使用して、y を予測するために polyval を呼び出し、結果として yfit を得ます。

    yfit = polyval(p,x);

    polyval を使用すれば、近似式を入力する手間が省けます。近似式は次のようになります。

    yfit =  p(1) * x + p(2);
  4. 残差値を符号付き数値のベクトルとして計算します。

    yresid = y - yfit;

  5. 残差を二乗して合計し、残差の二乗和を取得します。

    SSresid = sum(yresid.^2);

  6. 観測の回数から 1 を引いた数で y の分散を掛けることによって y の総二乗和を計算します。

    SStotal = (length(y)-1) * var(y);
    

  7. このトピックのはじめに指定された式を使用して、R2 を計算します。

    rsq = 1 - SSresid/SStotal
    
    rsq =
        0.8707
    これは、線形方程式 1.5229 * x -2.1911 が変数 y の 87% の分散を予測することを示しています。

多項式回帰の調整された R2 の計算

通常、より高い次数の多項式に近似することによって、モデルの残差を減らすことができます。さらに項数を追加すると、決定係数 R2 が増えます。データにより近い近似を取得しますが、R2 で計算できない、より複雑なモデルを使用します。ただし、この統計を微調整した、調整済み R2 には、モデルの項数のペナルティが含まれます。このため、調整済み R2 は、さまざまなモデルが同じデータにどれだけ近似するかを比較するのに、より適しています。調整済み R2 は次のように定義されます。

R2adjusted = 1 - (SSresid / SStotal)((n-1)/(n-d-1))

ここで、n はデータの観測数であり、d は多項式の次数です。(線形近似は次元が 1、2 次近似は 2、3 次近似は 3 など)

次の例では前の例 例: 多項式近似からの R2 の計算 のステップを反復しますが、線形 (次元 1) 近似の代わりに 3 次 (次元 3) 近似を実行します。3 次近似から、単純および調整済みの両方の R2 値を計算して、項数の追加によって予測力が向上するかどうかを調べます。

  1. データ ファイル count.dat の変数 count の最初の 2 列から 2 つの変数 xy を作成します。

    load count.dat
    x = count(:,1);
    y = count(:,2);

  2. polyfit を呼び出して、3 次近似を生成し、x から y を予測します。

    p = polyfit(x,y,3)
    
    p =
       -0.0003    0.0390    0.2233    6.2779

    p(4) は 3 次予測子の切片です。また、基本的な近似 UI を使用して回帰係数を取得することもできます。

  3. polyval を呼び出し、p の係数を使用して、y を予測します。結果 yfit とします。

    yfit = polyval(p,x);

    polyval は、次のように手動で入力できる明示的な方程式を評価します。

    yfit =  p(1) * x.^3 + p(2) * x.^2 + p(3) * x + p(4);

  4. 残差値を符号付き数値のベクトルとして計算します。

    yresid = y - yfit;

  5. 残差を二乗して合計し、残差の二乗和を取得します。

    SSresid = sum(yresid.^2);

  6. 観測の回数から 1 を引いた数で y の分散を掛けることによって y の総二乗和を計算します。

    SStotal = (length(y)-1) * var(y);
    

  7. このトピックのはじめに指定された式を使用して、3 次近似の単純な R2 を計算します。

    rsq = 1 - SSresid/SStotal
    
    rsq =
        0.9083

  8. 最後に、調整済み R2 を計算して、自由度を求めます。

    rsq_adj = 1 - SSresid/SStotal * (length(y)-1)/(length(y)-length(p))
    
    rsq_adj =
        0.8945
    調整済み R2、0.8945 は単純な R2、0.9083 よりも小さくなります。これによって多項式モデルの予測へ、より信頼性の高い推定能力を与えられます。

多くの多項式回帰モデルでは、方程式に項数を追加すると、R2 と調整済み R2 の両方が増えます。先の例では、3 次近似を使用したときのほうが線形近似に比べてどちらの統計値も値が大きくなりました。(線形近似での調整済み R2 を計算してみると、値が低くなることが確認できます)。ただし、必ずしも線形近似が次数の高い近似に劣るとは限りません。複雑な近似の方が単純な近似よりも調整済み R2 の値が低くなることがあり、その場合は複雑な近似を行う正当性がないことを示しています。また、基本的な近似ツールで生成される多項式回帰モデルでは R2 は 0~1 の間で常に変動しますが、調整済み R2 はモデルによって負の値になる場合があり、モデルの項数が多すぎることを示します。

相関は因果関係を示すものではありません。常に相関係数と判定を慎重に解釈してください。この係数は、近似したモデルが従属変数内の分散をどれだけ取り除くかを定量化するだけです。このような尺度は、使用するモデルまたは選択する独立変数がモデルで予測される変数の動作を説明するのにどれくらい適しているかを示すものではありません。

Curve Fitting Toolbox 関数を使用するデータ近似

Curve Fitting Toolbox ソフトウェアは、次のデータ近似機能によって、MATLAB の基本的な機能を拡張します。

  • 標準の線形最小二乗、非線形最小二乗、重み付き最小二乗、制約付き最小二乗、ロバストな近似手順などを含む線形および非線形パラメトリック近似

  • ノンパラメトリック近似

  • 近似の適合度を決める統計値の計算

  • 外挿、微分、積分

  • データ分割や平滑化が簡単にできるダイアログ ボックス

  • 近似結果を MATLAB コード ファイル、MAT ファイル、ワークスペース変数など多様な形式で保存

詳細については、Curve Fitting Toolbox ドキュメンテーションを参照してください。