Carga de Datos

library(wooldridge)
data(hprice1)
head(force(hprice1),n=5) #mostrar las primeras 5 observaciones
##   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. Estimacion del Modelo
library(stargazer)
modelo_estimado<-lm(price~lotsize+sqrft+bdrms, data = hprice1)
stargazer(modelo_estimado, title = "Prueba de Multicolinealidad", type = "text")
## 
## Prueba de Multicolinealidad
## ===============================================
##                         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 indenpencia de los regrosores (no colinealidad), a traves de: a) Indice de condicion y prueba de FG, presente sus resultadod de manera tabular en ambos casos y para la prueba FG presente tambien sus resultados de forma grafica usando la libreria fastaGrahp

Calculo Manual

library(stargazer)
x_mat<-model.matrix(modelo_estimado)
stargazer(head(x_mat, n=6), type = "text")
## 
## =================================
##   (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  
## ---------------------------------
xx_matrix<-t(x_mat) %*% x_mat
stargazer(xx_matrix, type = "text")
## 
## ==============================================================
##             (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  
## --------------------------------------------------------------
library(stargazer)
options(scipen = 9999)
Sn<-solve(diag(sqrt(diag(xx_matrix))))
stargazer(Sn, type = "text")
## 
## ==========================
## 0.107    0      0      0  
## 0     0.00001   0      0  
## 0        0    0.0001   0  
## 0        0      0    0.029
## --------------------------

X^tX Normalizada: Calcular la Matriz Normalizada

library(stargazer)
xx_norm<-(Sn%*%xx_matrix)%*%Sn
stargazer(xx_norm, type = "text", digits = 4)
## 
## ===========================
## 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 X^tX

library(stargazer)
#autovalores
lamdas<-eigen(xx_norm, symmetric = TRUE)
stargazer(lamdas$values, type = "text")
## 
## =======================
## 3.482 0.455 0.039 0.025
## -----------------------

CALCULO DE K(X)=√(λmax/λmin)

k<-sqrt(max(lamdas$values)/min(lamdas$values))
print(k)
## [1] 11.86778

Sí κ(x) es inferior o igual a 20, la multicolinealidad es leve, no se considera un problema. Para 20<κ(x)<30, la multicolinealidad se considera moderada. En el caso de que κ(x)≥30 la multicolinealidad es severa.

INTERPRETACION * Como k(x)<=20 con un valor de 11.86 la multicolinealidad no se considera un problema*

Calculo del indice de condicion utilizando la libreria mctest

library(mctest)
x_mat<-model.matrix(modelo_estimado)
mctest(mod = modelo_estimado)
## 
## 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

Como se puede observar donde dice “condition Number” es el indice y podemos concluir que: * Como k(x)<=20 con un valor de 11.86 la multicolinealidad no se considera un problema.

Calculo del Indice de Condicion usando la libreria “Otsrr”.

library(olsrr)
ols_eigen_cindex(model=modelo_estimado)
##   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

CALCULO MANUAL PARA REALIZAR LA PRUEBA DE FARRAR-GLAUBAR Caculo lRl

library(stargazer)

Zn<-scale(x_mat[, -1])
stargazer(head(Zn, n=6), type = "text")
## 
## =======================
##   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

library(stargazer)
n<-nrow(Zn)
R<-(t(Zn)%*%Zn)*(1/(n-1))
stargazer(R, type = "text", digits = 4)
## 
## =============================
##         lotsize sqrft  bdrms 
## -----------------------------
## lotsize    1    0.1838 0.1363
## sqrft   0.1838    1    0.5315
## bdrms   0.1363  0.5315   1   
## -----------------------------

Calcular lRl

determinante_R<-det(R)
print(determinante_R)
## [1] 0.6917931

Aplicando la prueba de Farrer Glaubar (Barlett)

m<-ncol(x_mat[, -1])
n<-nrow(x_mat[, -1])
chi_FG<--(n-1-(2*m+5)/6)*log(determinante_R)
print(chi_FG)
## [1] 31.38122

