Distribución Normal e Intervalos de Confianza

Sesión del miércoles, 20 de agosto de 2025

Objetivo de la práctica

El objetivo de esta guía práctica es introducirnos en la inferencia estadística, revisando los conceptos y aplicaciones de la curva normal y las probabilidades bajo esta con puntajes Z, además del cálculo de intervalos de confianza.

En detalle, aprenderemos y recordaremos:

  1. Los conceptos de promedio y desviación estándar
  2. Estimación de puntaje Z
  3. Cómo calcular e interpretar intervalos de confianza

Revisión básica de R y RStudio

Antes de comenzar, repasemos algunos puntos clave:

Estructura de RStudio
  • Consola: aquí se pueden escribir y ejecutar comandos de manera directa.
  • Archivo de código (.R o .qmd): permite guardar el código, comentarios y reproducir el análisis.
  • Ejecutar código:
    • Selecciona la línea y presiona Ctrl + Enter (Windows/Linux) o Cmd + Enter (Mac).
    • También puedes ejecutar un bloque completo con el botón Run.
  • Comentarios: se escriben con #. Todo lo que sigue en la línea después de # no se ejecuta.
  • Atajos útiles:
    • Ctrl + Shift + C: comentar o descomentar líneas seleccionadas.
    • Ctrl + Shift + J: Añade pipe %>%
    • Ctrl + L: limpiar la consola.

Librerías

Cargaremos algunas librerías que serán necesarias en las diferentes partes de esta guía práctica:

  • pacman::p_load permite instalarlas automáticamente si no las tienes.
if (!require("pacman")) install.packages("pacman") # instalar pacman

pacman::p_load(dplyr, # para sintaxis
               Publish)   # para IC)    

options(scipen = 999) # para desactivar notacion cientifica
rm(list = ls())       # para limpiar el entorno de trabajo
¿Qué es un vector en R?

En R, un vector es la estructura de datos más básica:

  • Es una colección ordenada de valores del mismo tipo (números, caracteres o lógicos).

  • Por ejemplo, una columna en una base de datos

1. Promedio y desviación estándar

El promedio y la desviación estándar son conceptos fundamentales para continuar hacia la estadística inferencial. Repasemos estos conceptos mediante un ejercicio con datos simulados.

Primero, generaremos un vector de 100 valores aleatorios con μ=5 y σ=2, y lo visualizaremos con la función print.

set.seed(123) # Fijar la semilla para reproducibilidad
vector <- rnorm(100, mean = 5, sd = 2)
print(vector) # Ver el vector generado
  [1] 3.8790487 4.5396450 8.1174166 5.1410168 5.2585755 8.4301300 5.9218324
  [8] 2.4698775 3.6262943 4.1086761 7.4481636 5.7196277 5.8015429 5.2213654
 [15] 3.8883177 8.5738263 5.9957010 1.0667657 6.4027118 4.0544172 2.8643526
 [22] 4.5640502 2.9479911 3.5422175 3.7499215 1.6266134 6.6755741 5.3067462
 [29] 2.7237261 7.5076298 5.8529284 4.4098570 6.7902513 6.7562670 6.6431622
 [36] 6.3772805 6.1078353 4.8761766 4.3880747 4.2390580 3.6105860 4.5841654
 [43] 2.4692073 9.3379119 7.4159240 2.7537828 4.1942303 4.0666893 6.5599302
 [50] 4.8332619 5.5066370 4.9429065 4.9142591 7.7372046 4.5484580 8.0329412
 [57] 1.9024944 6.1692275 5.2477085 5.4318831 5.7592790 3.9953531 4.3335852
 [64] 2.9628492 2.8564175 5.6070573 5.8964196 5.1060085 6.8445349 9.1001694
 [71] 4.0179377 0.3816622 7.0114770 3.5815985 3.6239828 7.0511427 4.4304540
 [78] 2.5585646 5.3626070 4.7222173 5.0115284 5.7705608 4.2586799 6.2887531
 [85] 4.5590269 5.6635639 7.1936780 5.8703630 4.3481368 7.2976152 6.9870077
 [92] 6.0967939 5.4774635 3.7441878 7.7213049 3.7994808 9.3746660 8.0652213
 [99] 4.5285993 2.9471582

