Run Forecasting model with multiple Dependent and Independent variables in R

I have a data set with 7 features including the date column where my dependent variables are NORTH and YORKSANDTHEHUMBER and the rest are independent variables. I want to automate the process where I take my first dependent feature NORTH and run it against all the independent variables in a univariate manner so that the first model gives me the result for NORTH and x1, second for NORTH and x2 and so on via using for loop but I couldn't make the sense. Can anyone please guide me in this?

Data:

structure(list(Date = structure(c(289094400, 297043200, 304992000, 
312854400, 320716800, 328665600, 336614400, 344476800, 352252800, 
360201600, 368150400, 376012800, 383788800, 391737600, 399686400, 
407548800, 415324800, 423273600, 431222400, 439084800, 446947200, 
454896000, 462844800, 470707200, 478483200, 486432000, 494380800, 
502243200, 510019200, 517968000, 525916800, 533779200, 541555200, 
549504000, 557452800, 565315200, 573177600, 581126400, 589075200, 
596937600, 604713600, 612662400, 620611200, 628473600, 636249600, 
644198400, 652147200, 660009600, 667785600, 675734400, 683683200, 
691545600, 699408000, 707356800, 715305600, 723168000, 730944000, 
738892800, 746841600, 754704000, 762480000, 770428800, 778377600, 
786240000, 794016000, 801964800, 809913600, 817776000, 825638400, 
833587200, 841536000, 849398400, 857174400, 865123200, 873072000, 
880934400, 888710400, 896659200, 904608000, 912470400, 920246400, 
928195200, 936144000, 944006400, 951868800, 959817600, 967766400, 
975628800, 983404800, 991353600, 999302400, 1007164800, 1014940800, 
1022889600, 1030838400, 1038700800, 1046476800, 1054425600, 1062374400, 
1070236800, 1078099200, 1086048000, 1093996800, 1101859200, 1109635200, 
1117584000, 1125532800, 1133395200, 1141171200, 1149120000, 1157068800, 
1164931200, 1172707200, 1180656000, 1188604800, 1196467200, 1204329600, 
1212278400, 1220227200, 1228089600, 1235865600, 1243814400, 1251763200, 
1259625600, 1267401600, 1275350400, 1283299200, 1291161600, 1298937600, 
1306886400, 1314835200, 1322697600, 1330560000, 1338508800, 1346457600, 
1354320000, 1362096000, 1370044800, 1377993600, 1385856000, 1393632000, 
1401580800, 1409529600, 1417392000, 1425168000, 1433116800, 1441065600, 
1448928000, 1456790400, 1464739200, 1472688000, 1480550400, 1488326400, 
1496275200, 1504224000, 1512086400, 1519862400, 1527811200, 1535760000, 
1543622400, 1551398400, 1559347200, 1567296000, 1575158400, 1583020800, 
1590969600, 1598918400, 1606780800, 1614556800, 1622505600, 1630454400, 
1638316800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Industrialproduction = c(8.2, 8.79, 0.94, 1.53, -3.18, -8.66, 
    -8.96, -11.93, -8.14, -4.5, 1.53, 2.06, 2.39, 2.02, 2.01, 
    1.68, 2.16, 2.15, 3.77, 5.95, 3.58, 0.81, -1.58, -1.72, 3.62, 
    9.78, 8.51, 3.49, 1.97, -1.02, 1.92, 6.13, 3.87, 3.54, 2.76, 
    4.19, 4.73, 4.84, 6.64, 3.88, 2.05, 1.36, 0.53, 1.47, 1.61, 
    3.22, -1.45, -2.76, -3.83, -5.06, -4.01, -1.76, -0.27, -0.82, 
    2.23, 0.69, 1.38, 2.07, 2.32, 4.1, 4.61, 5.68, 6.13, 5.91, 
    2.85, 1.66, 1, 0.37, 2.52, 1.26, 1.24, 1.48, 0.37, 2.24, 
    2.7, 4.38, 7.6, 3.89, 0.84, -0.82, -0.46, 5.61, 9.48, 5.06, 
    1.95, 2.1, 1.08, 6.27, 1.46, 2.28, 3.21, 3.37, 12.94, -1.06, 
    -2.07, -6.22, -5.19, 6.65, 6.78, 4.35, -2.69, -1.31, -2.08, 
    3.44, -3.08, -0.92, -1.62, -0.91, 8.32, 2.57, 4.33, 2.44, 
    1.52, -1.3, -4.94, -3.97, -3.59, -1.83, 1.77, -1.86, -4.86, 
    -5.07, -7.55, -5.37, -0.33, -1.2, -0.11, -1.11, -8.39, -5.4, 
    -5.52, -4.16, 0.12, -0.7, -0.58, -0.59, 0.48, 3.87, 5.29, 
    7.91, 7.21, -0.45, -2.23, -1.86, 4.19, 5.9, 5.94, 2.45, 0, 
    -0.75, -1.08, 1.63, -3.28, -0.22, 3.49, 1.07, 1.53, 5.3, 
    4.21, 6.14, 10.24, 2.26, 0.71, -1.3, -8.9, -12.36, -5.02, 
    -2.83, 3.76, 9.86, 1.9, 0.94), Householdconsumption = c(30.09, 
    32.53, 33.35, 35.23, 37.18, 37.59, 38.89, 39.82, 41.56, 42.7, 
    43.74, 45.03, 46.19, 46.95, 48.29, 49.84, 51.26, 52.15, 53.5, 
    54.36, 55.4, 56.7, 57.05, 58.88, 60.09, 61.44, 63.27, 64.74, 
    66.63, 68.35, 69.55, 70.81, 72.3, 74.29, 76.65, 78.82, 81.51, 
    83.81, 86.53, 88.4, 90.29, 92.46, 93.95, 95.99, 97.85, 100.83, 
    102.42, 104.05, 106.08, 107.79, 109.33, 110.63, 111.71, 113.52, 
    114.9, 116.02, 118.31, 119.4, 122.27, 124.05, 125.13, 125.99, 
    127.59, 129.19, 130.16, 132.29, 135.06, 136.61, 139.34, 142.14, 
    144.59, 146.95, 149.43, 151.71, 155.34, 156.37, 158.39, 160.69, 
    164.47, 164.41, 167.54, 169.48, 170.09, 172.51, 176.26, 177.61, 
    179.44, 180.28, 182.96, 184.01, 186.83, 186.34, 188.79, 190.18, 
    191.94, 194.56, 196.46, 198.86, 201.75, 203.09, 205.24, 208.26, 
    210.84, 213.9, 216.18, 217.54, 220.61, 222.9, 223.67, 227.66, 
    230.62, 232.57, 234.8, 237.82, 241.91, 244.47, 248.84, 248.63, 
    248.14, 243.9, 241.46, 239.04, 240.72, 243.03, 241.87, 248, 
    249.95, 251.91, 254.92, 254.81, 257.17, 261.11, 262.28, 265.29, 
    266.74, 271.42, 274.28, 277.61, 282.48, 282.94, 285.76, 290.21, 
    292.88, 294.9, 296.07, 299.14, 302.58, 302.82, 309.63, 313.2, 
    318.64, 320.87, 323.41, 325.57, 326.56, 329.67, 335.95, 337.61, 
    341.08, 345.09, 346.16, 350.18, 350.23, 347.89, 339.85, 270.86, 
    325.65, 320.28, 311.3, 341.24, 354.61, 361.47), Investmentgrowth = c(17.3, 
    22.73, 25.8, 29.99, 21.59, 15.49, 11.11, 6.04, 4.23, 4.42, 
    4.28, 3.51, 6.53, 8.81, 10.52, 12.63, 14.6, 8.04, 7.42, 10.72, 
    11.15, 16.11, 15.45, 11.36, 18.41, 8.32, 8.99, 8.18, 0.86, 
    5.04, 9.07, 14.27, 11.11, 19.61, 23.14, 19.47, 27.16, 24.6, 
    17.45, 16.17, 20.57, 17.01, 17.76, 15.36, 8.28, 7.05, 2.92, 
    2.83, -3.08, -4.32, -7.48, -6.69, -3.71, -4.64, -3.87, -4.88, 
    -1.72, -0.38, 1.97, 4.65, 2.84, 2.98, 3.68, 2.88, 0.69, 3.5, 
    4.91, 5.66, 11.3, 13.85, 10.87, 4.01, -5.63, -8.06, -3.81, 
    3.94, 10.74, 9.14, 3.83, 3.36, 3.29, 3.24, 7.59, 3.43, 7.05, 
    13.14, 1.12, 7.68, 4.22, 1.34, 9.27, 0.78, 0.66, -1.52, 4.17, 
    12.34, 11.74, 5.2, 1.89, -1.56, 2.26, 5.89, 5.79, 4.84, 3.44, 
    7.15, 7.27, 7.31, 6.11, 5.7, 8.15, 6.96, 7.79, 10.05, 2.71, 
    9.61, 4.63, 2.72, 1.13, -6.1, -8.98, -14.36, -9.8, -11.41, 
    -3.13, 1.28, 3.81, 9.18, 1.62, 2.05, 2.14, 2.03, 7.32, 3.88, 
    0.09, 3.44, -1.27, 6.8, 10.41, 5.73, 12.93, 7.89, 6.8, 7.92, 
    8.2, 9.32, 6.18, 7.39, 5.22, 6.07, 9.44, 5.64, 6.8, 7.2, 
    4.77, 6.83, 3.74, 1.63, 2.59, 1.17, 4.39, 3.28, 3.78, 2.18, 
    -1.93, -19.78, -7.51, -2.54, -0.99, 23.33, 6.54, 4.25), ConsumerPriceIndex = c(24.88, 
    25.94, 27.55, 28.28, 29.79, 31.39, 31.92, 32.55, 33.55, 34.94, 
    35.55, 36.48, 37.02, 38.14, 38.14, 38.45, 38.73, 39.54, 40.1, 
    40.49, 40.76, 41.57, 41.99, 42.35, 43.25, 44.46, 44.46, 44.74, 
    45.06, 45.58, 45.81, 46.42, 46.88, 47.49, 47.72, 48.14, 48.44, 
    49.43, 49.83, 50.33, 50.82, 52.02, 52.42, 53.11, 53.91, 55.6, 
    56.69, 57.09, 57.59, 60.27, 60.67, 61.27, 61.67, 62.56, 62.56, 
    62.86, 63.16, 64.05, 64.45, 64.35, 64.55, 65.35, 65.45, 65.64, 
    66.24, 67.04, 67.34, 67.63, 68.03, 68.63, 68.93, 69.13, 69.13, 
    69.82, 70.22, 70.32, 70.7, 71.3, 71.5, 71.8, 71.9, 72.3, 
    72.4, 72.6, 72.3, 72.9, 73.1, 73.2, 73, 74.1, 74.1, 74, 74.1, 
    74.6, 74.8, 75.2, 75.3, 75.4, 75.9, 76.2, 76.1, 76.6, 76.7, 
    77.4, 77.5, 78.1, 78.6, 78.9, 78.9, 80.1, 80.5, 81.3, 81.4, 
    82, 81.9, 83, 83.4, 85.2, 86.1, 85.5, 85.8, 86.7, 87.1, 88, 
    88.7, 89.5, 89.8, 91.2, 92.2, 93.3, 94.4, 95.1, 95.4, 95.5, 
    96.5, 97.6, 98.1, 98.3, 99.1, 99.6, 99.7, 100.2, 100.3, 100.1, 
    99.7, 100.2, 100.2, 100.3, 100.2, 100.6, 101.1, 101.9, 102.7, 
    103.5, 104.3, 105, 105.1, 105.9, 106.6, 107.1, 107, 107.9, 
    108.4, 108.5, 108.6, 108.8, 109.2, 109.4, 109.7, 111.4, 112.4, 
    114.7), NORTH = c(4.06976744186047, 5.51675977653633, 7.2799470549305, 
    4.75015422578655, 4.59363957597172, 3.15315315315317, 1.2008733624454, 
    -0.377562028047452, -0.108283703302655, 0.650406504065032, 
    0.969305331179318, 0.106666666666688, 3.09003729355352, 2.11886304909562, 
    2.32793522267207, 5.68743818001977, -1.46934955545156, 3.95611702127658, 
    5.19438987619354, -0.0912012507600199, 2.81677896109541, 
    3.97412590369087, 1.30118326353028, 3.31553807249226, 1.32872294960955, 
    2.93700394923507, 0.908853875665812, 1.81241002546971, -1.3414545718222, 
    4.81772747317361, -3.4743890895067, 4.63823913990992, 0.857370960463727, 
    1.78620594713658, 0.527472527472524, -4.05973562947765, -0.136726966764838, 
    3.16657890117607, 5.95161125667812, 8.01002055498458, 10.5501040737437, 
    13.4138468987035, 2.93371279497212, 8.84291046495554, -6.87764606265876, 
    2.90741287990725, 3.71548486856639, 1.23317430567388, -1.1153443739474, 
    4.31313207880924, -1.64273763383666, 0.751373343751978, -3.21877014345816, 
    1.16314882913623, -3.59065232516701, -4.65283582701413, 4.98489115166134, 
    3.18459755147199, -3.72875180849018, 2.20137289784552, -4.22488416879167, 
    -0.706371260732776, -2.33320725244584, -2.77596063540517, 
    9.48636128308308, -2.15172116987927, -5.71766285746257, 1.92271571537407, 
    0.655934629757954, 4.01517293049256, -2.89270965830984, 3.910032505864, 
    -1.31616434600239, 1.51533020314829, 3.09793915477058, 1.00146317751519, 
    -0.516295759142123, 4.36356154298765, -0.254418667464494, 
    -1.38015492270122, -0.375369475589906, 3.79511767246943, 
    1.67693295616696, 0.197127124553074, -1.01758464617007, 5.70477696100394, 
    -1.37564670926045, 1.39335708665185, 2.29473337483174, -1.40489357721877, 
    10.7514355294201, -0.403985348024547, -0.0106181613732362, 
    10.6504339189417, 7.72602065226992, 6.66622841015428, 7.3618861388054, 
    7.20852539277177, 7.17954849482943, 5.47999408979134, 9.96115783870405, 
    6.960515961579, 4.82626274289161, -0.428385428540776, 1.6283388103162, 
    2.07440844957785, -0.707412409361252, -4.9247119657169, 4.3311229522328, 
    2.53158682305453, -0.8800288960527, 2.40275362264064, 0.67520264383003, 
    3.97711266595697, 0.00749650524863867, -0.990038901876062, 
    -0.63991866618197, -2.00199671222057, -5.15098853828302, 
    -3.65317386916235, -4.67277715297035, -0.564594703469009, 
    3.29526766976492, 0.0888482310529472, -0.524228981506815, 
    3.04012050839788, -1.53185447929528, -0.338917708381546, 
    -2.5450727924491, 3.36238295093309, -0.918735392055365, -0.766840492430499, 
    -0.767135363240273, 0.0468961039030733, 1.51618073336643, 
    -2.02356670927575, -1.11584500803018, 2.45568937824186, 0.989863990072745, 
    -0.4214032191629, 2.8219393653178, 4.51474479784726, -2.49049271581373, 
    -0.41346860604498, 3.13864420514751, -0.0877964623534655, 
    -0.674347043417658, -0.143267961613368, -0.243406512930108, 
    0.0402054219496719, 0.12912750657269, 0.168664845016241, 
    -0.713623226415894, 1.49163339466038, 1.57747101133233, -2.10536689354583, 
    3.12980292320487, -0.90833324273064, -1.71375697178543, 0.582188469928239, 
    2.89692448021907, 0.0768238907010953, -1.53392147948349, 
    1.23622644511851, -0.0506227154778281, 0.327869614383542, 
    2.62019966395382, 3.48629495563575, 0.593740862165774, 4.09560684327741, 
    2.32207959691005, 0.506809670097958), YORKSANDTHEHUMBER = c(4.0121120363361, 
    5.45851528384282, 9.52380952380951, 6.04914933837431, 3.03030303030299, 
    5.42099192618225, 2.78993435448577, -0.53219797764768, 1.97966827180309, 
    1.15424973767052, 0.466804979253115, -1.96179659266907, 2.42232754081095, 
    0.719794344473031, -0.306278713629415, 3.37941628264209, 
    2.74393263992076, 3.91920555341303, 1.91585099967527, 0.892125625853447, 
    2.91888477848958, 3.78293078507868, 0.109815847271484, 6.83486625601216, 
    0.722691730511011, 3.56008625759656, -0.227160867754524, 
    2.69419041475355, -1.17134094520194, 2.78546324684064, 1.01487759630426, 
    1.54843356139717, 4.15602836879435, 4.43619773934357, -0.309698451507728, 
    -1.45519947678222, -1.09839057574248, 9.08267346664877, 11.8913598474363, 
    13.9511229623114, 9.71243848306475, 7.66524473371739, 6.46801731884651, 
    -2.26736490763654, -4.35729847494552, -2.93870179974964, 
    -7.72353426221536, -7.01127302722023, 2.02543627323513, 2.51245245873873, 
    0.712134856164617, -2.74951902189779, 3.20525370229387, -2.17225212432703, 
    0.304311135936791, -5.21962007478405, -1.22771231792975, 
    5.62676205566459, -0.0988236572110239, 0.865912760888606, 
    -3.71050647202427, 1.5475703474865, -3.43233328040058, -2.86288061069106, 
    -0.551968808874026, 2.05442655433966, 0.388675938226524, 
    -2.60493926554792, -2.23312255163324, 5.04817095211292, 1.43656632546456, 
    2.53687507970646, -2.37376845704496, 4.95419269721737, 2.5486061891899, 
    -0.64046817419928, 1.75846231104579, 0.542834308795226, -0.322606591645488, 
    -2.67961743436791, 3.57498650723638, 2.89743475977992, 1.28567849851333, 
    1.828392232888, -0.335580970541442, 5.34860062451308, -2.98213938289875, 
    3.55468980520775, 2.76514398982056, 3.45832186518539, 1.32470422187813, 
    2.79428923624948, 3.8093136923264, 9.02544568216825, 7.65854560247412, 
    11.0775256253873, -0.658987130155868, 10.726463566155, 5.35747018223358, 
    4.66387144397987, 5.14763674355188, 10.581371911713, 3.46926043870116, 
    -0.000369065205607915, 0.924675325682334, 3.681119585314, 
    -0.0731638011738147, 0.690177922935143, 1.33427941484383, 
    2.65734876034112, 1.62515008951355, 1.48038293242949, 0.494192527588077, 
    2.39510739408179, 0.818557817036399, -1.1083492547105, -1.89465779498896, 
    -3.74953204588813, -3.7238074999174, -4.9788025925358, -4.65464963206228, 
    3.34588197167384, 2.20886725349025, 1.99954661835316, -0.777545762347822, 
    3.58681336123701, -2.96757202302368, -3.36310924643208, 2.01483012871867, 
    2.4154475314586, -0.642314624781054, -2.0920093049768, -1.73904001349183, 
    1.69071701857513, 0.201962934561265, -2.66472457335063, 0.323680874793625, 
    1.37879437405697, 3.26467995053582, 2.21645486418079, -0.646736928898328, 
    2.06516965491332, 1.8250141624007, -1.68545096699093, -0.818973277015041, 
    4.05215303886115, -1.16233786449552, -1.56747999678074, 0.67708495662531, 
    2.92754908797974, 1.50505329502891, -1.12667258046976, -0.765034978617734, 
    2.67854615526131, -0.306294171526678, 0.175047038539941, 
    1.56451236885344, 0.618844724791642, 3.34585295985361, -1.76420421213768, 
    -0.079420811764984, 1.56942028744185, 0.407910173531572, 
    -0.268243129544691, 2.57107118459526, -0.758721256899304, 
    3.03713057699041, 2.68699850192726, 1.88666482868311, 4.78697689266296, 
    2.43248653386118, 1.27252711337855)), row.names = c(NA, -172L
), class = "data.frame")

Code:

library(tidyverse)
library(GGally)
library(Amelia)
library(inspectdf)
library(ggcorrplot)
library(ggplot2)
library(reshape2)
library(tseries)
library(dplyr)
# ARDL MODELING AND FORECASTING

in_sampleARDL <- data %>% 
  dplyr::filter(Date < '2020-03-01')

out_sampleARDL <-data %>% 
  dplyr::filter(Date >= '2020-03-01')

# Model
auto_ardl(NORTH~Householdconsumption,
          data = in_sampleARDL, max_order = 4, selection = 'BIC')
pred1 <-forecast(ardlDlm(formula =  NORTH ~ diff(Householdconsumption),
                       data = in_sampleARDL, p =3)
               , x =out_sampleARDL$NORTH, h = 4)
error1 = out_sampleARDL$NORTH[1:2]- pred1[["forecasts"]]
mean(error1^2)


auto_ardl(NORTH~Industrialproduction,
          data = in_sampleARDL, max_order = 4, selection = 'BIC')
pred2 <-forecast(ardlDlm(formula =  NORTH ~ Industrialproduction, 
                       data = in_sampleARDL, p =3)
               , x =out_sampleARDL$NORTH, h = 4)
error2 = out_sampleARDL$NORTH[1:4]- pred2[["forecasts"]]
mean(error2^2)

Could you please provide some precise information about the dataset(s) you are using an especially, which libraries are loaded?
E.g. where is out_sampleARDL coming from? Is the given data the variable in_sampleARDL? And in which libraries are the forecast, auto_ardl and ardlDlm function you use? I guess these are from forecast, ARDL and dLagM, but it would make sense if you could confirm this or specify the libraries.

hey, Yes I have edited the code please see it

Is the auto_ardl call necessary in this context? So do you want to see the output in each iteration, or could it be kept inside a data.frame or something?

Hey, I don't think that auto ardl is necessary. I am interested in getting the output for all the variations of the NORTH and YORKSANDTHEHUMBER with all the rest of the variables. A Data frame will be nice.

I feel like I am close here, but this is not quite correct. Why does this fail?

df <- data.frame(mtcars)
indepvars <- colnames(df[3:7])
summary <- data.frame()

for (i in 1:5){
model <- lm(mpg ~ indepvars[i], df)
summary[i,1] <- model$coefficients[1]
summary[i,2] <- model$coefficients[2]
}

colnames(summary) <- c("Intercept", "Slope")
summary

Well, I am afraid it might not be pretty nor fast, but with the code below you might have a starting point. The result is a list, containing the auto_ardl, forecast and error outputs. The names are according to the formula used.

library(tidyverse)
library(ARDL)
library(dLagM)

# ARDL MODELING AND FORECASTING
in_sampleARDL <- data %>% 
  filter(Date < '2020-03-01')

out_sampleARDL <-data %>% 
  filter(Date >= '2020-03-01')
# create the formulas
indep_vars <- expression(Industrialproduction,Householdconsumption,Investmentgrowth,ConsumerPriceIndex)
dep_vars   <- expression(NORTH,YORKSANDTHEHUMBER)
# formulae with diff()
formulae <- unlist(lapply(dep_vars, \(x) lapply(indep_vars, \(y) bquote(.(x)~diff(.(y))))))
# without diff()
formulae2 <- unlist(lapply(dep_vars, \(x) lapply(indep_vars, \(y) bquote(.(x)~.(y)))))

result <- vector('list', length = length(formulae))
names(result) <- formulae2
for (i in seq_along(formulae)){
  # auto_ardl
  result[[i]][[1]] <- auto_ardl(formula(formulae2[[i]]),
                                data = in_sampleARDL, max_order = 4, selection = 'BIC')
  # prediction
  result[[i]][[2]] <- forecast(ardlDlm(formula = formula(formulae[[i]]), data = in_sampleARDL, p = 3),
                               x = out_sampleARDL |> select(sub("\\s~.*", "", formula(formulae[[i]]))) |> pull(), h = 4)
  # error
  result[[i]][[3]] <- mean((out_sampleARDL |> select(sub("\\s~.*", "", formula(formulae[[i]]))) |> pull() |> (\(x) x[1:4])() - result[[i]][[2]][["forecasts"]])^2)
  
  # set names
  names(result[[i]]) <- c('auto_ardl','forecast','error')
}
#> Warning: The `x` argument of `as_tibble.matrix()` must have unique column names if `.name_repair` is omitted as of tibble 2.0.0.
#> Using compatibility `.name_repair`.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.

result[[1]]
#> $auto_ardl
#> $auto_ardl$best_model
#> 
#> Time series regression with "ts" data:
#> Start = 4, End = 164
#> 
#> Call:
#> dynlm::dynlm(formula = full_formula, data = data, start = start, 
#>     end = end)
#> 
#> Coefficients:
#>          (Intercept)           L(NORTH, 1)           L(NORTH, 2)  
#>              0.49194               0.11662               0.19177  
#>          L(NORTH, 3)  Industrialproduction  
#>              0.23848               0.07019  
#> 
#> 
#> $auto_ardl$best_order
#> [1] 3 0
#> 
#> $auto_ardl$top_orders
#>    NORTH Industrialproduction      BIC
#> 1      3                    0 860.0598
#> 2      3                    1 861.8509
#> 3      3                    2 866.6733
#> 4      3                    3 869.1412
#> 5      2                    1 870.4895
#> 6      2                    0 870.6690
#> 7      4                    4 873.3016
#> 8      2                    2 875.5567
#> 9      1                    0 880.4229
#> 10     1                    1 881.2820
#> 
#> 
#> $forecast
#> $forecasts
#> [1] 0.5361618 1.1387373 0.8677577 0.9860464
#> 
#> $call
#> forecast.ardlDlm(model = ardlDlm(formula = formula(formulae[[i]]), 
#>     data = in_sampleARDL, p = 3), x = pull(select(out_sampleARDL, 
#>     sub("\\s~.*", "", formula(formulae[[i]])))), h = 4)
#> 
#> attr(,"class")
#> [1] "forecast.ardlDlm" "dLagM"           
#> 
#> $error
#> [1] 2.581029

Created on 2022-08-18 by the reprex package (v2.0.1)

Let me know is this is somewhat helpful and if there are improvements you cannot handle by yourself.

Kind regards

1 Like

Hey, this is absolutely what I wanted to do, thanks a lot.

Hey, what if I wanted to add Rolling Origin in the code? I have built this code for the Arima model but how could I add this into this chuck so that every model output is cross-validated at the same time with the same ARDL variations you created? Please see this.

Code:

y = data

ourCall<- "predict(arima(x=data,order=c(1,0,0)),n.ahead=h)"

ourValue <- c("pred") 
returnedValues1 <- ro(y, h=4, origins = 68,
                      call=ourCall, value=ourValue)

You will have to adress this inside the loop, depending on the formula in the ith iteration. But I am not familiar with the function and the documentation says "This is a dangerous function", therefore it might be better to open a new request and see if there are people out here, which can help you in a better way.

I guess I could add it to the for loop, but I am absolutely not experienced in what the output should look like..

So let me know if you are interested to add it somehow into the code above (e.g. one call of ro() in every iteration with a call, depending on the formula used), or if you would like to open a new request. :slight_smile:

1 Like

Thanks a lot, yes please it would be of great help. Actually, I wanted to use Rolling origin for the validation purpose btw Arima and ARDL.

And I just re-run my code and got this error for the previous one you did: Error in is.constant(y) :
The 'list' object cannot be coerced to type 'double'

See this I did it for the Arima model:

AR model with h = 4 via Rolling Origin

x <- data2
x %<>% dplyr::select(-Date)
ourCall <- "predict(arima(x=data,order=c(1,0,0)),n.ahead=h)"
ourValue <- c("pred")

ar_ro_model_4 = apply(x, 2, function(x){ return(list(ro(x, h=4, origins = 68,
                                                 call=ourCall, value=ourValue)))}) 

ar_ro_model_4

With my code, I don't have any errors. So you might have changed something. Regardless - where does the order of your ARIMA process come from? Is the (1,0,0) order always used, or does it differ?

And I honestly do not really understand, how you would use an ARIMA to predict values of say NORTH, depending on another variable. As far as I know, you would use ARIMA only in a context of progressing time. So do you want to compare the forecasting results of the ardl Model with just the result of an ARIMA for NORTH? Or do you want to use the AR order (p) from the auto_ardl call as input for the ARIMA forecast and let the d and q be equal to 0?

Maybe you can add some additional informations about this, just so I know what you would like to do.

Edit:

I've seen you have edited your code in the answer above. What is data2? And why do you forecast all time series inside your variable data2 (which I guess is the original data, but I don't know for sure)? The ardl forecasts from above treat NORTH as dependent variable and the others as independent, influencing NORTH. The forecast in your code above is individually for every time series, so also for Industrialproduction etc.. I don't see where this is going anymore, so please consider reformulating your question(s) in a new post and clarify what exactly you want. You can refer to this post if you like, but I would recommend you to open a new request.

Okay, let me re-check the code to resolve the issue. The data I am working on consists of UK housing prices where we have 21 independent variables and all the regions as dependent variables. The Arima model is only for getting the outputs in a univariate manner such as it takes data from the UK Regions such as North and forecasts based on its previous entries. But for the ARDL I am interested in running a model that could predict the prices in the North based on all the factors such as macro-variables. Which we did achieve but I also want to validate my model based on the Rolling Origins. We can use the same ARDL variation not necessary auto_ardl:

auto_ardl(formula(formulae2[[i]]),
                                data = in_sampleARDL, max_order = 4, selection = 'BIC')

So, that's why I want to use Rolling origin in the ARDL function that you build so I won't have to do it manually like adding 1 more result like this result[[i]][[4]].

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.