
書記が数学やるだけ#442 回帰分析の診断
回帰分析における仮定を満たしているか,確認が必要である。
問題
データは#225と同じものを用いる。
説明
残差の性質についてまとめておく。
今回は回帰分析の診断として,「残差プロット」「正規Q-Qプロット」「標準化残差の絶対値の平方根プロット」「標準化残差とレバレッジのプロット」を取り上げる。
解答
元のモデルについて復習。
# ライブラリの読み込み
import numpy as np
import pandas as pd
import scipy as sp
import statsmodels
import statsmodels.api as sm
import statsmodels.formula.api as smf
import lmdiag# データの読み込み
data = pd.read_csv('回帰分析-1.csv')
print(data)# モデル化
model = smf.ols('VOLUME ~ HEIGHT', data=data).fit()
model.summary()import matplotlib.pyplot as plt
import seaborn as sns
sns.jointplot(x="HEIGHT", y="VOLUME",data=data)それでは各プロットを見ていく。
#残差プロット
lmdiag.resid_fit(model)残差プロットからは,等分散性が成立しないことが疑われる。赤い数字は残差の大きい観測値を示している。元のグラフに対応づけたものが下図である。
#正規Q-Qプロット
lmdiag.q_q(model)正規Q-Qプロットからは,正規性に問題はないと考えられる。
#標準化残差の絶対値の平方根プロット
lmdiag.scale_loc(model)標準化残差の絶対値の平方根プロットは増加傾向にあることから,等分散性が成立しないことが疑われる。
#標準化残差とレバレッジのプロット
lmdiag.resid_lev(model)標準化残差とレバレッジのプロットからは,特にデータ30が外れ値であると疑われる。
ここまでのプロットをまとめて表示することもできる。
plt.figure(figsize=(8,7))
lmdiag.plot(model)では,データ30を除去した場合,モデルはどう変化するのか確認する。
#データ30を除去
data.drop(index=30, inplace=True)# モデル化
model_outlier = smf.ols('VOLUME ~ HEIGHT', data=data).fit()
model_outlier.summary()sns.jointplot(x="HEIGHT", y="VOLUME",data=data)除去前と比べると
・Adj. R-squared:0.336→0.259
・Prob (F-statistic):0.000378→0.00241
と,いずれの指標からも回帰モデルの適合性が下がっていることが言える。「外れ値は必ずしも回帰モデルの適合性を下げない」実例である。理由もなしに外れ値を除去してはいけない。
本記事のもくじはこちら:















