多个 ARIMA 和 VECM 按组
Multiple ARIMA and VECM by group
我想同时进行多个ARIMA和VECM。
具体来说,我想要每个 "Sector" 的时间序列,从 2007Q1 到 2018Q4。
我尝试使用 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"))
您可以使用下面的代码将您的数据集转换为整洁的格式,为 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)
我想同时进行多个ARIMA和VECM。
具体来说,我想要每个 "Sector" 的时间序列,从 2007Q1 到 2018Q4。
我尝试使用 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"))
您可以使用下面的代码将您的数据集转换为整洁的格式,为 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)