hllinas2023

1 Introducción

Primero, debemos instalar y descargar las librerías que vamos a utilizar.

library(lsm)      # Para descargar una base de datos
library(knitr)

2 Funciones para intervalos de confianza

A continuación se presentan las funciones desarrolladas para calcular los intervalos de confianza estudiados en este capítulo. Su objetivo es automatizar los cálculos, organizar los resultados en un formato uniforme y facilitar la interpretación 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",
      "ES",
      "n",
      "Nivel 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",
      "ES",
      "n",
      "Grados de libertad",
      "Nivel 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",
      "ES",
      "Nivel 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",
      "Nivel 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",
      "ES",
      "Nivel 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",
      "ES",
      "Nivel 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",
      "ES",
      "Nivel 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",
    "ES",
    "Nivel 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",
      "Nivel 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")
  )
}

3 Ejemplos utilizando estadísticas resumidas

En esta sección se presentan ejemplos sencillos utilizando estadísticas resumidas (media, desviación estándar, varianza, tamaño muestral, etc.). Esto permite comprender el cálculo de los intervalos de confianza sin necesidad de trabajar inicialmente con una base de datos.

3.0.1 IC para la media (con \(Z\))

Cuando la desviación estándar poblacional (\(\sigma\)) es conocida, el intervalo de confianza para la media se construye utilizando la distribución normal estándar.

resultado <- ic_media_z(
  media = 4,
  sigma = 2,
  n = 100,
  conf = 0.95
)

resultado
Medida Valor
Media 4
σ 2
ES 0.2
n 100
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 0.392
Extremo inferior 3.608
Extremo superior 4.392
Intervalo 4 ± 0.392

3.0.2 IC para la media (con \(t\))

Cuando la desviación estándar poblacional es desconocida, se utiliza la desviación estándar muestral (\(s\)) y la distribución t de Student.

resultado <- ic_media_t(
  media = 4,
  s = 2,
  n = 100,
  conf = 0.95
)

resultado
Medida Valor
Media 4
s 2
ES 0.2
n 100
Grados de libertad 99
Nivel de confianza 0.95
Valor crítico 1.9842
Margen de error 0.3968
Extremo inferior 3.6032
Extremo superior 4.3968
Intervalo 4 ± 0.3968

3.0.3 IC para la proporción

Este ejemplo calcula un intervalo de confianza para una proporción poblacional a partir del número de éxitos observados en una muestra.

resultado <- ic_proporcion(
  exitos = 35,
  n = 100,
  conf = 0.95
)

resultado
Medida Valor
Éxitos 35
n 100
Proporción 0.35
ES 0.0477
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 0.0935
Extremo inferior 0.2565
Extremo superior 0.4435
Intervalo 0.35 ± 0.0935

3.0.4 IC para la varianza

Cuando se desea estimar la variabilidad de una población, el intervalo de confianza para la varianza se basa en la distribución chi-cuadrada (\(\ch^2\)).

resultado <- ic_varianza(
  varianza = 25,
  n = 30,
  conf = 0.95
)

resultado
Medida Valor
Varianza muestral 25
n 30
Grados de libertad 29
Nivel de confianza 0.95
Cuantil inferior 16.0471
Cuantil superior 45.7223
Extremo inferior 15.8566
Extremo superior 45.1796
Intervalo (15.8566, 45.1796)

3.0.5 IC para la diferencia de medias (con \(z\))

Si las desviaciones estándar poblacionales son conocidas, el intervalo para la diferencia de medias utiliza la distribución normal estándar.

La diferencia se calcula en el orden:

\[ \text{Grupo 1}-\text{Grupo 2}. \]

