Practica 1: Estimación de Parámetros

Hoy vamos a dar los primeros pasos en la inferencia estadística. Es decir, vamos a ver cómo, a partir de una muestra, podemos decir algo sobre una población completa. Pero antes de meternos con R, vamos a repasar algunos conceptos clave.


Conceptos clave

Población y muestra

  • Población: El conjunto completo de individuos, elementos o unidades sobre el que queremos obtener información. Ej: todos los estudiantes de una universidad.
  • Muestra: Un subconjunto representativo de la población. Ej: 100 estudiantes seleccionados aleatoriamente de una determinada universidad.

¿Por qué no siempre podemos estudiar a toda la población?


Parámetro y estadístico

  • Parámetro: Es una característica desconocida de la población. Ej: la media real de la altura de los estudiantes de una universidad.
  • Estadístico: Es una medida calculada a partir de la muestra, que usamos para estimar un parámetro. Ej: la media de altura en una muestra de 100 estudiantes de dicha universidad.

El parámetro es lo que queremos conocer, el estadístico es lo que podemos calcular.


Inferencia estadística

Como no podemos conocer el parámetro exacto de la población, usamos una muestra para inferir o estimar ese valor. Eso es lo que se llama inferencia estadística. Implica:

  • Estimar parámetros (media, proporción, dispersión, etc.)
  • Cuantificar el error (intervalos de confianza, error estándar)
  • Hacer pruebas (hipótesis, que veremos más adelante)

Ejemplo

Supongamos que queremos saber la estatura promedio de los habitantes de una ciudad. ¿Salimos a medir a los 400.000 habitantes? Imposible. Lo que hacemos es tomar una muestra, calcular la media muestral, y decir: ‘creemos que la estatura promedio está alrededor de este valor, con cierto grado de incertidumbre’. Eso es inferencia.


Trabajo con R

Ahora que tenemos claros estos conceptos, vamos a simular una población con R, extraer muestras, y ver cómo los estadísticos cambian con cada muestra. Vamos a empezar a ver cómo funciona la inferencia en la práctica.


Simulación de Muestreo

La idea de este bloque es mostrar cómo los estadísticos muestrales (como la media) varían de una muestra a otra, y cómo, al tomar muchas muestras, se forma una distribución muestral que nos permite hacer inferencia sobre el parámetro poblacional.

Creación de una Población Simulada

Vamos a simular una población completa. Supongamos que estamos interesados en estudiar la altura (en cm) de todas los estudiantes en una universidad ficticia. Generamos 15.000 datos con distribución normal.

# Fijamos la semilla para reproducibilidad
set.seed(123)

# Simulamos una población de 15.000 alumnos con altura normal (media 170 cm, desvío 10 cm)
poblacion <- rnorm(15000, mean = 170, sd = 10)

# Calculamos la media poblacional
media_poblacional <- mean(poblacion)

# Visualizamos la población
hist(poblacion, breaks = 50, col = "lightgray", main = "Distribución de alturas (población)",
     xlab = "Altura (cm)")
abline(v = mean(poblacion), col = "red", lwd = 3, lty = 2)
text(x = media_poblacional,
     y = 1200, # ajustá este valor según la altura del gráfico
     labels = paste("Media =", round(media_poblacional, 2)),
     pos = 4, col = "red")

Tomar una sola muestra

Extraemos una muestra aleatoria de 100 estudiantes. Calculamos su media. Esta media no va a coincidir exactamente con la media real, pero se le va a parecer.

# Tomamos una muestra de 100 personas
muestra <- sample(poblacion, size = 100)

# Calculamos su media
media_muestral <- mean(muestra)

# Mostramos la comparación
comp <-paste("Media poblacional:", round(media_poblacional,2), "\n Media muestral:", round(media_muestral,2))
cat(comp)
## Media poblacional: 170.01 
##  Media muestral: 170.74

¿Por qué no son iguales? ¿Qué pasaría si tomamos otra muestra?

Repetir el muestreo muchas veces

Ahora vamos a repetir este proceso 1000 veces. En cada iteración tomamos una muestra distinta y calculamos su media. Esto generara una distribución de medias muestrales >

# Repetimos 1000 veces la extracción de muestras y cálculo de la media
medias_muestrales <- replicate(1000, mean(sample(poblacion, size = 100)))

