Cargar los paquetes
library(lsm) # Para acceder a la base de datos survey
library(knitr) # Para construir tablas
library(kableExtra) # Para mejorar la presentación de las tablas
Funciones especificas para calcular intervalos de confianza. Automatiza y facilita la interpretacion de cada procedimiento.
# ============================================================
# 1. Intervalo Z para una media con sigma conocida
# ============================================================
ic_media_z <- function(media, sigma, n, conf = 0.95,
digitos = 4) {
alpha <- 1 - conf
z <- qnorm(1 - alpha / 2)
error_estandar <- sigma / sqrt(n)
margen_error <- z * error_estandar
inferior <- media - margen_error
superior <- media + margen_error
resultado <- data.frame(
Medida = c(
"Media",
"\u03c3",
"Error estándar",
"n",
"Grado de confianza",
"Valor crítico",
"Margen de error",
"Extremo inferior",
"Extremo superior",
"Intervalo"
),
Resultado = c(
round(media, digitos),
round(sigma, digitos),
round(error_estandar, digitos),
n,
round(conf, digitos),
round(z, digitos),
round(margen_error, digitos),
round(inferior, digitos),
round(superior, digitos),
paste0(
round(media, digitos),
" ± ",
round(margen_error, digitos)
)
),
check.names = FALSE
)
knitr::kable(
resultado,
format = "html",
col.names = c("Medida", "Valor"),
align = c("l", "r")
)
}
# ============================================================
# 2. Intervalo t para una media con sigma desconocida
# ============================================================
ic_media_t <- function(media, s, n, conf = 0.95,
digitos = 4) {
alpha <- 1 - conf
gl <- n - 1
t_critico <- qt(1 - alpha / 2, df = gl)
error_estandar <- s / sqrt(n)
margen_error <- t_critico * error_estandar
inferior <- media - margen_error
superior <- media + margen_error
resultado <- data.frame(
Medida = c(
"Media",
"s",
"Error estándar",
"n",
"Grados de libertad",
"Grado de confianza",
"Valor crítico",
"Margen de error",
"Extremo inferior",
"Extremo superior",
"Intervalo"
),
Resultado = c(
round(media, digitos),
round(s, digitos),
round(error_estandar, digitos),
n,
gl,
round(conf, digitos),
round(t_critico, digitos),
round(margen_error, digitos),
round(inferior, digitos),
round(superior, digitos),
paste0(
round(media, digitos),
" ± ",
round(margen_error, digitos)
)
),
check.names = FALSE
)
knitr::kable(
resultado,
format = "html",
col.names = c("Medida", "Valor"),
align = c("l", "r")
)
}
# ============================================================
# 3. Intervalo Z para una proporción
# ============================================================
ic_proporcion <- function(exitos, n, conf = 0.95,
digitos = 4) {
if (exitos < 0 || exitos > n) {
stop("El número de éxitos debe estar entre 0 y n.")
}
alpha <- 1 - conf
z <- qnorm(1 - alpha / 2)
proporcion <- exitos / n
error_estandar <- sqrt(proporcion * (1 - proporcion) / n)
margen_error <- z * error_estandar
inferior <- max(0, proporcion - margen_error)
superior <- min(1, proporcion + margen_error)
resultado <- data.frame(
Medida = c(
"Éxitos",
"n",
"Proporción",
"Error estándar",
"Grado de confianza",
"Valor crítico",
"Margen de error",
"Extremo inferior",
"Extremo superior",
"Intervalo"
),
Resultado = c(
exitos,
n,
round(proporcion, digitos),
round(error_estandar, digitos),
round(conf, digitos),
round(z, digitos),
round(margen_error, digitos),
round(inferior, digitos),
round(superior, digitos),
paste0(
round(proporcion, digitos),
" ± ",
round(margen_error, digitos)
)
),
check.names = FALSE
)
knitr::kable(
resultado,
format = "html",
col.names = c("Medida", "Valor"),
align = c("l", "r")
)
}
#Base de datos
datosCompleto <- lsm::survey
# Para algunos ejemplos de esta sección utilizaremos únicamente las primeras 100 observaciones
df1 <- datosCompleto[1:100,]
# Para otros ejemplos de esta sección utilizaremos únicamente las primeras 29 observaciones
df2 <- datosCompleto[1:29,]
# Dimensión de las dos bases de datos (observaciones, variables)
dim(datosCompleto)
## [1] 800 66
dim(df1)
## [1] 100 66
dim(df2)
## [1] 29 66
Confianza con 0.95
resultado <- ic_media_z(
media = 100,
sigma = 15,
n = 25,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Media | 100 |
| σ | 15 |
| Error estándar | 3 |
| n | 25 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 5.8799 |
| Extremo inferior | 94.1201 |
| Extremo superior | 105.8799 |
| Intervalo | 100 ± 5.8799 |
Interpretacion 1: Con un 95% de confianza, la media poblacional real está entre 94.12 y 105.88. Interpretacion 2: Con una confianza del 95% la edad promedio de todos los estudiantes está entre 17.76 y 20.11 años
Confianza 90
# Elimina los valores perdidos (NA)
edad <- df1$Age[!is.na(df1$Age)]
# Calcula media y tamaño
media_edad <- mean(edad)
n_edad <- length(edad)
# Calcula el intervalo
resultado <- ic_media_z(
media = media_edad,
sigma = 6,
n = n_edad,
conf = 0.90
)
resultado
| Medida | Valor |
|---|---|
| Media | 18.9374 |
| σ | 6 |
| Error estándar | 0.6 |
| n | 100 |
| Grado de confianza | 0.9 |
| Valor crítico | 1.6449 |
| Margen de error | 0.9869 |
| Extremo inferior | 17.9505 |
| Extremo superior | 19.9243 |
| Intervalo | 18.9374 ± 0.9869 |
Con una confianza del 90% la edad promedio de todos los estudiantes está entre 17.95 y 19.92 años
Cuando la desviación estándar poblacional es desconocida, se utiliza la desviación estándar muestral (𝑠) y la distribución 𝑡 de Student.
resultado <- ic_media_t(
media = 19.48,
s = 0.98,
n = 6,
conf = 0.90
)
resultado
| Medida | Valor |
|---|---|
| Media | 19.48 |
| s | 0.98 |
| Error estándar | 0.4001 |
| n | 6 |
| Grados de libertad | 5 |
| Grado de confianza | 0.9 |
| Valor crítico | 2.015 |
| Margen de error | 0.8062 |
| Extremo inferior | 18.6738 |
| Extremo superior | 20.2862 |
| Intervalo | 19.48 ± 0.8062 |
Se calculó un intervalo de confianza del 90% para la media poblacional, a partir de una muestra pequeña (n = 6) en la que no se conoce la desviación estándar poblacional (σ), por lo que se usó la desviación estándar muestral (s = 0.98) y la distribución t de Student con 5 grados de libertad.
Resultado: con un 90% de confianza, la media poblacional se encuentra entre 18.6738 y 20.2862
table(df1$Gender)
##
## Female Male
## 49 51
Expresa el número de éxitos que corresponde al número de observaciones clasificadas como Female
# Elimina los valores perdidos (NA)
genero <- df1$Gender[!is.na(df1$Gender)]
# Calcula número de estudiantes de género Female (éxitos) y tamaño total de la muestra.
total_fem <- sum(genero == "Female")
n_fem <- length(genero)
# Calcula el intervalo
resultado <- ic_proporcion(
exitos = total_fem,
n = n_fem,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Éxitos | 49 |
| n | 100 |
| Proporción | 0.49 |
| Error estándar | 0.05 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 0.098 |
| Extremo inferior | 0.392 |
| Extremo superior | 0.588 |
| Intervalo | 0.49 ± 0.098 |
#EJERCICIO EN CLASE
#Base de datos
datosCompleto <- lsm::survey
# Para algunos ejemplos de esta sección utilizaremos únicamente las primeras 90 observaciones
df3 <- datosCompleto[1:90,]
# Para otros ejemplos de esta sección utilizaremos únicamente las primeras 60 observaciones
df4 <- datosCompleto[1:60,]
# Dimensión de las dos bases de datos (observaciones, variables)
dim(datosCompleto)
## [1] 800 66
dim(df3)
## [1] 90 66
dim(df4)
## [1] 60 66
Confianza con 95%
# Elimina los valores perdidos (NA)
altura <- df3$Height[!is.na(df3$Height)]
# Calcula media y tamaño
media_altura <- mean(altura)
n_altura <- length(altura)
# Calcula el intervalo
resultado <- ic_media_z(
media = media_altura,
sigma = 6,
n = n_altura,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Media | 1.6778 |
| σ | 6 |
| Error estándar | 0.6325 |
| n | 90 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 1.2396 |
| Extremo inferior | 0.4382 |
| Extremo superior | 2.9174 |
| Intervalo | 1.6778 ± 1.2396 |
Confianza 95%
# Elimina los valores perdidos (NA)
altura <- df3$Height[!is.na(df3$Height)]
# Calcula media y tamaño
media_altura <- mean(altura)
s_altura <- sd(altura)
n_altura <- length(altura)
# Calcula el intervalo
resultado <- ic_media_t(
media = media_altura,
s = s_altura,
n = n_altura,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Media | 1.6778 |
| s | 0.0985 |
| Error estándar | 0.0104 |
| n | 90 |
| Grados de libertad | 89 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.987 |
| Margen de error | 0.0206 |
| Extremo inferior | 1.6571 |
| Extremo superior | 1.6984 |
| Intervalo | 1.6778 ± 0.0206 |
#Intervalo de confianza según la proporción
table(df1$Race)
##
## Ethnic None
## 57 43
# Elimina los valores perdidos (NA)
raza <- df1$Race[!is.na(df1$Race)]
# Calcula número de estudiantes que no se identifican con ninguna etnia (éxitos) y tamaño total de la muestra.
total_non <- sum(raza == "None")
n_non <- length(raza)
# Calcula el intervalo
resultado <- ic_proporcion(
exitos = total_non,
n = n_non,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Éxitos | 43 |
| n | 100 |
| Proporción | 0.43 |
| Error estándar | 0.0495 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 0.097 |
| Extremo inferior | 0.333 |
| Extremo superior | 0.527 |
| Intervalo | 0.43 ± 0.097 |