library(wooldridge)
data(hprice1)
head(force(hprice1),n=5)
##   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
library(wooldridge)
modelo_precio<-lm(formula = price~lotsize+sqrft+bdrms, data=hprice1)
summary(modelo_precio)
## 
## Call:
## lm(formula = price ~ lotsize + sqrft + bdrms, data = hprice1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -120.026  -38.530   -6.555   32.323  209.376 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -2.177e+01  2.948e+01  -0.739  0.46221    
## lotsize      2.068e-03  6.421e-04   3.220  0.00182 ** 
## sqrft        1.228e-01  1.324e-02   9.275 1.66e-14 ***
## bdrms        1.385e+01  9.010e+00   1.537  0.12795    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 59.83 on 84 degrees of freedom
## Multiple R-squared:  0.6724, Adjusted R-squared:  0.6607 
## F-statistic: 57.46 on 3 and 84 DF,  p-value: < 2.2e-16
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
jb<-jarque.bera.test(modelo_precio$residuals)
jb
## 
##  Jarque Bera Test
## 
## data:  modelo_precio$residuals
## X-squared = 32.278, df = 2, p-value = 9.794e-08
library(fastGraph)  # Carga la biblioteca 'fastGraph', que proporciona funcionalidades para graficar distribuciones de probabilidad rápidamente.

sig_jb <- 0.05  # Establece el nivel de significancia para la prueba de Jarque-Bera.

JBC <- jb$statistic  # Extrae la estadística de la prueba de Jarque-Bera.
gl1 <- jb$parameter  # Extrae el número de grados de libertad del modelo.

VC1 <- qchisq(1 - JBC, gl1, lower.tail = TRUE)  # Calcula el valor crítico para la prueba de Jarque-Bera.
## Warning in qchisq(1 - JBC, gl1, lower.tail = TRUE): NaNs produced
shadeDist(JBC, ddist = "dchisq", parm1 = gl1, lower.tail = FALSE, xmin = 0,
          sub = paste("VC1", round(VC1, 2), " ", "JBC", round(JBC, 2)))  # Grafica la distribución de la prueba de Jarque-Bera con sombreado del área crítica.

library(wooldridge)  # Carga la biblioteca 'wooldridge', que contiene conjuntos de datos utilizados para ejemplos en libros de econometría.
library(dplyr)  # Carga la biblioteca 'dplyr', que proporciona funciones para manipulación de datos.
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gt)  # Carga la biblioteca 'gt', que permite crear tablas de presentación de datos.
library(gtExtras)  # Carga la biblioteca 'gtExtras', que proporciona funciones adicionales para personalizar las tablas creadas con 'gt'.

modelo_precio <- lm(formula = price ~ lotsize + sqrft + bdrms, data = hprice1)  # Ajusta un modelo de regresión lineal con 'price' como variable dependiente y 'lotsize', 'sqrft', y 'bdrms' como variables independientes utilizando los datos en 'hprice1'.
summary(modelo_precio)  # Imprime un resumen del modelo ajustado.
## 
## Call:
## lm(formula = price ~ lotsize + sqrft + bdrms, data = hprice1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -120.026  -38.530   -6.555   32.323  209.376 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -2.177e+01  2.948e+01  -0.739  0.46221    
## lotsize      2.068e-03  6.421e-04   3.220  0.00182 ** 
## sqrft        1.228e-01  1.324e-02   9.275 1.66e-14 ***
## bdrms        1.385e+01  9.010e+00   1.537  0.12795    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 59.83 on 84 degrees of freedom
## Multiple R-squared:  0.6724, Adjusted R-squared:  0.6607 
## F-statistic: 57.46 on 3 and 84 DF,  p-value: < 2.2e-16
residuos <- modelo_precio$residuals  # Extrae los residuos del modelo ajustado.

# Convierte los residuos en un tibble y realiza cálculos para la prueba de Kolmogorov-Smirnov.
residuos %>%
  as_tibble() %>%
  mutate(posicion = row_number()) %>%  # Añade una columna 'posicion' que indica la posición de cada residuo.
  arrange(value) %>%  # Ordena los residuos de menor a mayor.
  mutate(dist1 = row_number() / n()) %>%  # Calcula la distancia acumulada normalizada para el primer conjunto de datos.
  mutate(dist2 = (row_number() - 1) / n()) %>%  # Calcula la distancia acumulada normalizada para el segundo conjunto de datos.
  mutate(zi = as.vector(scale(value, center = TRUE))) %>%  # Normaliza los residuos.
  mutate(pi = pnorm(zi, lower.tail = TRUE)) %>%  # Calcula las probabilidades acumuladas utilizando la función de distribución normal.
  mutate(dif1 = abs(dist1 - pi)) %>%  # Calcula la diferencia entre las distancias acumuladas y las probabilidades acumuladas para el primer conjunto de datos.
  mutate(dif2 = abs(dist2 - pi)) %>%  # Calcula la diferencia entre las distancias acumuladas y las probabilidades acumuladas para el segundo conjunto de datos.
  rename(residuales = value) -> tabla_KS  # Renombra la columna de residuos como 'residuales' y asigna el resultado a 'tabla_KS'.