ADF检验
迪基富勒检验(ADF检验)是一种常见的统计检验,用于检验给定时间序列是否平稳。在分析序列的平稳性时,它是最常用的统计检验之一。matlab中提供了函数adftest可以完成该检验,本文重点介绍该函数的用法。
Matlab|adftest
[h,pValue,stat,cValue,reg] = adftest(y)
[h,pValue,stat,cValue,reg] = adftest(y,param1,val1,param2,val2,...)
输入参数介绍
y - 时间序列数据的向量。最后一个元素是最近的观察结果。表示缺失值的nan会被删除。
lags- 可以是非负整数的标量或者向量,延时,默认为0。
model- 模型:‘AR’,‘ARD’,或’TS’,默认AR模型。
test- 检验方法,t1表示标准的t检验,t2表示非标准的t检验,'F’表示F检验。默认是t1检验。
alpha- 显著性水平,取值为0.001到0.999。默认为0.05。
输出参数介绍
h:
如果结果h=0,表示拒绝原假设,数据不平稳
如果结果h=1,表示不拒绝原假设,数据平稳
pValue:
检验统计量的p值
stat:
统计值
reg: 回归统计的系数
% reg - Structure of regression statistics from the OLS estimation of
% coefficients in the alternative model. The number of records is
% equal to the number of tests. Each record has the following fields:
%
% num Length of the input series y, with NaNs removed
% size Effective sample size, adjusted for lags, difference*
% names Regression coefficient names
% coeff Estimated coefficient values
% se Estimated coefficient standard errors
% Cov Estimated coefficient covariance matrix
% tStats t statistics of coefficients and p-values
% FStat F statistic and p-value
% yMu Mean of y, adjusted for lags, difference*
% ySigma Standard deviation of y, adjusted for lags, difference*
% yHat Fitted values of y, adjusted for lags, difference*
% res Regression residuals
% DWStat Durbin-Watson statistic
% SSR Regression sum of squares
% SSE Error sum of squares
% SST Total sum of squares
% MSE Mean squared error
% RMSE Standard error of the regression
% RSq R^2 statistic
% aRSq Adjusted R^2 statistic
% LL Loglikelihood of data under Gaussian innovations
% AIC Akaike information criterion
% BIC Bayesian (Schwarz) information criterion
% HQC Hannan-Quinn information criterion
实战
通常使用
1.使用默认参数的结果
h = adftest(Y);
disp(h);
2.如果想在不同显著性下获得统计结果,则需要对显著性参数进行调整。下图表示显著性为1%,%5,10%情况下的统计结果
%% ADF检验
% 如果结果h=1,表示不拒绝原假设,数据平稳
disp('统计结果**********************')
[h,pValue,stat,cValue,reg] = adftest(data,'alpha',[0.01,0.05,0.1]);
fprintf('显著性|%6.6f\n',h);
fprintf('检验统计量|%6.6f\n',stat);
fprintf('p-value|%6.6f\n',pValue);
fprintf(' 1%%|%6.6f\n',cValue(1));
fprintf(' 5%%|%6.6f\n',cValue(2));
fprintf('10%%|%6.6f\n',cValue(3));