# Definir la media y desviación estándar de la distribución normal
mu_Y = 5      # Media
sigma_Y = 2   # Desviación estándar

# Función para realizar simulaciones de Monte Carlo
simulacion_montecarlo = function(n, num_simulaciones) {
  medias_muestrales = numeric(num_simulaciones)
  
  for (i in 1:num_simulaciones) {
    # Generar una muestra aleatoria de tamaño n
    muestra = rnorm(n, mean = mu_Y, sd = sigma_Y)
    # Calcular la media muestral
    medias_muestrales[i] = mean(muestra)
  }
  
  # Retornar las medias muestrales
  return(medias_muestrales)
}

# Simular para diferentes tamaños de muestra
set.seed(123) # Para reproducibilidad
n_values = c(10, 30, 100, 10000)
num_simulaciones = 10000  # Número de simulaciones

# Crear gráficos para diferentes tamaños de muestra
par(mfrow = c(2, 2))  # Dividir la ventana de gráficos en una matriz de 2x2

for (n in n_values) {
  medias_muestrales = simulacion_montecarlo(n, num_simulaciones)
  
  # Crear histograma
  hist(medias_muestrales, breaks = 30, main = paste("n =", n), 
       xlab = "Media muestral", col = "skyblue", probability = TRUE)
  
  # Añadir curva normal teórica
  curve(dnorm(x, mean = mu_Y, sd = sigma_Y / sqrt(n)), 
        col = "darkred", lwd = 2, add = TRUE)
}