Последний раз редактировалось Кролик 23.02.2023, 22:42, всего редактировалось 4 раз(а).
Если так получается, то может быть, ряд X вовсе не ряд, а тренд-стационарный процесс (а последовательность V уже искусственное производное). -- Чтобы произвести проверку на тренд-стационарность, можно применить программу, аналогичную вышеприведённой, для иксов напрямую:
import sys, warnings
import numpy as np
from scipy.optimize import brute
from statsmodels.tsa.arima.model import ARIMA
def ARIMA_fit(dimens, endog):
fl = 0; tlen = 1
if endog[0] == 0.0 and dimens[1] == 0:
fl = 1; tlen = 2
tflags = [fl]*(dimens[1] + tlen); tflags[-1] = 1
return ARIMA(endog, exog=None, order=dimens, trend=tflags).fit()
def objfunc(dimens, endog):
return ARIMA_fit(dimens, endog).aic
# Подбор оптимальных моделей для различных случаев 2
VelFile = 'C:\\Users\\...\\Velocities_NC.csv'
dlcr = np.genfromtxt(VelFile, delimiter='\t', dtype=float, encoding=None).T[:-1]
N = len(dlcr[0]); print('N =', N)
x = np.zeros(N+1)
grid = (slice(0, 4, 1), slice(0, 3, 1), slice(0, 2, 1))
for i, v in enumerate(dlcr):
sys.stdout.write('Case %s, nu1 = %8.8f\n' % (str(i+1).rjust(2, '0'), np.mean(v)))
for i in range(1,N+1):
x[i] = x[i-1] + v[i-1]
with warnings.catch_warnings():
warnings.simplefilter("ignore")
resbrute = brute(objfunc, grid, args=(x,), full_output=True, finish=None)
print('Optimum:', resbrute[:2])
optdim = [int(el) for el in resbrute[0]]
if optdim[1] < 2:
with warnings.catch_warnings():
warnings.simplefilter("ignore")
res = ARIMA_fit(optdim, x)
mod0 = ARIMA(v, order=[0, 0, 1])
with mod0.fix_params({'ma.L1': -0.999}):
with warnings.catch_warnings():
warnings.simplefilter("ignore")
res0 = mod0.fit()
sys.stdout.write('nu* = %8.8f, nu2 = %8.8f\n'
% (res.params[0] if optdim[1] == 1 else res.params[1], res0.params[0]))
else:
print('Последовательность {V_n} нестационарная!')
Здесь мы как бы снимаем требование на присутствие единичного корня в RA-части модели (для иксов) и получаем следующий результат:
- N = 3398
- Case 01, nu1 = 0.00655462
- Optimum: (array([2., 1., 1.]), -2001.5242968797716)
- nu* = 0.00655679, nu2 = 0.00511804
- Case 02, nu1 = 0.00510602
- Optimum: (array([1., 1., 0.]), -1753.2230276620312)
- nu* = 0.00524620, nu2 = 0.00075748
- Case 03, nu1 = -0.00323397
- Optimum: (array([1., 1., 0.]), -3602.503593245873)
- nu* = -0.00317546, nu2 = -0.00360338
- Case 04, nu1 = -0.00699477
- Optimum: (array([1., 1., 0.]), -1267.108256258572)
- nu* = -0.00698380, nu2 = -0.00230233
- Case 05, nu1 = -0.00393526
- Optimum: (array([3., 1., 1.]), -1423.5822742838318)
- nu* = -0.00386022, nu2 = -0.00679393
- Case 06, nu1 = -0.00605052
- Optimum: (array([2., 0., 0.]), -1444.977937110824)
- nu* = -0.00629738, nu2 = -0.00628713
- Case 07, nu1 = 0.00339638
- Optimum: (array([2., 0., 0.]), -1843.86650776152)
- nu* = 0.00044537, nu2 = 0.00045591
- Case 08, nu1 = -0.01028459
- Optimum: (array([2., 0., 0.]), -1683.3033525621347)
- nu* = -0.00913082, nu2 = -0.00913594
- Case 09, nu1 = 0.00135474
- Optimum: (array([1., 1., 0.]), 677.9968016389706)
- nu* = 0.00122458, nu2 = 0.00330383
- Case 10, nu1 = -0.00802964
- Optimum: (array([2., 1., 0.]), 5783.880228110692)
- nu* = -0.00824265, nu2 = -0.00399930
- Case 11, nu1 = 0.04543728
- Optimum: (array([3., 1., 0.]), 5254.037875327744)
- nu* = 0.04543832, nu2 = 0.04853337
- Case 12, nu1 = 0.00018052
- Optimum: (array([3., 1., 0.]), 6043.3680244172465)
- nu* = 0.00025744, nu2 = -0.00497948
- Case 13, nu1 = 0.00088748
- Optimum: (array([1., 1., 0.]), -1952.1799676641272)
- nu* = 0.00104727, nu2 = -0.00426091
- Case 14, nu1 = 0.01404851
- Optimum: (array([2., 1., 1.]), 6062.001073938916)
- nu* = 0.01412072, nu2 = 0.00858118
- Case 15, nu1 = 0.03490237
- Optimum: (array([1., 1., 0.]), -1732.9333160917927)
- nu* = 0.03503534, nu2 = 0.03081376
- Case 16, nu1 = 0.02167120
- Optimum: (array([1., 1., 0.]), -1660.8531453904282)
- nu* = 0.02168255, nu2 = 0.02658783
- Case 17, nu1 = 0.01318151
- Optimum: (array([2., 1., 1.]), -2001.52423061589)
- nu* = 0.01318191, nu2 = 0.01174493
- Case 18, nu1 = 0.04814803
- Optimum: (array([2., 0., 1.]), 7466.3708089742195)
- nu* = 0.05699746, nu2 = 0.05708517
- Case 19, nu1 = 0.05767983
- Optimum: (array([1., 1., 1.]), 7828.063197130257)
- nu* = 0.05815709, nu2 = 0.05465586
- Case 20, nu1 = 0.02711366
- Optimum: (array([1., 1., 0.]), 7666.08472478068)
- nu* = 0.02772736, nu2 = 0.01649759
- Case 21, nu1 = 0.01819613
- Optimum: (array([3., 1., 0.]), 7069.580346114151)
- nu* = 0.01845195, nu2 = 0.00070983
- Case 22, nu1 = 0.06938519
- Optimum: (array([3., 1., 0.]), 12505.26955543548)
- nu* = 0.06999615, nu2 = 0.11541765
- Case 23, nu1 = 0.05295559
- Optimum: (array([1., 1., 1.]), 8676.217706742214)
- nu* = 0.05354198, nu2 = 0.06586575
- Case 24, nu1 = 0.01741749
- Optimum: (array([3., 1., 1.]), 5330.615814908288)
- nu* = 0.01778786, nu2 = 0.01464376
- Case 25, nu1 = 0.03240470
- Optimum: (array([1., 1., 0.]), 9052.015777860925)
- nu* = 0.03282899, nu2 = 0.03618805
- Case 26, nu1 = -0.02160219
- Optimum: (array([1., 1., 0.]), 14823.135685851297)
- nu* = -0.02170764, nu2 = -0.00375938
- Case 27, nu1 = 0.03527269
- Optimum: (array([2., 0., 0.]), 7444.339506263933)
- nu* = 0.03830970, nu2 = 0.03902088
- Case 28, nu1 = -0.00591215
- Optimum: (array([1., 1., 1.]), 8362.435206553026)
- nu* = -0.00532773, nu2 = 0.00707273
- Case 29, nu1 = 0.00994661
- Optimum: (array([2., 0., 0.]), 4991.751457062013)
- nu* = 0.00541659, nu2 = 0.00556432
- Case 30, nu1 = 0.01498699
- Optimum: (array([3., 1., 0.]), 7551.179289103277)
- nu* = 0.01579190, nu2 = 0.01789566
- Case 31, nu1 = 0.00004803
- Optimum: (array([3., 1., 1.]), 4980.2190541873015)
- nu* = 0.00033502, nu2 = -0.00134578
- Case 32, nu1 = 0.00436593
- Optimum: (array([3., 1., 1.]), 6274.489235666308)
- nu* = 0.00435287, nu2 = 0.00570202
- Case 33, nu1 = 0.03949887
- Optimum: (array([1., 2., 1.]), 9569.572594662135)
- Последовательность {V_n} нестационарная!
- Case 34, nu1 = -0.00764012
- Optimum: (array([1., 1., 0.]), 6225.822550696699)
- nu* = -0.00697995, nu2 = -0.00918850
- Case 35, nu1 = 0.02794744
- Optimum: (array([2., 0., 0.]), 6286.088796906268)
- nu* = 0.03189986, nu2 = 0.03191873
- Case 36, nu1 = 0.05544060
- Optimum: (array([3., 1., 0.]), 10971.196247480491)
- nu* = 0.05701863, nu2 = 0.05975968
- Case 37, nu1 = 0.09533599
- Optimum: (array([1., 1., 1.]), 10744.502515222093)
- nu* = 0.09587055, nu2 = 0.12061395
- Case 38, nu1 = 0.00491529
- Optimum: (array([3., 1., 1.]), 5147.535034095081)
- nu* = 0.00495773, nu2 = 0.00731045
- Case 39, nu1 = -0.00129450
- Optimum: (array([1., 1., 1.]), 8630.469181050696)
- nu* = -0.00065673, nu2 = -0.00969551
- Case 40, nu1 = 0.00927956
- Optimum: (array([1., 1., 0.]), 6086.932916022977)
- nu* = 0.00926546, nu2 = 0.00344314
- Case 41, nu1 = 0.00004842
- Optimum: (array([2., 1., 1.]), 6492.887331316366)
- nu* = 0.00005226, nu2 = -0.00873819
- Case 42, nu1 = 0.01479790
- Optimum: (array([2., 1., 0.]), 8110.804239097117)
- nu* = 0.01539606, nu2 = 0.02451793
- Case 43, nu1 = 0.04250041
- Optimum: (array([2., 0., 0.]), 7842.70031775359)
- nu* = 0.03899907, nu2 = 0.03918382
- Case 44, nu1 = 0.08787678
- Optimum: (array([1., 1., 0.]), 12278.726822238443)
- nu* = 0.08798968, nu2 = 0.08854787
- Case 45, nu1 = 0.02690075
- Optimum: (array([2., 1., 0.]), 7867.670988655611)
- nu* = 0.02672606, nu2 = 0.04508320
- Case 46, nu1 = 0.03474408
- Optimum: (array([3., 1., 1.]), 7548.2388299158465)
- nu* = 0.03503380, nu2 = 0.03496059
- Case 47, nu1 = 0.00946698
- Optimum: (array([1., 1., 0.]), 6770.412583524469)
- nu* = 0.00998736, nu2 = 0.00744384
- Case 48, nu1 = 0.03180515
- Optimum: (array([3., 1., 1.]), 6978.289920046582)
- nu* = 0.03257016, nu2 = 0.03707359
- Case 49, nu1 = -0.02027986
- Optimum: (array([2., 1., 1.]), 5080.479671904188)
- nu* = -0.01827365, nu2 = -0.01036466
- Case 50, nu1 = -0.01362876
- Optimum: (array([3., 1., 1.]), 8529.957615776362)
- nu* = -0.01390978, nu2 = -0.00819919
- Case 51, nu1 = 0.04542424
- Optimum: (array([2., 1., 1.]), 6826.630564479003)
- nu* = 0.04557630, nu2 = 0.03311890
- Case 52, nu1 = 0.03524515
- Optimum: (array([2., 1., 0.]), 6492.731376237301)
- nu* = 0.03532124, nu2 = 0.03739381
- Case 53, nu1 = 0.01788338
- Optimum: (array([2., 1., 0.]), 7990.775179159326)
- nu* = 0.01792653, nu2 = -0.01074836
- Case 54, nu1 = 0.06768045
- Optimum: (array([3., 1., 1.]), 8498.493405873009)
- nu* = 0.06811626, nu2 = 0.06972287
- Case 55, nu1 = 0.03975904
- Optimum: (array([3., 1., 0.]), 7662.375515336549)
- nu* = 0.03975672, nu2 = 0.04063427
- Case 56, nu1 = 0.00482490
- Optimum: (array([2., 1., 1.]), 8250.620934410092)
- nu* = 0.00462259, nu2 = 0.00212685
- Case 57, nu1 = 0.03142051
- Optimum: (array([2., 1., 0.]), 6303.4946384595405)
- nu* = 0.03127149, nu2 = 0.02815879
- Case 58, nu1 = 0.03863696
- Optimum: (array([3., 1., 1.]), 6596.764338032876)
- nu* = 0.03857647, nu2 = 0.03389534
- Case 59, nu1 = 0.08942656
- Optimum: (array([1., 1., 1.]), 13733.967109078909)
- nu* = 0.08967851, nu2 = 0.14293596
Интересно, что в восьми из 59-ти случаев программой была установлена тренд-стационарность ( ). Это случаи 6, 7, 8, 18, 27, 29, 35 и 43. Именно в этих случаях значения лежат ближе к , чем к . То есть, Combat Zone был прав всё-таки не на все 100%...
|