# Visualizamos la distribución
hist(medias_muestrales, breaks = 40, col = "skyblue",
     main = "Distribución de medias muestrales (n = 100)",
     xlab = "Media muestral", ylab = ("Frecuencia"))
abline(v = mean(poblacion), col = "red", lwd = 2, lty = 2)
abline(v = mean(medias_muestrales), col = "blue", lwd = 2, lty = 2)

  • La media de la distribución muestral está muy cerca de la media poblacional, entonces podemos decir que los estimadores son insesgados

  • La variabilidad de las medias depende del tamaño de muestra.

  • Esta distribución muestral es la base para construir intervalos de confianza.


Actividad 1

Ahora cambien el tamaño de muestra a 30 y luego a 500. Observen cómo cambia la forma del histograma y la dispersión de la distribución de medias ¿La variabilidad de las medias depende del tamaño de muestra?

# Ejemplo con n = 30
medias_n30 <- replicate(1000, mean(sample(poblacion, 30)))
hist(medias_n30, breaks = 40, col = "lightgreen",
     main = "Distribución de medias (n = 30)", xlab = "Media")
abline(v = mean(poblacion), col = "red", lwd = 4, lty = 2)
abline(v = mean(medias_n30), col = "darkgreen", lwd = 4, lty = 3)

# Ejemplo con n = 500
medias_n500 <- replicate(1000, mean(sample(poblacion, 500)))
hist(medias_n500, breaks = 40, col = "orange",
     main = "Distribución de medias (n = 500)", xlab = "Media")
abline(v = mean(poblacion), col = "red", lwd = 4, lty = 2)
abline(v = mean(medias_muestrales), col = "darkorange4", lwd = 4, lty = 3)


Estimación puntual y por intervalo de la media poblacional

Recordemos:
Estimación puntual: un único valor para estimar un parámetro. Ej: media muestral se usa para estimar la media poblacional.
Estimación por intervalo: un rango de valores que, con cierto nivel de confianza, contiene al parámetro poblacional.
Intervalo de confianza (IC): se construye a partir de la media muestral, el error estándar y el valor crítico de la distribución (normal o t).

1. Utilizando la muestra simulada, hacemos la estimación puntual

muestra <- sample(poblacion, size = 100)
media_muestral <- mean(muestra)

paste("Media muestral:", round(media_muestral, 2))
## [1] "Media muestral: 168.9"

Una estimacion puntual de la media poblacional de la altura de los estudiantes de una determinada universidad es 168.9


2. Calculamos un intervalo de confianza para la media poblacional

Posibles escenarios cuando queremos calcular un intervalo de confianza para la media poblacional:

  1. ¿Conocemos la desviación estándar poblacional?

    • : usamos la distribución normal (z).

    • No: usamos la distribución t de Student (más común en la práctica).

  2. ¿El tamaño de la muestra es grande o pequeño?

    • Muestra grande (n ≥ 30): el Teorema Central del Límite nos permite usar normal incluso si la población no es normal.

    • Muestra pequeña (n < 30):

      • Si la población es normal, usamos t de Student.

      • Si la población no es normal, debemos ser cautelosos (usar métodos no paramétricos o aumentar el tamaño muestral).


Caso 1: σ conocida y n ≥ 30

Usamos la siguiente formula:

\[IC_{95\%} = \bar{x} \pm z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}\]

Código en R

# Datos del ejemplo
desvio_poblacional <- 9
n <- length(muestra)
z <- qnorm(0.975)  # Valor z para 95%

# Cálculo del error estándar
ee <- desvio_poblacional / sqrt(n)

# Cálculo de los límites
li <- media_muestral - z * ee
ls <- media_muestral + z * ee

# Mostrar resultados
paste("IC 95% para la media poblacional:", round(li, 2), "-", round(ls, 2), "cm")
## [1] "IC 95% para la media poblacional: 167.13 - 170.66 cm"

Con un 95% de confianza, se estima que la media de altura de los estudiantes universitarios está entre 167.13 cm y 170.66 cm.

Visualización del intervalo

# Visual del intervalo
plot(1, type = "n", xlim = c(165, 180), ylim = c(0, 1),
     xlab = "Altura (cm)", ylab = "", yaxt = "n",
     main = "Intervalo de confianza del 95%")
