6

Notas de clase

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

INTERVALO DE CONFIANZA PARA LA MEDIA (CON 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
)

Intervalo 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

Con una confianza del 95% la edad promedio de los estudiantes esta entre 18.47 y 20.04 años

# 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 Male (éxitos) y tamaño total de la muestra.
total_mal <- sum(genero == "Male")
n_mal <- length(genero)

# Calcula el intervalo
resultado <- ic_proporcion(
  exitos = total_mal,
  n = n_mal,
  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

EJERCICIO- ALTURA

#Base de datos
datosCompleto <- lsm::survey

# Para algunos ejemplos de esta sección utilizaremos únicamente las primeras 100 observaciones
df3 <- datosCompleto[1:80,]

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

# Dimensión de las dos bases de datos (observaciones, variables)
dim(datosCompleto)
## [1] 800  66
dim(df3)
## [1] 80 66
dim(df4)
## [1] 50 66

Intervalo de confianza con Z

# 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.6823
σ 6
Error estándar 0.6708
n 80
Grado de confianza 0.95
Valor crítico 1.96
Margen de error 1.3148
Extremo inferior 0.3675
Extremo superior 2.997
Intervalo 1.6823 ± 1.3148

Con una confianza del 95% la altura promedio de los estudiantes estaría entre 0.3675 y 2.997 metros. Sin embargo, este resultado no es coherente con la realidad, ya que ninguna persona mide 3 metros ni 37 centímetros. Esto ocurre porque el valor de sigma = 6 utilizado corresponde a la desviación estándar de la edad (dato dado por el profesor para esa variable), no a la de la altura, por lo que no debe aplicarse aquí. Para esta variable, el intervalo de confianza correcto es el que se calcula con la distribución t, usando la desviación estándar muestral.

Intervalo de confianza con t

# Elimina los valores perdidos (NA)
altura <- df4$Height[!is.na(df4$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.6566
s 0.0906
Error estándar 0.0128
n 50
Grados de libertad 49
Grado de confianza 0.95
Valor crítico 2.0096
Margen de error 0.0258
Extremo inferior 1.6308
Extremo superior 1.6824
Intervalo 1.6566 ± 0.0258

Con una confianza del 95% la altura promedio de los estudiantes está entre 1.6308m y 1.6824m.

Proporción

# Elimina los valores perdidos (NA)
altura_madre <- df1$MotherHeight[!is.na(df1$MotherHeight)]

# Calcula número de madres con estatura alta  (éxitos) y tamaño total de la muestra.
total_mal <- sum(altura_madre == "Tall_M")
n_mal <- length(altura_madre)

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

resultado
Medida Valor
Éxitos 31
n 100
Proporción 0.31
Error estándar 0.0462
Grado de confianza 0.95
Valor crítico 1.96
Margen de error 0.0906
Extremo inferior 0.2194
Extremo superior 0.4006
Intervalo 0.31 ± 0.0906

Con una confianza del 95% la proporción de madres con estatura alta (Tall_M) está entre 0.2194 y 0.4006.

# Elimina los valores perdidos (NA)
altura_padre <- df1$FatherHeight[!is.na(df1$FatherHeight)]

# Calcula número de estudiantes de padres con estatura alta (éxitos) y tamaño total de la muestra.
total_mal <- sum(altura_padre == "Tall_F")
n_mal <- length(altura_padre)

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

resultado
Medida Valor
Éxitos 29
n 100
Proporción 0.29
Error estándar 0.0454
Grado de confianza 0.95
Valor crítico 1.96
Margen de error 0.0889
Extremo inferior 0.2011
Extremo superior 0.3789
Intervalo 0.29 ± 0.0889

Con una confianza del 95% la proporción de padres con estatura alta (Tall_F) está entre 0.2011 y 0.3789.