# Práctico 4 install.packages("ggplot2") # Para la visualización install.packages("broom") library(ggplot2) library(broom) install.packages("MASS") # Para la función mvrnorm library(MASS) # Ejemplo regresión lineal simple # Crear un conjunto de datos de ejemplo datos <- data.frame( X = c(1, 2, 3, 4, 5, 8, 7), Y = c(2, 4, 5, 4, 5, 9, 6) ) # Separar la variable X de la Y X <- datos$X Y <- datos$Y # Crear y ajustar el modelo de regresión lineal modelo <- lm(Y ~ X, data = datos) # Obtener los coeficientes y mostrarlos beta <- coef(modelo) beta1 <- beta["X"] beta0 <- beta["(Intercept)"] cat(sprintf("Beta1: %f\n", beta1)) cat(sprintf("Beta0: %f\n", beta0)) # Hacer las predicciones datos$Y_pred <- predict(modelo, newdata = datos) # Graficar los resultados ggplot(datos, aes(x = X, y = Y)) + geom_point(color = 'darkviolet', size = 3, shape = 21, fill = 'darkviolet') + geom_point(aes(y = Y_pred), color = 'blue', size = 3, shape = 21, fill = 'blue') + geom_smooth(method = 'lm', se = FALSE, color = 'orchid', linetype = 'solid') + geom_segment(aes(xend = X, yend = Y_pred), color = 'black', linetype = 'dashed') + labs(x = 'X', y = 'Y', title = 'Regresión Lineal Simple') + theme_minimal() + theme(legend.position = 'none') ########################## # Ejercicio 2 # Definimos las medias y la matriz de varianzas y covarianzas mu <- c(0, 0) # Medias de V y U cov <- matrix(c(1, 0.5, 0.5, 1), nrow = 2) # Matriz de covarianza con correlación 0.5 # Número de simulaciones n <- 10000000 # Generamos las muestras de la distribución normal bivariada samples <- mvrnorm(n = n, mu = mu, Sigma = cov) # Extraemos las muestras para U y V V <- samples[, 1] U <- samples[, 2] # Calculamos la probabilidad de la región deseada prob <- mean((V < U) & (V > 0)) # Imprimimos la probabilidad aproximada cat(sprintf("Probabilidad aproximada: %.4f\n", prob)) # Definir las medias y la matriz de covarianza mu <- c(0, 0) # Medias de V y U cov <- matrix(c(1, 0.5, 0.5, 1), nrow = 2) # Matriz de covarianzas # Número de simulaciones n <- 10000 # Generar las muestras de la distribución normal bivariada samples <- mvrnorm(n = n, mu = mu, Sigma = cov) # Extraer las muestras para U y V V <- samples[, 1] U <- samples[, 2] # Condiciones de interés condition <- (V < U) & (V > 0) # Calcular la probabilidad de la región deseada prob <- mean(condition) cat(sprintf("Probabilidad: %.4f\n", prob)) # Preparar datos para la gráfica data <- data.frame(V = V, U = U, Condition = condition) # Graficar los puntos ggplot(data, aes(x = V, y = U)) + geom_point(data = subset(data, Condition), aes(color = 'V < U, V > 0'), alpha = 0.8, size = 2) + geom_point(data = subset(data, !Condition), aes(color = 'Otros puntos'), alpha = 0.5, size = 2) + geom_vline(xintercept = 0, color = 'black', linetype = 'dashed', size = 1) + geom_abline(intercept = 0, slope = 1, color = 'navy', linetype = 'dashed', size = 1) + scale_color_manual(values = c('V < U, V > 0' = 'darkviolet', 'Otros puntos' = 'orchid')) + labs(x = 'V', y = 'U', title = 'Distribución Normal Bivariada', color = 'Condición') + theme_minimal() + theme(legend.position = 'top') + coord_fixed(ratio = 1) # Para graficarlo podemos considerar un menor número de muestras, y ver cuál es la región de interés. # Definir las medias y la matriz de covarianza mu <- c(0, 0) # Medias de V y U cov <- matrix(c(1, 0.5, 0.5, 1), nrow = 2) # Matriz de covarianza con correlación 0.5 # Número de simulaciones n <- 10000 # Generar las muestras de la distribución normal bivariada samples <- mvrnorm(n = n, mu = mu, Sigma = cov) # Extraer las muestras para U y V V <- samples[, 1] U <- samples[, 2] # Condiciones de interés condition <- (V < U) & (V > 0) # Calcular la probabilidad de la región deseada prob <- mean(condition) cat(sprintf("Probabilidad: %.4f\n", prob)) # Preparar datos para la gráfica data <- data.frame(V = V, U = U, Condition = condition) # Graficar los puntos ggplot(data, aes(x = V, y = U)) + geom_point(data = subset(data, Condition), aes(color = 'V < U, V > 0'), alpha = 0.8, size = 1) + geom_point(data = subset(data, !Condition), aes(color = 'Otros puntos'), alpha = 0.5, size = 1) + geom_vline(xintercept = 0, color = 'black', linetype = 'dashed', size = 1) + geom_abline(intercept = 0, slope = 1, color = 'navy', linetype = 'dashed', size = 1) + scale_color_manual(values = c('V < U, V > 0' = 'darkviolet', 'Otros puntos' = 'orchid')) + labs(x = 'V', y = 'U', title = 'Distribución Normal Bivariada', color = 'Condición') + theme_minimal() + theme(legend.position = 'top') + coord_fixed(ratio = 1) ######################### #Ejercicio 3 # Número de observaciones n <- 6 # Número de grados de libertad grados_libertad <- n - 2 # Nivel de significancia para un intervalo del 95% alpha <- 0.05 # Calculamos el valor crítico t t_crit <- qt(1 - alpha / 2, df = grados_libertad) # Imprimimos el valor crítico t cat(sprintf("Valor crítico t para un intervalo de confianza del 95%%: %.4f\n", t_crit)) # Con el siguiente código podemos chequear todo el ejercicio: # Datos x <- c(0, 10, 20, 30, 40, 60) Y <- c(8, 12, 21, 31, 39, 58) # Número de observaciones n <- length(x) # Cálculo de medias x_mean <- mean(x) Y_mean <- mean(Y) # Cálculo de beta1 numerador <- sum((x - x_mean) * (Y - Y_mean)) denominador <- sum((x - x_mean) ^ 2) beta1 <- numerador / denominador # Cálculo de beta0 beta0 <- Y_mean - beta1 * x_mean # Predicciones Y_pred <- beta0 + beta1 * x # Cálculo de residuos residuos <- Y - Y_pred S_res <- sum(residuos ^ 2) S_residuos <- S_res / (n - 2) # Error estándar de beta1 SE_beta1 <- sqrt(S_residuos / sum((x - x_mean) ^ 2)) # Valor crítico t para 95% de confianza y n-2 grados de libertad t_crit <- qt(0.975, df = n - 2) # Intervalo de confianza para beta1 CI_beta1 <- c(beta1 - t_crit * SE_beta1, beta1 + t_crit * SE_beta1) # Imprimir resultados cat(sprintf("Beta0: %.4f\n", beta0)) cat(sprintf("Beta1: %.4f\n", beta1)) cat(sprintf("t crítico para un intervalo de confianza del 95%%: %.4f\n", t_crit)) cat(sprintf("Error estándar de Beta1: %.4f\n", SE_beta1)) cat(sprintf("Intervalo de confianza del 95%% para Beta1: (%.4f, %.4f)\n", CI_beta1[1], CI_beta1[2])) # Podemos graficar lo obtenido para verificar que esté correcto. # Crear un data frame para ggplot2 data <- data.frame(x = x, Y = Y, Y_pred = Y_pred) # Graficar los datos y la recta de regresión ggplot(data, aes(x = x, y = Y)) + geom_point(color = 'darkviolet', size = 2, shape = 16, label = 'Datos observados') + geom_line(aes(y = Y_pred), color = 'orchid', size = 1, linetype = 'solid', label = 'Recta de regresión') + labs(x = 'x', y = 'Y', title = 'Regresión Lineal') + theme_minimal() + theme(legend.position = 'top') + scale_color_manual(values = c('Datos observados' = 'darkviolet', 'Recta de regresión' = 'orchid')) ####################### # Ejercicio 4 # Datos data <- data.frame( Altura_cm = c(163, 163, 165, 166, 168, 169, 170, 170, 171, 172, 172, 174), Peso_kg = c(62, 63, 65, 67, 68, 69, 70, 72, 71, 70, 72, 74) ) # Creamos el gráfico de dispersión ggplot(data, aes(x = Altura_cm, y = Peso_kg)) + geom_point(color = 'orchid', size = 3, shape = 16, label = 'Datos') + labs(title = 'Altura vs. Peso', x = 'Altura (cm)', y = 'Peso (kg)') + theme_minimal() + theme(legend.position = 'none')