Advances in Quantitative Methods for Economics and Business

A tribute to José García Pérez
metric number
no-esencial
Nelson-Siegel
MCR
multiColl
Author

R. Salmerón

Published

January 13, 2026

A finales del año 2025 se publicó en Springer el libro Advances in Quantitative Methods for Economics and Business en honor a la jubilación del profesor José García Pérez, precursor de este grupo de trabajo en torno al problema de multicolinealidad en modelos econométricos lineales.

A tribute to José García Pérez

Entre las diversas contribuciones, hemos podido aportar los tres siguientes capítulos:

En esta entrada nos centraremos en el primero de ellos por partir de un trabajo previo de nuestro querido Pepe.

¿De qué trata este trabajo? Dentro de las posibles relaciones lineales que pueden existir en un modelo de regresión lineal múltiple (multicolinealidad), una relación que a menudo se pasa por alto es la existente entre el término constante del modelo y el resto de las variables independientes. Este tipo de multicolinealidad aproximada es ignorada por el factor de inflación de la varianza, aunque puede detectarse a través del número de condición o el coeficiente de variación. En este trabajo se analiza la utilidad del número métrico para detectar este tipo de multicolinealidad aproximada.

Para simplicar el problema y sin pérdida de generalidad, el trabajo se centra en el modelo de regresión lineal simple; ya que en este modelo, de existir, sólo puede haber multicolinealidad aproximada de tipo no-esencial. Sin embargo, los resultados obtenidos pueden extrapolarse al modelo lineal general de forma sencilla. Concretamente, dado el modelo \(\mathbf{y} = \beta_{1} + \beta_{2} \mathbf{X}_{2} + \cdots + \beta_{i} \mathbf{X}_{i} + \cdots + \beta_{p} \mathbf{X}_{p} + \mathbf{u}\) se define el número métrico de la variable i-ésima como: \[NM_{i} = \sqrt{\frac{var \left( \mathbf{X}_{i} \right)}{var \left( \mathbf{X}_{i} \right) + \overline{\mathbf{X}}_{i}^{2}}}, \quad i=2,\dots,p,\] de forma que si \(NM_{i} < 0.066593\), se considera que la variable \(\mathbf{X}_{i}\) es responsable del grado de multicolinealidad no-esencial preocupante existente en el modelo.

Además, adviértase que:

Por tanto, \(NM_{i} \in [0, \ 1]\) donde los valores extremos suponen, respectivamente, multicolinealidad no-esencial perfecta y ausencia de relación no-esencial.

Para ilustrar la utilidad de esta medida, se consideran los mismos datos usados ya en este blog en la redefinición del factor de inflación de la varianza o la regresión alzada. Concretamente, se generan tres variables \(\mathbf{z}\), \(\mathbf{v}\) y \(\mathbf{w}\) tales que la primera está fuertemente relacionada con la constante (multicolinealidad no-esencial) y la segunda y tercera están fuertemente relacionadas (linealmente) entre sí:

rm(list=ls())
set.seed(2024)
obs = 50
cte = rep(1, obs)
z = rnorm(obs, 5, 0.1)
v = rnorm(obs, -3, 4)
w = v + rnorm(obs, 1, 0.5)

En este caso se genera una variable dependiente como \(\mathbf{y} = 3 + 4 \cdot \mathbf{z} - 5 \cdot \mathbf{v} - 2 \cdot \mathbf{w} + \mathbf{u}\), donde \(\mathbf{u}\) se distribuye según una normal de media 0 y varianza 2. El realizar la correspondiente estimación por Mínimos Cuadrados Ordinarios del modelo planteado se obtiene que las estimaciones de las variables \(\mathbf{v}\) y \(\mathbf{w}\) son próximas a las verdaderas (y significativamente distintas de cero) pero las de la constante y la variable \(\mathbf{z}\) difieren mucho de la realidad (incluso la estimación de la constante es significativamente distinta de cero):

u = rnorm(obs, 0, 2)
y = 3 + 4*z - 5*v - 2*w + u
reg = lm(y~z+v+w)
summary(reg)

Call:
lm(formula = y ~ z + v + w)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.5621 -1.2720 -0.0077  1.2600  4.5086 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  35.2603    14.0770   2.505  0.01586 *  
z            -2.4029     2.8337  -0.848  0.40085    
v            -5.1658     0.6240  -8.279 1.15e-10 ***
w            -1.8400     0.6417  -2.867  0.00623 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.081 on 46 degrees of freedom
Multiple R-squared:  0.9947,    Adjusted R-squared:  0.9943 
F-statistic:  2865 on 3 and 46 DF,  p-value: < 2.2e-16

Si se calcula el número de condición (usando el paquete multiColl) para cuantificar el grado de multicolinealidad existente se obtiene que éste es superior a los umbrales establecidos como preocupantes:

library(multiColl)
cte = rep(1, length(y))
X = cbind(cte, z, v, w)
CN(X)
[1] 120.7897

