| 
													Последний раз редактировалось Кролик 23.02.2023, 22:42, всего редактировалось 4 раз(а).
												
 
 Если так получается, то может быть, ряд X вовсе не ряд, а тренд-стационарный процесс (а последовательность V уже искусственное производное). -- Чтобы произвести проверку на тренд-стационарность, можно применить программу, аналогичную вышеприведённой, для иксов напрямую: 
import sys, warningsimport 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%...    
 |