重回帰分析をわかりやすく解説|統計解析ソフトRで実装

R
この記事は約10分で読めます。

ナバ
ナバ

この記事では重回帰分析の基礎について解説し、無償で使える統計解析ソフトのRで重回帰分析を実践する方法をご紹介します!

この記事が分かること

・重回帰分析の基礎

・重回帰分析の流れ

・重回帰モデルをRで実装する方法

スポンサーリンク

重回帰分析

重回帰分析とは目的の数値の変動を複数の要因でどの程度説明できるかを分析することです。

例えば、目的の数値が「物件の賃料」であった場合、「部屋の広さ」、「築年数」、「最寄り駅までの距離」などの要因で物件の賃料を説明できそうです。

このように複数の要因から、知りたい数値の変動をうまく説明する式を作っていくのが重回帰分析です。(説明に使用する要因が1つの場合は、単回帰分析といいます。)

重回帰分析で作成する式は重回帰式または重回帰モデルと呼ばれます。

重回帰式を使って未来の値を予測したり、要因を分析したりします。

先ほどの不動産の例で重回帰式を作ると下記のようになります。

重回帰式

y:目的変数、x1~xn:説明変数、 β0 :定数項、β1~βn:偏回帰係数

目的の変数を目的変数、説明に使用する変数を説明変数といいます。

重回帰分析では目的変数yの変動を最もうまく説明する偏回帰係数の組み合わせを最小二乗法というアルゴリズムによって決定します。

最小二乗法とは、残差の絶対値の平均が最小となるように回帰式の係数を求める方法です。

残差とは、回帰式の出力と実測値の差分を指します。

最小二乗法の説明図

Rで重回帰分析を実施する場合、最小二乗法で求めた係数が自動的に出力されます。

スポンサーリンク

Rで重回帰分析をやってみよう

続いて、統計解析ソフトのRを使って重回帰分析を実践する方法を解説します。

今回はボストン市の住宅価格データ「Boston」を使用します。

Bostonデータは、Rの標準ライブラリMASSにインストールされています。

しかし、この記事ではローカルのデータをインポートする方法を紹介したいので、下のボタンよりBostonデータをダウンロードし、任意のフォルダに保存してください。

各カラム(データ列)の意味は以下の通りです。

重回帰分析を実施するデータセットBoston

今回は、住宅価格の変動をうまく説明する式を作っていきます。

つまり、MEDV_PRICEが目的変数であり、 MEDV_PRICE以外が説明変数の候補となります。

データの読み込み

CSVファイルを読み込むためのコードは次の通りです。

df <- read.csv("C:/Users/user/Documents/R_Study/boston.csv")

引用符で囲まれたC:/Users/user/Documents/R_Studyの部分はCSVファイルの保存先に応じて変更してください。

上記のコードを実行すると、CSVファイルのデータが “df” という名前の箱に格納されます。

<- (矢印)によって、データなどが格納された箱(上記の場合df)をオブジェクトといいます。

head()を実行し、次のように先頭数行のデータが表示されれば、正常にデータが読み込まれています。

head(df)

データの可視化

データ分析でまず最初にやった方がいいのがデータの俯瞰です。

なぜならデータの俯瞰によって、おかしなデータに気づけるかもしれないからです。

おかしなデータが混在したまま分析しても、その分析結果には意味がありません。

数値が漠然と並んだものを眺めるだけではおかしなデータを見落とす可能性があります。

なので、データをグラフで可視化することでデータの全体像を把握します。

目的変数の分布

まずは目的変数MEDV_PRICE(住宅価格)の分布をヒストグラムで確認してみましょう。

ヒストグラムを作成するコードは次の通りです。

hist(df$MEDV_PRICE)

“オブジェクト$カラム”と記述することで特定のカラムのみを抽出できます。

ヒストグラムとは、横軸に階級、縦軸に度数をとった統計グラフです。

MEDV_PRICEの度数は、21~25のピークを境に大きくなるにつれて減少しています。

しかし、46~50で度数が少し上がっています。

このことから、実際は50より高い値は打ち切りになり、50に丸められている可能性があります。

このような「おかしなデータ」は可視化することで、発見しやすくなるのです。

ヒストグラムの結果から、分析ではMEDV_PRICE=50のデータは使用しない方が良い結果になる可能性があります。しかし、本記事の趣旨とは異なるため、今回の分析では50の値もそのまま使うことにします。

相関分析

続いて、目的変数と各説明変数の相関関係を可視化します。

相関とは2つの物事が互い影響し合うことであり、散布図によって可視化することができます。

相関の強さは一般的に相関係数という指標で表します。

相関係数は-1から1の間をとり、その絶対値が大きいほど相関が強いと解釈します。(相関係数の信ぴょう性はサンプル数の大きさに依存しますが、本記事では割愛します)

Rでは散布図と相関係数を同時に出力してくれる便利なパッケージpsych があります。

psychをインストールするコードは次のとおりです。

install.packages("psych")

パッケージのインストールだけでは、その機能は使えないので、library(パッケージ名)というコードを実行します。

library(psych)

ここからpsychを使って散布図を出力していくのですが、今回は説明を簡単にするために変数を”RM”、”LSTAT”、”MEDV_PRICE”の3つに絞って散布図を出力します。

psychを使えば、2変数のすべての組み合わせについて散布図を1つの図として出力することができます。

df.s <- df[,c(7,14,15)]  #"RM"、"LSTAT"、"MEDV_PRICE"をdf.sに格納
psych::pairs.panels(df.s) #散布図を出力
psychによる相関分析

