时间序列1

实验目的:

通过本次实验,掌握平稳时间序列的特点,理解宽平稳和严平稳的定义。学会通过序列图形对时间序列进行平稳性和纯随机性检验的预处理,为后面的平稳时间序列建模做好数据准备工作。

实验内容:

对给定时间序列进行平稳性和纯随机性检验,对结果进行分析说明。

实验数据:

1950-2008年中国邮路及农村投递线路每年新增里程数序列

question:

使用python语言,实现实验要求,通过实验,掌握平稳时间序列的特点,理解宽平稳和严平稳的定义。通过序列图形对给定时间序列进行可视化,然后用自相关图(ACF图)和偏自相关图(PACF图)检验平稳性。再用单位根检验(ADF检验)检验平稳性,最后对给定时间序列进行纯随机性检验,并对结果进行分析说明,,为后面的平稳时间序列建模做好数据准备工作。

给定时间序列为xlsx格式,表名为:1950-2008年中国邮路及农村投递线路每年新增里程数序列,内容如下

年份 新增里程

1950 15.71

1951 24.43

1952 18.23

1953 22.5

1954 12.53

1955 9.94

1956 7.19

1957 41.13

1958 79.03

1959 119.32

1960 -12.1

1961 -89.71

1962 -52.26

1963 20.01

1964 19.92

1965 42.81

1966 18.78

1967 -0.75

1968 -1.08

1969 5.09

1970 26.39

1971 31.09

1972 19.78

1973 2.56

1974 12.95

1975 15.54

1976 3.97

1977 2.42

1978 0.31

1979 -5.1

1980 -7.52

1981 -7.69

1982 1.61

1983 4.46

1984 10.97

1985 15.15

1986 6

1987 -0.9

1988 -3.22

1989 -8.54

1990 6.76

1991 -0.83

1992 4.67

1993 11.68

1994 0.82

1995 8.54

1996 24.51

1997 28.91

1998 44.94

1999 11.16

2000 11.08

2001 15.75

2002 -0.31

2003 20.99

2004 6.5

2005 10.45

2006 -3.51

2007 23.42

2008 17.99

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.stattools import adfuller
from statsmodels.stats.diagnostic import acorr_ljungbox

# 中文显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取xlsx文件
data = pd.read_excel('data.xlsx', 'Sheet1')

# 绘制时间序列图形
plt.plot(data['年份'], data['新增里程'])
plt.xlabel('年份')
plt.ylabel('新增里程')
plt.title('时间序列图')
plt.show()

# 绘制自相关图
plot_acf(data['新增里程'])
plt.xlabel('滞后阶数')
plt.ylabel('自相关系数')
plt.title('自相关图')
plt.show()

# 绘制偏自相关图
plot_pacf(data['新增里程'])
plt.xlabel('滞后阶数')
plt.ylabel('偏自相关系数')
plt.title('偏自相关图')
plt.show()

# 进行ADF检验
result = adfuller(data['新增里程'])

# 输出检验结果
print('ADF统计量:', result[0])
print('p值:', result[1])
print('滞后阶数:', result[2])
print('观测值数量:', result[3])
print('关键值:')
for key, value in result[4].items():
    print(key, value)

# 说明结果
if result[1] < 0.05:
    print('p值 < 0.05 , 时间序列具有平稳性')
else:
    print('p值 > 0.05 , 时间序列不具有平稳性')

# 进行纯随机性检验
result = acorr_ljungbox(data['新增里程'], lags=1, return_df=False)

# 输出检验结果
print('LB统计量:', result['lb_stat'].values[0])
print('p值:', result['lb_pvalue'].values[0])

# 说明结果
if result['lb_pvalue'].values[0] < 0.05:
    print('p值 < 0.05 , 时间序列具有纯随机性')
else:
    print('p值 > 0.05 , 时间序列不具有纯随机性')