R Markdown

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

Including Plots

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.

Carga de 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 para intervalos de confianza

# 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")
  )
}

Ejemplos realizados en clase

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

Intervalo para la media (Z)

# 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

Intervalo para la media (t)

# 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

Intervalo para una proporción

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

Función para tablas de frecuencias

table(df1$Gender)
## 
## Female   Male 
##     42     33

Ejercicio en claseee

Escogemos distintas variables para realizar el ejercicio práctico

Intervalo de Z

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

Interpretación:

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.

Intervalo de t

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

Interpretación:

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

Proporción

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

Interpretación:

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.