1 数据说明
“Houseprice.xlsx”数据中包含了2010年6月到2021年8月的房价(HousePrice)和货币供应量(M2)的数据,我们采用协整检验来研究两者的长期均衡关系,并采用误差修正模型来判断两者偏离长期均衡关系后是否会重新调整到长期均衡状态。
2 导入模块
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.vector_ar.vecm import select_coint_rank
from statsmodels.tsa.vector_ar.vecm import VECM
from statsmodels.tsa.vector_ar.vecm import select_order
3 导入数据
data = pd.read_excel('D:\\Desktop\\Houseprice.xlsx', sheet_name='Sheet1', na_values='n/a')
data.set_index('时间', drop= True, inplace=True)
4 ADF检验
原始序列:
print(sm.tsa.adfuller(data['HousePrice'], regression='n',maxlag=12))
print(sm.tsa.adfuller(data['HousePrice'], regression='c',maxlag=12))
print(sm.tsa.adfuller(data['HousePrice'], regression='ct',maxlag=12))
print(sm.tsa.adfuller(data['M2'], regression='n',maxlag=12))
print(sm.tsa.adfuller(data['M2'], regression='c',maxlag=12))
print(sm.tsa.adfuller(data['M2'], regression='ct',maxlag=12))
原始序列均存在单位根,这里不再列出结果。
一阶差分序列:
data_diff=data.diff(1)
data_diff.dropna(inplace=True)
print(sm.tsa.adfuller(data_diff['HousePrice'], regression='n',maxlag=12))
print(sm.tsa.adfuller(data_diff['HousePrice'], regression='c',maxlag=12))
print(sm.tsa.adfuller(data_diff['HousePrice'], regression='ct',maxlag=12))
print(sm.tsa.adfuller(data_diff['M2'], regression='n',maxlag=12))
print(sm.tsa.adfuller(data_diff['M2'], regression='c',maxlag=12))
print(sm.tsa.adfuller(data_diff['M2'], regression='ct',maxlag=12))
一阶差分序列均不存在单位根,这里仅列出拒绝单位根的结果。
HousePrice的结果:P值小于0.01,在1%的条件下拒绝单位根!
(-2.7899264396134975, 0.005143464328842426, 0, 133, {'1%': -2.582755568997682, '5%': -1.9431965085986491, '10%': -1.6149656551095641}, 1221.8922273985759)
M2的结果:P值小于0.1,在10%的条件下拒绝单位根!
(-3.1625013879513415, 0.09213600450042603, 11, 122, {'1%': -4.034959588225446, '5%': -3.44710896788718, '10%': -3.1485194734361026}, 2552.05949602632)
5 协整检验
自动选择协整检验和误差修正模型中的滞后期数:
vecm_lag=select_order(data,maxlags=4 , deterministic='n', seasons=0, exog=None, exog_coint=None)
分别对无截距无趋势项、有截距无趋势项、有截距有趋势项三种形式(-1,0,1),采用‘trace’和‘maxeig’两种方法来判断是否存在协整关系:
coint_result_maxeig = select_coint_rank(data, -1, vecm_lag.aic, method='trace')
print(coint_result_maxeig.summary())
coint_result_maxeig = select_coint_rank(data, -1, vecm_lag.aic, method='maxeig')
print(coint_result_maxeig.summary())
coint_result_maxeig = select_coint_rank(data, 0, vecm_lag.aic, method='trace')
print(coint_result_maxeig.summary())
coint_result_maxeig = select_coint_rank(data, 0, vecm_lag.aic, method='maxeig')
print(coint_result_maxeig.summary())
coint_result_maxeig = select_coint_rank(data, 1, vecm_lag.aic, method='trace')
print(coint_result_maxeig.summary())
coint_result_maxeig = select_coint_rank(data, 1, vecm_lag.aic, method='maxeig')
print(coint_result_maxeig.summary())
3中形式,第一种通过了协整检验,表明两个变量存在1个协整关系!结果如下:
6 误差修正模型
vecm_modelResult=VECM(data,k_ar_diff=vecm_lag.aic, deterministic='n').fit()
print(vecm_modelResult.summary())
估计出的误差修正模型中,差分项的滞后期系数如下:
估计出的误差修正模型中,误差修正项的系数和长期均衡关系如下。
其中,长期均衡关系为:HousePrice=0.0022M2,表明M2上升将促使房价上升;
△HousePrice为因变量的方程中,误差修正项的系数为-0.0005,但是不显著;
△M2为因变量的方程中,误差修正项的系数为1.8276,且显著,表明当HousePrice和M2偏离长期均衡关系,如HousePrice大>0.0022M2时,△M2将增大;反之,△M2将减小,最终两者将重新调整到均衡状态!