平稳性检验

Reads: 955 Edit

1 数据说明

“gdp.xlsx”数据中包含了1952年至2020年gdp的时间序列数据,我们将采用ADF检验来对gdp的平稳性进行检验。

2 导入所需模块

import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import statsmodels.api as sm
from scipy import stats
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.api import qqplot

3 导入数据

data = pd.read_excel('D:\\Desktop\\gdp.xlsx', sheet_name='Sheet1', na_values='n/a')
data_balance = data.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

gdp=pd.Series(data_balance['gdp'].values, index=data_balance['year'])

gdp[:] = np.log(gdp.values)
print(gdp)

导入数据并取对数处理后如下所示:

pyt-100

4 原始变量的单位根检验

gdp.plot(marker='o')
plt.rcParams['font.sans-serif'] = ['SimHei']        # 解决中文显示乱码问题!
plt.rc('axes', unicode_minus=False)                 # 解决坐标轴负号显示乱码问题!
plt.show()

lngdp原始序列的图形如下:

pyt-101

print(sm.tsa.adfuller(gdp, regression='nc'))
print(sm.tsa.adfuller(gdp, regression='c'))
print(sm.tsa.adfuller(gdp, regression='ct'))

ADF主要有三种形式,需要分别进行检验。检验的输出结果分别是:ADF统计量、P值、滞后项、有效样本、1%-10%的三个临界值、信息准则。

由ADF检验的结果可知,三种形式检验都表明存在单位根,原始数据不平稳!

  • 无截距无趋势项形式: (3.751022377800038, 0.9999989799669093, 2, 66, {'1%': -2.6004484022038565, '5%': -1.9457335914238807, '10%': -1.613330582408103}, -175.8808716455328)

  • 有截距无趋势项形式: (0.8355127487623222, 0.9921883132067567, 2, 66, {'1%': -3.5335601309235605, '5%': -2.9064436883991434, '10%': -2.590723948576676}, -175.44940571770695)

  • 有截距有趋势项形式: (-1.8500984326803607, 0.6801151839876924, 2, 66, {'1%': -4.102930985196315, '5%': -3.4792434170910203, '10%': -3.167204658151766}, -178.35334475686744)

5 一阶差分序列的单位根检验

gdp_diff=gdp.diff(1)
gdp_diff.dropna(inplace=True)
gdp_diff.plot()
plt.show()

一阶差分序列的图形如下:

pyt-102

print(sm.tsa.adfuller(gdp_diff, regression='nc'))
print(sm.tsa.adfuller(gdp_diff, regression='c'))
print(sm.tsa.adfuller(gdp_diff, regression='ct'))

由ADF检验的结果可知,“有截距无趋势项形式”和“有截距有趋势项形式”结果的P值小于0.05,因而表明1阶差分后数据平稳!

  • 无截距无趋势项形式: (-0.925970873920159, 0.318151459151806, 4, 63, {'1%': -2.6021427210884354, '5%': -1.9459864441485002, '10%': -1.613186489499974}, -171.24230266124957)

  • 有截距无趋势项形式: (-3.8029625433742797, 0.002877149323832215, 2, 65, {'1%': -3.5352168748293127, '5%': -2.9071540828402367, '10%': -2.5911025443786984}, -174.11040712131327)

  • 有截距有趋势项形式: (-4.031276664239165, 0.007934260148730901, 2, 65, {'1%': -4.105265484751935, '5%': -3.4803385352753753, '10%': -3.1678389485662266}, -172.3131340466464)



获取案例数据和源代码,请关注微信公众号并回复:Python_dt11


Comments

Make a comment