Instalación de Paquetes

Instalamos los paquetes con los que vamos a trabajar.

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

Pegamos las funciones que nos permitirán calcular los 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")
  )
}



# ============================================================
# 4. Intervalo para una varianza
# ============================================================

ic_varianza <- function(varianza, n, conf = 0.95,
                        digitos = 4) {
  
  if (varianza <= 0) {
    stop("La varianza debe ser positiva.")
  }
  
  alpha <- 1 - conf
  gl <- n - 1
  
  chi_inferior <- qchisq(alpha / 2, df = gl)
  chi_superior <- qchisq(1 - alpha / 2, df = gl)
  
  inferior <- gl * varianza / chi_superior
  superior <- gl * varianza / chi_inferior
  
  resultado <- data.frame(
    Medida = c(
      "Varianza muestral",
      "n",
      "Grados de libertad",
      "Grado de confianza",
      "Cuantil inferior",
      "Cuantil superior",
      "Extremo inferior",
      "Extremo superior",
      "Intervalo"
    ),
    
    Resultado = c(
      round(varianza, digitos),
      n,
      gl,
      round(conf, digitos),
      round(chi_inferior, digitos),
      round(chi_superior, digitos),
      round(inferior, digitos),
      round(superior, digitos),
      paste0(
        "(",
        round(inferior, digitos),
        ", ",
        round(superior, digitos),
        ")"
      )
    ),
    
    check.names = FALSE
  )
  
  knitr::kable(
    resultado,
    format = "html",
    col.names = c("Medida", "Valor"),
    align = c("l", "r")
  )
}

# ============================================================
# 5. Intervalo Z para diferencia de medias
#    Varianzas poblacionales conocidas
# ============================================================

ic_dif_medias_z <- function(media1, media2,
                            sigma1, sigma2,
                            n1, n2,
                            conf = 0.95,
                            digitos = 4) {
  
  alpha <- 1 - conf
  z <- qnorm(1 - alpha / 2)
  
  diferencia <- media1 - media2
  
  error_estandar <- sqrt(
    sigma1^2 / n1 +
      sigma2^2 / n2
  )
  
  margen_error <- z * error_estandar
  inferior <- diferencia - margen_error
  superior <- diferencia + margen_error
  
  resultado <- data.frame(
    Medida = c(
      "Media (Muestra 1)",
      "σ (Muestra 1)",
      "n (Muestra 1)",
      "Media (Muestra 2)",
      "σ (Muestra 2)",
      "n (Muestra 2)",
      "Diferencia estimada",
      "Error estándar",
      "Grado de confianza",
      "Valor crítico",
      "Margen de error",
      "Extremo inferior",
      "Extremo superior",
      "Intervalo"
    ),
    
    Valor = c(
      round(media1, digitos),
      round(sigma1, digitos),
      n1,
      round(media2, digitos),
      round(sigma2, digitos),
      n2,
      round(diferencia, digitos),
      round(error_estandar, digitos),
      round(conf, digitos),
      round(z, digitos),
      round(margen_error, digitos),
      round(inferior, digitos),
      round(superior, digitos),
      paste0(
        round(diferencia, digitos),
        " ± ",
        round(margen_error, digitos)
      )
    ),
    
    check.names = FALSE
  )
  
  knitr::kable(
    resultado,
    format = "html",
    col.names = c("Medida", "Valor"),
    align = c("l", "r")
  )
}

# ============================================================
# 6. Intervalo t para diferencia de medias
#    Varianzas desconocidas, pero iguales
# ============================================================