resultado <- ic_dif_medias_z(
  media1 = 45,
  media2 = 40,
  sigma1 = 8,
  sigma2 = 10,
  n1 = 50,
  n2 = 60,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 45
σ (Muestra 1) 8
n (Muestra 1) 50
Media (Muestra 2) 40
σ (Muestra 2) 10
n (Muestra 2) 60
Diferencia estimada 5
ES 1.7166
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 3.3644
Extremo inferior 1.6356
Extremo superior 8.3644
Intervalo 5 ± 3.3644

3.0.6 IC para la diferencia de medias (con \(t\), varianzas desconocidas e iguales)

Cuando las varianzas poblacionales son desconocidas, pero pueden asumirse iguales, se utiliza la varianza combinada (pooled variance).

La diferencia se calcula en el orden:

\[ \text{Grupo 1}-\text{Grupo 2}. \]

resultado <- ic_dif_medias_t_si(
  media1 = 45,
  media2 = 40,
  s1 = 8,
  s2 = 7,
  n1 = 30,
  n2 = 35,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 45
s (Muestra 1) 8
n (Muestra 1) 30
Media (Muestra 2) 40
s (Muestra 2) 7
n (Muestra 2) 35
Diferencia estimada 5
Varianza combinada 55.9048
Desviación combinada 7.4769
Grados de libertad 63
ES 1.8603
Nivel de confianza 0.95
Valor crítico 1.9983
Margen de error 3.7175
Extremo inferior 1.2825
Extremo superior 8.7175
Intervalo 5 ± 3.7175

3.0.7 IC para la diferencia de medias (con \(t\), varianzas desconocidas y diferentes)

Si no es razonable asumir igualdad de varianzas, se utiliza el intervalo de confianza de Welch.

La diferencia se calcula en el orden:

\[ \text{Grupo 1}-\text{Grupo 2}. \]

resultado <- ic_dif_medias_t_no(
  media1 = 45,
  media2 = 40,
  s1 = 8,
  s2 = 12,
  n1 = 30,
  n2 = 35,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 45
s (Muestra 1) 8
n (Muestra 1) 30
Media (Muestra 2) 40
s (Muestra 2) 12
n (Muestra 2) 35
Diferencia estimada 5
Grados de libertad 59.6104
ES 2.4995
Nivel de confianza 0.95
Valor crítico 2.0006
Margen de error 5.0005
Extremo inferior -5e-04
Extremo superior 10.0005
Intervalo 5 ± 5.0005

3.0.8 IC para la diferencia de proporciones

Este ejemplo estima el intervalo de confianza para la diferencia entre dos proporciones poblacionales independientes.

La diferencia se calcula en el orden:

\[ \text{Grupo 1}-\text{Grupo 2}. \]

resultado <- ic_dif_proporciones(
  exitos1 = 5,
  n1 = 100,
  exitos2 = 7,
  n2 = 150,
  conf = 0.95
)

resultado
Medida Valor
Éxitos (Muestra 1) 5
n (Muestra 1) 100
Proporción (Muestra 1) 0.05
Éxitos (Muestra 2) 7
n (Muestra 2) 150
Proporción (Muestra 2) 0.0467
Diferencia estimada 0.0033
ES 0.0278
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 0.0544
Extremo inferior -0.0511
Extremo superior 0.0578
Intervalo 0.0033 ± 0.0544

3.0.9 IC para la razón de varianzas

Cuando se desea comparar la variabilidad de dos poblaciones, se utiliza un intervalo de confianza para la razón de sus varianzas, basado en la distribución \(F\).

La razón se calcula en el orden:

\[ \frac{\text{Grupo 1}} {\text{Grupo 2}}. \]

resultado <- ic_razon_varianzas(
  varianza1 = 16,
  varianza2 = 9,
  n1 = 20,
  n2 = 25,
  conf = 0.95
)

resultado
Medida Valor
Varianza (Muestra 1) 16
n (Muestra 1) 20
Grados de libertad (Muestra 1) 19
Varianza (Muestra 2) 9
n (Muestra 2) 25
Grados de libertad (Muestra 2) 24
Razón de varianzas 1.7778
Nivel de confianza 0.95
Valor crítico inferior 0.4078
Valor crítico superior 2.3452
Extremo inferior 0.7581
Extremo superior 4.3597
Intervalo (0.7581, 4.3597)

4 Ejemplos utilizando un data frame simulado

En esta sección construiremos un data frame sencillo a partir de vectores definidos manualmente. Posteriormente calcularemos las estadísticas muestrales necesarias y las utilizaremos como argumentos de las funciones definidas anteriormente.

4.0.1 Construcción del data frame

El siguiente código crea un data frame con dos variables cuantitativas (x e y), una variable dicotómica (exito) y una variable de agrupación (grupo), la cual identifica las dos muestras que se compararán en algunos de los ejemplos.

grupo <- c(
  rep("Grupo 1",10),
  rep("Grupo 2",10)
)

x <- c(
  72,68,75,70,73,71,69,74,70,72,
  65,63,67,69,64,66,62,68,65,67
)

y <- c(
  38,42,41,39,40,37,43,40,39,41,
  35,37,34,36,38,35,39,37,36,34
)

exito <- c(
  1,1,0,1,0,1,1,0,1,1,
  0,1,0,0,1,0,1,0,1,0
)

datos <- data.frame(
  grupo,
  x,
  y,
  exito
)

datos
##      grupo  x  y exito
## 1  Grupo 1 72 38     1
## 2  Grupo 1 68 42     1
## 3  Grupo 1 75 41     0
## 4  Grupo 1 70 39     1
## 5  Grupo 1 73 40     0
## 6  Grupo 1 71 37     1
## 7  Grupo 1 69 43     1
## 8  Grupo 1 74 40     0
## 9  Grupo 1 70 39     1
## 10 Grupo 1 72 41     1
## 11 Grupo 2 65 35     0
## 12 Grupo 2 63 37     1
## 13 Grupo 2 67 34     0
## 14 Grupo 2 69 36     0
## 15 Grupo 2 64 38     1
## 16 Grupo 2 66 35     0
## 17 Grupo 2 62 39     1
## 18 Grupo 2 68 37     0
## 19 Grupo 2 65 36     1
## 20 Grupo 2 67 34     0

La variable grupo identifica las dos muestras; x y y son cuantitativas, mientras que exito toma los valores \(1\) para éxito y \(0\) para fracaso.

4.0.2 IC para la media (con \(Z\))

Para ilustrar el procedimiento con \(Z\), se calcula la media de \(x\) y se supone conocida una desviación estándar poblacional igual a \(9\).

media_x <- mean(datos$x)
n_x <- length(datos$x)

resultado <- ic_media_z(
  media = media_x,
  sigma = 9,
  n = n_x,
  conf = 0.95
)

resultado
Medida Valor
Media 68.5
σ 9
ES 2.0125
n 20
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 3.9444
Extremo inferior 64.5556
Extremo superior 72.4444
Intervalo 68.5 ± 3.9444

4.0.3 IC para la media (con \(t\))

Como normalmente la desviación estándar poblacional es desconocida, se estima mediante la desviación estándar muestral de \(x\).

media_x <- mean(datos$x)
s_x <- sd(datos$x)
n_x <- length(datos$x)

resultado <- ic_media_t(
  media = media_x,
  s = s_x,
  n = n_x,
  conf = 0.95
)

resultado
Medida Valor
Media 68.5
s 3.6778
ES 0.8224
n 20
Grados de libertad 19
Nivel de confianza 0.95
Valor crítico 2.093
Margen de error 1.7213
Extremo inferior 66.7787
Extremo superior 70.2213
Intervalo 68.5 ± 1.7213

4.0.4 IC para una proporción

En este caso, un valor igual a \(1\) en la variable exito representa un éxito. La suma de esta variable proporciona el número total de éxitos.

exitos <- sum(datos$exito)
n <- length(datos$exito)

resultado <- ic_proporcion(
  exitos = exitos,
  n = n,
  conf = 0.95
)

resultado
Medida Valor
Éxitos 11
n 20
Proporción 0.55
ES 0.1112
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 0.218
Extremo inferior 0.332
Extremo superior 0.768
Intervalo 0.55 ± 0.218

4.0.5 IC para la varianza

La varianza muestral de \(x\) se utiliza para estimar la varianza de la población.

varianza_x <- var(datos$x)
n_x <- length(datos$x)

resultado <- ic_varianza(
  varianza = varianza_x,
  n = n_x,
  conf = 0.95
)

resultado
Medida Valor
Varianza muestral 13.5263
n 20
Grados de libertad 19
Nivel de confianza 0.95
Cuantil inferior 8.9065
Cuantil superior 32.8523
Extremo inferior 7.8229
Extremo superior 28.8553
Intervalo (7.8229, 28.8553)

4.0.6 Preparación de las dos muestras

Para comparar los grupos, primero se extraen los valores de \(x\) correspondientes a cada uno.

x1 <- datos$x[
  datos$grupo == "Grupo 1"
]

x2 <- datos$x[
  datos$grupo == "Grupo 2"
]

media1 <- mean(x1)
media2 <- mean(x2)

s1 <- sd(x1)
s2 <- sd(x2)

n1 <- length(x1)
n2 <- length(x2)

IC para la diferencia de medias con \(Z\)

Para utilizar el intervalo \(Z\), se supone que las desviaciones estándar poblacionales son conocidas.

La diferencia se calcula en el orden:

\[ \text{Grupo 1}-\text{Grupo 2}. \]

resultado <- ic_dif_medias_z(
  media1 = media1,
  media2 = media2,
  sigma1 = 8,
  sigma2 = 10,
  n1 = n1,
  n2 = n2,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 71.4
σ (Muestra 1) 8
n (Muestra 1) 10
Media (Muestra 2) 65.6
σ (Muestra 2) 10
n (Muestra 2) 10
Diferencia estimada 5.8
ES 4.0497
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 7.9372
Extremo inferior -2.1372
Extremo superior 13.7372
Intervalo 5.8 ± 7.9372

4.0.7 IC para la diferencia de medias (con \(t\), varianzas iguales)

Este procedimiento utiliza una varianza combinada y supone que las dos poblaciones tienen la misma varianza.

La diferencia se calcula en el orden:

\[ \text{Grupo 1}-\text{Grupo 2}. \]

resultado <- ic_dif_medias_t_si(
  media1 = media1,
  media2 = media2,
  s1 = s1,
  s2 = s2,
  n1 = n1,
  n2 = n2,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 71.4
s (Muestra 1) 2.2211
n (Muestra 1) 10
Media (Muestra 2) 65.6
s (Muestra 2) 2.2211
n (Muestra 2) 10
Diferencia estimada 5.8
Varianza combinada 4.9333
Desviación combinada 2.2211
Grados de libertad 18
ES 0.9933
Nivel de confianza 0.95
Valor crítico 2.1009
Margen de error 2.0869
Extremo inferior 3.7131
Extremo superior 7.8869
Intervalo 5.8 ± 2.0869

4.0.8 IC para la diferencia de medias (con \(t\), varianzas diferentes)

Cuando no se supone igualdad de varianzas, se utiliza el procedimiento de Welch.

La diferencia se calcula en el orden:

\[ \text{Grupo 1}-\text{Grupo 2}. \]

resultado <- ic_dif_medias_t_no(
  media1 = media1,
  media2 = media2,
  s1 = s1,
  s2 = s2,
  n1 = n1,
  n2 = n2,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 71.4
s (Muestra 1) 2.2211
n (Muestra 1) 10
Media (Muestra 2) 65.6
s (Muestra 2) 2.2211
n (Muestra 2) 10
Diferencia estimada 5.8
Grados de libertad 18
ES 0.9933
Nivel de confianza 0.95
Valor crítico 2.1009
Margen de error 2.0869
Extremo inferior 3.7131
Extremo superior 7.8869
Intervalo 5.8 ± 2.0869

4.0.9 IC para la diferencia de proporciones

Se calcula el número de éxitos y el tamaño muestral dentro de cada grupo.

La diferencia se calcula en el orden:

\[ \text{Grupo 1}-\text{Grupo 2}. \]

exitos1 <- sum(
  datos$exito[
    datos$grupo == "Grupo 1"
  ]
)

exitos2 <- sum(
  datos$exito[
    datos$grupo == "Grupo 2"
  ]
)

n1 <- sum(datos$grupo == "Grupo 1")
n2 <- sum(datos$grupo == "Grupo 2")

resultado <- ic_dif_proporciones(
  exitos1 = exitos1,
  n1 = n1,
  exitos2 = exitos2,
  n2 = n2,
  conf = 0.95
)

resultado
Medida Valor
Éxitos (Muestra 1) 7
n (Muestra 1) 10
Proporción (Muestra 1) 0.7
Éxitos (Muestra 2) 4
n (Muestra 2) 10
Proporción (Muestra 2) 0.4
Diferencia estimada 0.3
ES 0.2121
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 0.4158
Extremo inferior -0.1158
Extremo superior 0.7158
Intervalo 0.3 ± 0.4158

4.0.10 IC para la razón de varianzas

Este intervalo permite comparar la variabilidad de la variable \(x\) en los dos grupos.

La razón se calcula en el orden:

\[ \frac{\text{Grupo 1}} {\text{Grupo 2}}. \]

varianza1 <- var(x1)
varianza2 <- var(x2)

resultado <- ic_razon_varianzas(
  varianza1 = varianza1,
  varianza2 = varianza2,
  n1 = length(x1),
  n2 = length(x2),
  conf = 0.95
)

resultado
Medida Valor
Varianza (Muestra 1) 4.9333
n (Muestra 1) 10
Grados de libertad (Muestra 1) 9
Varianza (Muestra 2) 4.9333
n (Muestra 2) 10
Grados de libertad (Muestra 2) 9
Razón de varianzas 1
Nivel de confianza 0.95
Valor crítico inferior 0.2484
Valor crítico superior 4.026
Extremo inferior 0.2484
Extremo superior 4.026
Intervalo (0.2484, 4.026)

5 Ejemplos utilizando una base de datos

En esta sección aplicaremos las funciones definidas anteriormente al conjunto de datos survey del paquete lsm. Las estadísticas resumidas se calcularán directamente a partir de las variables de la base de datos.

5.0.1 Nuestro data frame

Vamos a utilizar el conjunto de datos survey del paquete lsm, recopilado mediante una encuesta aplicada a una muestra de estudiantes universitarios. La descripción de sus variables puede consultarse en este enlace (clic aquí).

datosCompleto <- lsm::survey

dim(datosCompleto)
## [1] 800  66
df <- datosCompleto[1:100,]

En los siguientes ejemplos utilizaremos las variables Age, Gender y School.

  • Age representa la edad del estudiante.
  • Gender tiene las categorías Female y male.
  • School tiene, entre otros, los niveles Private y Public.

5.0.2 IC para la media (con \(Z\))

Se calcula el intervalo de confianza para la edad media. Para ilustrar el procedimiento con \(Z\), se supondrá conocida una desviación estándar poblacional igual a \(6\) años.

edad <- df$Age[
  !is.na(df$Age)
]

media_edad <- mean(edad)
n_edad <- length(edad)

resultado <- ic_media_z(
  media = media_edad,
  sigma = 6,
  n = n_edad,
  conf = 0.95
)

resultado
Medida Valor
Media 18.9374
σ 6
ES 0.6
n 100
Nivel 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

5.0.3 IC para la media (con \(t\))

Como normalmente la desviación estándar poblacional es desconocida, se utiliza la desviación estándar muestral de la variable Age.

edad <- df$Age[
  !is.na(df$Age)
]

media_edad <- mean(edad)
s_edad <- sd(edad)
n_edad <- length(edad)

resultado <- ic_media_t(
  media = media_edad,
  s = s_edad,
  n = n_edad,
  conf = 0.95
)

resultado
Medida Valor
Media 18.9374
s 2.0203
ES 0.202
n 100
Grados de libertad 99
Nivel de confianza 0.95
Valor crítico 1.9842
Margen de error 0.4009
Extremo inferior 18.5365
Extremo superior 19.3383
Intervalo 18.9374 ± 0.4009

5.0.4 IC para una proporción

En este ejemplo se estima la proporción poblacional de estudiantes de género Female. El número de éxitos corresponde al número de observaciones clasificadas como Female.

genero <- df$Gender[
  !is.na(df$Gender)
]

exitos <- sum(genero == "Female")
n <- length(genero)

resultado <- ic_proporcion(
  exitos = exitos,
  n = n,
  conf = 0.95
)

resultado
Medida Valor
Éxitos 49
n 100
Proporción 0.49
ES 0.05
Nivel 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

5.0.5 IC para la varianza

La varianza muestral de la variable Age se utiliza para estimar la varianza poblacional de las edades.

edad <- df$Age[
  !is.na(df$Age)
]

varianza_edad <- var(edad)
n_edad <- length(edad)

resultado <- ic_varianza(
  varianza = varianza_edad,
  n = n_edad,
  conf = 0.95
)

resultado
Medida Valor
Varianza muestral 4.0816
n 100
Grados de libertad 99
Nivel de confianza 0.95
Cuantil inferior 73.3611
Cuantil superior 128.422
Extremo inferior 3.1465
Extremo superior 5.508
Intervalo (3.1465, 5.508)

5.0.6 Preparación de las dos muestras

Para comparar estudiantes procedentes de colegios privados y públicos, se extraen las edades correspondientes a los niveles Private y Public de la variable School.

edad_private <- df$Age[
  df$School == "Private" &
  !is.na(df$School) &
  !is.na(df$Age)
]

edad_public <- df$Age[
  df$School == "Public" &
  !is.na(df$School) &
  !is.na(df$Age)
]

media_private <- mean(edad_private)
media_public <- mean(edad_public)

s_private <- sd(edad_private)
s_public <- sd(edad_public)

n_private <- length(edad_private)
n_public <- length(edad_public)

5.0.7 IC para la diferencia de medias (con \(Z\))

Se estima la diferencia entre la edad media de los estudiantes procedentes de colegios privados y públicos. Es decir, la diferencia se calcula en el orden:

\[ \text{Private}-\text{Public}. \]

Para ilustrar el procedimiento con \(Z\), se supondrán conocidas desviaciones estándar poblacionales iguales a \(6\) años.

resultado <- ic_dif_medias_z(
  media1 = media_private,
  media2 = media_public,
  sigma1 = 6,
  sigma2 = 6,
  n1 = n_private,
  n2 = n_public,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 19.0842
σ (Muestra 1) 6
n (Muestra 1) 50
Media (Muestra 2) 18.7906
σ (Muestra 2) 6
n (Muestra 2) 50
Diferencia estimada 0.2936
ES 1.2
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 2.352
Extremo inferior -2.0584
Extremo superior 2.6456
Intervalo 0.2936 ± 2.352

5.0.8 IC para la diferencia de medias (con \(t\), varianzas iguales)

Este procedimiento compara las edades medias de los dos grupos suponiendo que las varianzas poblacionales son desconocidas, pero iguales.

La diferencia se calcula en el orden:

\[ \text{Private}-\text{Public}. \]

resultado <- ic_dif_medias_t_si(
  media1 = media_private,
  media2 = media_public,
  s1 = s_private,
  s2 = s_public,
  n1 = n_private,
  n2 = n_public,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 19.0842
s (Muestra 1) 2.1949
n (Muestra 1) 50
Media (Muestra 2) 18.7906
s (Muestra 2) 1.8398
n (Muestra 2) 50
Diferencia estimada 0.2936
Varianza combinada 4.1012
Desviación combinada 2.0251
Grados de libertad 98
ES 0.405
Nivel de confianza 0.95
Valor crítico 1.9845
Margen de error 0.8038
Extremo inferior -0.5102
Extremo superior 1.0974
Intervalo 0.2936 ± 0.8038

5.0.9 IC para la diferencia de medias (con \(t\), varianzas diferentes)

Cuando no se supone igualdad de varianzas, se utiliza el procedimiento de Welch para comparar las edades medias de los dos grupos.

La diferencia se calcula en el orden:

\[ \text{Private}-\text{Public}. \]

resultado <- ic_dif_medias_t_no(
  media1 = media_private,
  media2 = media_public,
  s1 = s_private,
  s2 = s_public,
  n1 = n_private,
  n2 = n_public,
  conf = 0.95
)

resultado
Medida Valor
Media (Muestra 1) 19.0842
s (Muestra 1) 2.1949
n (Muestra 1) 50
Media (Muestra 2) 18.7906
s (Muestra 2) 1.8398
n (Muestra 2) 50
Diferencia estimada 0.2936
Grados de libertad 95.0978
ES 0.405
Nivel de confianza 0.95
Valor crítico 1.9852
Margen de error 0.8041
Extremo inferior -0.5105
Extremo superior 1.0977
Intervalo 0.2936 ± 0.8041

5.0.10 Preparación de los datos para comparar proporciones

Para comparar la proporción de mujeres entre los estudiantes procedentes de colegios privados y públicos, se conservan únicamente las observaciones con información válida en Gender y School.

datos_genero <- df[
  !is.na(df$Gender) &
  !is.na(df$School) &
  df$School %in% c("Private", "Public"),
]

genero_private <- datos_genero$Gender[
  datos_genero$School == "Private"
]

genero_public <- datos_genero$Gender[
  datos_genero$School == "Public"
]

exitos_private <- sum(genero_private == "Female")
exitos_public <- sum(genero_public == "Female")

n_private_genero <- length(genero_private)
n_public_genero <- length(genero_public)

5.0.11 IC para la diferencia de proporciones

Se estima la diferencia entre la proporción de mujeres procedentes de colegios privados y la proporción de mujeres procedentes de colegios públicos.

La diferencia se calcula en el orden:

\[ \text{Private}-\text{Public}. \]

resultado <- ic_dif_proporciones(
  exitos1 = exitos_private,
  n1 = n_private_genero,
  exitos2 = exitos_public,
  n2 = n_public_genero,
  conf = 0.95
)

resultado
Medida Valor
Éxitos (Muestra 1) 26
n (Muestra 1) 50
Proporción (Muestra 1) 0.52
Éxitos (Muestra 2) 23
n (Muestra 2) 50
Proporción (Muestra 2) 0.46
Diferencia estimada 0.06
ES 0.0998
Nivel de confianza 0.95
Valor crítico 1.96
Margen de error 0.1956
Extremo inferior -0.1356
Extremo superior 0.2556
Intervalo 0.06 ± 0.1956

5.0.12 IC para la razón de varianzas

Este intervalo compara la variabilidad de las edades entre los estudiantes procedentes de colegios privados y públicos.

La razón se calcula en el orden:

\[ \frac{\text{Private}} {\text{Public}}. \]

varianza_private <- var(edad_private)
varianza_public <- var(edad_public)

resultado <- ic_razon_varianzas(
  varianza1 = varianza_private,
  varianza2 = varianza_public,
  n1 = n_private,
  n2 = n_public,
  conf = 0.95
)

resultado
Medida Valor
Varianza (Muestra 1) 4.8177
n (Muestra 1) 50
Grados de libertad (Muestra 1) 49
Varianza (Muestra 2) 3.3848
n (Muestra 2) 50
Grados de libertad (Muestra 2) 49
Razón de varianzas 1.4233
Nivel de confianza 0.95
Valor crítico inferior 0.5675
Valor crítico superior 1.7622
Extremo inferior 0.8077
Extremo superior 2.5082
Intervalo (0.8077, 2.5082)

6 Actividad práctica

6.0.1 Tema

Intervalos de confianza para uno y dos parámetros.

6.0.2 Objetivo

Aplicar los procedimientos estudiados para construir e interpretar intervalos de confianza para uno y dos parámetros poblacionales utilizando un conjunto de datos real. Además, fortalecer las habilidades para obtener las estadísticas muestrales necesarias a partir de una base de datos y documentar adecuadamente todo el proceso mediante R Markdown.

6.0.3 Base de datos

Utilice el conjunto de datos survey del paquete lsm, el mismo empleado durante las clases.

6.0.4 Lineamientos

Los lineamientos generales para la elaboración, entrega y evaluación de esta actividad se encuentran disponibles en:

https://rpubs.com/hllinas/R_Lineamiento_EstInf

No es necesario repetir dichos lineamientos en este documento.

6.0.5 Actividades

  1. Conociendo la base de datos

    Responda las siguientes preguntas:

    1. ¿Cuántas observaciones tiene la base de datos?

    2. ¿Cuántas variables contiene?

    3. Muestre los nombres de todas las variables.

    4. Seleccione:

      • una variable cuantitativa que utilizará para construir intervalos para la media y la varianza;

      • una variable dicotómica que utilizará para construir intervalos para una proporción;

      • una variable categórica con exactamente dos niveles que utilizará para comparar dos poblaciones.

    Justifique brevemente la selección realizada.

    Importante:

    • Las variables seleccionadas no podrán ser las mismas utilizadas durante las clases o en los ejemplos de las notas del curso. Cada estudiante deberá elegir un conjunto diferente de variables que cumpla las condiciones anteriores.
  1. Selección de una muestra

    1. Construya un nuevo data frame denominado Muestra con más de 100 observaciones seleccionadas de la base de datos.

    2. Todas las estimaciones realizadas en la actividad deberán calcularse utilizando únicamente esta muestra.

  1. Intervalos de confianza para un parámetro

    Utilizando la muestra seleccionada:

    1. Construya un intervalo de confianza para la media suponiendo conocida la desviación estándar poblacional.

    2. Construya un intervalo de confianza para la media suponiendo desconocida la desviación estándar poblacional.

    3. Construya un intervalo de confianza para una proporción.

    4. Construya un intervalo de confianza para una varianza.

    Para cada intervalo:

    • indique el nivel de confianza utilizado;

    • presente los resultados obtenidos;

    • interprete el intervalo en el contexto del problema.

  1. Preparación de los dos grupos

    Utilizando la variable categórica seleccionada:

    1. construya dos subconjuntos correspondientes a cada uno de sus niveles;

    2. obtenga todas las estadísticas resumidas necesarias para construir los intervalos de confianza solicitados en la siguiente sección.

  1. Intervalos de confianza para dos parámetros

    Utilizando los dos grupos definidos anteriormente, construya:

    1. Un intervalo de confianza para la diferencia de medias suponiendo conocidas las desviaciones estándar poblacionales.

    2. Un intervalo de confianza para la diferencia de medias suponiendo varianzas desconocidas e iguales.

    3. Un intervalo de confianza para la diferencia de medias suponiendo varianzas desconocidas y diferentes.

    4. Un intervalo de confianza para la diferencia de proporciones.

    5. Un intervalo de confianza para la razón de varianzas.

    Para cada intervalo:

    • presente los resultados obtenidos;

    • interprete el intervalo;

    • explique brevemente qué parámetro poblacional está siendo estimado.

  1. Comparación entre procedimientos

    Responda las siguientes preguntas:

    1. ¿Qué diferencias observa entre los intervalos construidos con las distribuciones \(Z\) y \(t\)?

    2. ¿Los intervalos obtenidos mediante los dos procedimientos para la diferencia de medias fueron similares? Explique.

    3. ¿Qué información aporta el intervalo para la razón de varianzas?

  1. Conclusión

    Escriba una conclusión de dos o tres párrafos donde analice los principales resultados obtenidos.

    Entre otros aspectos, responda:

    1. ¿Qué conclusiones pueden obtenerse sobre la población a partir de los intervalos construidos?

    2. ¿Qué diferencias encontró entre trabajar con estadísticas resumidas y calcularlas directamente desde una base de datos?

    3. ¿Qué limitaciones presentan los intervalos de confianza obtenidos?

6.0.6 Recomendaciones

  • Todas las tablas deberán estar numeradas y tituladas.

  • Todas las afirmaciones deberán sustentarse con los resultados obtenidos.

  • Muestre el código utilizado para obtener las estadísticas resumidas antes de construir cada intervalo de confianza.

  • Justifique cualquier supuesto realizado (por ejemplo, la desviación estándar poblacional utilizada en los procedimientos con el estadístico \(Z\)).

  • El código deberá estar correctamente documentado mediante comentarios.

  • Recuerde consultar los lineamientos generales del curso para conocer los requisitos de reproducibilidad, entrega y evaluación.

Anexos

  1. RStudio, R Markdown y R (por lo menos, el capítulo 1): Click derecho aquí.

  2. Lineamientos (actividades de análisis de datos): Click derecho aquí.

  3. Tablas estadísticas: Click derecho aquí.

  4. Tabla de supuestos: Click derecho aquí.

Texto guía

  1. LLinás, H. (2006); Estadística inferencial. Barranquilla: Editorial Universidad del Norte.

Bibliografía complementaria

  1. LLinás, H., Rojas, C. (2005). Estadística descriptiva y distribuciones de probabilidad. Barranquilla: Editorial Universidad del Norte.

  2. Consultar mis notas de clase: Estadística inferencial

  3. Consultar el documento RPubs :: Enlace y materiales de ayuda.

  4. Agresti, A., Franklin, C., & Klingenberg, B. (2018). Statistics: The Art and Science of Learning from Data, 4/E.

  5. Puede consultarse mis siguientes documentos:

 

 
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.