Matlab实现ADF检验,adftest函数使用详细说明
创作时间:
作者:
@小白创作中心
Matlab实现ADF检验,adftest函数使用详细说明
引用
CSDN
1.
https://blog.csdn.net/qq_62888264/article/details/129403702
本文将详细介绍如何使用Matlab中的adftest函数进行ADF(Augmented Dickey-Fuller)检验,包括函数的基本用法、参数说明以及如何通过检验结果判断时间序列的平稳性。最后,我们将通过一个实际案例(1978年到2020年中国GDP数据)来演示整个检验过程。
ADF检验简介
ADF检验全称为Augmented Dickey-Fuller test。通常在使用时间序列模型(如ARMA,ARIMA)的时候用于检验时间序列数据的平稳性。它主要通过检验数据是否有单位根来判断序列是否平稳。
adftest的使用及参数介绍
简单调用:h = adftest(y)
输入参数:
- y:进行检验的时间序列
输出参数:
- h:检验结果
- h = 0,说明序列不平稳;
- h = 1,说明序列平稳。
多参数调用:[h,pValue,stat,cValue] = adftest(y,'alpha',0.05)
输入参数:
- y:进行检验的时间序列
- 'alpha',0.05:组合起来使用可以改变假设检验的显著性水平,如果不设置则默认为0.05
输出参数:
- h:检验结果
- pValue:假设检验的P值,依据它的大小可以判断是否拒绝原假设
- stat:检验统计量,与cValue一起可以决定是否拒绝原假设
- cValue:假设检验的临界值,与stat一起可以决定是否拒绝原假设
(下文会介绍三种利用输出参数判断是否平稳的方法,他们的结果是统一的,会一种就行)
adftest如何判断是否平稳?
原假设与备择假设
- 原假设:存在单位根(时间序列不平稳)
- 备择假设:不存在单位根(时间序列平稳)
通过h判断是否平稳
- h = 0时,我们无法拒绝原假设,也就是接受原假设→序列存在单位根→时间序列不平稳
- h = 1时,我们拒绝原假设→序列不存在单位根→时间序列平稳
通过pValue判单是否平稳
- pValue>0.05(显著性水平,这里用0.05举例):我们无法拒绝原假设,也就是接受原假设→序列存在单位根→时间序列不平稳
- pValue<0.05:我们拒绝原假设→序列不存在单位根→时间序列平稳
通过stat和cValue判断是否平稳
- stat>cValue:落在接受域,我们无法拒绝原假设,也就是接受原假设→序列存在单位根→时间序列不平稳
- stat<cValue:落在拒绝域,我们拒绝原假设→序列不存在单位根→时间序列平稳
应用举例(以1978年到2020年的中国GDP为例):
原始序列的ADF检验
clc;
clear;
data = readtable("data.xlsx");
data = table2array(data);
data = data(:,2)
plot(data,'LineWidth',1.5)
[h,pValue,stat,cValue] = adftest(data,'alpha',0.05)
输出结果为:
- h = 0; (h等于0→接受原假设→有单位根→不平稳)
- pValue = 0.9990 (p大于0.05→接受原假设→有单位根→不平稳)
- stat = 13.4332 (stat>cValue→接受原假设→有单位根→不平稳)
- cValue = -1.9474
从折线图和函数返回结果看,该序列都是不平稳的。
一阶差分序列的ADF检验
%% 接上述代码
datad1 = diff(data,1)
figure
plot(datad1,'LineWidth',1.5)
[h,pValue,stat,cValue] = adftest(datad1,'alpha',0.05)
输出结果为:
- h = 0;
- pValue = 0.2810
- stat = -0.9989
- cValue = -1.9475
从折线图可见一阶差分仍然具有显著上升趋势,序列不平稳,与函数返回结果契合。
二阶差分序列
datad2 = diff(data,2)
figure
plot(datad2,'LineWidth',1.5)
[h,pValue,stat,cValue] = adftest(datad2,'alpha',0.05)
输出结果为:
- h = 1;
- pValue = 1.0000e-03
- stat = -4.3792
- cValue = -1.9476
由折线图,数据在0附近随机波动,表现为平稳序列,与函数返回值契合。
完整代码及数据
clc;
clear;
data = readtable("data.xlsx");
data = table2array(data);
data = data(:,2)
%可注释上面三行,将下一行取消注释
%data = [3678.70250000000 4100.45370000000 4587.58110000000 4935.83280000000 5373.35010000000 6020.92410000000 7278.50230000000 9098.94800000000 10376.1545000000 12174.5947000000 15180.3865000000 17179.7417000000 18872.8688000000 22005.6285000000 27194.5309000000 35673.2304000000 48637.4503000000 61339.8913000000 71813.6296000000 79715.0445000000 85195.5071000000 90564.3758000000 100280.139300000 110863.123000000 121717.424700000 137422.034900000 161840.160900000 187318.903100000 219438.474800000 270092.323700000 319244.612800000 348517.743700000 412119.255800000 487940.180500000 538579.953500000 592963.229500000 643563.104500000 688858.218000000 746395.059500000 832035.948600000 919281.129100000 990865.111300000 1015986.20000000]'
plot(data,'LineWidth',1.5)
[h,pValue,stat,cValue] = adftest(data,'alpha',0.05)
%% 一阶差分
datad1 = diff(data,1)
figure
plot(datad1,'LineWidth',1.5)
[h,pValue,stat,cValue] = adftest(datad1,'alpha',0.05)
%% 二阶差分
datad2 = diff(data,2)
figure
plot(datad2,'LineWidth',1.5)
[h,pValue,stat,cValue] = adftest(datad2,'alpha',0.05)
%adftest:原假设:存在单位根(说明这是一个非平稳的时间序列) 备择假设:不存在单位根(说明这是一个平稳时间序列)
%h = 0则不能拒绝原假设,那么接受原假设,说明时间序列不平稳
热门推荐
专家支招:如何缓解过山车造成的眩晕
原神希诺宁角色介绍
满口谎言的欺诈者电影:从虚构到现实的法律剖析
东风随春归,细说“东风”的文化内涵
同为姊妹舰,山东舰出勤效率远超辽宁舰,原因到底是什么?
中国各地特色火锅,这7道火锅是我最想尝试的系列~
从产区文化到文创产品:白酒3.0时代的文化创新之路
了解低粘度 UV 胶粘剂:综合指南
周六019意甲:尤文图斯VS那不勒斯,赛果分析预测,主场优势即取胜优势。
月亮星座和太阳星座的区别 月亮星座和太阳星座哪个影响大
关注营养不良:调理饮食、补充营养及改善生活习惯的建议
RT-Thread新手指南:三种不同的版本、三阶段学习路径
脱发诊断为什么要做抽血检查?
2025年的就业趋势和行业动态
民法典规定发生医疗纠纷怎么维权
走马13市26个旅游目的地,探江苏“风光”如何更风光
高端净化器的独特净化技术解析——什么是cHEPA、HEPA
分析 | 现在买车 选油车还是电车?
术后创口消毒用什么
“五胡乱华”是怎么回事,对中国历史的走向产生了什么影响
从布局到灯光,教你玩转客厅餐厅一体化
秋季多吃这种味道的食物,好处居然这么多!
吃货必看!选苹果秘籍,让你一口咬出甜蜜
三相四线制供电系统中零线断开的危害与预防
【美丽惠来】惠来县隆江镇孔美村:700多年古村落,真美!
关于工伤的认定标准及工伤赔偿法律规定
岔气、鼻衄、偏头痛、落枕、打嗝,自己按摩就能解决
德国MP5冲锋枪:精准与实用的传奇之作
AI新突破:ChatGPT整合记忆功能提升个性化体验
王阳明死后谥号文成 在明朝属于什么水平?