【Python】statsmodelsで回帰分析入門

Pythonモジュール「statsmodels」で回帰分析する方法についてソースコード付きでまとめました。

【statsmodelsとは】インストール方法

StatsModelsは、統計モデルを用いて推定や検定、探索ができるPythonライブラリです。
使用感は機械学習用ライブラリのcikit-learnと似ていますが、StatsModelsのほうが統計モデルに特化しているだけあって、統計モデルに関する機能は豊富です。

インストール

pipでインストール可能です。

pip install statsmodels 

依存ライブラリは「numpy」「matplotlib」なので、まだ入れていない人はインストールしておきましょう。

【重回帰分析】サンプルコード

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import statsmodels.api as sm

# CSVファイルの読み込み
data = pd.read_csv("C:\prog\python\\test\data.csv", sep=",")

# 説明変数にx1とx2のデータを使用
X = data.loc[:, ['x1', 'x2']].values

# 目的変数にx3のデータを使用
Y = data['x3'].values

# 回帰モデルの呼び出し
model = sm.OLS(Y, sm.add_constant(X))

# モデルの作成
results = model.fit()

#結果の詳細を表示
print(results.summary())


"""
                            OLS Regression Results
==============================================================================
Dep. Variable:                      y   R-squared:                       0.662
Model:                            OLS   Adj. R-squared:                  0.623
Method:                 Least Squares   F-statistic:                     16.68
Date:                Mon, 19 Aug 2019   Prob (F-statistic):           9.80e-05
Time:                        19:35:26   Log-Likelihood:                -56.837
No. Observations:                  20   AIC:                             119.7
Df Residuals:                      17   BIC:                             122.7
Df Model:                           2
Covariance Type:            nonrobust
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         12.1847     19.105      0.638      0.532     -28.123      52.492
x1             0.7007      0.135      5.172      0.000       0.415       0.987
x2            -0.6467      0.904     -0.715      0.484      -2.555       1.262
==============================================================================
Omnibus:                        2.244   Durbin-Watson:                   2.280
Prob(Omnibus):                  0.326   Jarque-Bera (JB):                1.590
Skew:                          -0.681   Prob(JB):                        0.452
Kurtosis:                       2.766   Cond. No.                         927.
==============================================================================
""" 

data.csv

サンプル数が20未満だと怒られるので適当に20個のサンプルを用意。

"x1","x2","x3"
45,17.5,30
38,17.0,25
41,18.5,20
34,18.5,30
59,16.0,45
47,19.0,35
35,19.5,25
43,16.0,35
54,18.0,35
52,19.0,40
45,17.5,30
38,17.0,25
41,18.5,20
34,18.5,30
59,16.0,45
47,19.0,35
35,19.5,25
43,16.0,35
54,18.0,35
52,19.0,40 

詳細表示されている主なパラメータの説明は以下のとおり。

主なパラメータ 概要
R-squared 決定係数。(1に近いほど精度の高いモデルであることを示す値)
Adj. R-squared 自由度調整済み決定係数。決定係数は説明変数が増えるほど1に近づく性質があるため、説明変数が多い場合は、決定係数ではなく自由度調整済み決定係数の値を利用。
AIC モデルの当てはまり度を示す。小さいほど精度が高い。相対的な値である。
coef 回帰係数
std err 二乗誤差
t t値。それぞれの説明変数が目的変数に与える影響の大きさを表します。つまり絶対値が大きいほど影響が強いことを意味します。1つの目安としてt値の絶対値が2より小さい場合は統計的にはその説明変数は目的変数に影響しないと判断します。
p p値。それぞれの説明変数の係数の有意確率を表します。一般的に、有意確率が有意水準以下(5%を下回っている)ならば、その説明変数は目的変数に対して「関係性がある=有意性が高い」ということを示す。
[0.025 0.975] 95%信頼区間。
詳細記事
1 【Python/statsmodels】重回帰分析と決定係数・t値の計算
関連記事
1 【Python入門】サンプル集・使い方
Python
技術雑記

コメント

タイトルとURLをコピーしました