首页 > 解决方案 > 多个 ARIMA 和 VECM 按组

问题描述

我想同时执行多个 ARIMA 和 VECM。

具体来说,我想要每个“部门”的时间序列,从 2007 年第一季度到 2018 年第四季度。

我试图用 for 循环来做,但它不能正常工作。

是否有特定的功能来创建这种结果?

数据

structure(list(Sector = c("Administraci<U+00F3>n P<U+00FA>blica", 
"Administraci<U+00F3>n P<U+00FA>blica", "Administraci<U+00F3>n P<U+00FA>blica", 
"Administraci<U+00F3>n P<U+00FA>blica", "Agropecuaria", "Agropecuaria", 
"Agropecuaria", "Agropecuaria", "Alquiler de Viviendas", "Alquiler de Viviendas", 
"Alquiler de Viviendas", "Alquiler de Viviendas", "Comercio", 
"Comercio", "Comercio", "Comercio", "Comunicaciones", "Comunicaciones", 
"Comunicaciones", "Comunicaciones", "Construcci<U+00F3>n", "Construcci<U+00F3>n", 
"Construcci<U+00F3>n", "Construcci<U+00F3>n", "Electricidad, Gas y Agua", 
"Electricidad, Gas y Agua", "Electricidad, Gas y Agua", "Electricidad, Gas y Agua", 
"Explotaci<U+00F3>n de Minas y Canteras", "Explotaci<U+00F3>n de Minas y Canteras", 
"Explotaci<U+00F3>n de Minas y Canteras", "Explotaci<U+00F3>n de Minas y Canteras", 
"Hoteles, Bares y Restaurantes", "Hoteles, Bares y Restaurantes", 
"Hoteles, Bares y Restaurantes", "Hoteles, Bares y Restaurantes", 
"Intermediaci<U+00F3>n Financiera, Seguros y Otras", "Intermediaci<U+00F3>n Financiera, Seguros y Otras", 
"Intermediaci<U+00F3>n Financiera, Seguros y Otras", "Intermediaci<U+00F3>n Financiera, Seguros y Otras", 
"Manufactura", "Manufactura", "Manufactura", "Manufactura", "Otros Servicios", 
"Otros Servicios", "Otros Servicios", "Otros Servicios", "Servicios de Ense<U+00F1>anza", 
"Servicios de Ense<U+00F1>anza", "Servicios de Ense<U+00F1>anza", 
"Servicios de Ense<U+00F1>anza", "Servicios de Salud", "Servicios de Salud", 
"Servicios de Salud", "Servicios de Salud", "Transporte y Almacenamiento", 
"Transporte y Almacenamiento", "Transporte y Almacenamiento", 
"Transporte y Almacenamiento"), Fecha = c("2007 Q1", "2007 Q2", 
"2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", 
"2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", 
"2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", 
"2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", 
"2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", 
"2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", 
"2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", 
"2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", 
"2007 Q3", "2007 Q4", "2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4", 
"2007 Q1", "2007 Q2", "2007 Q3", "2007 Q4"), PIB = c(10305185296.03, 
11271643560.5347, 12098530196.9999, 16713325912.2845, 24472582625.9992, 
25317947227.8876, 19847850207.0073, 25327489432.7455, 26655734015.1105, 
27434842375.117, 28384597142.3195, 29605364776.5822, 29003307533.2502, 
31486914082.706, 32956584613.8957, 38782177503.5912, 7270504656.88951, 
7418832680.51211, 8042405079.88414, 8335496341.28287, 34985837388.9214, 
37454607388.9239, 38355946491.0166, 40468340639.2155, 6745860903.25905, 
7008427188.3676, 7716448322.6911, 7577439666.14092, 7482109661.40208, 
8927736668.0929, 6753069442.04506, 5335570076.69075, 33170696094.6616, 
28130217096.5318, 27979455745.9348, 27635295391.0852, 14103359181.4247, 
13593532712.1383, 14488043582.0877, 15700283110.7247, 55075166803.6152, 
57775991400.8368, 59842233144.2308, 63996933498.6379, 28508327005.1848, 
28910333966.9294, 29465238026.753, 29983486174.9247, 10757709668.6044, 
10959059500.1544, 11626287995.6996, 12835248484.4039, 7896828222.42626, 
8491939213.95125, 8533061356.54159, 9075779808.57032, 23097019204.2543, 
24331042684.1632, 26951726625.0964, 29165061280.4721), Recaudacion = c(11040000, 
13850000, 20440000, 18020000, 33150000, 40850000, 50970000, 43180000, 
184990000, 245390000, 218460000, 206090000, 2066170000, 1857580000, 
1.911e+09, 1894070000, 1127110000, 852220000, 864970000, 1004680000, 
220140000, 257690000, 253800000, 233630000, 43560000, 50360000, 
46650000, 68380000, 9410000, 14150000, 15250000, 19370000, 1024400000, 
981650000, 709390000, 638460000, 1028600000, 766930000, 700950000, 
709530000, 2295170000, 2579500000, 2614010000, 2814790000, 533580000, 
617030000, 617140000, 661190000, 5200000, 6660000, 7230000, 6870000, 
7730000, 12920000, 15570000, 15380000, 446190000, 529540000, 
551330000, 567160000)), row.names = c(NA, -60L), class = c("tbl_df", 
"tbl", "data.frame"))

标签: rarima

解决方案


您可以使用下面的代码将数据集转换为整洁的格式,为 arima 模型创建一个函数,然后迭代所有现有系列。您可以将 VECM 添加到该函数或更改函数内的模型。

library(tidyverse)
library(zoo)
library(forecast)

df %>%
  pivot_longer(-c(Sector,Fecha), names_to = 'Measure', values_to = 'Value') %>%
  mutate(Fecha = as.Date(as.yearqtr(Fecha))) %>%
  unite('Key', c(Sector,Measure), sep = '@') %>%
  arrange(Key) -> df #tidy format

unique_series <- unique(df$Key) #unique number of series 

Model <- function(i) {

  df %>% 
    filter(Key == unique_series[i]) -> Item #filter one single series

  #perform auto.arima
  model <- auto.arima(ts(Item$Value, start = Item$Fecha[1], frequency = 4))

}

lapply(1:length(unique_series), Model)

推荐阅读