Ejercicios De Multicolinealidad
Ezequiel Benjamín López Coto - LC22057
Datos del modelo.
## price assess bdrms lotsize sqrft colonial lprice lassess llotsize lsqrft
## 1 300 349.1 4 6126 2438 1 5.703783 5.855359 8.720297 7.798934
## 2 370 351.5 3 9903 2076 1 5.913503 5.862210 9.200593 7.638198
## 3 191 217.7 3 5200 1374 0 5.252274 5.383118 8.556414 7.225482
## 4 195 231.8 3 4600 1448 1 5.273000 5.445875 8.433811 7.277938
## 5 373 319.1 4 6095 2514 1 5.921578 5.765504 8.715224 7.829630
1. Modelo Estimado.
#Modelo estimado.
library(stargazer)
Estimación_del_modelo<-lm(price~lotsize+sqrft+bdrms,data = hprice1)
stargazer(Estimación_del_modelo,type = "html",title = "modelo estimado")| Dependent variable: | |
| price | |
| lotsize | 0.002*** |
| (0.001) | |
| sqrft | 0.123*** |
| (0.013) | |
| bdrms | 13.853 |
| (9.010) | |
| Constant | -21.770 |
| (29.475) | |
| Observations | 88 |
| R2 | 0.672 |
| Adjusted R2 | 0.661 |
| Residual Std. Error | 59.833 (df = 84) |
| F Statistic | 57.460*** (df = 3; 84) |
| Note: | p<0.1; p<0.05; p<0.01 |
2. Verifique si hay evidencia de la independencia de los regresores (no colinealidad), a través de:
Indice de Condición.
El número de condición mide la sensibilidad de las estimaciones mínimo cuadráticas ante pequeños cambios en los datos.
El número de condición es igual a:
\[\kappa(x) = \sqrt{\frac{\lambda_{\text{max}}}{\lambda_{\text{min}}}}\]
Dónde:
λmin = la raíz característica más pequeña.
λmax = la raíz característica más grande.
Interpretación:
| Si \(k(x) \leq 20\) | Si \(20 < k(x) < 30\) | Si \(k(x) \geq 30\) |
| La multicolinealidad es leve y no se considera un problema. | La multicolinealidad se considera moderada. | La multicolinealidad es severa. |
Cálculo del Indice de Condición de forma “manual”
Se basa la matriz Xt X.
library(stargazer)
X_mat<-model.matrix(Estimación_del_modelo)
stargazer(head(X_mat,n=6),type="html")| (Intercept) | lotsize | sqrft | bdrms | |
| 1 | 1 | 6,126 | 2,438 | 4 |
| 2 | 1 | 9,903 | 2,076 | 3 |
| 3 | 1 | 5,200 | 1,374 | 3 |
| 4 | 1 | 4,600 | 1,448 | 3 |
| 5 | 1 | 6,095 | 2,514 | 4 |
| 6 | 1 | 8,566 | 2,754 | 5 |
| (Intercept) | lotsize | sqrft | bdrms | |
| (Intercept) | 88 | 793,748 | 177,205 | 314 |
| lotsize | 793,748 | 16,165,159,010 | 1,692,290,257 | 2,933,767 |
| sqrft | 177,205 | 1,692,290,257 | 385,820,561 | 654,755 |
| bdrms | 314 | 2,933,767 | 654,755 | 1,182 |
La matriz Xt X debe ser normalizada, para evitar sesgo de la escala de las variables.
Cálculo de la matriz de normalización: \[ S_{n} = \begin{cases} 1 & \text{si } i = j \\ \frac{X^tX_{ij}}{\sqrt{0}} & \text{si } i \neq j \end{cases} \]
| 0.107 | 0 | 0 | 0 |
| 0 | 0.00001 | 0 | 0 |
| 0 | 0 | 0.0001 | 0 |
| 0 | 0 | 0 | 0.029 |
Xt X normalizada:
| 1 | 0.6655 | 0.9617 | 0.9736 |
| 0.6655 | 1 | 0.6776 | 0.6712 |
| 0.9617 | 0.6776 | 1 | 0.9696 |
| 0.9736 | 0.6712 | 0.9696 | 1 |
Autovalores de Xt X normalizada:
#Autovalores
library(stargazer)
lambdas<-eigen(XX_norm,symmetric = TRUE)
stargazer(lambdas$values,type = "html")| 3.482 | 0.455 | 0.039 | 0.025 |
Cálculo de \[\kappa(x) = \sqrt{\frac{\lambda_{\text{max}}}{\lambda_{\text{min}}}}\]
## [1] 11.86778
En base a la interpretación antes vista, podemos concluir que se considera que la multicolinealidad es severa, ya que k(x) > 30.
Cálculo del Indice de Condición usando librería “mctest”
#Utilizando a librería "mctest"
library(mctest)
X_mat<-model.matrix(Estimación_del_modelo)
mctest(mod = Estimación_del_modelo)##
## Call:
## omcdiag(mod = mod, Inter = TRUE, detr = detr, red = red, conf = conf,
## theil = theil, cn = cn)
##
##
## Overall Multicollinearity Diagnostics
##
## MC Results detection
## Determinant |X'X|: 0.6918 0
## Farrar Chi-Square: 31.3812 1
## Red Indicator: 0.3341 0
## Sum of Lambda Inverse: 3.8525 0
## Theil's Method: -0.7297 0
## Condition Number: 11.8678 0
##
## 1 --> COLLINEARITY is detected by the test
## 0 --> COLLINEARITY is not detected by the test
Cálculo del Indice de Condición usando librería “olsrr”
## Eigenvalue Condition Index intercept lotsize sqrft bdrms
## 1 3.48158596 1.000000 0.003663034 0.0277802824 0.004156293 0.002939554
## 2 0.45518380 2.765637 0.006800735 0.9670803174 0.006067321 0.005096396
## 3 0.03851083 9.508174 0.472581427 0.0051085488 0.816079307 0.016938178
## 4 0.02471941 11.867781 0.516954804 0.0000308514 0.173697079 0.975025872
Prueba de Farrar-Glaubar.
(Implementación de la prueba de Bartlett) Esta prueba identifica si a nivel poblacional, los regresores del modelo presentan independencia estadistica (son ortogonales), a través de la matriz de correlación muestral R, y se verifica si a nivel poblacional dicha matriz de correlación corresponde a una matriz identidad, las hipótesis de la prueba son las siguientes:
\[ \begin{cases} H_0: & R = I \\ H_1: & R \neq I \end{cases} \]
| Si no se rechaza H0 | Si se rechaza H0 |
| No hay evidencia de multicolinealidad | Hay evidencia de multicolinealidad |
El contraste se realiza a través de: \(\chi^2_{FG} = -(n-1-2m+56) \ln(|R|)\)
con, \(m=k−1, gl=m(m−1)/2\)
Regla de decisión:
Rechazar \(H_0\) si \(\chi^2_{FG} \geq V.C.\), o si \(p \leq \alpha\).
Cálculo de la Prueba de Farrar-Glaubar de forma “manual”
Cálculo de |R|.
| lotsize | sqrft | bdrms | |
| 1 | -0.284 | 0.735 | 0.513 |
| 2 | 0.087 | 0.108 | -0.675 |
| 3 | -0.375 | -1.108 | -0.675 |
| 4 | -0.434 | -0.980 | -0.675 |
| 5 | -0.287 | 0.867 | 0.513 |
| 6 | -0.045 | 1.283 | 1.702 |
Calcular la matriz R.
| lotsize | sqrft | bdrms | |
| lotsize | 1 | 0.1838 | 0.1363 |
| sqrft | 0.1838 | 1 | 0.5315 |
| bdrms | 0.1363 | 0.5315 | 1 |
Gráfico de la prueba Farrer-Glaubar.
library(fastGraph)
chi_FG<--(n-1-(2*m+5)/6)*log(determinante_R)
gl<-m*(m-1)/2
VC<-qchisq(p = 0.95,df = gl)
alpha_sig <- 0.05
shadeDist(chi_FG, ddist = "dchisq", parm1 = gl, lower.tail = FALSE, xmin = 0, xlab = "VC: 7.81 FG: 31.38",
main = "Gráfico de la prueba de FG")
abline(v = VC, col = "red", lty = 2)
axis(1, at = VC, labels = paste("VC:", round(VC, 2)), col.axis = "black", las = 1)
if (chi_FG > VC) {
text(x = VC + 0, y = 0.22, labels = "Rechazar H0", col = "blue", cex = 0.8)
} else {
text(x = VC + 0, y = 0.22, labels = "No rechazar H0", col = "blue", cex = 0.8)
}
text(VC, 0, expression(alpha == 0.05), pos = 4, col = "black", cex = 0.8)Cálculo de FG usando la librería “mctest”
##
## Call:
## mctest::omcdiag(mod = Estimación_del_modelo)
##
##
## Overall Multicollinearity Diagnostics
##
## MC Results detection
## Determinant |X'X|: 0.6918 0
## Farrar Chi-Square: 31.3812 1
## Red Indicator: 0.3341 0
## Sum of Lambda Inverse: 3.8525 0
## Theil's Method: -0.7297 0
## Condition Number: 11.8678 0
##
## 1 --> COLLINEARITY is detected by the test
## 0 --> COLLINEARITY is not detected by the test
Cálculo de FG usando la librería “psych”
## $chisq
## [1] 31.38122
##
## $p.value
## [1] 7.065806e-07
##
## $df
## [1] 3
Gráfico de la prueba Farrer-Glaubar.
library(fastGraph)
alpha_sig<-0.05
VC<-qchisq( p = alpha_sig,df= FG_test$df,lower.tail = FALSE)
shadeDist(chi_FG,ddist = "dchisq",
parm1 = gl,
lower.tail = FALSE, xmin = 0,
sub=paste("VC:",round(VC,2),"","FG:",round(FG_test$chisq,2)),
main = "Gráfico de la prueba de FG")Interpretación: En base a la regla de decisión se puede concluir que: se rechaza la H0, esto debido a que \(\chi^2_{FG} \geq V.C.\), además se puede decir que hay evidencia de colinealidad en los regresores.
Factores Inflacionarios de la Varianza (FIV).
Los denominados, variance inflation factor (VIF), por sus siglas en inglés, determinan el tamaño relativo de la varianza del j-ésimo parámetro estimado, respecto a la varianza esperada del estimador en ausencia de colinealidad.
- Estimador de la varianza para el j-ésimo parámetro:
\[\text{Var}(\beta_j) = \frac{\sigma^2_\epsilon}{(n-1)\cdot\text{Var}(X_j)}\cdot \frac{1}{1 - R^2_j}\]
- Estimador mínimo de la varianza para el j-ésimo parámetro (en ausencia de colinealidad \(R^2_{j}\) = 0
\[\text{Var}(\beta_j)_{\text{min}} =\frac{\sigma^2_\epsilon}{(n-1)\cdot\text{Var}(X_j)}\]
Fórmula para el cálculo de los VIF.
\[\text{VIF}_j = \frac{\text{Var}(\beta_j)}{\text{Var}(\beta_j)_{\text{mín}}} = \frac{1}{1 - R^2_j}\]
Donde \(R^2_{j}\), es el coeficiente de determinación de la regresión de \(X_{j}\) contra el resto de regresores.
Matricialmente los VIF, se obtienen de la diagonal principal de la inversa de la matriz de Correlación:
\[\text{VIF}_{j = 1,2,...,k-1} = \text{diag}(R^{-1})\]
Referencia entre \(R^2_{j}\).
library(dplyr)
R.cuadrado.regresores<-c(0,0.5,.8,.9)
as.data.frame(R.cuadrado.regresores) %>% mutate(VIF=1/(1-R.cuadrado.regresores))## R.cuadrado.regresores VIF
## 1 0.0 1
## 2 0.5 2
## 3 0.8 5
## 4 0.9 10
Cálculo manual:
Matriz de Correlación de los regresores del modelo (Como se obtuvo con anterioridad):
## lotsize sqrft bdrms
## lotsize 1.0000000 0.1838422 0.1363256
## sqrft 0.1838422 1.0000000 0.5314736
## bdrms 0.1363256 0.5314736 1.0000000
Inversa de la matriz de correlación \(R^{-1}\):
## lotsize sqrft bdrms
## lotsize 1.03721145 -0.1610145 -0.05582352
## sqrft -0.16101454 1.4186543 -0.73202696
## bdrms -0.05582352 -0.7320270 1.39666321
VIF’s para el modelo estimado:
## lotsize sqrft bdrms
## 1.037211 1.418654 1.396663
Cálculo de los VIF’s usando “car”
## lotsize sqrft bdrms
## 1.037211 1.418654 1.396663