statsmodels.tsa.arima_model 的异常收敛结果和 svd 错误
下面是对于变换参数(“transparams”)的不同设置和不同精度级别的运行不一致或失败的代码。
如果您查看警告和错误,那么在我看来并没有一致的方式,我们得到...
有时会出现“ConvergenceWarning: Maximum Likelihood ...”
有时有:
raise LinAlgError("SVD 没有收敛") numpy.linalg.linalg.LinAlgError: SVD 没有收敛
任何帮助表示赞赏!
# "Freaky" results with statsmodels.tsa.arima_model
#
# Below is code that does not consistently run successfully or fail
# for different settings of Transform Parameters ("transparams") and
# for different precision levels.
#
# If you look at the warnings and errors, in no consistent fashion that
# is immediately apparent to me we get...
#
# sometimes there are
# "ConvergenceWarning: Maximum Likelihood ..."
#
# and sometimes there are:
#
# raise LinAlgError("SVD did not converge")
# numpy.linalg.linalg.LinAlgError: SVD did not converge
#
from statsmodels.tsa.arima_model import ARIMA
# raw data is from a printout -- lower in code precision is set with rounding
# this is length 37 -- it was printed out from a dataframe that was in some other code
y_raw = [0.019269999999999999, 0.03916, 0.02274, -0.048919999999999998,
0.0066800000000000002,
0.019910000000000001, -0.015610000000000001, 0.0039699999999999996,
0.0059199999999999999, 0.021600000000000001, -0.0025600000000000002,
-0.018630000000000001, -0.0144, -0.0053099999999999996,
0.00134, 0.01, 0.019140000000000001, 0.013599999999999999,
-0.023640000000000001, 0.0019599999999999999,
-0.02155, 0.0060099999999999997, 0.01393, 0.0071999999999999998,
-0.0045500000000000002, -0.0019599999999999999, 0.0039199999999999999,
-0.0052100000000000002, 0.0039300000000000003, 0.0032599999999999999,
0.0064999999999999997, 0.00711, 0.0032100000000000002,
-0.011509999999999999, 0.0058199999999999997, 0.00579, 0.01023]
# this is length 37 -- it was printed out from a dataframe that was in some other code
x_raw = [4.9103500000000002, 4.1414200000000001, 3.1673200000000001,
0.67383000000000004, 0.41469, -1.47105, -5.0846299999999998,
-6.5102099999999998, -4.7134400000000003, -2.9291100000000001,
-2.2156699999999998, 0.023, -0.40053, 1.9970699999999999,
5.2835000000000001, 6.5333899999999998, 4.0112399999999999,
0.45212999999999998, 0.54645999999999995, 1.4251400000000001,
2.1529699999999998, 1.5075799999999999, 1.3955200000000001,
2.2717000000000001, 2.4378099999999998, 4.9119999999999999,
5.1389199999999997, 3.8104399999999998, 4.6619700000000002,
4.3374199999999998, 4.4402799999999996, 4.1830299999999996,
4.1744700000000003, 2.27535, 2.2844899999999999, 1.7574700000000001,
1.3590599999999999]
for rval in range(1, 9):
for tflag in [True, False]:
y = [round(z,rval) for z in y_raw]
x = [round(z,rval) for z in x_raw]
try:
reg = ARIMA(endog=y, exog=x, order=(3, 0, 0)).fit(transparams=tflag, trend='nc', disp=False, tol=1e-20)
#print(reg.summary())
print('Transform Flag: {} Precision: {} - Success'.format(tflag, rval))
except:
print('Transform Flag: {} Precision: {} - Fail'.format(tflag, rval))
#
# Following is the results of the code block above
#
# Transform Flag: True Precision: 1 - Fail
# Transform Flag: False Precision: 1 - Fail
# Transform Flag: True Precision: 2 - Success
# C:\Python\Anaconda3-4.4.0-64BIT\lib\site-packages\statsmodels\base\model.py:496: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
# "Check mle_retvals", ConvergenceWarning)
# Transform Flag: False Precision: 2 - Success
# Transform Flag: True Precision: 3 - Success
# Transform Flag: False Precision: 3 - Success
# Transform Flag: True Precision: 4 - Success
# C:\Python\Anaconda3-4.4.0-64BIT\lib\site-packages\statsmodels\base\model.py:496: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
# "Check mle_retvals", ConvergenceWarning)
# Transform Flag: False Precision: 4 - Success
# Transform Flag: True Precision: 5 - Fail
# C:\Python\Anaconda3-4.4.0-64BIT\lib\site-packages\statsmodels\tsa\tsatools.py:584: RuntimeWarning: overflow encountered in exp
# newparams = ((1-np.exp(-params))/
# C:\Python\Anaconda3-4.4.0-64BIT\lib\site-packages\statsmodels\tsa\tsatools.py:585: RuntimeWarning: overflow encountered in exp
# (1+np.exp(-params))).copy()
# C:\Python\Anaconda3-4.4.0-64BIT\lib\site-packages\statsmodels\tsa\tsatools.py:585: RuntimeWarning: invalid value encountered in true_divide
# (1+np.exp(-params))).copy()
# C:\Python\Anaconda3-4.4.0-64BIT\lib\site-packages\statsmodels\tsa\tsatools.py:586: RuntimeWarning: overflow encountered in exp
# tmp = ((1-np.exp(-params))/
# C:\Python\Anaconda3-4.4.0-64BIT\lib\site-packages\statsmodels\tsa\tsatools.py:587: RuntimeWarning: overflow encountered in exp
# (1+np.exp(-params))).copy()
# C:\Python\Anaconda3-4.4.0-64BIT\lib\site-packages\statsmodels\tsa\tsatools.py:587: RuntimeWarning: invalid value encountered in true_divide
# (1+np.exp(-params))).copy()
# Transform Flag: False Precision: 5 - Success
# Transform Flag: True Precision: 6 - Fail
# Transform Flag: False Precision: 6 - Success
# Transform Flag: True Precision: 7 - Fail
# Transform Flag: False Precision: 7 - Success
# Transform Flag: True Precision: 8 - Fail
# Transform Flag: False Precision: 8 - Success