<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 構造変化、理論の妥当性のテスト
『Rによる計量経済学』第9章「構造変化、理論の妥当性のテスト」をPythonで実行する。
テキスト付属データセット(「k0901.csv」等)については出版社サイトよりダウンロードしてください。
また、以下の説明は本書の一部を要約したものですので、より詳しい説明は本書を参照してください。   
ダミー変数(Dummy Variable)
例題9.1「定数項ダミー」
以下のようにモデルを設定して回帰分析を行う。
$Y_{i} = \alpha + \beta X_{i} + \gamma D_{i} + u_{i}$
Step1:  例題9-2 「係数ダミー」
以下のようにモデルを設定して回帰分析を行う。
$Y_{i} = \alpha + \beta X_{i} + \gamma D_{i} + \delta D_{i} X_{i} + u_{i}$
Step2:  例題9-3 「t検定による構造変化のテスト」
例題9-2において$\gamma = 0$に関するP値は0.017であり、$\delta = 0$に関するP値は0.003であることから、標準的な有意水準を設定すれば、いずれのダミー変数も有意であるといえる。
例題9-4 「F検定による構造変化のテスト」
<ASSISTANT_TASK:>
Python Code:
%matplotlib inline
# -*- 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')
# データ読み込み
data = pd.read_csv('example/k0901.csv')
data
# 説明変数設定
X = data[['X', 'D']]
X = sm.add_constant(X)
X
# 被説明変数設定
Y = data['Y']
Y
# OLSの実行(Ordinary Least Squares: 最小二乗法)
model = sm.OLS(Y,X)
results = model.fit()
print(results.summary())
# ダミー別データ
data_d0 = data[data["D"] == 0]
data_d1 = data[data["D"] == 1]
# グラフ生成
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()
Explanation: 構造変化、理論の妥当性のテスト
『Rによる計量経済学』第9章「構造変化、理論の妥当性のテスト」をPythonで実行する。
テキスト付属データセット(「k0901.csv」等)については出版社サイトよりダウンロードしてください。
また、以下の説明は本書の一部を要約したものですので、より詳しい説明は本書を参照してください。   
ダミー変数(Dummy Variable)
例題9.1「定数項ダミー」
以下のようにモデルを設定して回帰分析を行う。
$Y_{i} = \alpha + \beta X_{i} + \gamma D_{i} + u_{i}$
End of explanation
# データ読み込み
data = pd.read_csv('example/k0902.csv')
data
# 説明変数設定
X = data[['X', 'D', 'DX']]
X = sm.add_constant(X)
X
# 被説明変数設定
Y = data['Y']
Y
# OLSの実行(Ordinary Least Squares: 最小二乗法)
model = sm.OLS(Y,X)
results = model.fit()
print(results.summary())
# ダミー別データ
data_d0 = data[data["D"] == 0]
data_d1 = data[data["D"] == 1]
# グラフ生成
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()
Explanation: 例題9-2 「係数ダミー」
以下のようにモデルを設定して回帰分析を行う。
$Y_{i} = \alpha + \beta X_{i} + \gamma D_{i} + \delta D_{i} X_{i} + u_{i}$
End of explanation
# ダミー変数を加えない時のOLSモデル作成
X = data[['X']]
X = sm.add_constant(X)
model2 = sm.OLS(Y,X)
results2 = model2.fit()
# anova(Analysis of Variance)
print(sm.stats.anova_lm(results2, results))
Explanation: 例題9-3 「t検定による構造変化のテスト」
例題9-2において$\gamma = 0$に関するP値は0.017であり、$\delta = 0$に関するP値は0.003であることから、標準的な有意水準を設定すれば、いずれのダミー変数も有意であるといえる。
例題9-4 「F検定による構造変化のテスト」
End of explanation
<END_TASK>