Выбор порядка модели ARMA с использованием arma_order_select_ic из statsmodel - PullRequest
0 голосов
/ 17 мая 2018

Привет, ребята. Я использую arma_order_select_ic из библиотеки statsmodel для расчета порядка (p, q) для модели ARMA, я использую цикл for для циклического прохождения по различным компаниям, которые находятся в каждом столбце фрейма данных. Код выглядит следующим образом:

import pandas as pd
from statsmodels.tsa.stattools import arma_order_select_ic

df = pd.read_csv("Adjusted_Log_Returns.csv", index_col = 'Date').dropna()

main_df = pd.DataFrame()


for i in range(146):
    order_selection = arma_order_select_ic(df.iloc[i].values, max_ar = 4, 
    max_ma = 2, ic = "aic")
    ticker = [df.columns[i]]

    df_aic_min = pd.DataFrame([order_selection["aic_min_order"]], index = 
    ticker)

main_df = main_df.append(df_aic_min)


main_df.to_csv("aic_min_orders.csv")

Код работает нормально, и в конце я получаю все результаты в файле csv, но меня смущает то, что когда я вычисляю (p, q) вне цикла for для одной компании, я получаю разные результаты

order_selection = arma_order_select_ic(df["ABL"].values, max_ar = 4, 
max_ma = 2, ic = "aic")

Порядок для компании ABL равен (1,1) при расчете в цикле for, а его (4,1) - вне его.

Так что мой вопрос в том, что я делаю неправильно или почему это так? Любая помощь будет оценена.

Заранее спасибо

1 Ответ

0 голосов
/ 17 мая 2018

Из вашего кода довольно ясно, что вы пытаетесь найти параметры для модели ARMA в данных columns ', но это не то, что делает код: вы находите в циклепараметры для строк .

Учтите это:

import pandas as pd

df = pd.DataFrame({'a': [3, 4]})

>>> df.iloc[0]
a    3
Name: 0, dtype: int64

>>> df['a']
0    3
1    4
Name: a, dtype: int64

Возможно, вам следует изменить свой код на

for c in df.columns:
    order_selection = arma_order_select_ic(df[c].values, max_ar = 4, 
    max_ma = 2, ic = "aic")
    ticker = [c]
...