Mientras que si se calcula el factor de inflación de la varianza (usando también el paquete multiColl), se observa que se detecta la relación entre \(\mathbf{v}\) y \(\mathbf{w}\), pero no entre \(\mathbf{z}\) y el término constante:

VIF(X)
        z         v         w 
 1.024795 69.352963 69.400570 

¿Qué ocurre si se calcula el número métrico de cada variable acorde a la expresión proporcionada anteriormente? En primer lugar, a continuación se proporciona una función que permite calcular, entre otras cuestiones, el valor de \(NM_{i}\) en cada una de las variables simuladas:

variance <- function(x) return(((length(x)-1)/length(x))*var(x))

MetricNumber <- function(X, lu = T, threshold = 0.066593){
  MN_i = numeric()
  for (i in 2:ncol(X)){
    Xi = X[,i]
    MN_i[i-1] = sqrt(variance(Xi)/(variance(Xi)+mean(Xi)^2))
  }
  worrying = ifelse(MN_i < threshold, "True", "False")
  if (lu == T){
    library(multiColl)
    X = lu(X) 
  } 
  XX = crossprod(X)
  #
  determinant = det(XX)
  MI_i = numeric()
  variable = numeric()
  for (i in 1:ncol(X)){
    X_i = X[,-i]
    determinant_i = det(crossprod(X_i))
    MI_i[i] = sqrt(determinant/determinant_i)
    variable[i] = paste("Variable", i)
  }
  MN = min(MI_i)
  #
  result1 = data.frame(MI_i, row.names = variable)
  colnames(result1) = c("MI")
  result2 = data.frame(MN_i, worrying,  row.names = variable[-1])
  colnames(result2) = c("MN no-essential", "Worrying no-essential multicollinearity")
  result = list(result1, data.frame(MN, row.names = ""), result2)
  names(result) = c("Metric indexes", "Metric Number", "No-essential analysis")
  return(result)
}

Al aplicar la función anterior se observa que se detecta que la variable \(\mathbf{z}\) se relaciona con el término constante:

MetricNumber(X)[3]
$`No-essential analysis`
           MN no-essential Worrying no-essential multicollinearity
Variable 2      0.02105603                                    True
Variable 3      0.75828734                                   False
Variable 4      0.85041072                                   False

En esta situación, para solucionar la multicolinealidad no-esencial es suficiente con centrar la variable que provoca el problema. Estimando de nuevo el modelo sustituyendo \(\mathbf{z}\) por su versión centrada se observa que han cambiado las estimaciones relacionadas con el término constante:

z_c = z - mean(z)
reg_c = lm(y~z_c+v+w)
summary(reg_c)

Call:
lm(formula = y ~ z_c + v + w)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.5621 -1.2720 -0.0077  1.2600  4.5086 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  23.2639     0.6938  33.530  < 2e-16 ***
z_c          -2.4029     2.8337  -0.848  0.40085    
v            -5.1658     0.6240  -8.279 1.15e-10 ***
w            -1.8400     0.6417  -2.867  0.00623 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.081 on 46 degrees of freedom
Multiple R-squared:  0.9947,    Adjusted R-squared:  0.9943 
F-statistic:  2865 on 3 and 46 DF,  p-value: < 2.2e-16

Llama especialmente la reducción que ha experimentado su desviación típica estimada que ha pasado de ser igual a 14.0770 a 0.6938. Ha dejado de estar inflada.

Si se calculan el número de condición y el factor de inflación de la varianza se observa que el primero ha disminuido de forma importante (aunque al ser mayor que 20 está recogiendo la relación lineal preocupante entre \(\mathbf{v}\) y \(\mathbf{w}\)) y los segundos no cambian (ya que son invariantes a los cambios de origen y escala):

X_c = cbind(cte, z_c, v, w)
CN(X_c)
[1] 23.25655
VIF(X_c)
      z_c         v         w 
 1.024795 69.352963 69.400570 

Si se vuelve a calcular el número métrico de cada variable, se observa que ya no hay problema de multicolinealidad aproximada del tipo no-esencial y que el número métrico de la variable \(\mathbf{z}\) es igual al máximo valor que puede tomar (y que indica ortogonalidad):

MetricNumber(X_c)[3]
$`No-essential analysis`
           MN no-essential Worrying no-essential multicollinearity
Variable 2       1.0000000                                   False
Variable 3       0.7582873                                   False
Variable 4       0.8504107                                   False

Para finalizar…

….deseamos expresar nuestro agradecimiento al Sr. José García Pérez por su orientación y apoyo en nuestro desarrollo académico y personal. Sin su influencia, no habría sido posible alcanzar los resultados de investigación desarrollados en el campo de la multicolinealidad. Siempre llevaremos con nosotros sus enseñanzas y consejos y nos esforzaremos por transmitirlos a las generaciones futuras.