r - 多个 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"))
解决方案
您可以使用下面的代码将数据集转换为整洁的格式,为 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)
推荐阅读
- makefile - 创建仅从命令行传递的变量
- javascript - IE浏览器在显示微调器时对服务器端代码进行ajax调用时阻止UI
- apache-spark - spark如何将mongo数据读取到json字符串?对架构没有用处
- angular - IONIC 4 - 角度路由参数
- javascript - 如何使用函数获得数组的平均值?
- swift - Cordova 自定义 URL 方案在 IOS 上不起作用(不支持的 URL)
- javascript - 如果在 Google 脚本中其他
- javascript - 有没有办法在 document.write 中编写和 i/else 语句?
- google-cloud-platform - google云平台的kubernetes引擎镜像授权过程中如何删除添加的attestation
- python - 在没有 Internet 的 Linux 上安装 Python 包和依赖项