abline(v = mean(poblacion), col = "red", lwd = 2, lty = 2)
segments(li, 0.5, ls, 0.5, col = "blue", lwd = 3)
points(media_muestral, 0.5, pch = 19)
text(mean(poblacion), 0.6, "Media poblacional", col = "red", pos = 3)
text(media_muestral, 0.6, paste("Media:", round(media_muestral,2), "cm"), col= "blue", pos = 1)

Caso 2: σ desconocida y n ≥ 30

Usamos la siguiente formula:

\[IC_{95\%} =\bar{x} \pm z_{\alpha/2} \cdot \frac{s}{\sqrt{n}}\] Código en R

# Nivel de confianza
z <- qnorm(0.975)  # z para 95%
desvio_muestral <- sd(muestra)
n <- length(muestra)
ee <- desvio_muestral / sqrt(n)

# Limites del IC
li <- media_muestral - z * ee
ls <- media_muestral + z * ee

paste("IC 95% para la media poblacional:", round(li, 2), "-", round(ls, 2), "cm")
## [1] "IC 95% para la media poblacional: 166.92 - 170.88 cm"

Con un 95% de confianza, se estima que la media de altura de los estudiantes universitarios está entre 166.92 cm y 170.88 cm.

Visualización del intervalo

# Graficamos el intervalo con media muestral y media poblacional
plot(1, type = "n", xlim = c(165, 180), ylim = c(0, 1),
     xlab = "Altura (cm)", ylab = "", yaxt = "n",
     main = "Intervalo de confianza del 95%")
abline(v = mean(poblacion), col = "red", lwd = 2, lty = 2)
segments(li, 0.5, ls, 0.5, col = "blue", lwd = 3)
points(media_muestral, 0.5, pch = 19)
text(mean(poblacion), 0.6, "Media poblacional", col = "red", pos = 3)
text(media_muestral, 0.6, paste("Media:", round(media_muestral,2), "cm"), col= "blue", pos = 1)

Caso 3: σ desconocida y n < 30

Usamos la siguiente formula:

\[IC_{95\%} =\bar{x} \pm t_{\alpha/2, \, df=n-1} \cdot \frac{s}{\sqrt{n}}\] Código en R

# Nivel de confianza
n <- 25
gl <- n - 1
muestra <- sample(poblacion, size = n)
t <- qt(0.975, df = gl)  # Valor crítico t para 95% con 24 gl

media_muestral <- mean(muestra)
desvio_muestral <- sd(muestra)
ee <- desvio_muestral / sqrt(n)

# Limites del IC
li <- media_muestral - t * ee
ls <- media_muestral + t * ee

paste("IC 95% para la media poblacional:", round(li, 2), "-", round(ls, 2), "cm")
## [1] "IC 95% para la media poblacional: 164.57 - 173.6 cm"

Con un 95% de confianza, se estima que la media de altura de los estudiantes universitarios está entre 164.57 cm y 173.6 cm.

Visualización del intervalo

# Graficamos el intervalo con media muestral y media poblacional
plot(1, type = "n", xlim = c(165, 180), ylim = c(0, 1),
     xlab = "Altura (cm)", ylab = "", yaxt = "n",
     main = "Intervalo de confianza del 95%")
abline(v = mean(poblacion), col = "red", lwd = 2, lty = 2)
segments(li, 0.5, ls, 0.5, col = "blue", lwd = 3)
points(media_muestral, 0.5, pch = 19)
text(mean(poblacion), 0.6, "Media poblacional", col = "red", pos = 3)
text(media_muestral, 0.6, paste("Media:", round(media_muestral,2), "cm"), col= "blue", pos = 1)


Estimación por intervalo (metodo t.test)

La función t.test() en R se utiliza para realizar el test t de Student, una prueba estadística muy común que permite comparar medias, pero en este caso nos enfocamos en el uso para calcular el intervalo de confianza para la media poblacional cuando la desviación estándar poblacional es desconocida. Se lo utiliza cuando no conocemos la desviación estándar de la población (lo cual es lo más común en la vida real), y debemos estimarla a partir de la muestra. Esto introduce mayor incertidumbre. En estos casos, usamos la distribución t de Student, que es similar a la normal pero con colas más gruesas para reflejar esa incertidumbre adicional, sobre todo en muestras pequeñas. Además, suponemos que la variable sigue (al menos aproximadamente) una distribución normal, o que la muestra es suficientemente grande como para aplicar el teorema central del límite.

