画像はUnsplashより
回帰分析(regression analysis)とは、分析の対象となるデータ(目的変数)を、分析の対象となるデータを説明するためのデータ(説明変数)の式で表現することです。
式での表現により、説明変数から目的変数を予測できるようになります。
説明するデータが1種類の場合は「単回帰分析」、複数種類の場合は「重回帰分析」といいます。
この記事では具体例とともに、Microsoft Excel、R、Pythonの各ツールでの回帰分析方法を紹介していきます。
回帰分析の例
ここでは、飲み物のカロリーを脂質量の式で表現することを考えます。つまり、目的変数yはカロリーで、説明変数xは脂質量です。
データはこちらから取得し、欠損値が含まれる飲み物を除きました。
散布図は以下のようになります。
目的変数を説明変数の式で表す方法はさまざまです。
単純で頻繁に用いられるものには、\(y=\beta_0+\beta_1x\)という関係を仮定する線形回帰があります。これは、データ間の直線的な関係のみ考慮し表現する方法です。
ほかにも、\(y=\beta_0+\beta_1x+\beta_2x^2+…+\beta_nx^n\)という関係を仮定するn次多項式などがあります。
式の形式を仮定した後、\(\beta_0, \beta_1, …, \beta_n\)の係数(パラメータ)を推定していきます。
y=b0+b1x
\\(y=\beta_0+\beta_1x\\)
y=b0+b1x+b2x^2+…+bnx^n
\\(y=\beta_0+\beta_1x+\beta_2x^2+…+\beta_nx^n\\)
b0,…,bn
\\(\beta_0, \beta_1, …, \beta_n\\)
今回は線形回帰の場合を考えていきます。
線形回帰の係数推定
線形回帰の係数を推定する方法として代表的なものには「最小二乗法」があります。
最小二乗法では、「実際の目的変数の値と式の結果の値の差の二乗」が最小になるような係数を求めます。
つまり、以下の式の最小化を目指します。
これは、できるだけプロットとの距離の総和が離れないような直線を目指していることになります。
最小二乗法から係数を求める式を導出すると、以下のようになります。
飲み物のカロリーと脂質量の値をこの式に当てはめると、以下のように係数が推定されます。
\(\beta_0=92.503\)\(\beta_1=18.254\)
求めた係数から、飲み物のカロリーを脂質量で表現した式は以下のようになります。
\(y=18.254 \times x+92.503\)この式により、カロリーがわからず脂質のみわかる新たな飲み物があった場合、脂質からカロリーを予測できます。
決定係数とは
決定係数は、式の予測能力を表す指標です。
式を導出した際、その式がどの程度予測に役立っているのかを、決定係数を導出して確認できます。
もしカロリーの予測時に説明変数がない場合、カロリーの平均を予測値とする方法が考えられます。
説明変数なしで平均を予測値とした場合と、説明変数に脂質量を用いて予測値を出した場合で、どれだけ二乗誤差を減少できたかの度合いが決定係数となります。
決定係数は0から1までの値を取り、1に近いほど式の予測能力が高いことを示します。
今回の例の決定係数は約0.57でした。説明変数なしのときより、脂質量という説明変数を用いたことで予測能力が上がっているとわかります。
相関係数とは
相関係数は、データ間の直線的な関係の強さを表す指標です。
データ間の直線的な関係が強いほど大きな値をとります。またデータ間に関係がありそうな場合でも、直線的な関係でないとき値は大きくなりません。
原因と結果のような因果関係を表す指標ではないため注意が必要です。
線形回帰のような、データ間の直線的な関係をもとにした式での表現を考える場合、相関係数の大きさはその説明変数を予測に用いるかどうかを判断する1つの指標にできます。
Microsoft Excelを用いた回帰分析の例
前章で、回帰分析の例として線形回帰を詳しく紹介しました。
手計算でも係数の導出は可能ですが、ツールを用いた方が早く正確に係数の導出が可能です。
関数を用いる方法
Microsoft Excel(Excel)の関数には、線形回帰の係数を簡単に推定してくれるものがあります。
\(y=\beta_0+\beta_1x\)の係数\(\beta_0、\beta_1\)と決定係数、相関係数を推定してくれる関数は以下のとおりです。\\(\beta_1\\)の推定:「=INTERCEPT(目的変数yのデータ範囲, 説明変数xのデータ範囲)」
決定係数の推定:「=RSQ(目的変数yのデータ範囲, 説明変数xのデータ範囲)」
相関係数の推定:「=CORREL(目的変数yのデータ範囲, 説明変数xのデータ範囲)」
散布図から式を求める方法
関数を使う以外に、データから散布図を描き近似曲線から式を表示させるという方法もあります。
手順は以下のとおりです。
- 散布図を作成
- グラフデザインのグラフ要素を追加から近似曲線を開き「線形」を選択
- 描かれた近似直線をダブルクリックして近似曲線の書式設定を開き、「グラフに数式を表示する」のボックスにチェック
RやPythonを用いた回帰分析の例
前章ではExcelでの線形回帰の方法を紹介しました。
Excelは手軽で便利ですが、「データ数が膨大」「説明変数を複数考慮したい」「より複雑な式をあてはめたい」といった場合には向きません。
この記事ではこうした場合に向いている、RやPythonを用いた回帰分析について紹介します。
Rを用いた回帰分析の例
Rの関数lm()を用いた回帰分析について紹介していきます。
lm(目的変数~説明変数, data=○○,…)のように、最低限「どの変数が目的変数で、どの変数が説明変数で、どのデータを用いるか」を指定すればモデルが作成されます。
例えば、以下のようにカロリーと栄養素のデータを読み込んだ場合、
次のように入力すると脂質量からカロリーを予測する線形回帰モデルが作成されます。
モデルの詳細を確認すると、推定された係数や決定係数などの情報を確認できます。
自由度調整済決定係数とは、説明変数が増えると決定係数が1に近づくという影響を調整した決定係数です。説明変数の数が異なるモデルの予測能力を比較する際などに使います。
散布図と推定した式の直線は以下で描画可能です。
「脂質が5gのときのカロリーはどの程度だろうか?」などの予測をする場合はpredict()を用います。
lm()は説明変数を複数設定することも可能なので、飲み物のカロリーを脂質量と炭水化物量の式で表現することもできます。
炭水化物を説明変数に加えたことで自由度調整済決定係数が大幅に増加しました。
脂質量の情報だけで作成した先ほどのモデルより、脂質量と炭水化物量の情報を用いたこのモデルのほうが予測能力は高いと考えられます。
Rには今回紹介した線形回帰モデルを作成できるlm()以外にも、一般化線形モデルを作成できるglm()や非線形回帰モデルを作成できるnls()など複数の回帰分析の関数があります。
関数を用いず、自分で1から式と係数の推定方法を書いて計算させることも可能です。
Pythonを用いた回帰分析の例
Pythonの機械学習ライブラリscikit-learnの線形モデルlinear_modelのLinearRegression
を用いた回帰分析について紹介していきます。
linear_modelでは線形モデルの様々な係数推定方法を指定できます。LinearRegressionは1章で説明した二乗誤差の最小化を用いています。
モデル名(任意)=linear_model.LinearRegression()としてモデルの形式を指定した後、
モデル名.fit(説明変数, 目的変数)とすればモデルが作成されます。
あらかじめ数値計算に必要なライブラリやscikit-learnをインポートしておきます。
データは先ほどRで用いたものと同様です。
以下のように説明変数Xに脂質量を、目的変数Yにカロリーを指定したデータを作成し、線形回帰モデルを作成します。
推定された係数や決定係数は以下のように確認できます。
散布図と推定した式の直線は以下で描画可能です。
「脂質が5gのときのカロリーはどの程度だろうか?」などの予測を以下で実施します。
説明変数を複数設定する場合は、説明変数Xの作成時に複数の変数を指定します。
scikit-learnのlinear_modelにはLinearRegressionのほかに、二乗誤差を最小化する際に制約を加えて係数を推定するRidge、Lasso、Ridgeがあります。
Rと同じく一般化線形モデルや非線形回帰モデルの作成、自分で1から式と係数の推定方法を書いて計算させることも可能です。
この記事では、回帰分析について紹介しました。
回帰分析とは、目的変数を説明変数の式で表現することでした。式には様々なものが考えられますが、単純で頻繁に用いられるものとしては線形回帰があります。
回帰分析はデータ間の関係をもとに式を作成でき予測に役立ちます。
今回の例では、脂質量と炭水化物量からカロリーを予測できるようになりました。
ただ分析結果の理由までは分からないため、「なぜこの説明変数の係数が大きくなったのか」といったことは自分で考える必要があります。