ic_dif_medias_t_si <- function(media1, media2,
                               s1, s2,
                               n1, n2,
                               conf = 0.95,
                               digitos = 4) {
  
  alpha <- 1 - conf
  diferencia <- media1 - media2
  
  # Grados de libertad
  gl <- n1 + n2 - 2
  
  # Varianza combinada
  varianza_combinada <- (
    (n1 - 1) * s1^2 +
      (n2 - 1) * s2^2
  ) / gl
  
  # Desviación estándar combinada
  s_combinada <- sqrt(varianza_combinada)
  
  # Error estándar
  error_estandar <- s_combinada *
    sqrt(1 / n1 + 1 / n2)
  
  # Valor crítico
  t_critico <- qt(
    1 - alpha / 2,
    df = gl
  )
  
  # Margen de error
  margen_error <- t_critico * error_estandar
  
  # Límites
  inferior <- diferencia - margen_error
  superior <- diferencia + margen_error
  
  resultado <- data.frame(
    Medida = c(
      "Media (Muestra 1)",
      "s (Muestra 1)",
      "n (Muestra 1)",
      "Media (Muestra 2)",
      "s (Muestra 2)",
      "n (Muestra 2)",
      "Diferencia estimada",
      "Varianza combinada",
      "Desviación combinada",
      "Grados de libertad",
      "Error estándar",
      "Grado de confianza",
      "Valor crítico",
      "Margen de error",
      "Extremo inferior",
      "Extremo superior",
      "Intervalo"
    ),
    
    Valor = c(
      round(media1, digitos),
      round(s1, digitos),
      n1,
      round(media2, digitos),
      round(s2, digitos),
      n2,
      round(diferencia, digitos),
      round(varianza_combinada, digitos),
      round(s_combinada, digitos),
      gl,
      round(error_estandar, digitos),
      round(conf, digitos),
      round(t_critico, digitos),
      round(margen_error, digitos),
      round(inferior, digitos),
      round(superior, digitos),
      paste0(
        round(diferencia, digitos),
        " ± ",
        round(margen_error, digitos)
      )
    ),
    
    check.names = FALSE
  )
  
  knitr::kable(
    resultado,
    format = "html",
    col.names = c("Medida", "Valor"),
    align = c("l", "r")
  )
}

# ============================================================
# 7. Intervalo t para diferencia de medias
#    Varianzas desconocidas, pero diferentes
#    Método de Welch
# ============================================================

ic_dif_medias_t_no <- function(media1, media2,
                               s1, s2,
                               n1, n2,
                               conf = 0.95,
                               digitos = 4) {
  
  alpha <- 1 - conf
  diferencia <- media1 - media2
  
  termino1 <- s1^2 / n1
  termino2 <- s2^2 / n2
  
  error_estandar <- sqrt(termino1 + termino2)
  
  gl <- (termino1 + termino2)^2 /
    (
      termino1^2 / (n1 - 1) +
        termino2^2 / (n2 - 1)
    )
  
  t_critico <- qt(
    1 - alpha / 2,
    df = gl
  )
  
  margen_error <- t_critico * error_estandar
  
  inferior <- diferencia - margen_error
  superior <- diferencia + margen_error
  
  resultado <- data.frame(
    Medida = c(
      "Media (Muestra 1)",
      "s (Muestra 1)",
      "n (Muestra 1)",
      "Media (Muestra 2)",
      "s (Muestra 2)",
      "n (Muestra 2)",
      "Diferencia estimada",
      "Grados de libertad",
      "Error estándar",
      "Grado de confianza",
      "Valor crítico",
      "Margen de error",
      "Extremo inferior",
      "Extremo superior",
      "Intervalo"
    ),
    
    Valor = c(
      round(media1, digitos),
      round(s1, digitos),
      n1,
      round(media2, digitos),
      round(s2, digitos),
      n2,
      round(diferencia, digitos),
      round(gl, digitos),
      round(error_estandar, digitos),
      round(conf, digitos),
      round(t_critico, digitos),
      round(margen_error, digitos),
      round(inferior, digitos),
      round(superior, digitos),
      paste0(
        round(diferencia, digitos),
        " ± ",
        round(margen_error, digitos)
      )
    ),
    
    check.names = FALSE
  )
  
  knitr::kable(
    resultado,
    format = "html",
    col.names = c("Medida", "Valor"),
    align = c("l", "r")
  )
}

# ============================================================
# 8. Intervalo Z para diferencia de proporciones
# ============================================================

