knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
# Cargar librerías necesarias
library(quantreg)  # Para regresión cuantil
data(engel)
# Definir la cantidad de réplicas bootstrap
B <- 100000  # Número de muestras bootstrap
n <- nrow(engel)  # Tamaño de la muestra original

# Inicializar matriz para almacenar los coeficientes estimados
beta_boot <- matrix(NA, nrow = B, ncol = 2)  # Dos columnas para Intercepto y Beta1

# Estimación original del modelo cuantil para tau = 0.5
modelo_original <- rq(foodexp ~ income, data = engel, tau = 0.5)
beta_hat <- coef(modelo_original)  # Coeficientes originales
summary(modelo_original,se = "boot", bsmethod= "xy", R=100000)
## 
## Call: rq(formula = foodexp ~ income, tau = 0.5, data = engel)
## 
## tau: [1] 0.5
## 
## Coefficients:
##             Value    Std. Error t value  Pr(>|t|)
## (Intercept) 81.48225 27.22146    2.99331  0.00306
## income       0.56018  0.03485   16.07430  0.00000
# Bootstrap
# set.seed(123)  # Fijar semilla para reproducibilidad
for (b in 1:B) {
  # Seleccionar muestra bootstrap con reemplazo
  sample_indices <- sample(1:n, size = n, replace = TRUE)
  engel_boot <- engel[sample_indices, ]  # Nueva muestra bootstrap

  # Ajustar modelo de regresión cuantil en la muestra bootstrap
  modelo_boot <- rq(foodexp ~ income, data = engel_boot, tau = 0.5)
  
  # Almacenar los coeficientes estimados
  beta_boot[b, ] <- coef(modelo_boot)
}

# Cálculo de la varianza bootstrap
var_bootstrap <- apply(beta_boot, 2, var)
desv_est_bootstrap <- sqrt(var_bootstrap)  # Desviación estándar bootstrap

# Resultados
cat("Estimación original del modelo:\n")
## Estimación original del modelo:
print(beta_hat)
## (Intercept)      income 
##  81.4822474   0.5601806
cat("\nVarianza bootstrap de los coeficientes:\n")
## 
## Varianza bootstrap de los coeficientes:
print(var_bootstrap)
## [1] 7.410242e+02 1.216356e-03
cat("\nDesviación estándar bootstrap de los coeficientes:\n")
## 
## Desviación estándar bootstrap de los coeficientes:
print(desv_est_bootstrap)
## [1] 27.22175996  0.03487629
# Histograma de las distribuciones bootstrap de los coeficientes
par(mfrow = c(1,2))  # Para visualizar dos gráficos en la misma ventana
hist(beta_boot[, 1], col = "lightblue", main = "Distribución Bootstrap del Intercepto", xlab = expression(beta[0]))
hist(beta_boot[, 2], col = "lightcoral", main = "Distribución Bootstrap de Beta_1", xlab = expression(beta[1]))

81.48225/27.26370
## [1] 2.988672
0.56018/0.03493
## [1] 16.03722
# Intervalos de confianza al 25% y 95% para los coeficientes
#IC_25_beta0 <- quantile(beta_boot[, 1], probs = c(0.125, 0.875))  # 25% = 12.5% y 87.5%
IC_95_beta0 <- quantile(beta_boot[, 1], probs = c(0.025, 0.975))  # 95% = 2.5% y 97.5%

#IC_25_beta1 <- quantile(beta_boot[, 2], probs = c(0.125, 0.875))  
IC_95_beta1 <- quantile(beta_boot[, 2], probs = c(0.025, 0.975))  

# Imprimir los resultados
#cat("\nIntervalo de confianza empírico (25%) para Beta_0:", IC_25_beta0, "\n")
cat("Intervalo de confianza empírico (95%) para Beta_0:", IC_95_beta0, "\n")
## Intervalo de confianza empírico (95%) para Beta_0: 41.2005 150.5735
#cat("\nIntervalo de confianza empírico (25%) para Beta_1:", IC_25_beta1, "\n")
cat("Intervalo de confianza empírico (95%) para Beta_1:", IC_95_beta1, "\n")
## Intervalo de confianza empírico (95%) para Beta_1: 0.4702404 0.6137283
summary.rq(modelo_original)
## 
## Call: rq(formula = foodexp ~ income, tau = 0.5, data = engel)
## 
## tau: [1] 0.5
## 
## Coefficients:
##             coefficients lower bd  upper bd 
## (Intercept)  81.48225     53.25915 114.01156
## income        0.56018      0.48702   0.60199