Существует очень полезная функция в R, называемая findfrequency
в пакете forecast
, которая возвращает период доминирующей частоты временного ряда. Более подробную информацию о функции от автора можно найти здесь: https://robjhyndman.com/hyndsight/tscharacteristics/
Я хочу реализовать что-то эквивалентное в Python, и у меня возникли проблемы с функциями, которые должны быть равны в функцию spec.ar
R, которая находится внутри findfrequency.
Функция начинается с изменения тренда серии, что легко сделать с помощью x = statsmodels.tsa.tsatools.detrend(myTs, order=1, axis=0)
. Теперь, когда у меня есть остатки, я хотел бы сделать в Python эквивалент функции spec.ar
в R, которая сначала подгоняет модель AR к x (или использует существующее соответствие) и вычисляет (и по умолчанию строит графики) спектральный плотность подобранной модели.
Я не нашел ничего подобного, поэтому я делаю каждый шаг по очереди, сначала AR, а затем оценку spe c. Я использую временной ряд Airpassengers
и не могу получить одинаковые результаты для R и Python для порядка или коэффициентов AR.
Мой код R:
x <- AirPassengers
x <- residuals(tslm(x ~ trend))
ARmodel <- ar(x)
ARmodel
Я получаю, что 15 - это выбранный заказ для моей модели авторегрессии.
Мой Python Код:
import statsmodels.api as sm
dataPeriodic = pd.read_csv('AirPassengers.csv')
tsPeriodic = dataPeriodic.iloc[:,1]
x = statsmodels.tsa.tsatools.detrend(tsPeriodic, order=1, axis=0)
n = x.shape[0]
est_order = sm.tsa.AR(x).select_order(maxlag=20, ic='aic', trend='nc')
print(est_order)
Здесь я получаю совершенно другой результат с выбранным заказом, равным 10 вместо 15, и я должен указать верхний предел поиска задержки с параметром maxlag ..
Я попытался с tsa.AutoReg
без успеха, я получаю другой другой результат.
* 1030 Итак, есть ли способ установить модель AR так же, как R? Что-то похожее на
spec.ar
или даже что-то похожее на функцию
findfrequency
? Меня сильно смущают большие различия, которые «одинаковые» методы могут выводить на двух языках.