【Python/statsmodels】重回帰分析と決定係数・t値の計算

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

【statsmodels】重回帰分析とt値の計算

Pythonモジュール「statsmodels」を用いて重回帰分析します。

サンプルコード

# -*- 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入門】サンプル集・使い方

コメント