#python-3.x #statistics #time-series #statsmodels
#python-3.x #Статистика #временных рядов #statsmodels
Вопрос:
У меня есть фрейм данных длиной 177, и я хочу вычислить и построить частичную функцию автоматической корреляции (PACF).
У меня есть импортированные данные и т.д., И я делаю:
from statsmodels.tsa.stattools import pacf
ys = pacf(data[key][array].diff(1).dropna(), alpha=0.05, nlags=176, method="ywunbiased")
xs = range(lags 1)
plt.figure()
plt.scatter(xs,ys[0])
plt.grid()
plt.vlines(xs, 0, ys[0])
plt.plot(ys[1])
Используемый метод приводит к числам, большим 1, при очень длительных задержках (90 минут), что неверно, и я получаю предупреждение о времени выполнения: недопустимое значение, встречающееся в sqrtreturn rho, np.sqrt (sigmasq), но поскольку я не могу видеть их исходный код, я не знаю, что это значит.
Честно говоря, когда я ищу PACF, все примеры выполняют PACF только с задержками до 40 или 60 или около того, и у них никогда не бывает сколько-нибудь значительного PACF после lag = 2, и поэтому я также не мог сравнивать с другими примерами.
Но когда я использую:
method="ols"
# or
method="ywmle"
числа исправлены. Поэтому это должен быть алгоритм, который они используют для ее решения.
Я пытался импортировать метод inspect и getsource, но это бесполезно, он просто показывает, что он использует другой пакет, и я не могу его найти.
Если вы также знаете, откуда возникает проблема, я был бы очень признателен за помощь.
Для справки, значения для data[key] [array] являются:
[1131.130005, 1144.939941, 1126.209961, 1107.300049, 1120.680054, 1140.839966, 1101.719971, 1104.23999, 1114.579956, 1130.199951, 1173.819946, 1211.920044, 1181.27002, 1203.599976, 1180.589966, 1156.849976, 1191.5, 1191.329956, 1234.180054, 1220.329956, 1228.810059, 1207.01001, 1249.47998, 1248.290039, 1280.079956, 1280.660034, 1294.869995, 1310.609985, 1270.089966, 1270.199951, 1276.660034, 1303.819946, 1335.849976, 1377.939941, 1400.630005, 1418.300049, 1438.23999, 1406.819946, 1420.859985, 1482.369995, 1530.619995, 1503.349976, 1455.27002, 1473.98999, 1526.75, 1549.380005, 1481.140015, 1468.359985, 1378.550049, 1330.630005, 1322.699951, 1385.589966, 1400.380005, 1280.0, 1267.380005, 1282.829956, 1166.359985, 968.75, 896.23999, 903.25, 825.880005, 735.090027, 797.869995, 872.8099980000001, 919.1400150000001, 919.320007, 987.4799800000001, 1020.6199949999999, 1057.079956, 1036.189941, 1095.630005, 1115.099976, 1073.869995, 1104.48999, 1169.430054, 1186.689941, 1089.410034, 1030.709961, 1101.599976, 1049.329956, 1141.199951, 1183.26001, 1180.550049, 1257.640015, 1286.119995, 1327.219971, 1325.829956, 1363.609985, 1345.199951, 1320.640015, 1292.280029, 1218.890015, 1131.420044, 1253.300049, 1246.959961, 1257.599976, 1312.410034, 1365.680054, 1408.469971, 1397.910034, 1310.329956, 1362.160034, 1379.319946, 1406.579956, 1440.670044, 1412.160034, 1416.180054, 1426.189941, 1498.109985, 1514.680054, 1569.189941, 1597.569946, 1630.73999, 1606.280029, 1685.72998, 1632.969971, 1681.550049, 1756.540039, 1805.810059, 1848.359985, 1782.589966, 1859.449951, 1872.339966, 1883.949951, 1923.569946, 1960.22998, 1930.6700440000002, 2003.369995, 1972.290039, 2018.050049, 2067.560059, 2058.899902, 1994.9899899999998, 2104.5, 2067.889893, 2085.51001, 2107.389893, 2063.110107, 2103.840088, 1972.180054, 1920.030029, 2079.360107, 2080.409912, 2043.939941, 1940.2399899999998, 1932.22998, 2059.73999, 2065.300049, 2096.949951, 2098.860107, 2173.600098, 2170.949951, 2168.27002, 2126.149902, 2198.810059, 2238.830078, 2278.8701170000004, 2363.639893, 2362.719971, 2384.199951, 2411.800049, 2423.409912, 2470.300049, 2471.649902, 2519.360107, 2575.26001, 2584.840088, 2673.610107, 2823.810059, 2713.830078, 2640.8701170000004, 2648.050049, 2705.27002, 2718.3701170000004, 2816.290039, 2901.52002, 2913.97998]
Комментарии:
1. Не могли бы вы поместить куда-нибудь одномерный массив входных данных?
2. @SeverinPappadeux Извините за задержку ответа. Я добавил данные. Спасибо, что изучили это 🙂
Ответ №1:
Ваш временной ряд довольно явно не является стационарным, так что предположения Юла-Уокера нарушаются.
В более общем плане PACF обычно подходит для стационарных временных рядов. Вы могли бы сначала изменить свои данные, прежде чем рассматривать частичные автокорреляции.
Комментарии:
1. Я один раз изменил серию и, чтобы убедиться, что я выполнил тест ADF, и он не показал корня единицы измерения, но у меня все еще была та же проблема. Я дважды изменил ее, просто чтобы убедиться, и все те же результаты. Кроме того, я не вижу никакой сезонности, но я все равно использовал скользящее среднее, чтобы покрыть эту базу. Также пробовал OLS, но это тоже дает значения больше 1:'((((((( Есть идеи?
2. Вы правы. Я полагаю, что проблема может заключаться в том, что для вычисления этих значений при таких длительных задержках используется относительно мало точек данных, и поэтому оценки численно не очень стабильны. Возможно, что другие методы немного менее подвержены числовым проблемам, или, возможно, они просто не сталкиваются с проблемами здесь. В любом случае, я бы не придавал слишком большого значения какому-либо частичному значению автокорреляции при очень больших задержках.
3. Просто чтобы добавить ссылку, Эндерс (2014) предполагает, что при размере выборки T PACF следует вычислять только с задержками T / 4. Поскольку у вас 176 точек данных, это эмпирическое правило предполагает не учитывать PACF для задержек, превышающих 44.