# Cargamos librerías necesarias library(ggplot2) # Práctico 2 # Ejercicio 1 # Parámetros n <- 1000 # Número de muestras X <- runif(n, min = 0, max = 1) # Simulación n muestras con distribución uniforme # Histograma de X y densidad teórica histograma_X <- ggplot(data.frame(X), aes(x = X)) + geom_histogram(aes(y = after_stat(density)), bins = 30, fill = 'slateblue', alpha = 0.5, color = 'black') + stat_function(fun = function(x) ifelse(x >= 0 & x <= 1, 1, 0), color = 'darkblue') + labs(x = 'X', y = 'Densidad', title = 'Histograma y Densidad teórica de X') + theme_minimal() print(histograma_X) # A mayor cantidad de muestras, más parecida es la distribución empírica a la real (la proporción de veces que observamos un evento se aproxima a la probabilidad real del evento). # Probar aumentar el n! n <- 10000 # Aumentar el número de muestras X <- runif(n, min = 0, max = 1) # Nuevas muestras # Transformación a <- 2 # Probar cambiar este valor b <- 1 # Probar cambiar este valor Y <- a * X + b # Histograma de Y y densidad teórica histograma_Y <- ggplot(data.frame(Y), aes(x = Y)) + geom_histogram(aes(y = after_stat(density)), bins = 30, fill = 'orchid', alpha = 0.5, color = 'black') + stat_function(fun = function(x) ifelse(x >= b & x <= a + b, 1 / abs(a), 0), color = 'purple') + labs(x = 'Y', y = 'Densidad', title = 'Histograma y Densidad teórica de Y = aX + b') + theme_minimal() print(histograma_Y) # Podemos hacer un gráfico con histogramas de simulaciones para distintos valores de (a,b). # Parámetros de la simulación n <- 10000 # Número de muestras X <- runif(n, min = 0, max = 1) # Nuevas muestras # Valores de a y b para las diferentes transformaciones transformaciones <- list( c(2, 0), # Transformación: Y = 2X c(0.5, 0), # Transformación: Y = 0.5X c(-2, 0), # Transformación: Y = -2X c(1, 1), # Transformación: Y = X + 1 c(2, 1), # Transformación: Y = 2X + 1 c(-0.5, 1), # Transformación: Y = -0.5X + 1 c(-2, 2) # Transformación: Y = -2X + 2 ) # Graficamos histogramas par(mfrow = c(2, 4), mar = c(4, 4, 2, 1)) # Histograma de la distribución uniforme original hist(X, breaks = 15, freq = FALSE, col = 'lightblue', border = 'black', xlim = c(-3, 3), ylim = c(0, 2.5), xlab = 'X', ylab = 'Densidad', main = 'Distribución X Uniforme [0,1]') abline(h = 1, col = 'purple', lty = 2) # Generamos y graficamos las transformaciones for (i in 1:length(transformaciones)) { a <- transformaciones[[i]][1] b <- transformaciones[[i]][2] Y <- a * X + b hist(Y, breaks = 15, freq = FALSE, col = 'lightpink', border = 'black', xlim = c(-3, 3), ylim = c(0, 2.5), xlab = 'Y', ylab = 'Densidad', main = paste('Y =', a, 'X +', b)) abline(h = 1 / abs(a), col = 'purple', lty = 2) } par(mfrow = c(1, 1)) # Ejercicio 5 # Número de muestras n <- 100 # Simulamos X ~ N(0,1) X <- rnorm(n, mean = 0, sd = 1) # Simulamos U ~ {-1, 1} U <- sample(c(-1, 1), size = n, replace = TRUE) # Calculamos Y = UX Y <- U * X # Convertimos a data.frame para ggplot data <- data.frame(X = X, Y = Y) # Histograma de X histograma_X <- ggplot(data, aes(x = X)) + geom_histogram(aes(y = after_stat(density)), bins = 30, fill = 'blue', color = 'black', alpha = 0.5) + geom_density(color = 'blue') + labs(title = 'Histograma de X', x = 'X', y = 'Densidad') + theme_minimal() print(histograma_X) # Histograma de Y histograma_Y <- ggplot(data, aes(x = Y)) + geom_histogram(aes(y = after_stat(density)), bins = 30, fill = 'darkorchid', color = 'black', alpha = 0.5) + geom_density(color = 'darkorchid') + labs(title = 'Histograma de Y', x = 'Y', y = 'Densidad') + theme_minimal() print(histograma_Y) # Diagrama de dispersión diagrama_dispersion <- ggplot(data, aes(x = X, y = Y)) + geom_point(alpha = 0.5) + labs(title = 'Diagrama de dispersión de (X, Y)', x = 'X', y = 'Y') + theme_minimal() + theme(panel.grid.major = element_line(color = "gray80"), # Cuadrícula mayor panel.grid.minor = element_line(color = "gray90")) # Cuadrícula menor print(diagrama_dispersion)