library(wooldridge)
## Warning: package 'wooldridge' was built under R version 4.5.3
library(mctest)
library(car)
## Warning: package 'car' was built under R version 4.5.3
## Cargando paquete requerido: carData
library(fastGraph)
## Warning: package 'fastGraph' was built under R version 4.5.3
data("hprice1")
df <- na.omit(hprice1)
# Ajustar el modelo de regresión lineal
df <- na.omit(hprice1) # Eliminamos posibles filas con NAs para evitar errores

# 2. Re-estimación del modelo
modelo <- lm(price ~ lotsize + sqrft + bdrms, data = df)

# 3. Creación de la matriz X
# Usamos un nombre único para evitar conflictos con funciones internas
mis_regresores <- as.matrix(df[, c("lotsize", "sqrft", "bdrms")])
mi_variable_y <- df$price

# Para la prueba FG Global:
fg_resultados <- omcdiag(modelo) 
print(fg_resultados)
## 
## Call:
## omcdiag(mod = 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
# Para el Índice de Condición (eigprop):
indices_condicion <- eigprop(modelo)
print(indices_condicion)
## 
## Call:
## eigprop(mod = modelo)
## 
##   Eigenvalues      CI (Intercept) lotsize  sqrft  bdrms
## 1      3.4816  1.0000      0.0037  0.0278 0.0042 0.0029
## 2      0.4552  2.7656      0.0068  0.9671 0.0061 0.0051
## 3      0.0385  9.5082      0.4726  0.0051 0.8161 0.0169
## 4      0.0247 11.8678      0.5170  0.0000 0.1737 0.9750
## 
## ===============================
## Row 2==> lotsize, proportion 0.967080 >= 0.50 
## Row 3==> sqrft, proportion 0.816079 >= 0.50 
## Row 4==> bdrms, proportion 0.975026 >= 0.50
# GRÁFICO DE FG
chi_calc <- as.numeric(fg_resultados$odiag[1])
gl_fg <- as.numeric(fg_resultados$odiag[2])

# Verificación de seguridad: si son válidos, graficamos
if(!is.na(chi_calc) && !is.na(gl_fg)){
  shadeDist(chi_calc, "dchisq", gl_fg, lower.tail = FALSE, 
            main = "Prueba de Farrar-Glauber (FG)")
} else {
  message("No se pudieron extraer valores finitos para el gráfico.")
}

# VIF

# Resultados tabulares
vif_values <- vif(modelo)
print(as.data.frame(vif_values))
##         vif_values
## lotsize   1.037211
## sqrft     1.418654
## bdrms     1.396663
# Resultados gráficos
barplot(vif_values, main = "VIF por Variable", 
        col = "skyblue", ylim = c(0, max(vif_values) + 2))
abline(h = 10, col = "red", lwd = 2)