ic_dif_proporciones <- function(exitos1, n1,
                                exitos2, n2,
                                conf = 0.95,
                                digitos = 4) {
  
  if (exitos1 < 0 || exitos1 > n1 ||
      exitos2 < 0 || exitos2 > n2) {
    stop("Los números de éxitos deben estar entre 0 y n.")
  }
  
  alpha <- 1 - conf
  z <- qnorm(1 - alpha / 2)
  
  p1 <- exitos1 / n1
  p2 <- exitos2 / n2
  diferencia <- p1 - p2
  
  error_estandar <- sqrt(
    p1 * (1 - p1) / n1 +
      p2 * (1 - p2) / n2
  )
  
  margen_error <- z * error_estandar
  inferior <- diferencia - margen_error
  superior <- diferencia + margen_error
  
  resultado <- data.frame(
  Medida = c(
    "Éxitos (Muestra 1)",
    "n (Muestra 1)",
    "Proporción (Muestra 1)",
    "Éxitos (Muestra 2)",
    "n (Muestra 2)",
    "Proporción (Muestra 2)",
    "Diferencia estimada",
    "Error estándar",
    "Grado de confianza",
    "Valor crítico",
    "Margen de error",
    "Extremo inferior",
    "Extremo superior",
    "Intervalo"
  ),
  
  Resultado = c(
    exitos1,
    n1,
    round(p1, digitos),
    exitos2,
    n2,
    round(p2, digitos),
    round(diferencia, digitos),
    round(error_estandar, digitos),
    round(conf, digitos),
    round(z, digitos),
    round(margen_error, digitos),
    round(inferior, digitos),
    round(superior, digitos),
    paste0(
      round(diferencia, digitos),
      " ± ",
      round(margen_error, digitos)
    )
  ),
  
  check.names = FALSE
)

knitr::kable(
  resultado,
  format = "html",
  col.names = c("Medida", "Valor"),
  align = c("l", "r")
)
}


# ============================================================
# 9. Intervalo para la razón de varianzas
# ============================================================

ic_razon_varianzas <- function(varianza1, varianza2,
                               n1, n2,
                               conf = 0.95,
                               digitos = 4) {
  
  if (varianza1 <= 0 || varianza2 <= 0) {
    stop("Las varianzas deben ser positivas.")
  }
  
  alpha <- 1 - conf
  
  gl1 <- n1 - 1
  gl2 <- n2 - 1
  
  razon <- varianza1 / varianza2
  
  f_inferior <- qf(
    alpha / 2,
    df1 = gl1,
    df2 = gl2
  )
  
  f_superior <- qf(
    1 - alpha / 2,
    df1 = gl1,
    df2 = gl2
  )
  
  inferior <- razon / f_superior
  superior <- razon / f_inferior
  
  resultado <- data.frame(
    Medida = c(
      "Varianza (Muestra 1)",
      "n (Muestra 1)",
      "Grados de libertad (Muestra 1)",
      "Varianza (Muestra 2)",
      "n (Muestra 2)",
      "Grados de libertad (Muestra 2)",
      "Razón de varianzas",
      "Grado de confianza",
      "Valor crítico inferior",
      "Valor crítico superior",
      "Extremo inferior",
      "Extremo superior",
      "Intervalo"
    ),
    
    Valor = c(
      round(varianza1, digitos),
      n1,
      gl1,
      round(varianza2, digitos),
      n2,
      gl2,
      round(razon, digitos),
      round(conf, digitos),
      round(f_inferior, digitos),
      round(f_superior, digitos),
      round(inferior, digitos),
      round(superior, digitos),
      paste0(
        "(",
        round(inferior, digitos),
        ", ",
        round(superior, digitos),
        ")"
      )
    ),
    
    check.names = FALSE
  )
  
  knitr::kable(
    resultado,
    format = "html",
    col.names = c("Medida", "Valor"),
    align = c("l", "r")
  )
}

Base de Datos

Seleccionamos la base de datos con la que vamos a trabajar y le asignamos el nombre “datos”. Además seleccionamos dos muestras para calcular los intervalos de confianza.

#Base de datos
datos <- lsm::survey

# Para los ejemplos de esta sección utilizaremos únicamente las primeras 100 observaciones
df1 <- datos[1:100,]

# Para otros ejemplos de esta sección utilizaremos únicamente las primeras 29 observaciones
df2 <- datos[1:29,]

