R Markdown
# Instalación
library(wooldridge)
## Warning: package 'wooldridge' was built under R version 4.5.3
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
# Cargar datos y mostrar primeras observaciones [cite: 4, 5, 6]
data(hprice1)
df <- hprice1
# 1. Estimar el modelo:
modelo <- lm(price ~ lotsize + sqrft + bdrms, data = df)
# Extraer los residuos (u) para las pruebas de normalidad
residuos <- residuals(modelo)
2. # Cálculo manual de estadísticos descriptivos para Jarque-Bera
## [1] 2
stats_manual <- data.frame(residuos) %>%
summarise(
n = n(),
media = mean(residuos),
desv_est = sd(residuos),
# Asimetría (Skewness)
asimetria = sum((residuos - media)^3) / (n * desv_est^3),
# Curtosis
curtosis = sum((residuos - media)^4) / (n * desv_est^4),
# Estadístico JB
JB_stat = (n/6) * (asimetria^2 + ((curtosis - 3)^2 / 4)))
print(stats_manual)
## n media desv_est asimetria curtosis JB_stat
## 1 88 -2.321494e-15 58.79282 0.9443546 5.141959 29.90244
# Tabla manual para visualizar diferencias (primeras 10 filas)
tabla_ks_manual <- data.frame(residuos = sort(residuos)) %>%
mutate(
n = n(),
i = row_number(),
F_empirica = i / n,
z_score = (residuos - mean(residuos)) / sd(residuos),
F_teorica = pnorm(z_score)
)
head(tabla_ks_manual, 10)
## residuos n i F_empirica z_score F_teorica
## 81 -120.02645 88 1 0.01136364 -2.041515 0.02059981
## 77 -115.50870 88 2 0.02272727 -1.964674 0.02472601
## 24 -107.08089 88 3 0.03409091 -1.821326 0.03427866
## 48 -91.24398 88 4 0.04545455 -1.551958 0.06033615
## 12 -85.46117 88 5 0.05681818 -1.453599 0.07302879
## 32 -77.17269 88 6 0.06818182 -1.312621 0.09465535
## 54 -74.70272 88 7 0.07954545 -1.270610 0.10193378
## 39 -65.50285 88 8 0.09090909 -1.114130 0.13261169
## 69 -63.69911 88 9 0.10227273 -1.083451 0.13930425
## 83 -62.56659 88 10 0.11363636 -1.064188 0.14362184
3. # pruebas de normalidad
## [1] 3
library(tseries)
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
jb_test <- jarque.bera.test(residuos)
# Resultado tabular
print(jb_test)
##
## Jarque Bera Test
##
## data: residuos
## X-squared = 32.278, df = 2, p-value = 9.794e-08
# Gráfico con fastGraph
library(fastGraph)
## Warning: package 'fastGraph' was built under R version 4.5.3
# Jarque-Bera se distribuye como una Chi-cuadrado con 2 grados de libertad
shadeDist(jb_test$statistic, "dchisq", 2, lower.tail = FALSE,
sub = paste("Prueba JB - p-value:", round(jb_test$p.value, 4)))

library(nortest)
ks_test <- lillie.test(residuos)
# Resultado tabular
print(ks_test)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: residuos
## D = 0.075439, p-value = 0.2496
sw_test <- shapiro.test(residuos)
# Resultado tabular
print(sw_test)
##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.94132, p-value = 0.0005937
# Gráfico con fastGraph
# Shapiro-Wilk utiliza una distribución específica, visualizada mediante la normal
shadeDist(sw_test$statistic, "dnorm", 0, 1, lower.tail = TRUE,
sub = paste("Prueba SW - p-value:", round(sw_test$p.value, 4)))
