ピープル・アナリティクスケーススタディ:重回帰分析に挑戦!③残差診断
残差診断のためのコマンドlmdiagをインストール
いよいよ、重回帰分析を使ったピープル・アナリティクスも最終回です。
今回は、最初の回で重回帰分析を使うための前提の3つ目である「残差」について取り上げたいと思います。
3つの前提は以下のようになっていました。
1.説明変数と被説明変数が線形関係にあること=>散布図を描いて確認
2.多重共線性がないこと=>説明変数同士で相関係数0.6以上の相関関係がない
3.残差にばらつきがないこと
3について私が今回の課題を解いたAIHRではRを用いて4つの指標をグラフ化していました。
Pythonで同じことを行う場合、”lmdiag”というコマンドをインストールしないといけません。
以下のようにすぐにインストールできるかなと思ったのですが
"linearmodels 4.24 has requirement statsmodels>=0.11, but you'll have statsmodels 0.10.0 which is incompatible"
というメッセージが出てきました。
どうもstatsmodelが古かったようですね。
ただ、そのままstats modelをアップデートすればいいのではなく、pip自体をまずアップデートしなければなりませんでした。
なのでまずpipをアップグレード
statsmodelを再(?)インストール
で再度lmdiagをインストール
でうまくいきました!!
なれている方にはたいしたことではないんでしょうが、私のような万年ひよっこPython利用者にはそれなりに大変でした😅。
4つのグラフはすぐに出ました!
AIHRの解説例で出ていたRを用いた4つのグラフは以下のような形ですぐ出ました!
>|Python|
import lmdiag
plt.figure(figsize=(8,7))
lmdiag.plot(res_4)
pass
||<
注:res_4は重回帰分析を行った結果を格納している変数です
左上:残差に非線形のパターンがないか (単独で出す場合の関数は resid_fit())
こちらが上向きやU字型になっていると非線形の可能性が示唆されるそうですが問題なさそうですね。理想は示されている赤線が横軸に平行になっている状況です。
右上:残差が正規分布に従っているかどうか (単独で出す場合の関数は q_q())
正規分布に従っていれば直線状ということですがこちらもほぼに直線であることが確認できました。
左下:残差が均一分散かどうか (単独で出す場合の関数は scale_loc())
縦の散らばりがおおむね均等であれば均一分散といえるそうです。示されている赤線が横軸に平行になるのが理想だそうです。
右下:大きい観測値を特定し、推定値が少数の観測値に大きく左右されていないか (単独で出す場合の関数はresid_lev())
大きな外れ値によって影響を受けていないかですね。特に右上にちらっと見える点線の外に出ているような外れ値がある場合は問題があるようです。
この分析にあたっては以下のブログに大変お世話になりました。正直考えの背景まで理解できているのかは不明ですが今回の課題取り組みを通じて何に気をつけないといけないかということが理解できてよかったと思っています。
これからも実践を通じていろいろ試したいと思います!