ARIMA, ARMA и AIC?

data <-c(88, 84, 85, 85, 84, 85, 83, 85, 88, 89, 91, 99, 104, 112, 126, 138, 146,151,   150, 148, 147, 149, 143, 132, 131, 139, 147, 150, 148, 145, 140, 134, 131, 131, 129, 126, 126, 132, 137, 140, 142, 150, 159, 167, 170, 171, 172, 172, 174, 175, 172, 172, 174, 174, 169, 165, 156, 142, 131, 121, 112, 104, 102, 99, 99, 95, 88, 84, 84, 87, 89, 88, 85, 86, 89, 91, 91, 94, 101, 110, 121, 135, 145, 149, 156, 165, 171, 175, 177, 182, 193, 204, 208, 210, 215, 222, 228, 226, 222, 220)

Почему модели ARMA, действующие на первых различиях данных, отличаются от соответствующих моделей ARIMA?

for (p in 0:5)
{
for (q in 0:5)
{
#data.arma = arima(diff(data), order = c(p, 0, q));cat("p =", p, ", q =", q, "AIC =",  data.arma$aic, "\n");
data.arma = arima(data, order = c(p, 1, q));cat("p =", p, ", q =", q, "AIC =", data.arma$aic, "\n");
}
}

То же самое с Arima(data,c(5,1,4)) и Arima(diff(data),c(5,0,4)) в пакете прогнозов. Я могу получить желаемую консистенцию с

auto.arima(diff(data),max.p=5,max.q=5,d=0,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);
auto.arima(data,max.p=5,max.q=5,d=1,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);

но похоже, что обладатель минимальной оценки AIC для этих данных не был учтен алгоритмом auto.arima; следовательно, неоптимальный выбор ARMA (3,0) вместо ARMA (5,4), действующий на первые различия. Связанный с этим вопрос заключается в том, насколько две оценки AIC должны отличаться, прежде чем одна будет считать, что одна модель лучше, чем другая, имеет мало общего с программированием - наименьший владелец AIC должен, по крайней мере, рассматриваться / сообщаться, даже если 9 коэффициентов могут быть слишком много для прогноза из 100 наблюдений.

Мои вопросы по R:

1) Векторизованная версия двойного цикла, чтобы она работала быстрее?

2) Почему arima(5,1,4) действие на данные отличается от действия arma(5,4) на первых различиях данных? О каком из них сообщать?

3) Как мне отсортировать вывод AIC так, чтобы на первом месте был меньший?

Спасибо.


person andrekos    schedule 02.11.2009    source источник


Ответы (1)


Здесь поднимается много вопросов и проблем. Я постараюсь ответить на каждый из них.

Arima() - это просто оболочка для arima(), поэтому она даст ту же модель.

arima () обрабатывает модель с дифференцированием, используя диффузный априор. Это не то же самое, что просто различать данные перед подгонкой модели. Следовательно, вы получите несколько разные результаты от arima(x,order=c(p,1,q)) и arima(diff(x),order=c(p,0,q)).

auto.arima() обрабатывает разность напрямую и не использует предварительную диффузию при подгонке. Таким образом, вы получите одинаковые результаты от auto.arima(x,d=1,...) и auto.arima(diff(x),d=0,...)

auto.arima() имеет аргумент max.order, который определяет максимум p + q. По умолчанию max.order=5, поэтому ваш arima(5,1,4) не будет рассматриваться. Увеличьте max.order, если хотите рассматривать такие большие модели (хотя я бы не рекомендовал это).

Вы не можете векторизовать цикл, включающий нелинейную оптимизацию на каждой итерации.

Если вы хотите отсортировать вывод, вам нужно сохранить его в data.frame, а затем отсортировать по соответствующему столбцу. Код в настоящее время просто выводит результаты по ходу, и ничего не сохраняется, кроме самой последней установленной модели.

person Rob Hyndman    schedule 03.11.2009
comment
Спасибо, Роб. При добавлении max.order = 9 AIC для ARIMA (5,1,4) / ARMA (5,4) равен 1e + 20, что бы это ни значило, поэтому он по-прежнему выбирает ARIMA (3,1,0) / ARMA ( 3,0) как лучший. - person andrekos; 03.11.2009
comment
auto.arima () возвращает AIC 1e20 (т.е. 10 ^ 20), когда есть проблемы с подгонкой. Это может быть проблема сходимости, или параметры могут быть близки к границам стационарности и обратимости. Они сигнализируют о том, что у модели могут быть проблемы и ее лучше не использовать. - person Rob Hyndman; 03.11.2009
comment
Как всегда, Роб! Спасибо за ваш вклад в stackoverflow! - person griffin; 03.11.2009
comment
Ok. AIC различаются почти на 1. Графики для ARMA (3,0) и ARMA (5,4) выглядят одинаково. Любой, у кого есть разум, выберет первое, а все, что основано исключительно на AIC, предложит второе. Возможно, аналогичный или даже более интересный пример побудил Лео Бреймана сказать, что автоматических методов выбора модели следует избегать или, если их использование абсолютно неизбежно, следует внимательно изучить ... AIC может ввести в заблуждение. Arima (diff (data), c (5,0,4)) plot (arima.sim (n = 630, list (ar = c (0,3999, -0,4881, 0,0388, -0,2539, 0,5874), ma = c (0,7173) , 0,7831, 0,7173, 0,9999)), sd = sqrt (7,436))) - person andrekos; 04.11.2009
comment
@Морской узел; только если вы используете AIC в том смысле, что чем ниже, тем лучше. Модели с разницей в 2 единицы AIC по существу эквивалентны по степени посадки относительно сложности. Ничего особенного я бы не прочитал в моделях, отличающихся почти на 1 по АПК. Если бы я хотел одну модель, я бы выбрал более простую модель. Если бы я занимался усреднением моделей, я мог бы оставить обе модели и рассматривать их как две разные модели с одинаковым уровнем экономии. В конце концов, все модели неправильные ... - person Gavin Simpson; 22.09.2010
comment
@ Гэвин. Я прочитал ваш комментарий только сейчас. Я согласен с вами, хотя Чатфилд написал это о разнице в 4 единицы AIC, а другие писали, что статистики еще не пришли к согласию, какие различия достаточно велики, чтобы игнорировать более простую модель. Случай почти с одним был упомянут коллегами Акаике в книге, в которой есть специальный раздел, посвященный использованию статистики AIC. Существуют также тесты на то, является ли разница между такой статистикой статистически значимой ... Мне интересны ваши отзывы и я могу дать вам свои ... Мы можем обсудить это далее по электронной почте, когда позволит время ... - person andrekos; 25.04.2011