if (!require("pacman")) install.packages("pacman") # instalar pacman
::p_load(dplyr, # para sintaxis
pacman# para IC)
Publish)
options(scipen = 999) # para desactivar notacion cientifica
rm(list = ls()) # para limpiar el entorno de trabajo
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:
- Los conceptos de promedio y desviación estándar
- Estimación de puntaje Z
- Cómo calcular e interpretar intervalos de confianza
Revisión básica de R y RStudio
Antes de comenzar, repasemos algunos puntos clave:
- 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) oCmd + Enter
(Mac).
- También puedes ejecutar un bloque completo con el botón Run.
- Selecciona la línea y presiona
- 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.
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 print
.
set.seed(123) # Fijar la semilla para reproducibilidad
<- rnorm(100, mean = 5, sd = 2)
vector 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:
<- mean(vector)
media <- sd(vector)
desv_estandar
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
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,
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
<- scale(vector)
z_scores
# 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.
<- seq(-4,4,length=1000)
x_values <- dnorm(x_values)
y_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
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
<- t.test(vector)$conf.int # Intervalo de confianza del 95% para la media
intervalo_confianza 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)
::ci.mean(vector, alpha = 0.05) Publish
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.
::ci.mean(vector, alpha = 0.01) Publish
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:
- Los conceptos de promedio y dispersión
- Estimación de puntajes Z
- 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
- Genere un vector de datos simulados
- Cree un vector con 500 observaciones distribuidas normalmente
- Debe tener
y
set.seed(123) # Fijar la semilla para reproducibilidad
<- rnorm(500, mean = 10, sd = 5) # cambiamos a vector2 para no confundir con el otro vector2
- Calcule y describa la distribución
- Obtenga la media y desviación estándar de su vector.
<- mean(vector2)
media <- sd(vector2)
desv_estandar
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")
- Estandarice los datos (puntajes Z)
- Transforme tu vector a puntajes Z usando scale().
<- scale(vector2) z_scores2
- 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_scores2)
max_z <- min(z_scores2) min_z
- Verifique la media y sd
mean(z_scores2) # Debe ser 0
[1] -1.457272e-16
sd(z_scores2) # Debe ser 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
<- t.test(vector2)$conf.int # Intervalo de confianza del 95% para la media
intervalo_confianza intervalo_confianza
[1] 9.745589 10.600316
attr(,"conf.level")
[1] 0.95