ADF檢驗簡介
ADF檢驗全稱為Augmented Dickey-Fuller test。通常在使用時間序列模型(如ARMA,ARIMA)的時候用于檢驗時間序列數(shù)據(jù)的平穩(wěn)性。他主要通過檢驗數(shù)據(jù)是否有單位根判斷序列是否平穩(wěn)。
adftest的使用及參數(shù)介紹
——簡單調(diào)用:h = adftest(y)
輸入?yún)?shù):
y:進行檢驗的時間序列
輸出參數(shù):
h:檢驗結(jié)果
h = 0,說明序列不平穩(wěn);
h = 1,說明序列平穩(wěn)。
——多參數(shù)調(diào)用:[h,pValue,stat,cValue] = adftest(y,‘a(chǎn)lpha’,0.05)
輸入?yún)?shù):
y:進行檢驗的時間序列
‘a(chǎn)lpha’,0.05:組合起來使用可以改變假設(shè)檢驗的顯著性水平,如果不設(shè)置則默認為0.05
輸出參數(shù):
h:檢驗結(jié)果
pValue:假設(shè)檢驗的P值,依據(jù)他的大小可以判斷是否拒絕原假設(shè)
stat:檢驗統(tǒng)計量,與cValue一起可以決定是否拒絕原假設(shè)
cValue:假設(shè)檢驗的臨界值,與stat一起可以決定是否拒絕原假設(shè)
(下文會介紹三種利用輸出參數(shù)判斷是否平穩(wěn)的方法,他們的結(jié)果是統(tǒng)一的,會一種就行)
adftest如何判斷是否平穩(wěn)?
——原假設(shè)與備擇假設(shè)
原假設(shè):存在單位根(時間序列不平穩(wěn))
備擇假設(shè):不存在單位根(時間序列平穩(wěn))
——通過h判斷是否平穩(wěn)
h = 0時,我們無法拒絕原假設(shè),也就是接受原假設(shè)→序列存在單位根→時間序列不平穩(wěn)
h = 1時,我們拒絕原假設(shè)→序列不存在單位根→時間序列平穩(wěn)
——通過pValue判單是否平穩(wěn)
pValue>0.05(顯著性水平,這里用0.05舉例):我們無法拒絕原假設(shè),也就是接受原假設(shè)→序列存在單位根→時間序列不平穩(wěn)
pValue<0.05:我們拒絕原假設(shè)→序列不存在單位根→時間序列平穩(wěn)
——通過stat和cValue判斷是否平穩(wěn)
stat>cValue:落在接受域,我們無法拒絕原假設(shè),也就是接受原假設(shè)→序列存在單位根→時間序列不平穩(wěn)
stat<cValue:落在拒絕域,我們拒絕原假設(shè)→序列不存在單位根→時間序列平穩(wěn)
應(yīng)用舉例(以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)
輸出結(jié)果為:
h = 0; (h等于0→接受原假設(shè)→有單位根→不平穩(wěn))
pValue = 0.9990 (p大于0.05→接受原假設(shè)→有單位根→不平穩(wěn))
stat = 13.4332 (stat>cValue→接受原假設(shè)→有單位根→不平穩(wěn))
cValue = -1.9474
從折線圖和函數(shù)返回結(jié)果看,該序列都是不平穩(wěn)的。
一階差分序列的ADF檢驗
%% 接上述代碼
datad1 = diff(data,1)
figure
plot(datad1,'LineWidth',1.5)
[h,pValue,stat,cValue] = adftest(datad1,'alpha',0.05)
輸出結(jié)果為:
h = 0;
pValue = 0.2810
stat = -0.9989
cValue = -1.9475
從折線圖可見一階差分仍然具有顯著上升趨勢,序列不平穩(wěn),與函數(shù)返回結(jié)果契合。文章來源:http://www.zghlxwxcb.cn/news/detail-423361.html
二階差分序列
datad2 = diff(data,2)
figure
plot(datad2,'LineWidth',1.5)
[h,pValue,stat,cValue] = adftest(datad2,'alpha',0.05)
輸出結(jié)果為:
h = 1;
pValue = 1.0000e-03
stat = -4.3792
cValue = -1.9476
由折線圖,數(shù)據(jù)在0附近隨機波動,表現(xiàn)為平穩(wěn)序列,與函數(shù)返回值契合。文章來源地址http://www.zghlxwxcb.cn/news/detail-423361.html
完整代碼及數(shù)據(jù)
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:原假設(shè):存在單位根(說明這是一個非平穩(wěn)的時間序列) 備擇假設(shè):不存在單位根(說明這是一個平穩(wěn)時間序列)
%h = 0則不能拒絕原假設(shè),那么接受原假設(shè),說明時間序列不平穩(wěn)
作者水平有限,第一次發(fā)文,有錯誤及需要改正的地方請指正
到了這里,關(guān)于Matlab實現(xiàn)ADF檢驗,adftest函數(shù)使用詳細說明(看完就會用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!