見出し画像

Pythonで学ぶ重回帰分析について

今回からは多変量解析に入っていきます。第一回目なので重回帰分析が含まれる多変量解析について解説します。その後は重回帰分析について深く掘り下げ、最後にpythonで実際にデータを使いながらより理解を深めていきます。

今日の内容
・多変量解析とは
・重回帰分析とは
・pythonで学ぶ重回帰分析(近々追加予定)

1.多変量解析とは

まず多変量解析とは複数の変数に関するデータを元に、これらの変数間の相互関係を分析する統計的手法のことです。この多変量解析には重回帰分析やクラスター解析、主成分分析と行った分析手法が含まれています。

多変量解析では様々なことができます。

・ある商品の売り上げ予測
・癌であるかを判断
・ある地域の人口・世帯数などの要素を利用して事業の役に立てる

マーケティングや医療の場で様々な場面で使われます。

1-1.データの種類

多変量解析を扱う上で避けることができないことがあります。それがデータの尺度というものです。大きく分けて四種類に分けることができます。

以前少しまとめましたが改めて紹介します。データは大きく分けて量的データ質的データがあります。さらに細かく分けて量的データには間隔尺度比例尺度があり、質的データには名義尺度順序尺度があります。

画像1

1-2.多変量解析の目的と種類 

また多変量解析には二つの目的があります。それが予測と要約です。どの分析手法でも同じですがまずは目的を明確にしましょう。

では多変量解析の手法の一覧を見ていきましょう。予測と要約、説明変数と目的変数でのデータに注目して図式化してみました。ではそれぞれの手法について簡単に説明します。

画像2

重回帰分析:複数のデータを関数に当てはめることにより、ある変数y(目的変数)を別の変数x(説明変数)の変動により予測うう・影響関係を検討する手法

正準相関分析:カテゴリデータである目的変数と数量データである説明変数の関係を調べ、複雑な式を導き出す方法。

判別分析:カテゴリ化されたデータがどういう基準で分類されているかを解析する手法

ロジスティック回帰分析:複数の量的データを分析して質的確率を予測する手法のこと。

コンジョイント分析:商品やサービスの持つ複数の要素について、ユーザはどの要素にに重気を置いているかを分析する手法。

主成分分析:相関があるもの同士を一緒にまとめる手法

因子分析:測定した変数の潜在的な要素を見出す手法

クラスター分析:二つ以上のグループがある時、これらをいくつかのグループに分類する方法

多次元尺度法:個々の要素間の親近性データを、二次元あるいは三次元空間に類似したものを近く、そうでないものを遠くに配置する方法です。

コレスポンデンス分析:クロス集計結果を基に、次元縮約を行う方法。

1-2-1.数量化理論について

まず数量化理論とはなんだろうか。実際の分析データに質的データと量的データが混在していた場合、数値データを前提とした手法を使って分析することができません。そこで数量データを適当に分割して、カテゴリ化して数量化理論を適用します。

数量化I類:I類は重回帰分析に相当します。

数量化II類:II類は判別分析に相当します。

数量化III類:III類は主成分分析に相当します。

数量化IV類:IV類は多次元尺度構成法に相当します。

これでざっと多変量解析の手法の簡単な説明は終了です。

2-1.重回帰分析について

では重回帰分析を深く掘り下げていきましょう。まずはモデル式の構造について見ていきましょう。上が単回帰のモデル式で、下が重回帰のモデル式です。違いは見て貰えば分かる通り、重回帰式では説明変数が複数ですね。

画像3

nは説明変数の数を表しています。例えば説明変数が四つの場合はa4x4となります。単回帰式では説明変数が一つなのでa1x1で終了していますね。では式に含まれている"a"と"x"の正体は何でしょう。"a"は係数で"x"は説明変数です。でもよく式を見て見ると一つxが使用されていないaがありますね。これは定数項と呼びます。この係数と説明変数、定数項が求めることができれば良さそうですね。先程も説明しましたが、説明変数として使用できるのは量的データでしたね。もし質的データを使用する際は数量化理論を参照していください。(今回は扱いません。)

2-1-1.係数の話

