python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > adfuller函数返回值的参数

关于adfuller函数返回值的参数说明与记录

作者:有点懂事了

这篇文章主要介绍了关于adfuller函数返回值的参数说明与记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

adfuller函数返回值的参数说明

from statsmodels.tsa.stattools import adfuller
t = adfuller(train['total_redeem_amt'])

返回值为(-5.2350403606036302, 7.4536580061930903e-06, 0, 60, {'1%': -3.5443688564814813, '5%': -2.9110731481481484, '10%': -2.5931902777777776}, 1935.4779504450603)

最近在学习用ARIMA模型建模处理预测数据的时候遇到的一个用来评测稳定性的函数,该函数可以返回一个数组,包含五个数据。

查看adfuller()函数的模型拟合系数

adfuller()函数的输入参数中有regresults一项,网上教程中大多数默认设为False。这个参数到底有什么用,这里我们研究一下。

adfuller()函数原型

adfuller()是ADF检验常用的函数(还有一个常用函数为arch.unitroot包中的ADF()函数),需导入的包为:

import statsmodels.tsa.stattools as ts

其函数原型为:

t=adfuller(x, maxlag=None, regression='c', autolag='AIC', store=False, regresults=False)

输入参数:

返回参数:

regresults参数

adfuller()函数的其他参数,网上的各种教程已经将的很清楚了。但是对regresults,却一直讳莫如深,从函数原型也看的一头雾水,搞不清楚这个参数怎么用的。首先通过两段代码看看regresults参数对输出结果的影响。

regresults=False:

r=ts.adfuller(data,12,'ctt',regresults=False)
print(r)

输出结果:

(-1.6596695973336932, 0.9169218489129718, 0, 230, {'1%': -4.422218041176954, '5%': -3.8583127840881075, '10%': -3.569276584942878}, 1640.0264270221523)

可以看到,依次为t-statistic, p-value, usedlag, nobs, critical-value, AIC这几个参数。

regresults=True:

r=ts.adfuller(data,12,'ctt',regresults=True)
print(r)

输出结果:

(-1.6596695973336932, 0.9169218489129718, {'1%': -4.422218041176954, '5%': -3.8583127840881075, '10%': -3.569276584942878}, <statsmodels.tsa.stattools.ResultsStore object at 0x000000000F3B2198>)

前面几项依次为t-statistic, p-value,critical-value,没有了usedlag, nobs,多出来一个注释“statsmodels.tsa.stattools.ResultsStore object at 0x000000000F3B2198”,这个注释貌似是resstore的注释,但怎么调用这个参数呢?

adfuller()函数原代码

为了弄清楚这个问题,我们研究一下adfuller()函数的原代码。这里进行部分截取:

if regresults:
    store = True
...
if store:
    resstore.resols = resols
    resstore.maxlag = maxlag
    resstore.usedlag = usedlag
    resstore.adfstat = adfstat
    resstore.critvalues = critvalues
    resstore.nobs = nobs
    resstore.H0 = ("The coefficient on the lagged level equals 1 - "
                   "unit root")
    resstore.HA = "The coefficient on the lagged level < 1 - stationary"
    resstore.icbest = icbest
    resstore._str = 'Augmented Dickey-Fuller Test Results'
    return adfstat, pvalue, critvalues, resstore
else:
    if not autolag:
        return adfstat, pvalue, usedlag, nobs, critvalues
    else:
        return adfstat, pvalue, usedlag, nobs, critvalues, icbest

可以看出,不同的输入参数有不同的返回值,当regresults=True时,确实将详细的结果赋给resstore参数,并作为最后一个参数返回。这个参数的子项包括:resols, maxlag, usedlag, adfstat, critvalues, nobs, H0(原假设描述),HA (备择假设描述),icbest ,_str 等。

因此可以得到两个结论:

(1)当regresults=True时,虽然没有返回usedlag, nobs参数,但这些参数都是存在的,虽然没有返回,但仍然可以通过resstore进行显示或调用。

(2)最后一项"statsmodels.tsa.stattools.ResultsStore object at 0x000000000F3B2198"表示计算过程中resstore参数的暂存地址(当参数被遗弃时显示)。

测试:

[t,p,c,r]=ts.adfuller(data,12,'ctt',regresults=True)
print(r.usedlag)
print(r.nobs)

结果:

0
230

adfuller()的回归模型系数

resstore参数中还有一项resols,这一项是默认不返回的。我们继续在原代码中寻找这一项的计算过程:

    ...
    if regression != 'nc':
        resols = OLS(xdshort, add_trend(xdall[:, :usedlag + 1],
                     regression)).fit()
    else:
        resols = OLS(xdshort, xdall[:, :usedlag + 1]).fit()
    ...

看到了,resols就是最小二乘拟合函数OLS()的返回结果。因此,resols所包含的子项可以通过查阅OLS()函数原型得到,其中必然也包括回归模型的拟合系数。

测试:

[t,p,c,r]=ts.adfuller(data,12,'ctt',regresults=True)
print(r.resols.summary())
print(r.resols.params)

结果:

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.019
Model:                            OLS   Adj. R-squared:                  0.006
Method:                 Least Squares   F-statistic:                     1.430
Date:                Thu, 26 Dec 2019   Prob (F-statistic):              0.235
Time:                        23:15:35   Log-Likelihood:                -858.43
No. Observations:                 230   AIC:                             1725.
Df Residuals:                     226   BIC:                             1739.
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
x1            -0.0287      0.017     -1.660      0.098      -0.063       0.005
const         55.6700     32.455      1.715      0.088      -8.283     119.623
x2             0.0209      0.053      0.395      0.693      -0.083       0.125
x3            -0.0002      0.000     -0.785      0.433      -0.001       0.000
==============================================================================
Omnibus:                        8.509   Durbin-Watson:                   1.870
Prob(Omnibus):                  0.014   Jarque-Bera (JB):               11.078
Skew:                           0.274   Prob(JB):                      0.00393
Kurtosis:                       3.925   Cond. No.                     1.15e+06
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 1.15e+06. This might indicate that there are
strong multicollinearity or other numerical problems.
[-2.86531492e-02  5.56699632e+01  2.08909695e-02 -1.95482480e-04]

可以看出,结果显示了OLS拟合的详细结果,可以对ADF检验中的拟合模型和拟合效果进行进一步详细研究。

结论

通过对adfuller()函数源码的研究,明确了输入参数regresults的作用和返回参数resstore的结构组成。通过返回的resstore参数,可以进一步得到ADF检验中的拟合模型和对应参数,有助于对检验结果进行更加深入的分析。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文