# Dimensión de las dos bases de datos (observaciones, variables)
dim(datos)
## [1] 800  66
dim(df1)
## [1] 100  66
dim(df2)
## [1] 29 66

Intervalo de Confianza para la media (con Z)

Calculamos el intervalo de confianza de la variable “Age”.

# 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.9374
σ 6
Error estándar 0.6
n 100
Grado de confianza 0.95
Valor crítico 1.96
Margen de error 1.176
Extremo inferior 17.7614
Extremo superior 20.1134
Intervalo 18.9374 ± 1.176
# 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

Intervalo para la media (con t)

Calculamos el intervalo de confianza de la variable “Age” para la media con 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 19.2641
s 2.0637
Error estándar 0.3832
n 29
Grados de libertad 28
Grado de confianza 0.95
Valor crítico 2.0484
Margen de error 0.785
Extremo inferior 18.4792
Extremo superior 20.0491
Intervalo 19.2641 ± 0.785

Intervalo Proporción

Calculamos el intervalo de proporción de la variable “Gender”.

table(df1$Gender)
## 
## Female   Male 
##     49     51
# 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
# 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_mas <- sum(genero == "Male")
n_fem <- length(genero)

# Calcula el intervalo
resultado <- ic_proporcion(
  exitos = total_mas,
  n = n_fem,
  conf = 0.95
)

resultado
Medida Valor
Éxitos 51
n 100
Proporción 0.51
Error estándar 0.05
Grado de confianza 0.95
Valor crítico 1.96
Margen de error 0.098
Extremo inferior 0.412
Extremo superior 0.608
Intervalo 0.51 ± 0.098

Actividad

Seleccionamos dos muestras nuevas.