ではまず最初に係数を求めていきましょう。ここでの係数とは要素の強さを示しています。センター試験を例としてあげると、センター試験では満点が900点満点(リスニングを除く)でしたね。これはどの受験生も同じです。しかし二次試験の各大学のセンター試験の配分を見ると、数学の配分が高かったり、英語の配分が高くなっています。ここで係数が登場します。文系の大学でしたら、国語・英語・社会を重点を置きたいのでそれらの科目には係数という名のバイアスを数学や理科科目よりも多くかけます。もし理系の大学でしたら数学や理科科目にバイアスよりかけるでしょう。これが係数の役目です。

ここで軽く係数の種類について紹介します。

編回帰係数:説明変数ごとに付け加えた係数のこと(比較はできない。説明変数ごとによって統一されていないため)
標準回帰係数:標準化(平均を0に標準偏差を1にしたもの)した係数のこと(各要素の係数の影響力が比較ができる)

2-2.係数の算出方法

代表例として最小二乗法があります。最小二乗法とは実測値と理論値の誤差の二乗和が最小になるように予測値の未知のパラメータを求める方法の事です。なぜ二乗する必要があるのか。二乗する事で値から距離に変換することができます。

次の赤線を回帰式とするとそれぞれの青点の誤差はそれぞれ1と−1ですね。これを二乗しないで足してしまうと1+(-1)=0となり、誤差があるにも関わらずお互いに相殺してしまいます。なので二乗する必要があります。距離と表現したのは距離絶対にマイナスにならないからです。二乗誤差というとちょっと難しいので回帰式との距離と表現した方が良いかもしれません。回帰分析ではこの合計距離が最短になるように求めていきます。

画像4

ではどのように最短にすれば良いのでしょうか。ここで登場するのが微分です。ここでの微分は難しく考えずに最小値と最大値を求める手法と認識して大丈夫です。またその微分の中でも偏微分というものを使用します。この偏微分とは式の中の一つの変数に注目してそれ以外を全て微分するというやり方です。例えば次のような多変数関数があります。これを微分したいのですが変数(x,y)が二つあり高校の範囲(あまり詳しくは知らないのですが)では微分することができません。ここでxとyそれぞれに注目してそれ以外は定数として扱います。(分かりにくい場合は1と捉えてください。)

画像5

ではまずxに注目しましょう。yは無視して大丈夫です。イメージのような感じです。そしたら微分します。(累乗を前に持ってきて係数と掛け算をして、累乗は前の式から-1する)

画像6

では続けてyも同じようにやって見ましょう。

画像7

はいできました。これで偏微分は終わりです。

次に紹介するのは偏差平方和や平方和など基礎的な統計量について紹介します。

偏差平方和:偏差とはあるデータの値から平均値の差のことです。平方とは二度掛け合わせる事で、それを全部足します。
偏差積和:偏差と偏差を掛け合わせたものを偏差積とといい、それらの総和が偏差積和です。
共分散:偏差積和をデータ数で割ったものです。

では実際に先程の微分や最小二乗法などを使用して係数を求めていきましょう。一応自分が裏で何が行われているのかを知るために数式を導入していますが、すっ飛ばしても構いません。

まず求める重回帰式モデル(①)を次のように定義します。今回は説明変数は2個とします。その後に理論値y^のモデル(②)を次のように設定します。ではこの理論値(y^)と観測値(y)の誤差を最小にするために残差(e_i)(③のこと)を設定します。残差を設定し終えたら誤差二乗和を求めます。(残差平方和(④のこと))

画像8

これで準備が完了しました。では次にそれぞれのαに対して偏微分を行います。それぞれ偏微分を行った値が最小の0になるようにセットしてあげます。⑤、⑥、⑦のようにそれぞれ分解し終わったら、整理してあげます。α0、α1、α2に関する連立方程式で正規方程式と呼びます。

画像9

画像11

また⑧を次のように整理します。こうする事で今後α1やα2が求まると定数項を求めることができるようになります。

画像12

そして⑪を整理します。

画像13

最後にこの⑪を⑨と➉にそれぞれ代入して整理します。

画像14

次に各変数の平方和(上の二つが平方和。S_11がα_1、S_22がα_2)と偏差積和(下二つが目的変数と各説明変数ごとの偏差積和。)と共分散を求めます。

画像16

求めることができたら、それらを先程整理した⑬と⑭に代入します。そうすると次のような連立方程式を導くことができます。

画像10

またこの時のα1やα2を偏回帰係数と呼びます。あとはこれを普通に連立方程式で解いたり行列を使用してα1やα2を求めてください。(係数が多くなると従来の連立方程式で解くのは難しくなるので行列を使用した方がいいと思います。)

画像16

