This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.
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
# 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")
)
}
Data frame
#Base de datos
datosCompleto <- lsm::survey
# Para algunos ejemplos de esta sección utilizaremos únicamente las primeras 100 observaciones
df1 <- datosCompleto[1:75,]
# Para otros ejemplos de esta sección utilizaremos únicamente las primeras 29 observaciones
df2 <- datosCompleto[1:16,]
# Dimensión de las dos bases de datos (observaciones, variables)
dim(datosCompleto)
## [1] 800 66
dim(df1)
## [1] 75 66
dim(df2)
## [1] 16 66
# 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.95
)
resultado
| Medida | Valor |
|---|---|
| Media | 18.9073 |
| σ | 6 |
| Error estándar | 0.6928 |
| n | 75 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 1.3579 |
| Extremo inferior | 17.5494 |
| Extremo superior | 20.2652 |
| Intervalo | 18.9073 ± 1.3579 |
# Elimina los valores perdidos (NA)
edad <- df2$Age[!is.na(df2$Age)]
# Calcula media y tamaño
media_edad <- mean(edad)
s_edad <- sd(edad)
n_edad <- length(edad)
# Calcula el intervalo
resultado <- ic_media_t(
media = media_edad,
s = s_edad,
n = n_edad,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Media | 18.7925 |
| s | 1.7214 |
| Error estándar | 0.4303 |
| n | 16 |
| Grados de libertad | 15 |
| Grado de confianza | 0.95 |
| Valor crítico | 2.1314 |
| Margen de error | 0.9173 |
| Extremo inferior | 17.8752 |
| Extremo superior | 19.7098 |
| Intervalo | 18.7925 ± 0.9173 |
Proporción de mujeres
# 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 | 42 |
| n | 75 |
| Proporción | 0.56 |
| Error estándar | 0.0573 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 0.1123 |
| Extremo inferior | 0.4477 |
| Extremo superior | 0.6723 |
| Intervalo | 0.56 ± 0.1123 |
Proporción de hombres
# 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_Male <- sum(genero == "Male")
n_Male <- length(genero)
# Calcula el intervalo
resultado <- ic_proporcion(
exitos = total_Male,
n = n_Male,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Éxitos | 33 |
| n | 75 |
| Proporción | 0.44 |
| Error estándar | 0.0573 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 0.1123 |
| Extremo inferior | 0.3277 |
| Extremo superior | 0.5523 |
| Intervalo | 0.44 ± 0.1123 |
table(df1$Gender)
##
## Female Male
## 42 33
Escogemos distintas variables para realizar el ejercicio práctico
Se aplica cuando conocemos la desviación estándar poblacional o tenemos muestras grandes.
# Elimina los valores perdidos (NA)
Peso <- df1$Weight[!is.na(df1$Weight)]
# Calcula media y tamaño
media_Peso<- mean(Peso)
n_Peso <- length(Peso)
# Calcula el intervalo
resultado <- ic_media_z(
media = media_Peso,
sigma = 6,
n = n_Peso,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Media | 74.8907 |
| σ | 6 |
| Error estándar | 0.6928 |
| n | 75 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 1.3579 |
| Extremo inferior | 73.5328 |
| Extremo superior | 76.2486 |
| Intervalo | 74.8907 ± 1.3579 |
Se tiene un 95% de confianza de que el peso medio verdadero de toda la población estudiantil se ubica entre el límite inferior y el límite superior obtenidos.
Se aplica cuando la muestra es pequeña (n < 30) y la desviación estándar poblacional es desconocida, estimándola mediante la desviación muestral.
# Elimina los valores perdidos (NA)
Puntaje <- df2$Score[!is.na(df2$Score)]
# Calcula media y tamaño
media_Puntaje <- mean(Puntaje)
s_Puntaje <- sd(Puntaje)
n_Puntaje <- length(Puntaje)
# Calcula el intervalo
resultado <- ic_media_t(
media = media_Puntaje,
s = s_Puntaje,
n = n_Puntaje,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Media | 49.8125 |
| s | 20.3182 |
| Error estándar | 5.0795 |
| n | 16 |
| Grados de libertad | 15 |
| Grado de confianza | 0.95 |
| Valor crítico | 2.1314 |
| Margen de error | 10.8268 |
| Extremo inferior | 38.9857 |
| Extremo superior | 60.6393 |
| Intervalo | 49.8125 ± 10.8268 |
Se concluye con un 95% de certeza que la media real del puntaje de los estudiantes en la población está acotada por los límites inferior y superior calculados
Permite inferir el porcentaje o proporción de una variable cualitativa/categórica dentro de la población.
# Elimina los valores perdidos (NA)
Escuela <- df1$School[!is.na(df1$School)]
# Calcula número de estudiantes de Escuela Private y tamaño total de la muestra.
total_School <- sum(Escuela == "Private")
n_School <- length(Escuela)
# Calcula el intervalo
resultado <- ic_proporcion(
exitos = total_School,
n = n_School,
conf = 0.95
)
resultado
| Medida | Valor |
|---|---|
| Éxitos | 38 |
| n | 75 |
| Proporción | 0.5067 |
| Error estándar | 0.0577 |
| Grado de confianza | 0.95 |
| Valor crítico | 1.96 |
| Margen de error | 0.1131 |
| Extremo inferior | 0.3935 |
| Extremo superior | 0.6198 |
| Intervalo | 0.5067 ± 0.1131 |
Se estima con un 95% de confianza que el porcentaje verdadero de estudiantes procedentes de instituciones privadas en la población total se encuentra acotado en el intervalo determinado.