単回帰分析 t 検定 statsmodels

単回帰分析 t 検定

statsmodels ライブラリを使用して、単回帰分析の t 検定を行ってみましょう。

ここでは、仮想的なデータを作成し、そのデータに基づいて単回帰モデルを構築し、係数に対する t 検定を行います。

まず、以下はサンプルコードです:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import statsmodels.api as sm

# 仮想的なデータを生成
np.random.seed(123)
x = np.random.rand(100) # 0から1までの乱数
y = 2 * x + 1 + np.random.randn(100) # y = 2x + 1 + ノイズ

# 定数項を追加
X = sm.add_constant(x)

# 単回帰モデルを構築
model = sm.OLS(y, X)

# モデルを適合
results = model.fit()

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

このコードは、statsmodels を使用して単回帰モデルを構築し、結果を表示します。

この結果には、係数に対する t 検定の結果も含まれています。

この例では、係数が2であるかどうかを検定しています。
t 列のP>|t|が p-value を示しており、通常、この値が0.05よりも小さい場合、帰無仮説を棄却します。

なお、実際のデータに対しては、データセットに応じた適切な検定を行う必要があります。

ソースコード解説

このソースコードは、Pythonの numpystatsmodels ライブラリを使用して、仮想的なデータに対して単回帰分析を行っています。

以下はソースコードの各部分の詳細な説明です。

1. import numpy as np:

NumPy ライブラリを np としてインポートしています。NumPyは数値計算や行列演算などの科学計算をサポートするための重要なライブラリです。

2. import statsmodels.api as sm:

statsmodels ライブラリを sm としてインポートしています。statsmodels は統計モデリングを行うためのライブラリで、回帰分析や仮説検定などが含まれています。

3. np.random.seed(123):

乱数生成器のシードを設定しています。
これにより、再現性が確保され、同じ乱数が生成されるようになります。

4. x = np.random.rand(100):

長さが100の乱数からなる x を生成しています。
これは0から1までの一様分布の乱数です。

5. y = 2 * x + 1 + np.random.randn(100):

x に対して線形な関係を持つ y を生成しています。
y2 * x + 1 に、標準正規分布(平均0、標準偏差1の乱数)からのノイズが加わったものです。
これにより、y2x + 1 からわずかにずれたデータとなります。

6. X = sm.add_constant(x):

statsmodelsadd_constant 関数を使用して、説明変数 x に対して定数項(切片)を追加した新しい行列 X を作成しています。
これは単回帰モデルを構築するための準備です。

7. model = sm.OLS(y, X):

Ordinary Least Squares(最小二乗法)を使用して、単回帰モデルのオブジェクトを作成しています。
y は従属変数、X は説明変数(および定数項)です。

8. results = model.fit():

fit メソッドを呼び出して、モデルをデータに適合させます。
これにより、係数などの統計的な情報が得られます。

9. print(results.summary()):

fit メソッドで得られた結果を表示します。
これにはモデルの統計的な詳細(係数、p-value、決定係数など)が含まれています。

このソースコードの目的は、仮想的なデータに対して単回帰モデルを構築し、その結果を統計的に評価することです。

結果の表示部分には、係数検定統計量決定係数などが含まれており、これらを通じてモデルの適合度各変数の統計的な重要性を判断できます。

結果解説

実行結果は下記のようになりました。

[実行結果]


                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.159
Model:                            OLS   Adj. R-squared:                  0.150
Method:                 Least Squares   F-statistic:                     18.47
Date:                Sat, 11 Nov 2023   Prob (F-statistic):           4.07e-05
Time:                        05:38:52   Log-Likelihood:                -139.70
No. Observations:                 100   AIC:                             283.4
Df Residuals:                      98   BIC:                             288.6
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          1.1699      0.225      5.204      0.000       0.724       1.616
x1             1.7310      0.403      4.298      0.000       0.932       2.530
==============================================================================
Omnibus:                        0.322   Durbin-Watson:                   1.851
Prob(Omnibus):                  0.851   Jarque-Bera (JB):                0.099
Skew:                          -0.067   Prob(JB):                        0.951
Kurtosis:                       3.078   Cond. No.                         5.15
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

各部分について順に説明していきます。

1. Dep. Variable (従属変数):

分析対象の従属変数の名前が表示されます。
ここでは y が従属変数です。

2. Model:

使用されたモデルの種類が表示されます。
ここでは「OLS」(Ordinary Least Squares)回帰モデルが使用されました。

3. Method:

最小二乗法(Least Squares)が使用されました。

4. Date, Time:

分析が行われた日時が表示されます。

5. No. Observations:

分析に使用されたデータポイント(観測値)の数が表示されます。
ここでは100個のデータポイントがあります。

6. Df Residuals:

残差の自由度が表示されます。
これは、残差の数に対するモデルのパラメータの数から計算されます。

7. Df Model:

モデルのパラメータ(ここでは傾きと切片)の数が表示されます。

8. R-squared:

決定係数(R-squared)はモデルがデータの変動のうちどれだけを説明できるかを示す指標です。
ここでは0.159なので、モデルがデータの約15.9%の変動を説明しています。

9. Adj. R-squared:

調整済み決定係数です。
説明変数が増えると通常 R-squared も増加しますが、それに対する補正が行われた値です。

10. F-statistic:

モデル全体の有意性を評価するための F 統計量が表示されます。
値が大きいほど、モデル全体が統計的に有意であると言えます。

11. Prob (F-statistic):

F 統計量の p-value です。
この値が小さいほど、モデル全体が統計的に有意であると言えます。

12. coef (係数):

各説明変数の係数が表示されます。
ここでは const が切片、x1 が説明変数の係数です。

13. std err (標準誤差):

各係数の標準誤差が表示されます。
この値は、推定された係数の不確実性を示しています。

14. t-statistic:

各係数の t 統計量が表示されます。
係数が0であるという帰無仮説に対する t-test の統計量です。

15. P>|t| (p-value):

各係数の p-value が表示されます。
この値が小さいほど、対応する係数が統計的に有意であると言えます。

16. [0.025 0.975]:

各係数の信頼区間が表示されます。
95%信頼区間が示されています。

17. Omnibus:

正規性の検定統計量が表示されます。
通常、正規分布からのずれを示すもので、p-valueが高ければ正規性が満たされていると言えます。

18. Prob(Omnibus):

Omnibus統計量の p-value です。

19. Skew:

歪度(Skewness)が表示されます。
正規分布の場合、歪度は0です。

20. Kurtosis:

尖度(Kurtosis)が表示されます。
正規分布の場合、尖度は3です。

21. Durbin-Watson:

残差の自己相関を検定する統計量です。
値が2に近いほど良いです。
ここでは1.851なので、残差には一定の自己相関がある可能性があります。

22. Jarque-Bera (JB):

正規性の検定統計量のもう一つの形式が表示されます。

23. Prob(JB):

JB 統計量の p-value です。

24. Cond. No.:

条件指数(Condition Number)は、共線性の問題を示す指標です。
ここでは5.15なので、共線性の影響は比較的小さいと言えます。

これらの結果を総合的に評価することで、モデルの有用性や適合度を判断することができます。