5/5/2021
The following document contains the summary statistics and regression results for all econometric models developed to forecast quarterly commercial vehicle (CV) sales for the Mexican market. The present research was developed by Frost & Sullivan’s mobility research team for Navistar International Mexico.
The CV market was segmented into trucks (tractors, class 8+7, class 6 and class 5+4) and buses (class 8, class 7 and class 6+5). Data sources include INEGI, AMDA and ANPACT for CV historic sales, and INEGI, Banxico, BBVA and Citibanamex for macroeconomic datapoints.
Quarterly truck tractor sales have a relatively seasonal behavior and while the trend seems to be growing, it has been severely hit by both 2008-2009 crisis and by 2020 Covid-19 crisis
We have identified that the Industrial GDP is the best exogenous predictor for Truck Tractor sales. Other variables like Exchange rate and interest rate showed significant results while reproducing a linear model. Most importantly, there is a positive effect due to emission norm changes in sales specially in Q4 2019.
##
## Call:
## lm(formula = truck_tractor ~ macro[1:57, "PIB_Industrial"] +
## macro[1:57, "Tasa_de_Interes"] + macro[1:57, "Tipo_de_Cambio"] +
## macro[1:57, "emission_norm"], data = dat_qrt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1364.2 -552.6 -58.9 451.5 1611.8
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.708e+03 1.195e+03 -5.613 7.80e-07 ***
## macro[1:57, "PIB_Industrial"] 4.274e-03 5.489e-04 7.787 2.77e-10 ***
## macro[1:57, "Tasa_de_Interes"] 1.309e+02 5.604e+01 2.336 0.02339 *
## macro[1:57, "Tipo_de_Cambio"] -1.240e+02 3.676e+01 -3.374 0.00141 **
## macro[1:57, "emission_norm"] 2.187e+03 7.588e+02 2.883 0.00572 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 740.1 on 52 degrees of freedom
## Multiple R-squared: 0.6153, Adjusted R-squared: 0.5857
## F-statistic: 20.79 on 4 and 52 DF, p-value: 2.782e-10
While most of these variables are statistically significant for modeling truck tractor sales, there is some serious auto-correlation of residuals identified through the residuals tests. Best suited solution is to reduce the amount of exogenous explanatory variables and utilize an auto-regressive model.
##
## Breusch-Godfrey test for serial correlation of order up to 10
##
## data: Residuals
## LM test = 16.869, df = 10, p-value = 0.07732
## [1] "ARIMA Model for Truck Tractor Quarterly Sales Including Dynamic Exogenous regressors"
## Series: ts1
## Regression with ARIMA(0,0,1)(2,1,2)[4] errors
##
## Coefficients:
## ma1 sar1 sar2 sma1 sma2 PIB_Industrial Tipo_de_Cambio
## 0.5358 0.7176 -0.5118 -1.8597 0.8597 0.0029 -14.2182
## s.e. 0.1314 0.3431 0.1534 1.6778 1.6006 0.0006 41.4655
## emission_norm
## 1271.8624
## s.e. 524.7503
##
## sigma^2 estimated as 282358: log likelihood=-416.67
## AIC=851.34 AICc=855.53 BIC=869.08
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -81.56588 472.1375 376.4733 -7.005934 14.3639 0.4074969 0.1372444
The model presents a relatively good goodness of fit. Following we test its forecasting power.
We have identified that Gross Formation of Capital (Investment) has the highest impact on Truck Class 7 and 8 Sales in Mexico. Other correlated factors such as exchange rate and Interest Rate have a lower but significant effect. There is an observed effect of change of emission norm too.
##
## Call:
## lm(formula = truck_7.8 ~ macro[5:57, "Inversion"] + log(macro[5:57,
## "Tipo_de_Cambio"]) + macro[5:57, "Tasa_de_Interes"], data = dat_qrt[5:57,
## ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -925.65 -275.19 -87.39 214.09 1564.69
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.589e+02 9.672e+02 0.888 0.37885
## macro[5:57, "Inversion"] 1.009e-03 2.029e-04 4.973 8.49e-06 ***
## log(macro[5:57, "Tipo_de_Cambio"]) -9.863e+02 2.950e+02 -3.344 0.00159 **
## macro[5:57, "Tasa_de_Interes"] 1.222e+02 3.610e+01 3.386 0.00141 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 447.2 on 49 degrees of freedom
## Multiple R-squared: 0.4431, Adjusted R-squared: 0.409
## F-statistic: 12.99 on 3 and 49 DF, p-value: 2.286e-06
However, we have found that there is a certain level of auto correlation in this series, therefore we chose to remove certain macroeconomic variables and assign value to historic series through an auto-regressive model.
##
## Breusch-Godfrey test for serial correlation of order up to 10
##
## data: Residuals
## LM test = 16.069, df = 10, p-value = 0.09767
## [1] "ARIMA Model for Truck Class 7 & 8 Quarterly Sales Including Dynamic Exogenous regressors"
## Series: ts2
## Regression with ARIMA(2,0,0)(1,1,2)[4] errors
##
## Coefficients:
## Warning in sqrt(diag(x$var.coef)): NaNs produced
## ar1 ar2 sar1 sma1 sma2 Inversion Tasa_de_Interes
## 0.7909 -0.2765 0.2654 -1.3345 0.4452 9e-04 70.3327
## s.e. 0.1404 0.1778 NaN NaN NaN 3e-04 50.6420
## emission_norm
## 859.0896
## s.e. 273.2359
##
## sigma^2 estimated as 159103: log likelihood=-362.38
## AIC=742.76 AICc=747.37 BIC=759.78
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -130.3718 350.8274 264.0496 -7.45209 12.927 0.5427422 -0.1579696
##
## Call:
## lm(formula = truck_6 ~ macro[5:57, "Inversion"] + log(macro[5:57,
## "Tipo_de_Cambio"]), data = dat_qrt[5:57, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -194.672 -56.572 -9.982 60.422 280.114
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.618e+03 2.106e+02 -7.680 5.22e-10 ***
## macro[5:57, "Inversion"] 2.408e-04 4.418e-05 5.452 1.54e-06 ***
## log(macro[5:57, "Tipo_de_Cambio"]) 4.277e+02 6.230e+01 6.865 9.76e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 97.41 on 50 degrees of freedom
## Multiple R-squared: 0.6449, Adjusted R-squared: 0.6307
## F-statistic: 45.4 on 2 and 50 DF, p-value: 5.749e-12
##
## Breusch-Godfrey test for serial correlation of order up to 10
##
## data: Residuals
## LM test = 5.8191, df = 10, p-value = 0.8302
## [1] "ARIMA Model for Truck Class 6 Quarterly Sales Including Dynamic Exogenous regressors"
## Series: ts3
## Regression with ARIMA(3,1,1)(2,0,0)[4] errors
##
## Coefficients:
## ar1 ar2 ar3 ma1 sar1 sar2
## -0.9947 -0.8744 -0.7581 0.2285 -0.4730 -0.2994
## s.e. 0.1399 0.1363 0.1225 0.1979 0.1743 0.1727
## log.macro.5.57...Inversion...
## 639.3825
## s.e. 192.6394
##
## sigma^2 estimated as 11265: log likelihood=-313.51
## AIC=643.02 AICc=646.37 BIC=658.63
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 37.14706 97.79677 71.80863 5.681094 20.62524 0.6873653 -0.1513585
## Warning in forecast.forecast_ARIMA(arima3, xreg =
## as.matrix(data.frame(log(macro[58:80, : xreg contains different column names
## from the xreg used in training. Please check that the regressors are in the same
## order.
##
## Call:
## lm(formula = truck_4.5 ~ log(truck_6) + macro$Tipo_de_Cambio[5:57],
## data = dat_qrt[5:57, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -863.01 -281.98 -41.42 222.40 1491.69
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5222.42 773.60 6.751 1.47e-08 ***
## log(truck_6) -389.73 160.04 -2.435 0.01849 *
## macro$Tipo_de_Cambio[5:57] -82.02 24.80 -3.308 0.00175 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 499.8 on 50 degrees of freedom
## Multiple R-squared: 0.4485, Adjusted R-squared: 0.4264
## F-statistic: 20.33 on 2 and 50 DF, p-value: 3.463e-07
##
## Breusch-Godfrey test for serial correlation of order up to 10
##
## data: Residuals
## LM test = 24.472, df = 10, p-value = 0.006442
## [1] "ARIMA Model for Truck Class 4 & 5 Quarterly Sales Including Dynamic Exogenous regressors"
## Series: ts4
## Regression with ARIMA(1,1,0)(3,0,0)[4] errors
##
## Coefficients:
## ar1 sar1 sar2 sar3 truck_6
## -0.2607 0.0627 -0.2357 -0.0501 1.1120
## s.e. 0.1509 0.2048 0.1916 0.1872 0.3962
##
## sigma^2 estimated as 121679: log likelihood=-375.89
## AIC=763.78 AICc=765.64 BIC=775.48
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -67.85821 328.4878 249.0958 -5.87224 15.71599 0.7490912
## ACF1
## Training set -0.01998707
## Warning in forecast.forecast_ARIMA(arima4, xreg =
## as.vector(round(arima3_for$mean, : xreg contains different column names from the
## xreg used in training. Please check that the regressors are in the same order.
##### Testing Linear Regression f/ Bus Class 8
##
## Call:
## lm(formula = bus_8 ~ macro$Inversion[1:37], data = dat_qrt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -244.66 -103.72 -11.75 81.26 407.06
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.955e+02 3.004e+02 -2.315 0.02659 *
## macro$Inversion[1:37] 2.917e-04 8.413e-05 3.467 0.00141 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 150.8 on 35 degrees of freedom
## Multiple R-squared: 0.2557, Adjusted R-squared: 0.2344
## F-statistic: 12.02 on 1 and 35 DF, p-value: 0.00141
##
## Breusch-Godfrey test for serial correlation of order up to 7
##
## data: Residuals
## LM test = 14.898, df = 7, p-value = 0.03733
## Series: ts3
## Regression with ARIMA(1,0,1)(1,1,0)[4] errors
##
## Coefficients:
## ar1 ma1 sar1 macro.Inversion.1.37.
## -0.1224 0.0071 -0.5044 1e-04
## s.e. 0.5340 0.5146 0.1666 2e-04
## macro.emission_norm.1.37.
## 421.3920
## s.e. 113.4054
##
## sigma^2 estimated as 16166: log likelihood=-204.6
## AIC=421.21 AICc=424.44 BIC=430.19
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -43.85134 110.6048 82.44212 -21.14855 29.88025 0.7319316
## ACF1
## Training set -0.1845305
## Warning in forecast.forecast_ARIMA(arima1, xreg =
## as.matrix(data.frame(macro$Inversion[38:60], : xreg contains different column
## names from the xreg used in training. Please check that the regressors are in
## the same order.
##
## Call:
## lm(formula = bus_7 ~ macro$Inversion[1:37], data = dat_qrt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -454.56 -117.06 16.04 109.84 339.48
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.770e+03 3.546e+02 -4.991 1.65e-05 ***
## macro$Inversion[1:37] 7.847e-04 9.930e-05 7.902 2.72e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 178 on 35 degrees of freedom
## Multiple R-squared: 0.6408, Adjusted R-squared: 0.6306
## F-statistic: 62.44 on 1 and 35 DF, p-value: 2.723e-09
##
## Breusch-Godfrey test for serial correlation of order up to 7
##
## data: Residuals
## LM test = 12.285, df = 7, p-value = 0.09157
## Series: ts2
## Regression with ARIMA(0,0,1)(1,1,1)[4] errors
##
## Coefficients:
## ma1 sar1 sma1 xreg
## 0.4926 0.1236 -0.4593 6e-04
## s.e. 0.3389 1.3009 1.1293 5e-04
##
## sigma^2 estimated as 24144: log likelihood=-211.64
## AIC=433.27 AICc=435.5 BIC=440.76
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 30.5431 137.563 105.4671 1.405187 11.28541 0.5340517 0.07490987
##
## Call:
## lm(formula = bus_5.6 ~ macro$PIB.Transporte[1:37], data = dat_qrt[1:37,
## ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -120.92 -45.72 -13.09 34.35 251.40
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.453e+02 8.319e+01 -1.746 0.0896 .
## macro$PIB.Transporte[1:37] 1.068e-03 2.399e-04 4.451 8.32e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 72.7 on 35 degrees of freedom
## Multiple R-squared: 0.3614, Adjusted R-squared: 0.3432
## F-statistic: 19.81 on 1 and 35 DF, p-value: 8.323e-05
##
## Breusch-Godfrey test for serial correlation of order up to 7
##
## data: Residuals
## LM test = 2.7677, df = 7, p-value = 0.9056
## Series: ts1
## Regression with ARIMA(0,0,1) errors
##
## Coefficients:
## ma1 intercept xreg
## 0.0284 -143.4610 0.0011
## s.e. 0.1841 83.3734 0.0003
##
## sigma^2 estimated as 5437: log likelihood=-210.05
## AIC=428.11 AICc=429.36 BIC=434.55
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.013756 70.68143 52.88629 -8.388676 25.33604 0.6561081
## ACF1
## Training set -0.002361631