¿Cómo se vería la distribución de este vector aleatorio? Primero realizaremos un gráfico de histograma con la función hist y luego uno de cajas con la función boxplot.

hist(vector,main="Histograma del Vector",xlab="Valor",ylab="Frecuencia",col="cyan4",border="black")

boxplot(vector,main="Diagrama de Caja del Vector aleatorio",ylab="Valor",col="cyan3")

Ahora, calculamos la media y la desviación estándar del vector:

media <- mean(vector)
desv_estandar <- sd(vector)

cat("Media:", media, "\n")
Media: 5.180812 
cat("Desviación Estándar:", desv_estandar, "\n")
Desviación Estándar: 1.825632 

En el caso de nuestro vector, creado con datos aleatorios, la media x¯=5,18 nos muestra que el promedio de los datos se encuentra en torno a 5,2.

La desviación estándar corresponde, entonces, a un promedio de lo que cada valor se aleja del promedio del vector. En el caso de nuestro vector, s=1,82 nos muestra que en promedio los datos se alejan 1,82 puntos del promedio.

2. Puntajes Z

Al estandarizar las variables (como en la Curva Normal Estándar) lo que hacemos es expresar el valor de una distribución en términos de desviaciones estándar basados en la distribución normal. Esto nos permite comparar distribuciones distintas.

Al valor estandarizado lo llamamos puntaje Z, y corresponde a la cantidad de desviaciones estándar que nos alejamos del promedio (para cada variable con la que trabajemos).

2.1. Cálculo de probabilidades con puntaje Z

# Estandarizar el vector
z_scores <- scale(vector)

# Comparar valores originales y estandarizados
head(data.frame(Valor=vector, Z=z_scores), 10)
      Valor           Z
1  3.879049 -0.71304802
2  4.539645 -0.35120270
3  8.117417  1.60854170
4  5.141017 -0.02179795
5  5.258575  0.04259548
6  8.430130  1.77983218
7  5.921832  0.40589817
8  2.469878 -1.48492941
9  3.626294 -0.85149566
10 4.108676 -0.58726835

Los valores estandarizados o puntajes Z además nos permiten conocer probabilidades.

Con R es posible generar un conjunto de datos simulados con una distribución normal.

x_values <- seq(-4,4,length=1000)
y_values <- dnorm(x_values)
plot(x_values,y_values,type="l",xlab="Valor Z",ylab="Probabilidad",main="Distribución Normal")

Podemos preguntar qué parte de la curva cae por debajo de un valor particular. Por ejemplo, preguntaremos sobre el valor 0 antes de ejecutar el código. Piense ¿cuál debería ser la respuesta?

# Probabilidades acumuladas
pnorm(0)       # P(Z <= 0)
[1] 0.5

Ahora probemos los valores Z de +1,96 y -1,96.

Sabemos que estos valores aproximados marcan el 2,5% superior e inferior de la distribución normal estándar. Esto corresponde a un alfa típico α=0,05 para una prueba de hipótesis de dos colas.

pnorm(1.96)    # P(Z <= 1.96)
[1] 0.9750021
pnorm(-1.96)   # P(Z <= -1.96)
[1] 0.0249979

La respuesta nos dice lo que ya sabemos: el 97,5% de la distribución normal ocurre por debajo del valor z de 1,96.

y si lo visualizamos:

plot(x_values, y_values, type="l", lty=1, xlab="Z value", ylab="Probability", main="Normal Distribution") +
abline(v = 1.96)

integer(0)

3. Intervalos de confianza

Un intervalo de confianza es un rango dentro del cual es probable que se encuentre un parámetro poblacional con un nivel de confianza específico. Además, proporciona información sobre la precisión de nuestras estimaciones.

3.1. Cálculo de intervalos de confianza para medias

En el caso de nuestro vector aleatorio, un intervalo de confianza para la media se puede calcular de dos maneras:

Primero, con la función t.test que, por defecto, estima el intervalo de confianza del 95%

