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.

1 - TRUCK SALES MODELING

1.1 - Truck Tractors

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

Testing Linear Regression f/ truck tractors

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
Testing ARIMA Regression f/ truck tractors
## [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.

1.2 - Truck Class 7 + 8

Testing Linear Regression

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
Testing ARIMA Regression f/ truck Class 7 + 8
## [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

1.3 - Truck Class 6

Testing Linear Regression f/ class 6

## 
## 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
Testing ARIMA Regression f/ truck Class 6
## [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.

1.4 - Truck Class 4 & 5

Testing Linear Regression f/ Class 4 & 5

## 
## 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
Testing ARIMA Regression f/ truck Class 4 & 5
## [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.

2 - BUS SALES MODELING

2.1 - Bus Class 8

##### 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
Testing ARIMA Regression f/ Bus Class 8
## 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.

2.2 - Bus Class 7

Testing Linear Regression f/ Bus Class 7

## 
## 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
Testing ARIMA Regression f/ Bus Class 7
## 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

2.3 - Bus Class 5 & 6

Testing Linear Regression f/ Bus Class 5 & 6

## 
## 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
Testing ARIMA Regression f/ Bus Class 5 & 6
## 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