参考書:多変量解析法入門
サイエンス社「多変量解析法入門」(黄緑本)。各章ごとに冒頭で解析ストーリーの全体像から説明してくれる構成がとてもわかりやすく、統計学のひと通りの基礎(統計検定2級レベル)を押さえてからもう少し多変量解析分野を掘り下げたいときにうってつけの参考書である。
上記参考書の例題をもとに、紙とエンピツだけでなくstatsmodelsライブラリを用いて計算結果を確認してみる。
重回帰分析(黄緑本第5章)
回帰式をつくる
必要ライブラリのインポート。プロットする際の文字化け(豆腐化)を解消するためにjapanize_matoplotlibを用いる。
import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.stats.outliers_influence as smf_i
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
※サンプルデータ(広さx1, 築年数x2, 価格y)は参考書を参照
まずはサンプルデータのcsvを用意し、データを読み込む。
df = pd.read_csv('data_2_重回帰分析.csv')
df.head()
データをヒートマップにプロットする。No.は不要なので消しておく。
df_tmp = df.drop('No.', axis=1)
corr = df_tmp.corr()
sns.heatmap(corr, annot=True)
目的変数の価格yに対して広さx1は強い正の相関、築年数x2は弱い負の相関が見られる。
回帰式を作る変数セットをformulaに’y ~ x1 + x2’の形で格納し、formulaをsmf.olsに渡してmodelをつくる。
formula = '価格y ~ 広さx1 + 築年数x2'
model = smf.ols(formula, df)
model.fit()で回帰式を計算して、model.summary()で回帰分析の結果を表示する。
results = model.fit
results.summary()
summaryが一覧になって表示される。
summaryを読む
・2段目:Interceptのcoefがβ0、広さx1のcoefがβ1、築年数x2のcoefがβ2になる。
→求める重回帰式はy = 1.021+0.0668x1-0.0808x2。
・1段目:R-squaredが寄与率、Adj.R-squaredが自由度調整済寄与率になる。
→R2 = 0.948、R*2 = 0.934。
以上について、参考書5章例題の計算結果とほぼ一致することを確認した。
・2段目:広さx1のtがβ1の検定量、築年数x2のtがβ2の検定量になる。
→|t(β1)|と|t(β2)| ともに t(7,005)なのでβ1とβ2は有効と判断する。
・2段目:広さx1の[0.0025 0.975]がβ1の95%信頼区間になる。築年数x2についても同様。
→β1の95%信頼区間:0.050 0.084、β2の95%信頼区間:-0.110 -0.052
テコ比(の代わりにCookの距離)
statsmodelsではテコ比を返してくれる処理が見当たらなかったので(もっと探せばあるかも)、テコ比の発展型であるCookの距離をstatsmodels.stats.outliers_influenceオブジェクトのcooks_distanceを用いて確認してみる。(統計WEBの解説)
olsinf = smf_i.OLSInfluence(results)
olsinf.cooks_distance
得られたCookの距離。値が0.5を超えると外れ値として疑う必要があるが、サンプルについては特に異常値無しと判断する。※参考書記載のテコ比も異常値無し。
以上(偏差積和等、途中計算の取り出しについても随時追記予定)