そして➉にα1とα2代入して解けば定数項が求まり、回帰式の係数と定数項が全て求め終わりました。ただこれだと、係数同士の比較ができません。(説明変数によっては数値にばらつきが出るため。)なのでこの求めた偏回帰係数を標準化します。この係数のことを標準偏回帰係数と呼びます。

画像20

2-3.モデルの妥当性(重相関係数と決定係数)

次に調べていくのはモデル式の妥当性です。先程のモデルを求めただけでは終わりではありません。実績値と理論値が近ければ近いほど先程はモデルは重回帰式のモデルに当てはまっているということになります。ここで使用するのが重相関係数決定係数です。

重相関係数では実績値と理論値の相関が高ければそのモデルは良いというこ分かります。式は次のようになります。

画像17

決定係数も重相関係数と同じ意味を持っています。決定係数は重相関係数を二乗したものと一致します。S_Eは残差平方和の事で④のです。S_yyは先程求めた偏差平方和の事で⑱です。⑱は偏差平方和です。重相関係数や決定係数でも得た値が1に近いほどモデルの当てはまり具合が良いということになります。(とる値は0〜1

画像18

しかし決定係数をこのまま使うと関係ないような説明変数を加えても決定係数は大きくなってしまいます。そこでこの問題点を修正した決定係数を自由度修正済決定係数と呼びます。

画像19

これに代入した値と先程の決定係数の値を比べるとこちらの方が小さくなります。

ではこれらを元にpythonで重回帰分析をやっていきます。

3-1.pythonで学ぶ重回帰分析について(scikit-learnあり)


ではこれまでの理論を元にPythonで重回帰分析をやっていきましょう。かなり簡単です。まず必要なライブラリをインポートします。また今回はscikit-learnに入っているデータを使用します。

import numpy as np
import pandas as pd
import scipy as sp
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston

boston = load_boston()

これでボストンの住宅のデータを取得することができました。もし詳しい情報を知りたいならば次のコマンドを実行してください。このようにするとbストンのデータセットの情報を一気に入手することができます。

print(boston.DESCR)

では要素のの一覧を表示してみましょう。次のようなコマンドを打てば一覧が出てきます。

print("Boston feature names :\n{}".format(boston.feature_names))


では次にデータフレーム化していきましょう。データフレーム化したら次に今回の応答変数であるPriceのカラムを追加します。これはボストンデータのtargetに含まれています。気になる方はboston.targetと打てば一覧が出てきます。

df = pd.Dataframe(boston.data)
df["PRICE"] = pd.Dataframe(boston.target)
df.head()

データフレーム化したら次に応答変数と説明変数に分けます。価格を予想したいのでPRICEを応答変数に、それ以外を説明変数をそれ以外とします。

Y = df["PRICE"]
X = df.drop("PRICE", axis = 1)

次に回帰モデルの作成をしていきます。まず回帰モデルをインスタンス化して、fit()でモデルを作成します。これでモデルの作成は終了です。簡単ですね。

・model.fit():モデルの作成
・model.coef_:モデルの係数の出力
・model.intercept_:モデルの切片(定数項)の出力

係数を先程のコマンド出力してもいいのですが、見づらいのでデータフレーム化します。

coefficient = model.coef_
df_coef = pd.Dataframe(data = coefficient, index = X.columns, columns = “Coefficient”)

これで説明変数とその係数の図が見やすくなりました。

画像21


model = LinearRegression()
model.fit(X,Y)
model.coef_
model.intercept_

最後にモデルの妥当性を調べるために決定係数を見ていきましょう。使用するコマンドは.scoreコマンドです。これを実行すると0.74と出力されます。低くも高くもないスコアですね。今回は統計学としての重回帰分析だったので、モデルの精度の向上は行いません。

model.score(X,Y)

scikit-learnならこんなにも簡単に重回帰分析を行ってきます。また今回のデータには質的データが含まれていましたが、すでに数量化されていました。その要素とはなんでしょうか。それはCHASという要素でこれは川沿いに家があるかを記録しているもので、1なら川沿いに位置して、0ならそうではないということを示しています。このCHASデータをダミー変数とも言います。

一応今回はこれで終了ですが、何か学びがあったら追加していきます。




・最後に参考にした書籍

数式があります。根本から理解したい人におすすめです。

昔の本ですが、数式は最低限で基本文章なので読みやすいです。



この記事が気に入ったらサポートをしてみませんか?