Вопрос

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, чтобы меньшие значения были первыми?

Спасибо.

Это было полезно?

Решение

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

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, а затем отсортировать по соответствующему столбцу.В настоящее время код просто выдает результаты по ходу работы, и ничего не сохраняется, за исключением самой последней установленной модели.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top