df3 <-(datos[1:120,])
df4 <-(datos[1:10,])
str(df4)
## tibble [10 × 66] (S3: tbl_df/tbl/data.frame)
##  $ Observation : num [1:10] 1 2 3 4 5 6 7 8 9 10
##  $ ID          : chr [1:10] "SB11201910010435" "SB11201910004475" "SB11201910011427" "SB11201910041975" ...
##  $ Gender      : chr [1:10] "Female" "Male" "Male" "Male" ...
##  $ Like        : chr [1:10] "TV" "Network" "Network" "TV" ...
##  $ Age         : num [1:10] 21.4 21.1 20.9 18.4 16.6 ...
##  $ Smoke       : chr [1:10] "No" "Yes" "Yes" "Yes" ...
##  $ Height      : num [1:10] 1.58 1.6 1.5 1.53 1.78 1.65 1.73 1.53 1.64 1.52
##  $ Weight      : num [1:10] 75 80 64 49 82 80 90 55 50 78
##  $ BMI         : num [1:10] 30 31.2 28.4 20.9 25.9 ...
##  $ School      : chr [1:10] "Private" "Public" "Private" "Public" ...
##  $ SES         : chr [1:10] "Medium" "High" "High" "Low" ...
##  $ Enrollment  : chr [1:10] "Credit" "Scholarship" "Scholarship" "Credit" ...
##  $ Score       : num [1:10] 81 78 77 70 68 65 54 50 36 35
##  $ MotherHeight: chr [1:10] "Short_M" "Normal_M" "Normal_M" "Tall_M" ...
##  $ MotherAge   : num [1:10] 41 45 45 45 46 46 47 48 48 48
##  $ MotherCHD   : num [1:10] 0 0 0 0 1 0 0 0 0 1
##  $ FatherHeight: chr [1:10] "Normal_F" "Short_F" "Tall_F" "Short_F" ...
##  $ FatherAge   : num [1:10] 40 43 44 45 45 46 46 48 48 49
##  $ FatherCHD   : num [1:10] 1 1 1 2 1 1 1 1 1 1
##  $ Status      : chr [1:10] "Distinguished" "Distinguished" "Distinguished" "Regular" ...
##  $ SemAcum     : num [1:10] 4.25 2.8 4.15 3.2 3.45 2.75 2.7 4.35 4.3 2.8
##  $ Exam1       : num [1:10] 1.5 2.3 3.4 2.5 3.1 3.8 5 4 2.5 2.4
##  $ Exam2       : num [1:10] 5 4.9 3.6 4.2 3.5 4.4 3 2.3 3.3 2.6
##  $ Exam3       : num [1:10] 5 3.7 2 5 5 4.2 3.5 4.6 3.8 4.3
##  $ Exam4       : num [1:10] 4.5 3.3 1.9 2.5 3 5 3.6 4.3 1.9 5
##  $ ExamAcum    : num [1:10] 16 14.2 10.9 14.2 14.6 17.4 15.1 15.2 11.5 14.3
##  $ Definitive  : num [1:10] 4 3.55 2.73 3.55 3.65 ...
##  $ Expense     : num [1:10] 48.9 72.1 85.2 56.6 64.6 63 40.8 65.4 37.3 63
##  $ Income      : num [1:10] 1.61 2.07 2.84 1.55 2.32 2.1 1.69 2.18 1.71 2.1
##  $ Gas         : num [1:10] 27.4 24.2 22.3 23.1 27.3 ...
##  $ Course      : chr [1:10] "Face-to-Face" "Virtual" "Face-to-Face" "Virtual" ...
##  $ Law         : chr [1:10] "Agree" "Agree" "Agree" "Agree" ...
##  $ Economic    : chr [1:10] "Regular" "Good" "Regular" "Bad" ...
##  $ Race        : chr [1:10] "Ethnic" "Ethnic" "Ethnic" "Ethnic" ...
##  $ Region      : chr [1:10] "North" "Center" "North" "Center" ...
##  $ EMO1        : num [1:10] 1 4 3 4 2 3 2 3 4 2
##  $ EMO2        : num [1:10] 2 4 1 2 1 1 4 1 2 2
##  $ EMO3        : num [1:10] 2 1 3 3 2 4 2 4 3 3
##  $ EMO4        : num [1:10] 1 2 3 1 4 2 3 2 1 1
##  $ EMO5        : num [1:10] 4 1 2 2 2 2 1 1 2 2
##  $ GOAL1       : chr [1:10] "Strongly agree" "Undecided" "Agree" "Agree" ...
##  $ GOAL2       : chr [1:10] "Agree" "Disagree" "Disagree" "Undecided" ...
##  $ GOAL3       : chr [1:10] "Strongly agree" "Disagree" "Agree" "Strongly agree" ...
##  $ Pre_STAT1   : num [1:10] 2 1 5 4 1 4 4 2 2 2
##  $ Pre_STAT2   : num [1:10] 4 1 1 3 4 1 2 3 3 5
##  $ Pre_STAT3   : num [1:10] 2 1 3 1 1 5 4 3 3 2
##  $ Pre_STAT4   : num [1:10] 5 1 1 2 2 3 2 3 2 4
##  $ Post_STAT1  : num [1:10] 4 5 5 3 5 2 3 3 2 5
##  $ Post_STAT2  : num [1:10] 5 1 2 2 3 3 2 3 2 3
##  $ Post_STAT3  : num [1:10] 2 3 3 4 3 5 5 4 5 4
##  $ Post_STAT4  : num [1:10] 2 3 3 5 4 4 3 5 5 1
##  $ Pre_IDARE1  : chr [1:10] "Quite a bit" "Quite a bit" "Quite a bit" "Little" ...
##  $ Pre_IDARE2  : chr [1:10] "Little" "Little" "Little" "Nothing" ...
##  $ Pre_IDARE3  : chr [1:10] "Quite a bit" "A lot" "Quite a bit" "Quite a bit" ...
##  $ Pre_IDARE4  : chr [1:10] "Quite a bit" "Nothing" "Quite a bit" "Quite a bit" ...
##  $ Pre_IDARE5  : chr [1:10] "Little" "Quite a bit" "Little" "Nothing" ...
##  $ Post_IDARE1 : chr [1:10] "A lot" "A little" "Nothing" "Quite a bit" ...
##  $ Post_IDARE2 : chr [1:10] "A lot" "Nothing" "Quite a bit" "A little" ...
##  $ Post_IDARE3 : chr [1:10] "A little" "Quite a bit" "Nothing" "A lot" ...
##  $ Post_IDARE4 : chr [1:10] "Quite a bit" "A lot" "Nothing" "Quite a bit" ...
##  $ Post_IDARE5 : chr [1:10] "A lot" "Quite a bit" "Nothing" "A lot" ...
##  $ PSICO1      : chr [1:10] "Frequently" "Frequently" "Sometimes" "Almost always" ...
##  $ PSICO2      : chr [1:10] "Almost always" "Sometimes" "Sometimes" "Frequently" ...
##  $ PSICO3      : chr [1:10] "Frequently" "Sometimes" "Sometimes" "Frequently" ...
##  $ PSICO4      : chr [1:10] "Almost always" "Frequently" "Frequently" "Almost never" ...
##  $ PSICO5      : chr [1:10] "Almost always" "Frequently" "Sometimes" "Sometimes" ...

