In [1]:
%matplotlib inline
In [2]:
# -*- coding:utf-8 -*-
from __future__ import print_function
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
In [3]:
# データ読み込み
data = pd.read_csv('example/k0901.csv')
data
Out[3]:
In [4]:
# 説明変数設定
X = data[['X', 'D']]
X = sm.add_constant(X)
X
Out[4]:
In [5]:
# 被説明変数設定
Y = data['Y']
Y
Out[5]:
In [6]:
# OLSの実行(Ordinary Least Squares: 最小二乗法)
model = sm.OLS(Y,X)
results = model.fit()
print(results.summary())
In [7]:
# ダミー別データ
data_d0 = data[data["D"] == 0]
data_d1 = data[data["D"] == 1]
In [8]:
# グラフ生成
plt.plot(data["X"], data["Y"], 'o', label="data")
plt.plot(data_d0.X, results.fittedvalues[data_d0.index], label="D=0")
plt.plot(data_d1.X, results.fittedvalues[data_d1.index], label="D=1")
plt.xlim(min(data["X"])-1, max(data["X"])+1)
plt.ylim(min(data["Y"])-1, max(data["Y"])+1)
plt.title('9-1: Dummy Variable')
plt.legend(loc=2)
plt.show()
In [9]:
# データ読み込み
data = pd.read_csv('example/k0902.csv')
data
Out[9]:
In [10]:
# 説明変数設定
X = data[['X', 'D', 'DX']]
X = sm.add_constant(X)
X
Out[10]:
In [11]:
# 被説明変数設定
Y = data['Y']
Y
Out[11]:
In [12]:
# OLSの実行(Ordinary Least Squares: 最小二乗法)
model = sm.OLS(Y,X)
results = model.fit()
print(results.summary())
In [13]:
# ダミー別データ
data_d0 = data[data["D"] == 0]
data_d1 = data[data["D"] == 1]
In [14]:
# グラフ生成
plt.plot(data["X"], data["Y"], 'o', label="data")
plt.plot(data_d0.X, results.fittedvalues[data_d0.index], label="D=0")
plt.plot(data_d1.X, results.fittedvalues[data_d1.index], label="D=1")
plt.xlim(min(data["X"])-1, max(data["X"])+1)
plt.ylim(min(data["Y"])-1, max(data["Y"])+1)
plt.title('9-2: Dummy Variable')
plt.legend(loc=2)
plt.show()
In [15]:
# ダミー変数を加えない時のOLSモデル作成
X = data[['X']]
X = sm.add_constant(X)
model2 = sm.OLS(Y,X)
results2 = model2.fit()
In [16]:
# anova(Analysis of Variance)
print(sm.stats.anova_lm(results2, results))
F値は14.486、それに対応するP値は0.005より $\gamma$ , $\delta$ のうち少なくとも1つは0ではないと分かる。