# Calcular un intervalo de confianza para la media
intervalo_confianza <- t.test(vector)$conf.int  # Intervalo de confianza del 95% para la media
intervalo_confianza
[1] 4.818567 5.543057
attr(,"conf.level")
[1] 0.95

Otra opción es con la función ci.mean del paquete Publish. Con esta función también podemos especificar si queremos estimar los CI al 95% (alpha = 0.05) o al 99% (alpha = 0.05)

Publish::ci.mean(vector, alpha = 0.05)
 mean CI-95%     
 5.18 [4.82;5.54]

Contamos con una media 5.18 como estimación puntual. Pero también podemos decir que con un 95% de confianza el parámetro poblacional se encontrará entre 4.82 y 5.54.

Publish::ci.mean(vector, alpha = 0.01)
 mean CI-99%     
 5.18 [4.70;5.66]

Contamos con una media 5.18 como estimación puntual. Pero también podemos decir que con un 99% de confianza el parámetro poblacional se encontrará entre 4.70 y 5.66.

Resumen

Hoy pudimos aprender y recordar:

  1. Los conceptos de promedio y dispersión
  2. Estimación de puntajes Z
  3. Cálculo de intervalos de confianza

Ejercicio práctico de trabajo autónomo

En este ejercicio aplicara los tres pasos vistos en el taller: cálculo de media y desviación estándar, puntajes Z e intervalos de confianza, pero con nuevos datos simulados.

Instrucciones

  1. Genere un vector de datos simulados
  • Cree un vector con 500 observaciones distribuidas normalmente
  • Debe tener μ=10 y σ=5
set.seed(123) # Fijar la semilla para reproducibilidad
vector2 <- rnorm(500, mean = 10, sd = 5) # cambiamos a vector2 para no confundir con el otro
  1. Calcule y describa la distribución
  • Obtenga la media y desviación estándar de su vector.
media <- mean(vector2)
desv_estandar <- sd(vector2)

cat("Media:", media, "\n")
Media: 10.17295 
cat("Desviación Estándar:", desv_estandar, "\n")
Desviación Estándar: 4.863847 
  • Visualice la distribución en un histograma
hist(vector2,main="Histograma del Vector",xlab="Valor",ylab="Frecuencia",col="cyan4",border="black")

  1. Estandarice los datos (puntajes Z)
  • Transforme tu vector a puntajes Z usando scale().
z_scores2 <- scale(vector2)
  • Muestre los primeros 10 valores (head()).
# Comparar valores originales y estandarizados
head(data.frame(Valor=vector2, Z=z_scores2), 10)
       Valor           Z
1   7.197622 -0.61172371
2   8.849113 -0.27217955
3  17.793542  1.56678232
4  10.352542  0.03692339
5  10.646439  0.09734814
6  18.575325  1.72751586
7  12.304581  0.43825984
8   3.674694 -1.33603268
9   6.565736 -0.74163858
10  7.771690 -0.49369607
  • Muestre también los últimos 10 valores (tail()).
# Comparar valores originales y estandarizados
tail(data.frame(Valor=vector2, Z=z_scores2), 10)
        Valor          Z
491  9.471079 -0.1443041
492 17.020251  1.4077949
493 16.470420  1.2947503
494  4.550041 -1.1560626
495  5.634645 -0.9330695
496  3.209605 -1.4316543
497 10.909236  0.1513789
498 10.824204  0.1338965
499 11.820573  0.3387486
500 12.760789  0.5320555
  • ¿Cuál es el máximo puntaje Z y el mínimo puntaje Z?
max_z <- max(z_scores2)
min_z <- min(z_scores2)
  • Verifique la media y sd
mean(z_scores2) # Debe ser 0
[1] -1.457272e-16
sd(z_scores2)    # Debe ser 1
[1] 1
  1. Calcule el intervalo de confianza (IC 95%) para la media
  • Estime el IC para un 95% de confianza
# Calcular un intervalo de confianza para la media
intervalo_confianza <- t.test(vector2)$conf.int  # Intervalo de confianza del 95% para la media
intervalo_confianza
[1]  9.745589 10.600316
attr(,"conf.level")
[1] 0.95

Referencias

Análisis de datos en Lenguaje R