Intervalo para la media (con Z)

Calculamos el intervalo de confianza con media Z para la variable “Weight”.

# Elimina los valores perdidos (NA)
peso <- df3$Weight[!is.na(df3$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.265
σ 6
Error estándar 0.5477
n 120
Grado de confianza 0.95
Valor crítico 1.96
Margen de error 1.0735
Extremo inferior 73.1915
Extremo superior 75.3385
Intervalo 74.265 ± 1.0735
  • Con una confianza del 95%, podemos afirmar que el promedio de peso de todos los estudiantes está entre 73.1 y 75.3 kilogramos.

Intervalo para la media (con t)

Calculamos el intervalo de confianza para la variable “Weight”.

# Elimina los valores perdidos (NA)
peso <- df4$Weight[!is.na(df4$Weight)] 

# Calcula media y tamaño
media_peso <- mean(peso)
s_peso <- sd(peso)
n_peso <- length(peso)

# Calcula el intervalo
resultado <- ic_media_t(
  media = media_peso,
  s = s_peso,
  n = n_peso,
  conf = 0.95
)

resultado
Medida Valor
Media 70.3
s 14.6595
Error estándar 4.6357
n 10
Grados de libertad 9
Grado de confianza 0.95
Valor crítico 2.2622
Margen de error 10.4868
Extremo inferior 59.8132
Extremo superior 80.7868
Intervalo 70.3 ± 10.4868
  • Con una confianza del 95%, podemos afirmar que el promedio del peso de todos los estudiantes entá entre 59.8 y 80.7 kilogramos.

Intervalo proporción

Calculamos el intervalo de proporción para la variable “School”.

Intervalo de proporción (Colegio Privado)

# Elimina los valores perdidos (NA)
colegio <- df3$School[!is.na(df3$School)]

# Calcula número de estudiantes de género Female (éxitos) y tamaño total de la muestra.
total_priv <- sum(colegio == "Private")
n_priv <- length(colegio)

# Calcula el intervalo
resultado <- ic_proporcion(
  exitos = total_priv,
  n = n_priv,
  conf = 0.95
)

resultado
Medida Valor
Éxitos 60
n 120
Proporción 0.5
Error estándar 0.0456
Grado de confianza 0.95
Valor crítico 1.96
Margen de error 0.0895
Extremo inferior 0.4105
Extremo superior 0.5895
Intervalo 0.5 ± 0.0895
  • Con una confianza del 95%. podemos afirmar que aproximadamente entre el 41.05% y el 58.95% de estudiantes estudian en colegios privados.

Intervalo de proporción (Colegio Público)

# Elimina los valores perdidos (NA)
colegio <- df3$School[!is.na(df3$School)]

# Calcula número de estudiantes de género Female (éxitos) y tamaño total de la muestra.
total_pub <- sum(colegio == "Public")
n_priv <- length(colegio)

# Calcula el intervalo
resultado <- ic_proporcion(
  exitos = total_pub,
  n = n_priv,
  conf = 0.95
)

resultado
Medida Valor
Éxitos 60
n 120
Proporción 0.5
Error estándar 0.0456
Grado de confianza 0.95
Valor crítico 1.96
Margen de error 0.0895
Extremo inferior 0.4105
Extremo superior 0.5895
Intervalo 0.5 ± 0.0895
  • Con una confianza del 95%. podemos afirmar que aproximadamente entre el 41.05% y el 58.95% de estudiantes estudian en colegios públicos.