Código en R

# Aplicamos el t.test
t.test(muestra, conf.level = 0.95)
## 
##  One Sample t-test
## 
## data:  muestra
## t = 77.268, df = 24, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  164.5661 173.5989
## sample estimates:
## mean of x 
##  169.0825

Este comando devuelve varios items pero a nosotros por ahora solo nos interesa el intervalo de confianza para la media poblacional. Este test tambien da una buena aproximacion en la situacion 2, donde la muestra es mayor a 30 porque la distribucion t se aproxima a la distribucion normal estandar cuando n es grande. En el caso de la situacion 1, cuando se conoce la dispersion estandar poblaciona, se aplica el z.test, pero este no se encuentra en R base, pero sí podés usar z.test() si cargás el paquete BSDA.

# Paso 1: Cargar el paquete
#install.packages("BSDA") # Solo la primera vez
library(BSDA)
## Cargando paquete requerido: lattice
## 
## Adjuntando el paquete: 'BSDA'
## The following object is masked from 'package:datasets':
## 
##     Orange
z.test(muestra, sigma.x = 9, conf.level = 0.95)
## 
##  One-sample z-Test
## 
## data:  muestra
## z = 93.935, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  165.5546 172.6104
## sample estimates:
## mean of x 
##  169.0825

Actividad 2

Repetir el muestreo 100 veces y calcular el IC en cada caso para ver cuántos contienen la media real. Esto introduce empíricamente la interpretación de confianza.

reps <- 100
ics <- matrix(NA, nrow = reps, ncol = 2)
contiene <- rep(FALSE, reps)

for (i in 1:reps) {
  muestra <- sample(poblacion, size = 100)
  media <- mean(muestra)
  sd_m <- sd(muestra)
  ee <- sd_m / sqrt(100)
  li <- media - qnorm(0.975) * ee
  ls <- media + qnorm(0.975) * ee
  ics[i, ] <- c(li, ls)
  contiene[i] <- (mean(poblacion) >= li & mean(poblacion) <= ls)
}

# Porcentaje de intervalos que contienen la media poblacional
mean(contiene)
## [1] 0.97

Eso significaría que 97 de los 100 intervalos contienen la media real, lo cual es muy cercano al 95%.


Estimación puntual y por intervalo de la proporción poblacional

¿Qué es la proporción poblacional?

La proporción poblacional (\(p\)) representa la parte de la población que posee una determinada característica.

Por ejemplo:

  • Proporción de estudiantes que aprueban una materia.
  • Proporción de usuarios que prefieren un producto.
  • Proporción de votantes a favor de una propuesta.

Como no se suele conocer \(p\), se la estima con la proporción muestral:

\[\hat{p} = \frac{x}{n}\]

donde:

  • \(x\) = cantidad de casos con la característica.
  • \(n\) = tamaño de la muestra.

Intervalo de confianza para una proporción

Cuando se cumple que \(n \hat{p} \geq 5\) y \(n(1 - \hat{p}) \geq 5\), se puede usar la distribución normal (por el teorema del límite central).

\(IC = \hat{p} \pm z_{\alpha/2} \cdot \sqrt{ \frac{ \hat{p}(1 - \hat{p}) }{n} }\)

Ejemplo práctico en R

Situación: En una encuesta a 200 estudiantes, 60 dijeron que usan transporte público para ir a la universidad. Estimemos la proporción poblacional con un intervalo de confianza del 95%.

Verificación:*

  1. \(n \cdot \hat{p} = 200 \cdot 0.3 = 60 \geq 5\)
  2. \(n \cdot (1 - \hat{p}) = 200 \cdot 0.7 = 140 \geq 5\)
# Datos
x <- 60        # cantidad de éxitos
n <- 200       # tamaño muestral
p_hat <- x / n  # proporción muestral
z <- qnorm(0.975)  # z para 95%

# Error estándar
ee <- sqrt(p_hat * (1 - p_hat) / n)

