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ではないと分かる。