set.seed(12345) # Fijar la semilla aleatoria
# Número de simulaciones
N <- 100000000
#Variable X1 = U[0; 1]
uniform <- runif(N, min = 0, max = 1)
#Variable X2 = N(0,1)
normal = rnorm(N, mean = 0, sd = 1)
# Variable Y = lognormal exp(Normal)
lognormal <- exp(normal)
#Datos de Y:
print(head(lognormal))
## [1] 0.3258635 0.2987322 1.2575477 0.3987167 0.4099016 0.6044869
# Datos de X1
print(head(uniform))
## [1] 0.7209039 0.8757732 0.7609823 0.8861246 0.4564810 0.1663718
Gráfico de la simulación de Montecarlo
#Bibliotecas
library(ggplot2)
# Submuestras de n = 250 datos
uniform_subset <- uniform[abs(qnorm(ppoints(N)) - uniform) <= 0.05][1:250]
lognormal_subset <- lognormal[abs(qnorm(ppoints(N)) - lognormal) <= 0.05][1:250]
# Crear DF para cada distribución
uniform_data <- data.frame(value = uniform_subset, distribution = "Uniform")
lognormal_data <- data.frame(value = lognormal_subset, distribution = "Log-normal")
#Combinamos los DFs
combined_data <- rbind(uniform_data, lognormal_data)
#Plot
ggplot(combined_data, aes(x = value, fill = distribution)) +
geom_histogram(aes(y = after_stat(density)), bins = 25, alpha = 0.5, position = "identity") +
stat_function(fun = dnorm, args = list(mean = mean(combined_data$value), sd = sd(combined_data$value)), color = "red", linewidth = 0.3) +
ggtitle("Histogram at n Iterations")
## Warning: Multiple drawing groups in `geom_function()`
## ℹ Did you use the correct group, colour, or fill aesthetics?
Qqplot
#QQ plot (Uniform)
ggplot() +
stat_qq(data = data.frame(uniform_subset), aes(sample = uniform_subset)) +
stat_qq_line(data = data.frame(uniform_subset), aes(sample = uniform_subset), color = "blue") +
ggtitle("QQ Plot (Uniform Distribution)")
#QQ plot (Log-normal)
ggplot() +
stat_qq(data = data.frame(lognormal_subset), aes(sample = lognormal_subset)) +
stat_qq_line(data = data.frame(lognormal_subset), aes(sample = lognormal_subset), color = "blue") +
ggtitle("QQ Plot (Log-normal Distribution)")
Cuanto mayor sea N, más se acercará a la realidad la simulación.