3

Я выполняю это задание, где я пытаюсь запустить эту программу 5000 раз и сделать AR (1) и AR (2) подходящими для модели. Сначала я определил функцию, которая формировала временные ряды следующим образом:python arma установка работает слишком медленно?

def ts_gen_ar1(size,sigma,alpha1): 
    wt = np.random.normal(0,sigma**2,size=size) 
    x = np.zeros(size) 
    for i in np.arange(1,size): 
     x[i] = 0.2 + alpha1*x[i-1] + wt[i] 
return x 

Тогда я выполнил следующие операторы Thats принимая очень много времени, чтобы работать

sample_ar1 = [] 
sample_ar2 = [] 
for i in range(0,5000): 
    rt = ts_gen_ar1(2500,1,0.8) 
    coeff_ar1 = sm.tsa.ARMA(rt,order=(1,0)).fit().params[1] 
    coeff_ar2 = sm.tsa.ARMA(rt,order=(2,0)).fit().params[1:] 
    sample_ar1.append(coeff_ar1) 
    sample_ar2.append(coeff_ar2) 

может кто-то подскажет, как ускорить этот процесс? Я также получаю фиктивные ошибки, когда моя программа говорит, что MLE не удалось сходиться для определенных итераций.

Благодаря

+0

какая версия statsmodels вы используете? – andrewwowens

+0

Возможно, вы захотите следовать рекомендациям в ответе, но если вы действительно нуждаетесь в безошибочной оценке ARMA, вы можете увидеть мое решение для этого [здесь] (https://github.com/statsmodels/statsmodels/blob/master/ statsmodels/tsa/stattools.py # L935) – jseabold

+0

Привет, мистер jseabold. Спасибо, я слежу за вашими сообщениями здесь. Я полностью пропустил эту функцию. Я попробую сразу и посмотрю, поможет ли это. Мне все же нужно ускорить итерацию, хотя ... поскольку она занимает примерно 15-20 минут, используя оба алгоритма подгонки. Но, если я разделяю процесс в разных ячейках и выполняю один за другим, тогда он занимает примерно 6 минут каждый. Я попытаюсь следовать предложению в ответах –

ответ

1

рекурсивных циклов для анализа временных рядов в простом Python медленно.

Самым простым решением в этом случае для генерации образца является использование scipy.signal.lfilter или обертку для него в statsmodels arma_generate_samplehttp://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.arima_process.arma_generate_sample.html

Другая возможность ускорить генерацию случайных чисел, чтобы запустить его векторизованы для многих образцов, например, запустить его над блоками из 100 процессов. У вас все еще есть цикл времени, но вы можете уменьшить количество циклов репликации за счет использования большего объема памяти.

sm.tsa.ARMA использует фильтр Kalman, написанный на языке cython, и работает быстро, но для общего ARMA-процесса он работает больше, чем требуется для оценки AR-модели. sm.ts.AR оценивает параметры AR-процесса по полной максимальной вероятности по предположению стационарности (по умолчанию).

Самый простой и быстрый способ оценить процесс AR с помощью OLS, для которого не требуется нелинейная оптимизация, или использовать Yule-Walker statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.yule_walker. html

Последние два могут оценивать параметры, обусловленные начальными наблюдениями, но не будут иметь полных функций оценки, таких как прогнозирование, которые имеют модели AR и ARMA.

+2

Вы можете передать 'method = 'css'', чтобы выполнить оценку ARMA через OLS и все еще иметь колокола и свистки. – jseabold