左斜めの対角線上に各変数のヒストグラムが表示され、対角線より左下には散布図が、右上には相関係数が表示されています。

一番右上を見ると”RM”と”MEDV_PRICE”の相関係数は0.70であり、相関が比較的強いことが分かります。

これは住居の平均部屋数が多いほど、住宅価格は高くなることを意味し、一番左下の散布図でもその関係性が確認できます。

目的変数に対する相関係数が高い変数をモデルの説明変数に設定することで、モデルの精度向上が期待できます。

このように、データの特性を探索する手法の総称をEDAといいます。

EDAについては、下記で解説していますのでこちらもあわせてお読みください。

重回帰モデルの作成

いよいよ重回帰モデルを作成していきます。

といっても、次の1行のコードを実行するだけです。

関数lmで式とデータを指定し、適当に名前をつけた箱に結果を格納します。

あとはRが最小二乗法で最適な偏回帰係数を推定してくれます。

ans <- lm(MEDV_PRICE ~ RM + LSTAT , data = df.s)

ちなみに説明変数を指定する箇所をピリオド(.)にすると、目的変数に指定したカラムを除いた全てのカラムを説明変数に設定できます。説明変数の数が多いときに便利です。

ans <- lm(MEDV_PRICE ~  . , data = df.s)  #上の式と同じ意味

分析結果の解釈

最後に重回帰分析の結果の解釈方法について解説します。

結果を確認するには、summary()を使います。

括弧の中には重回帰モデルの結果を格納した箱を指定します。

summary(ans)

summary()を実行すると下のような結果が返ってきます。

ここで特に確認すべき箇所は、赤枠の係数決定係数です。

それぞれの見方を解説します。

係数

Coefficients(係数)の出力のうち、特に重要なのが次の3つです。

偏回帰係数

Estimateは偏回帰係数、(Intercept)は切片(定数項)です。

偏回帰係数 と切片を式に当てはめると次のようになります。

この式の変数x1とx2にそれぞれRM、LSTATの値を代入することで住宅価格の推定値を求めることができます。

t値

目的変数の変動に対する各説明変数の影響度の強さを比較したいときにはt値を見ましょう。

偏回帰係数じゃダメなの?と思うかもしれませんが、偏回帰係数は変数間の単位の違いを考慮していません。

単位が全く違うもの同士の数値(例えば、体重[kg]と身長[cm])を比較しても全く意味がありません。

その点、t値は単位の違いを考慮しています。

影響度を比較するときはt値の絶対値を見ましょう。

今回の分析結果では、RMよりもLSTATの方がt値の絶対値が高いので、LSTATがより影響度が強いことが分かります。

目的変数の変動に対する各説明変数の影響度の強さを比較したいときは、偏回帰係数で比較します。

ここで注意すべきことは、標準化したデータで求めた偏回帰係数で比較することです。

標準化については、下記で解説しています。

p値と有意表記

p値はt値の大きさによって決まる確率で、p値が小さいほど、その係数を信じていいよという意味です。

RMの係数が本当は0だとすると、5.09479という係数がデータの偏りで生じる確率は 2×10のマイナス16乗(限りなく0)%ということ意味しています。

RMの係数が0とは言えないということは、RMの変動は目的変数の変動に強く影響している可能性が非常に高いということです

p値が高いと見るか低いと見るかは人が決めます。

一般的には1%と5%がよく判断基準として使われます。

この基準を有意水準といい、Rでは有意な説明変数に*印が表記されます。

p値が小さいほど*印が増えます(最大3つ)。

決定係数

決定係数とは、モデルの当てはまりの良さを0~1で表す指標で、1に近いほど当てはまりが良いとされます

当てはまりの良さとは、目的変数の変動をどの程度うまく説明できているかということです。

重回帰モデルを数値の予測に使用する際は、この決定係数を見て、当てはまりの良さを確認しましょう。

今回の重回帰分析における決定係数(Multiple R-squared)は0.6386ということで、当てはまりの良さとしては、まずまずです。

ここで注意すべきなのが決定係数は「説明変数の個数が多いほど高くなる」という欠点を持っていることです

説明変数が多いほど当てはまりが良いわけではありません

そこで考えられたのが、自由度調整済み決定係数です。

これはモデルに使っている説明変数の個数をペナルティとして補正した決定係数です。

今回の重回帰モデルに使用されている説明変数は2つだけなのでペナルティが小さいですが、補正前に比べて若干低くなっていることが分かります。

スポンサーリンク

まとめ

ビジネスにおける分析でもよく使われる重回帰分析の基礎について解説し、統計解析ソフトのRで重回帰分析を実践する方法をご紹介しました。

本記事に関するご指摘、ご質問がございましたら、Twitterにてお気軽にメッセージをください。

Twitterアカウント@data_nava

Twitterでも統計学、機械学習について発信しておりますので、フォローいただけると嬉しいです!

スポンサーリンク

データ分析について学びたい方にオススメの講座

【DataMix】データサイエンティスト育成コース

この講座は、未経験の方であってもデータサイエンティストのエントリー職として仕事に就けるレベルにまで引き上げることを目的とした講座です。

データサイエンティストに必要な知識やスキル、考え方を実践的に学ぶことができる約6か月間のプログラムです。

【DataMix】データサイエンティスト育成コースで学べる知識・スキル

・機械学習・統計学に関する基礎知識
・PythonとRによるプログラミング
・自然言語処理
・画像処理(Deep Learning)
・データサイエンスPJの進め方

コメント

タイトルとURLをコピーしました