library(wooldridge)
library(stargazer)
##
## Please cite as:
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
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
modelo_lineal<-lm(price~lotsize+sqrft+bdrms,data = hprice1)
stargazer(modelo_lineal,title = "modelo estimado",type = "text")
##
## 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
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.5.2
## Cargando paquete requerido: zoo
## Warning: package 'zoo' was built under R version 4.5.2
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
prueba_white <- bptest(modelo_lineal,varformula = ~ lotsize + sqrft + bdrms + I(lotsize^2) + I(sqrft^2) + I(bdrms^2) +lotsize:sqrft + lotsize:bdrms + sqrft:bdrms, data = hprice1)
print(prueba_white)
##
## studentized Breusch-Pagan test
##
## data: modelo_lineal
## BP = 33.732, df = 9, p-value = 9.953e-05
library(stargazer)
# 1. Extrae los residuos del modelo original para analizar su varianza
u_i <- modelo_lineal$residuals
# 2. Une los residuos con las variables explicativas originales
data_prueba_white <- as.data.frame(cbind(u_i, hprice1))
# 3. Regresión auxiliar: u^2 contra variables, cuadrados e interacciones dobles
regresion_auxiliar <- lm(I(u_i^2) ~ lotsize + sqrft + bdrms +
I(lotsize^2) + I(sqrft^2) + I(bdrms^2) +
lotsize:sqrft + lotsize:bdrms + sqrft:bdrms,
data = data_prueba_white)
# 4. Obtiene el R^2 y el tamaño de muestra (n) para calcular el estadístico
sumario <- summary(regresion_auxiliar)
n <- nrow(data_prueba_white)
R_2 <- sumario$r.squared
# 5. Calcula el estadístico de White (n * R^2)
LM_w <- n * R_2
# 6. Define grados de libertad (9 términos en la regresión auxiliar)
gl <- 9
# 7. Calcula el p-valor (área a la derecha en la Chi-cuadrado)
p_value <- 1 - pchisq(q = LM_w, df = gl)
# 8. Obtiene el Valor Crítico al 95% de confianza para la decisión
VC <- qchisq(p = 0.95, df = gl)
# 9. Consolida resultados en un vector con nombres
salida_white <- c(LM_w, VC, p_value)
names(salida_white) <- c("LMw", "Valor Crítico", "p value")
# 10. Muestra la tabla de resultados con alta precisión decimal
stargazer(salida_white, title = "Resultados de la prueba de White",
type = "text", digits = 15)
library(fastGraph)
# 1. Extraer datos automáticamente
valor_bp <- unname(prueba_white$statistic)
grados_libertad <- unname(prueba_white$parameter)
# 2. Graficar ajustando el eje X (xlim)
# Esto evitará que la curva se vea cortada y mostrará el punto rojo al final
shadeDist(
xpoint = valor_bp,
ddist = "dchisq",
parm1 = grados_libertad,
lower.tail = FALSE,
xlim = c(0, valor_bp + 5), # <--- ESTO ES LA CLAVE: amplia el eje
main = "Prueba de White: Heterocedasticidad Detectada",
xlab = paste("Estadístico Chi-cuadrado (BP) =", round(valor_bp, 3)),
sub = paste("Grados de libertad =", grados_libertad),
col = c("black", "red")
)
library(ggplot2)
# Crear un vector de datos para la curva Chi-cuadrado
x <- seq(0, 45, length.out = 1000)
y <- dchisq(x, df = 10)
df_plot <- data.frame(x, y)
ggplot(df_plot, aes(x, y)) +
geom_line(size = 1) +
# Sombreado de la zona de rechazo (al 5%)
geom_area(data = subset(df_plot, x > qchisq(0.95, 10)), fill = "red", alpha = 0.3) +
# Línea de tu estadístico (33.803)
geom_vline(xintercept = 33.803, color = "blue", linetype = "dashed", size = 1) +
annotate("text", x = 33.803, y = 0.05, label = "Tu BP = 33.803", angle = 90, vjust = -1) +
labs(title = "Distribución Chi-cuadrado (Prueba de White)",
subtitle = "P-valor = 0.00019 (Muy significativo)",
x = "Estadístico", y = "Densidad") +
theme_minimal()
Como 0.00019<0.05 se rechaza la hipótesis nula, por lo tanto hay evidencia de que la varianza de los residuos heterocedasticidad .