Pythonでデータ解析を行う際に、回帰分析は非常に重要な手法の1つです。回帰分析は、2つ以上の変数の関係を分析する方法で、データの傾向を予測するために使用されます。StatsmodelsはPythonの統計解析ライブラリの1つで、回帰分析を行うための多くのツールを提供しています。本記事では、Statsmodelsを使用して回帰分析を行う方法について詳しく説明します。
[PR]
Statsmodelsのインストール
まず、Statsmodelsを使用するには、パッケージをインストールする必要があります。以下のコマンドを使用して、Statsmodelsをインストールできます。インストール済みの場合は、この手順はスキップして下さい。
pip install statsmodels
また、関連する以下のライブラリもインストールされていない場合は追加します。
pip install pandas pip install numpy pip install sklearn
ライブラリのインポート
コードの初めに先ほどインストールしたライブラリをインポートします。
import pandas as pd import numpy as np import statsmodels.api as sm
データの読み込み
次に、回帰分析に使用するデータを読み込みます。ここでは、Boston Housingデータセットというボストンの住宅価格のデータセットを使用します。このデータセットには、部屋数や周辺地域の犯罪率などの13項目住宅価格に影響を与える要因が含まれています。このデータセットは初めにインストールしたscikit-learnのライブラリに含まれています。
from sklearn.datasets import load_boston boston = load_boston() boston_df = pd.DataFrame(boston.data, columns=boston.feature_names) boston_df['MEDV'] = boston.target
このコードでは、Scikit-learnのload_boston関数を使用して、Boston Housingデータセットを読み込み、Pandas DataFrameに変換しています。MEDV列には、各住宅の中央値が格納されています。
回帰分析を行う
Statsmodelsを使用して回帰分析を行うには、まず説明変数と目的変数を定義する必要があります。ここでは、MEDVを目的変数、RMを説明変数として回帰分析を行います。Boston Housingデータセットにおいて、MEDVはボストン市内の住宅価格の中央値を表し、RMは各住宅の平均部屋数を表しています。
X = boston_df[['RM']] y = boston_df['MEDV']
説明変数と目的変数を定義したら、回帰分析を行うためのモデルを作成します。OLS(Ordinary Least Squares、最小二乗法)モデルを使用して、回帰分析を行います。OLSは、観測された説明変数の値を使用して、回帰直線をフィッティングすることによって、目的変数の値を予測します。この回帰直線は、残差の平方和が最小となるように決定されます。
X = sm.add_constant(X) model = sm.OLS(y, X).fit()
このコードでは、説明変数に定数項を追加するために、sm.add_constant関数を使用しています。次に、sm.OLS関数を使用してOLSモデルを作成し、fitメソッドを使用してモデルを適合させます。
結果の確認
回帰分析の結果を確認するには、以下のようにsummaryメソッドを使用します。
print(model.summary())
このコードを実行すると、以下のような結果が表示されます。
OLS Regression Results ============================================================================== Dep. Variable: MEDV R-squared: 0.483 Model: OLS Adj. R-squared: 0.481 Method: Least Squares F-statistic: 471.8 Date: Sun, 03 Apr 2023 Prob (F-statistic): 2.49e-74 Time: 00:00:00 Log-Likelihood: -1673.1 No. Observations: 506 AIC: 3340. Df Residuals: 504 BIC: 3349. Df Model: 1 Covariance Type: nonrobust ================================================================================= coef std err t P>|t| [0.025 0.975] --------------------------------------------------------------------------------- const -34.6706 2.649 -13.097 0.000 -39.858 -29.483 RM 9.1021 0.419 21.721 0.000 8.280 9.924 ============================================================================== Omnibus: 132.207 Durbin-Watson: 0.754 Prob(Omnibus): 0.000 Jarque-Bera (JB): 385.035 Skew: 1.346 Prob(JB): 1.13e-84 Kurtosis: 6.473 Cond. No. 57.6 ============================================================================== Notes: [1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
この結果には、回帰分析の詳細な情報が含まれています。R-squaredは、説明変数が目的変数をどの程度説明できるかを示す指標で、この場合は0.483です。P値は、説明変数が統計的に有意であるかどうかを示す指標で、この場合は両方の説明変数が非常に有意であることが示されています。
発生する可能性のあるエラーと対処法
Statsmodelsを使用して回帰分析を行う際に、以下のようなエラーが発生することがあります。
ImportError: No module named 'scipy.linalg.blas'
このエラーは、NumPyとSciPyが正しくインストールされていないことが原因です。この場合は、以下のコマンドを使用してNumPyとSciPyを再インストールできます。
pip install --upgrade numpy scipy
ValueError: Shapes (x, y) and (x, z) are incompatible
このエラーは、説明変数と目的変数の配列の形状が不正であることが原因です。この場合は、配列の形状を修正して再度実行してください。
ValueError: Singular matrix
このエラーは、説明変数のいくつかが多重共線性を持っていることが原因である場合があります。多重共線性とは、回帰分析において2つ以上の説明変数が強く相関している状態を指します。つまり、説明変数の中に、一部の変数が他の説明変数と強い相関を持っている場合に発生します。このような相関があると、回帰係数の解釈が困難になったり、不安定になったり、推定された回帰係数が信頼性を失う場合があります。この場合、説明変数を変更することで解決できます。または、OLS(最小二乗法)の代わりに、多重共線性に強い方法であるRidge回帰やLasso回帰を使用することもできます。
まとめ
PythonのStatsmodelsを使用して回帰分析を行う方法を学びました。回帰分析を行うためには、まず必要なライブラリをインストールし、説明変数と目的変数を用意します。次に、OLSモデルを構築し、fitメソッドを使用して回帰係数を推定します。最後に、summaryメソッドを使用して回帰分析の詳細な情報を確認します。また、発生する可能性のあるエラーとその対処法についても学びました。これらの手順を覚えることで、データ解析において回帰分析を効果的に活用することができます。最後にPythonの学習に利用できるUdemy のサイトを紹介します。ぜひ活用ください。
[PR]
関連記事
時系列データの分析については、下記の記事でも解説しています。