#Generador de normales por el metodo del TLC 
normal_tlc <- function ( media = 0 , desv = 1) {
  u <- runif (12) # 12 numeros uniformes en (0 ,1)
  z <- sum ( u ) - 6 # normal estandar aproximada
  x <- media + desv * z # escalar a la normal deseada
  return ( x )
}
set.seed (123)
normal_tlc (500 , 166)
## [1] 697.9787
# Generar 1000 valores con nuestro metodo
set.seed (123)
datos <- replicate (1000 , normal_tlc (500 , 166) )

#Verificar media y desviacion
cat ( " Media : " , round ( mean ( datos ) , 2) , " \ n " )
##  Media :  497.28   n
cat ( " Desv : " , round ( sd ( datos ) , 2) , " \ n " ) # 
##  Desv :  159.47   n
# Histograma + curva normal teorica encima
hist (datos , breaks = 30 , prob = TRUE , col = " lightsteelblue " ,
      main = " Normales generadas por el metodo TLC " ,
      xlab = " Valor " , ylab = " Densidad " )
curve ( dnorm (x , mean = 500 , sd = 166) ,
        add = TRUE , col = " darkblue " , lwd = 2)

# R ya trae su propio generador normal : rnorm ()
set.seed (123)
datos_r <- rnorm (1000 , mean = 500 , sd = 166)
# Comparacion visual lado a lad
par ( mfrow = c (1 , 2) )
hist (datos , breaks = 30 , col = " lightsteelblue " ,
      main = " Metodo TLC ( a mano ) " , xlab = " Valor " )
hist ( datos_r , breaks = 30 , col = " lightsalmon " ,
        main = " rnorm () nativo " , xlab = " Valor " )

par ( mfrow = c (1 , 1) )


# Grafico Q - Q : si los puntos caen sobre la linea , es normal
qqnorm ( datos , main = "Q - Q del metodo TLC " )
qqline ( datos , col = " red " , lwd = 2)