# Intervalo de confianza
li <- p_hat - z * ee
ls <- p_hat + z * ee

paste("IC= ",li, " - ", ls)
## [1] "IC=  0.236489908189888  -  0.363510091810112"

Alternativa con prop.test()

R tiene una función muy útil para esto:

prop.test(x = 60, n = 200, conf.level = 0.95, correct = FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  60 out of 200, null probability 0.5
## X-squared = 32, df = 1, p-value = 1.542e-08
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.2407474 0.3667907
## sample estimates:
##   p 
## 0.3

correct = FALSE evita la corrección de continuidad.

¿Cuándo usar la corrección?

  • Muestras pequeñas: conviene aplicarla para no subestimar el error.

  • Muestras grandes: su impacto es mínimo y suele desactivarse (correct = FALSE) para simplificar.

Alternativa: binom.test()

Si tenés una muestra muy chica o proporciones extremas, lo más recomendable es:

binom.test(x = 3, n = 10, conf.level = 0.95)
## 
##  Exact binomial test
## 
## data:  3 and 10
## number of successes = 3, number of trials = 10, p-value = 0.3438
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
##  0.06673951 0.65245285
## sample estimates:
## probability of success 
##                    0.3

Ese test no necesita corrección de continuidad porque no usa la normal. Calcula los valores exactos con la binomial.


Estimación puntual y por intervalo de la diferencia de medias

Caso A: Muestras Independientes

# Dos vectores de datos
grupo1 <- sample(poblacion,150)
grupo2 <- sample(poblacion,150)

# Vemos resumen
summary(grupo1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   144.9   164.9   170.8   170.6   176.9   193.1
summary(grupo2)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   139.7   162.9   168.4   168.5   174.8   194.6
#Estimación puntual
mean(grupo1) - mean(grupo2)
## [1] 2.088473
# t.test para muestras independientes
t.test(grupo1, grupo2, var.equal = TRUE)  # Asume varianzas iguales
## 
##  Two Sample t-test
## 
## data:  grupo1 and grupo2
## t = 1.9013, df = 298, p-value = 0.05822
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.07318176  4.25012831
## sample estimates:
## mean of x mean of y 
##  170.5680  168.4795

Caso B: muestras dependientes (pareadas)

Este tipo de análisis es ideal cuando las mediciones se hacen sobre los mismos sujetos antes y después de una intervención, o bien cuando hay un emparejamiento natural (como gemelos, parejas, etc.).

Veamos un ejemplo donde se les toma un examen a un grupo de universitarios, se los evalua, se les brinda una clase de consulta, y se los vuelve a evaluar para verficar la eficacia de la clase de consulta.

n <- 20
antes <- rnorm(n, mean = 50, sd = 10)
despues <- antes + rnorm(n, mean = 20, sd = 5)  # Aumento promedio de 5 unidades

# Guardamos en un data frame
datos <- data.frame(
  estudiante = 1:n,
  antes = round(antes,2),
  despues = round(despues,2)
)

head(datos)
#Prueba t para muestras pareadas
t.test(datos$despues, datos$antes, paired = TRUE)
## 
##  Paired t-test
## 
## data:  datos$despues and datos$antes
## t = 14.303, df = 19, p-value = 1.267e-11
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  17.55735 23.57665
## sample estimates:
## mean difference 
##          20.567

Estimación puntual y por intervalo de la diferencia de proporciones

Supongamos que queremos comparar las tasas de aprobación de un examen final entre estudiantes de dos carreras distintas:

  • En Carrera A, de 100 estudiantes, aprobaron 65.

  • En Carrera B, de 120 estudiantes, aprobaron 78.

Queremos estimar un intervalo de confianza del 95% para la diferencia entre las proporciones de aprobación de ambas carreras.

# Aprobados y totales por grupo
x <- c(65, 85)          # número de aprobados en cada carrera
n <- c(100, 120)        # total de estudiantes en cada carrera

#Calcular el intervalo de confianza
prop.test(x = x, n = n, correct = FALSE)  # Sin corrección de continuidad
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  x out of n
## X-squared = 0.85556, df = 1, p-value = 0.355
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.18224032  0.06557365
## sample estimates:
##    prop 1    prop 2 
## 0.6500000 0.7083333