En esta práctica exploraremos conceptos clave de inferencia estadística mediante simulaciones y análisis de datos. Los objetivos son:
Comprender la variabilidad muestral y el teorema central del límite.
Estimar parámetros poblacionales a partir de muestras.
Construir intervalos de confianza y analizar su interpretación.
El informe final se entregará en formato PDF o HTML (exportando el resultado final en PDF o HTML, por ejemplo). Se recomienda generar el informe con RMarkdown, que produce automáticamente el PDF/HTML a entregar.
Esta PEC debe realizarse de forma estrictamente individual, quedando totalmente prohibido el uso de herramientas de IA. Cualquier indicio de copia será sancionado con un suspenso (D) para todas las partes implicadas y la posible evaluación negativa de la asignatura en su conjunto.
Simularemos una población con distribución normal y extraeremos múltiples muestras para analizar su variabilidad.
# Ejercicio 1
set.seed(123) # a) Fijar semilla
# a) Población de 10.000 individuos
poblacion <- rnorm(10000, mean = 100, sd = 15)
# b) Extraer 1000 muestras y calcular medias -------------------------------
# función para obtener 1000 medias muestrales de tamaño n
medias_muestrales <- function(n){
replicate(1000, mean(sample(poblacion, n, replace = TRUE)))
}
medias_5 <- medias_muestrales(5)
medias_30 <- medias_muestrales(30)
medias_100 <- medias_muestrales(100)
# c) Graficar las distribuciones ------------------------------------------
library(tidyverse)
df_medias <- tibble(
media = c(medias_5, medias_30, medias_100),
tamano = factor(
c(rep("n = 5", 1000),
rep("n = 30", 1000),
rep("n = 100", 1000)),
levels = c("n = 5", "n = 30", "n = 100"))
)
# Guardar figura como objeto
fig_medias <- ggplot(df_medias, aes(x = media, fill = tamano)) +
geom_density(alpha = 0.4) +
labs(title = "Distribución de medias muestrales",
x = "Media de la muestra",
fill = "Tamaño muestral") +
theme_minimal()
fig_medias
En este apartado se generó una población sintética de 10.000 individuos con distribución normal, media 100 y desviación estándar 15. Esta simulación representa una “población ideal” sobre la cual podemos estudiar el comportamiento de las muestras. Al fijar la semilla se garantiza que los resultados sean completamente reproducibles. La forma y parámetros de esta población servirán como referencia para evaluar qué tan bien las distintas muestras permiten estimar la media real.
Al extraer 1000 muestras de tamaños 5, 30 y 100, y calcular la media de cada una, observamos cómo la variabilidad de las medias muestrales disminuye a medida que aumenta el tamaño de la muestra. Las muestras pequeñas (n = 5) producen medias muy dispersas, lo que refleja un alto error muestral. En cambio, con n = 30 la dispersión se reduce, y con n = 100 las medias se agrupan fuertemente alrededor del valor real (100). Esto muestra cómo el tamaño muestral influye directamente en la estabilidad y precisión de las estimaciones.
Las distribuciones de medias muestran claramente el efecto del Teorema Central del Límite: incluso si la muestra es pequeña, la distribución de las medias tiende a aproximarse a una normal, pero esta aproximación mejora y se vuelve más estrecha con tamaños muestrales mayores. Las distribuciones para n = 5 son amplias y presentan variabilidad considerable, mientras que para n = 30 y especialmente n = 100 se vuelven más concentradas y simétricas alrededor de la verdadera media poblacional. Esto confirma que muestras grandes producen estimaciones más precisas y con menor incertidumbre.
Esta base de datos contiene información sobre el nivel de satisfacción de los usuarios de un servicio público, junto con algunas variables personales que permiten analizar diferencias entre grupos.
Se dispone de las siguientes variables:
id: Identificador único para cada participante de la encuesta.
genere: Género de la persona encuestada (“Hombre” o “Mujer”).
edat: Edad del participante (rango entre 18 y 70 años).
puntuacio: Valoración de la satisfacción con el servicio público, en una escala de 1 (muy insatisfecho) a 10 (muy satisfecho).
freq_us: Frecuencia con la que el participante utiliza el servicio (“Baja”, “Media” o “Alta”).
temps_resposta: Tiempo medio (en minutos) que el servicio tarda en responder a una solicitud, según la experiencia de cada persona.
library(tidyverse)
library(rio)
# Cargar datos
df <- import("/Users/nielspacheco/Desktop/Classes/UOC/Probabilidad y Estadistica/PEC_3/enquesta_satisfaccio_completa (1).csv")
# Ver estructura
glimpse(df)
## Rows: 300
## Columns: 6
## $ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, …
## $ genere <chr> "Home", "Dona", "Home", "Home", "Home", "Dona", "Home",…
## $ edat <int> 50, 18, 36, 19, 70, 61, 43, 49, 23, 49, 21, 28, 34, 55,…
## $ freq_us <chr> "Alta", "Mitjana", "Mitjana", "Mitjana", "Baixa", "Alta…
## $ puntuacio <dbl> 9.7, 7.7, 7.6, 6.6, 5.8, 7.3, 6.3, 6.1, 6.2, 10.0, 9.1,…
## $ temps_resposta <dbl> 5.8, 13.9, 12.5, 16.8, 24.4, 5.1, 10.0, 27.4, 24.8, 6.0…
# Media muestral
media_punt <- mean(df$puntuacio, na.rm = TRUE)
# Desviación típica
sd_punt <- sd(df$puntuacio, na.rm = TRUE)
# Tamaño muestral
n <- sum(!is.na(df$puntuacio))
# Error estándar
se <- sd_punt / sqrt(n)
# Valor crítico t
vc <- qt(0.975, df = n - 1)
# Intervalo
ci_a <- c(
media_punt - vc * se,
media_punt + vc * se
)
ci_a
## [1] 7.466916 7.747084
La media muestral de satisfacción obtenida en la encuesta es aproximadamente 7.61 puntos. El intervalo de confianza del 95% para la media poblacional va de 7.47 a 7.75, lo que significa que, si repitiéramos el proceso de muestreo muchas veces, el 95% de los intervalos construidos de esta forma contendrían la verdadera media de satisfacción de toda la población usuaria. Este intervalo es relativamente estrecho, lo que indica una estimación precisa, y su posición sugiere que, en promedio, los usuarios presentan un nivel de satisfacción claramente positivo con el servicio.
ci_freq <- df %>%
group_by(freq_us) %>%
summarise(
n = n(),
media = mean(puntuacio, na.rm = TRUE),
sd = sd(puntuacio, na.rm = TRUE),
se = sd / sqrt(n),
vc = qt(0.975, df = n - 1),
ci_inf = media - vc * se,
ci_sup = media + vc * se
)
ci_freq
## # A tibble: 3 × 8
## freq_us n media sd se vc ci_inf ci_sup
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Alta 87 8.33 1.05 0.113 1.99 8.10 8.55
## 2 Baixa 83 6.63 0.954 0.105 1.99 6.42 6.84
## 3 Mitjana 130 7.75 1.11 0.0971 1.98 7.56 7.94
Para cada categoría de frecuencia de uso, los intervalos de confianza del 95% para la puntuación de satisfacción son los siguientes:
Uso Alta: media = 8.33, IC95% = [8.10, 8.55]
Uso Baja: media = 6.63, IC95% = [6.42, 6.84]
Uso Media (Mitjana): media = 7.75, IC95% = [7.56, 7.94]
Estos intervalos permiten comparar los niveles de satisfacción entre los distintos grupos de frecuencia de uso.
grupo_max <- ci_freq %>%
slice_max(order_by = media, n = 1)
grupo_max
## # A tibble: 1 × 8
## freq_us n media sd se vc ci_inf ci_sup
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Alta 87 8.33 1.05 0.113 1.99 8.10 8.55
El grupo con la media de satisfacción más alta es el de frecuencia de uso Alta, con una media de 8.33 puntos.
ci_amplitud <- ci_freq %>%
mutate(amplitud = ci_sup - ci_inf) %>%
select(freq_us, n, amplitud) %>%
arrange(desc(amplitud))
ci_amplitud
## # A tibble: 3 × 3
## freq_us n amplitud
## <chr> <int> <dbl>
## 1 Alta 87 0.447
## 2 Baixa 83 0.416
## 3 Mitjana 130 0.384
La amplitud de los intervalos disminuye conforme aumenta el tamaño del grupo. El grupo con mayor tamaño muestral (“Mitjana”, n = 130) presenta el intervalo más estrecho (0.384), mientras que los grupos más pequeños (“Baixa” con n = 83 y “Alta” con n = 87) muestran intervalos ligeramente más amplios (0.416 y 0.447, respectivamente). Esto confirma que los intervalos de confianza se vuelven más precisos y más estrechos cuando el tamaño de la muestra es mayor.
# Comparación general de intervalos
ci_comparacion <- ci_freq %>%
mutate(amplitud = ci_sup - ci_inf) %>%
select(freq_us, media, ci_inf, ci_sup, amplitud)
ci_comparacion
## # A tibble: 3 × 5
## freq_us media ci_inf ci_sup amplitud
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Alta 8.33 8.10 8.55 0.447
## 2 Baixa 6.63 6.42 6.84 0.416
## 3 Mitjana 7.75 7.56 7.94 0.384
Sí, se pueden afirmar diferencias claras entre los grupos. Los intervalos de confianza no se solapan de forma significativa entre sí: el grupo de uso Alta tiene puntuaciones claramente superiores (IC95%: 8.10–8.55), el grupo Mitjana ocupa una posición intermedia (7.56–7.94), y el grupo Baixa tiene puntuaciones notablemente más bajas (6.42–6.84). Como cada intervalo está bien separado de los demás, existe evidencia suficiente para concluir que el nivel de satisfacción difiere entre los tres grupos según la frecuencia de uso del servicio.
# Ejercicio 3.a
# Desviación estándar observada en la muestra
sd_punt <- sd(df$puntuacio, na.rm = TRUE)
# Parámetros del problema
E <- 0.2 # margen de error máximo
vc <- qnorm(0.975) # valor crítico para 95%
# Cálculo del tamaño mínimo de muestra
n_min <- (vc * sd_punt / E)^2
# Redondear hacia arriba
n_min_ceiling <- ceiling(n_min)
n_min_ceiling
## [1] 146
El tamaño mínimo de muestra necesario para estimar la media poblacional con un margen de error máximo de 0.2 puntos y un nivel de confianza del 95% es de 146 participantes. Este valor se obtiene utilizando la desviación estándar observada en los datos y aplicando la fórmula del tamaño muestral para la estimación de una media con precisión controlada. Esto significa que, si queremos garantizar que nuestra estimación de la satisfacción se desvíe como máximo 0.2 puntos del valor real poblacional, necesitamos encuestar al menos a 146 usuarios.