🙆♀️
重回帰分析の勉強に使えそうなダミーデータを生成したい
はじめに
重回帰分析の勉強に使えそうなダミーデータを作ってみました。また、このダミーデータが期待したデータになっているか確認するスクリプトも作りました。
モジュール
スクリプト実行環境のモジュール情報です。
$ pip list
Package Version
--------------- ------------
numpy 1.26.3
pandas 2.2.2
statsmodels 0.14.2
ダミーデータを作るスクリプト
コンソールでpython createDummyDate.py
と実行するとdummy_data.csv
を出力します。
createDummyDate.py
import numpy as np
import pandas as pd
# データのサイズを設定
np.random.seed(0)
n_samples = 1000
# 説明変数とその係数を設定
elements = [
{"Name": "X1", "Coef": 3},
{"Name": "X2", "Coef": 5},
{"Name": "X3", "Coef": -2}
]
# 説明変数の辞書を作成
X_dict = {}
for element in elements:
X_dict[element["Name"]] = np.random.rand(n_samples)
# 目的変数(Y)を生成
noise = np.random.randn(n_samples)
Y = noise
for element in elements:
Y += element["Coef"] * X_dict[element["Name"]]
# データフレームにまとめる
data = pd.DataFrame(X_dict)
data['Y'] = Y
# データを表示
print(data.head())
# CSVファイルとして保存
data.to_csv('dummy_data.csv', index=False)
- 補足
- X1,X2,X3が説明変数で、以下のように増やすこともできます。
# 説明変数とその係数を設定
elements = [
{"Name": "X1", "Coef": 3},
{"Name": "X2", "Coef": 5},
{"Name": "X3", "Coef": -2},
{"Name": "X4", "Coef": 1},
{"Name": "X5", "Coef": 0.5}
]
出力されたダミーデータ
このようなダミーデータが出力されます。
dummy_data.csv
X1,X2,X3,Y
0.5488135039273248,0.5928802707811576,0.8115184706218832,4.7882676869042236
0.7151893663724195,0.01006369565609333,0.476083985968232,0.04861483199778527
:
ダミーデータを検証するスクリプト
ダミーデータを重回帰分析し期待した結果になるか確認するスクリプトです。
モジュールをインストールが必要です。
- インストールコマンド
pip install pandas
pip install statsmodels
analyzCorrelation.py
import pandas as pd
import statsmodels.api as sm
# データを読み込む
data = pd.read_csv('dummy_data.csv')
# 目的変数(Y)のカラム名を指定
Y_column = 'Y'
# 説明変数(X)のカラム名を自動的に取得
X_columns = data.columns.drop(Y_column)
X = data[X_columns]
Y = data[Y_column]
# 定数項を追加
X = sm.add_constant(X)
# 重回帰分析を実行
model = sm.OLS(Y, X).fit()
# 結果を表示
print(model.summary())
ダミーデータの検証
ダミーデータを検証してみます。
$ python .\analyzCorrelation.py
OLS Regression Results
==============================================================================
Dep. Variable: Y R-squared: 0.785
Model: OLS Adj. R-squared: 0.785
Method: Least Squares F-statistic: 1215.
Date: Wed, 14 Aug 2024 Prob (F-statistic): 0.00
Time: 07:17:03 Log-Likelihood: -1391.3
No. Observations: 1000 AIC: 2791.
Df Residuals: 996 BIC: 2810.
Df Model: 3
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const -0.0843 0.098 -0.864 0.388 -0.276 0.107
X1 3.0094 0.106 28.361 0.000 2.801 3.218
X2 5.1010 0.103 49.473 0.000 4.899 5.303
X3 -2.0683 0.108 -19.231 0.000 -2.279 -1.857
==============================================================================
Omnibus: 1.446 Durbin-Watson: 1.842
Prob(Omnibus): 0.485 Jarque-Bera (JB): 1.444
Skew: 0.093 Prob(JB): 0.486
Kurtosis: 2.982 Cond. No. 6.20
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
以下の左がダミーデータ作成時に設定した各説明変数の係数で、右がダミーデータを解析して算出した各説明変数の係数です。統計知識が乏しいので統計的な見方はできないのですが、それっぽい数値になったようです。
さいごに
商品の売り上げとか、家賃相場とか、リアルっぽいダミーデータの作り方について気が向いたら調べてみようと思います。
Discussion