【MATLAB第33期】源码分享 | 基于MATLAB的时间序列平稳性检测
一、平稳性检测
1、KPSS测试
2、ADF测试
3、PP测试
若adf1或者kpss0或者pp==0,则表明是平稳时间序列。
反之,则表明是非平稳时间序列。
二、代码展示
clc, clear all, close all, format short, %% 1.从源读取数据(Excel文件,*.xlsx格式)并打印 input = readtable('ch02_EXAMPLE 3.xlsx', 'Sheet',"Sheet1",... 'Range',"A:C"); %选择Sheet1 表格,A-C列数据 ts = timeseries(input.DATA,input.DATE); %建立时间序列数据 ,第一列时间,第二列数据 ts.Name = 'CPI数据'; %数据标题 ts.TimeInfo.Units = 'years'; ts.TimeInfo.StartDate = '1954'; % 设置开始时间(年份) ts.TimeInfo.Format = 'yyyy'; % 设置在x轴上显示的格式 ts.Time = ts.Time - ts.Time(1); % plot(ts, 'Color', '#7E2F8E', 'LineJoin','round', 'Marker', '.') xlabel('Time (years)', 'fontsize',12) ylabel('INF_C', 'fontsize',12) %% 1.平稳性,KPSS测试 [kpss_H, kpss_pVal, kpss_stat, kpss_crit] = kpsstest(input.DATA,'trend',true); kpss_test_results={'测试拒绝决定H值','p值','统计量','临界值';... kpss_H, kpss_pVal, kpss_stat, kpss_crit} %% 2.平稳性,ADF测试 [adf_H, adf_pval, adf_stat, adf_crit] = adftest(input.DATA); ADF_test_results={'测试拒绝决定H值','p值','统计量','临界值';... adf_H, adf_pval, adf_stat, adf_crit} %% 3.平稳性,PP测试 [pp_H, pp_pVal, pp_stat, pp_crit] = pptest(input.DATA); PP_test_results={'测试拒绝决定H值','p值','统计量','临界值';... pp_H, pp_pVal, pp_stat, pp_crit}
三、效果展示
1.kpss_test_results :
{'测试拒绝决定H值'} {'p值' } {'统计量' } {'临界值' } {[ 1]} {[0.0100]} {[0.6618]} {[0.1460]}
2.ADF_test_results :
{'测试拒绝决定H值'} {'p值' } {'统计量' } {'临界值' } {[ 0]} {[0.3255]} {[-0.8769]} {[-1.9476]}
3.PP_test_results :
{'测试拒绝决定H值'} {'p值' } {'统计量' } {'临界值' } {[ 0]} {[0.3255]} {[-0.8769]} {[-1.9476]}
四、代码及案例数据获取
后台私信回复“33”即可获得下载链接