Encontrar el valor critico V.C.

gl<-m*(m-1)/2
VC<-qchisq(p=0.95, df=gl)
print(VC)
## [1] 7.814728

Regla de desicion: Como X^2FG es de 31.38122 >= que el valor critico de 7.814728 se rechaza H0, por lo tanto hay evidencia de colinealidad en los regresores.

** Calculando del estadistico utilizando la libreria “mctest and pysich”

Calculo de FG usando mctest

library(mctest)
mctest::omcdiag(mod = modelo_estimado)
## 
## Call:
## mctest::omcdiag(mod = modelo_estimado)
## 
## 
## 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

y nuevamente tenemos que el Chi-Square es de 31.3812 superior al valor critico de 7.8 encontrado por lo tanto se detecta como bien lo dice el diagnostico colinealidad en el modelo.

Calculo de FG usando la pysych

library(psych)
FG_test<-cortest.bartlett(x_mat[, -1])
print(FG_test)
## $chisq
## [1] 31.38122
## 
## $p.value
## [1] 0.0000007065806
## 
## $df
## [1] 3

Resultado de forma grafica

library(fastGraph)
## Warning: package 'fastGraph' was built under R version 4.5.3
# Usamos tus variables calculadas: chi_FG (31.38) y gl (3)
shadeDist(xshade = chi_FG, 
          ddist = "dchisq", 
          parm1 = gl, 
          lower.tail = FALSE, 
          main = "Prueba de Farrar-Glauber (Bartlett)",
          sub = paste("Chi-cuadrado =", round(chi_FG, 4)))

Nuevamente se confirma que es de 31.38122 el estadistico FG

b) Factores Inflacionarios de la varianza, presente sus resultados de forma tabular y de forma grafica

Referencia entre RJ^2

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
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):

print(R)
##           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:

inversa_R<-solve(R)
print(inversa_R)
##             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:

VIFs<-diag(inversa_R)
print(VIFs)
##  lotsize    sqrft    bdrms 
## 1.037211 1.418654 1.396663

Cálculo de los VIF’s usando “performance”

library(performance)
VIFs<-multicollinearity(x = modelo_estimado,verbose = FALSE)
VIFs
## # Check for Multicollinearity
## 
## Low Correlation
## 
##     Term  VIF    VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##  lotsize 1.04 [1.00, 11.02]     1.02      0.96     [0.09, 1.00]
##    sqrft 1.42 [1.18,  1.98]     1.19      0.70     [0.51, 0.85]
##    bdrms 1.40 [1.17,  1.95]     1.18      0.72     [0.51, 0.86]
# Convertimos el objeto de 'performance' a un vector numérico para barplot
vif_vector <- as.numeric(VIFs$VIF)
names(vif_vector) <- VIFs$Term  # Le ponemos los nombres de las variables

# Ahora graficamos usando el vector
color_palette <- ifelse(vif_vector > 5, "red", "skyblue")

barplot(vif_vector, 
        main = "Factores Inflacionarios de la Varianza (VIF)",
        col = color_palette,
        las = 1, 
        ylim = c(0, max(vif_vector) + 1),
        ylab = "Valor del VIF")

# Líneas de referencia
abline(h = 5, col = "orange", lwd = 2, lty = 2)
abline(h = 10, col = "red", lwd = 2, lty = 2)

# 1. Cargar la librería necesaria
library(performance)
library(see) # Esta librería es la que permite que el gráfico se vea así de bien
## Warning: package 'see' was built under R version 4.5.3
# 2. Generar el análisis de colinealidad del modelo que ya estimaste
colinealidad <- check_collinearity(modelo_estimado)

# 3. Graficar
plot(colinealidad)

Cálculo de los VIF’s usando “car”

library(car)
VIFs_car<-vif(modelo_estimado)
print(VIFs_car)
##  lotsize    sqrft    bdrms 
## 1.037211 1.418654 1.396663

Cálculo de los VIF’s usando “mctest”

library(mctest)
mc.plot(mod = modelo_estimado,vif = 2)