Información

-Profesor: Humberto Llinas Solano

Resumen

Palabras clave

Introducción

Marcoteorico

Metodología

Para llevar a cabo este análisis, se empleó la base de datos survey del paquete lsm en R, la cual recopila diversas características sociodemográficas y académicas de los encuestados. Con el fin de estudiar tanto variables cuantitativas como cualitativas mediante pruebas de hipótesis, se seleccionaron cuatro variables clave: SemAcum (promedio académico acumulado), Score (puntaje), Like (gusto) y Course (tipo de curso).

A partir de la base completa, se delimitaron dos subconjuntos de datos. El primero, denominado df1, abarca las primeras 150 observaciones y se destinó a los análisis que exigen mayor tamaño de muestra (SemAcum, Like y Course). El segundo, llamado df2, incluye las primeras 25 observaciones y se reservó para la prueba sobre Score, adaptada a muestras más pequeñas. En cada procedimiento se excluyeron los valores perdidos (NA), por lo que el tamaño muestral efectivo se ajustó al número real de datos disponibles tras este filtro.

El análisis estadístico se estructuró en torno a tres procedimientos de prueba de hipótesis evaluados bajo un nivel de significancia de = 0.05 en modalidades de cola derecha, cola izquierda y bilateral (tomando decisiones mediante el valor p): una prueba Z para la media de la variable SemAcum bajo el supuesto de una desviación estándar conocida (= 0.8); una prueba t de Student para la media de la variable Score con varianza desconocida y $n - 1 grados de libertad; y pruebas de proporciones mediante aproximación normal para las variables cualitativas Like y Course frente al valor de referencia P0 = 0.5.

Como complemento al análisis inferencial, se elaboraron tablas de frecuencias univariadas para Like, una tabla de contingencia cruzando Like y Course, diagramas de barras y medidas estadísticas descriptivas para SemAcum. Todo el procesamiento se ejecutó en R y RStudio mediante un documento R Markdown, utilizando los paquetes lsm, knitr, kableExtra y ggplot2 para garantizar la reproducibilidad y el diseño visual de los resultados. # Resultados

library(lsm)      
library(knitr)      
library(kableExtra) 
library(ggplot2)
# ============================================================
# 1. Funciones auxiliares
# ============================================================

formato_num <- function(x, digitos = 4) {
  format(
    round(x, digitos),
    nsmall = 0,
    trim = TRUE,
    scientific = FALSE
  )
}

nombre_alternativa <- function(alternative) {
  switch(
    alternative,
    "two.sided" = "Bilateral",
    "greater"   = "Cola derecha",
    "less"      = "Cola izquierda"
  )
}

valor_p_normal <- function(estadistico, alternative) {
  switch(
    alternative,
    "two.sided" = 2 * pnorm(-abs(estadistico)),
    "greater"   = pnorm(estadistico, lower.tail = FALSE),
    "less"      = pnorm(estadistico)
  )
}

valor_p_t <- function(estadistico, gl, alternative) {
  switch(
    alternative,
    "two.sided" = 2 * pt(-abs(estadistico), df = gl),
    "greater"   = pt(estadistico, df = gl, lower.tail = FALSE),
    "less"      = pt(estadistico, df = gl)
  )
}

valor_p_chi <- function(estadistico, gl, alternative) {
  switch(
    alternative,
    "two.sided" = min(
      1,
      2 * min(
        pchisq(estadistico, df = gl),
        pchisq(estadistico, df = gl, lower.tail = FALSE)
      )
    ),
    "greater" = pchisq(estadistico, df = gl, lower.tail = FALSE),
    "less"    = pchisq(estadistico, df = gl)
  )
}

valor_p_f <- function(estadistico, gl1, gl2, alternative) {
  switch(
    alternative,
    "two.sided" = min(
      1,
      2 * min(
        pf(estadistico, df1 = gl1, df2 = gl2),
        pf(estadistico, df1 = gl1, df2 = gl2, lower.tail = FALSE)
      )
    ),
    "greater" = pf(
      estadistico,
      df1 = gl1,
      df2 = gl2,
      lower.tail = FALSE
    ),
    "less" = pf(
      estadistico,
      df1 = gl1,
      df2 = gl2
    )
  )
}

decision_prueba <- function(valor_p, alpha) {
  if (valor_p <= alpha) {
    "Rechazar H0"
  } else {
    "No rechazar H0"
  }
}

conclusion_prueba <- function(valor_p, alpha) {
  if (valor_p <= alpha) {
    paste0(
      "Existe evidencia estadística suficiente, al nivel α = ",
      formato_num(alpha),
      ", para apoyar H1"
    )
  } else {
    paste0(
      "No existe evidencia estadística suficiente, al nivel α = ",
      formato_num(alpha),
      ", para apoyar H1"
    )
  }
}

validar_alternativa <- function(alternative) {
  match.arg(alternative, c("two.sided", "greater", "less"))
}


# ============================================================
# 2. Prueba Z para una media con sigma conocida
#    H0: mu = mu0
# ============================================================

ph_media_z <- function(media, sigma, n, mu0,
                       alpha = 0.05,
                       alternative = "two.sided",
                       digitos = 4) {
  
  alternative <- validar_alternativa(alternative)
  
  if (sigma <= 0 || n <= 1) {
    stop("sigma debe ser positiva y n debe ser mayor que 1.")
  }
  
  error_estandar <- sigma / sqrt(n)
  estadistico <- (media - mu0) / error_estandar
  valor_p <- valor_p_normal(estadistico, alternative)
  
  resultado <- data.frame(
    Medida = c(
      "Media muestral",
      "Media bajo H0",
      "σ",
      "n",
      "Error estándar",
      "Tipo de prueba",
      "Nivel de significancia",
      "Estadístico Z",
      "p-valor",
      "Decisión",
      "Conclusión"
    ),
    Valor = c(
      formato_num(media, digitos),
      formato_num(mu0, digitos),
      formato_num(sigma, digitos),
      n,
      formato_num(error_estandar, digitos),
      nombre_alternativa(alternative),
      formato_num(alpha, digitos),
      formato_num(estadistico, digitos),
      formato_num(valor_p, digitos),
      decision_prueba(valor_p, alpha),
      conclusion_prueba(valor_p, alpha)
    ),
    check.names = FALSE
  )
  
  knitr::kable(
    resultado,
    format = "html",
    col.names = c("Medida", "Valor"),
    align = c("l", "r")
  )
}


# ============================================================
# 3. Prueba t para una media con sigma desconocida
#    H0: mu = mu0
# ============================================================

ph_media_t <- function(media, s, n, mu0,
                       alpha = 0.05,
                       alternative = "two.sided",
                       digitos = 4) {
  
  alternative <- validar_alternativa(alternative)
  
  if (s <= 0 || n <= 1) {
    stop("s debe ser positiva y n debe ser mayor que 1.")
  }
  
  gl <- n - 1
  error_estandar <- s / sqrt(n)
  estadistico <- (media - mu0) / error_estandar
  valor_p <- valor_p_t(estadistico, gl, alternative)
  
  resultado <- data.frame(
    Medida = c(
      "Media muestral",
      "Media bajo H0",
      "s",
      "n",
      "Grados de libertad",
      "Error estándar",
      "Tipo de prueba",
      "Nivel de significancia",
      "Estadístico t",
      "p-valor",
      "Decisión",
      "Conclusión"
    ),
    Valor = c(
      formato_num(media, digitos),
      formato_num(mu0, digitos),
      formato_num(s, digitos),
      n,
      gl,
      formato_num(error_estandar, digitos),
      nombre_alternativa(alternative),
      formato_num(alpha, digitos),
      formato_num(estadistico, digitos),
      formato_num(valor_p, digitos),
      decision_prueba(valor_p, alpha),
      conclusion_prueba(valor_p, alpha)
    ),
    check.names = FALSE
  )
  
  knitr::kable(
    resultado,
    format = "html",
    col.names = c("Medida", "Valor"),
    align = c("l", "r")
  )
}


# ============================================================
# 4. Prueba Z para una proporción
#    H0: p = p0
# ============================================================

ph_proporcion <- function(exitos, n, p0,
                          alpha = 0.05,
                          alternative = "two.sided",
                          digitos = 4) {
  
  alternative <- validar_alternativa(alternative)
  
  if (exitos < 0 || exitos > n) {
    stop("El número de éxitos debe estar entre 0 y n.")
  }
  
  if (p0 <= 0 || p0 >= 1) {
    stop("p0 debe estar entre 0 y 1.")
  }
  
  proporcion <- exitos / n
  error_estandar <- sqrt(p0 * (1 - p0) / n)
  estadistico <- (proporcion - p0) / error_estandar
  valor_p <- valor_p_normal(estadistico, alternative)
  
  resultado <- data.frame(
    Medida = c(
      "Éxitos",
      "n",
      "Proporción muestral",
      "Proporción bajo H0",
      "ES bajo H0",
      "Tipo de prueba",
      "Nivel de significancia",
      "Estadístico Z",
      "p-valor",
      "Decisión",
      "Conclusión"
    ),
    Valor = c(
      exitos,
      n,
      formato_num(proporcion, digitos),
      formato_num(p0, digitos),
      formato_num(error_estandar, digitos),
      nombre_alternativa(alternative),
      formato_num(alpha, digitos),
      formato_num(estadistico, digitos),
      formato_num(valor_p, digitos),
      decision_prueba(valor_p, alpha),
      conclusion_prueba(valor_p, alpha)
    ),
    check.names = FALSE
  )
  
  knitr::kable(
    resultado,
    format = "html",
    col.names = c("Medida", "Valor"),
    align = c("l", "r")
  )
}
datosCompleto <- lsm::survey

df1 <- datosCompleto[1:150,]

df2 <- datosCompleto[1:25,]

dim(datosCompleto)
## [1] 800  66
dim(df1)
## [1] 150  66
dim(df2)
## [1] 25 66
unique(df1$Like)
## [1] "TV"      "Network"
unique(df1$Course)
## [1] "Face-to-Face" "Virtual"

1. Prueba para la media (con 𝑍)

1.1 Prueba de una cola a la derecha

𝐻0: 𝜇≤3.5 frente a 𝐻1: 𝜇>3.5.

sem <- df1$SemAcum[!is.na(df1$SemAcum)] 

media_sem <- mean(sem)
n_sem <- length(sem)

resultado <- ph_media_z(
  media = media_sem,
  sigma = 0.8,
  n = n_sem,
  mu0 = 3.5,
  alpha = 0.05,
  alternative = "greater"
)

resultado
Medida Valor
Media muestral 3.4237
Media bajo H0 3.5
σ 0.8
n 150
Error estándar 0.0653
Tipo de prueba Cola derecha
Nivel de significancia 0.05
Estadístico Z -1.1686
p-valor 0.8787
Decisión No rechazar H0
Conclusión No existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

1.2 Prueba de una cola a la izquierda

𝐻0: 𝜇≥3.5 frente a 𝐻1: 𝜇<3.5.

sem <- df1$SemAcum[!is.na(df1$SemAcum)] 

media_sem <- mean(sem)
n_sem <- length(sem)

resultado <- ph_media_z(
  media = media_sem,
  sigma = 0.8,
  n = n_sem,
  mu0 = 3.5,
  alpha = 0.05,
  alternative = "less"
)

resultado
Medida Valor
Media muestral 3.4237
Media bajo H0 3.5
σ 0.8
n 150
Error estándar 0.0653
Tipo de prueba Cola izquierda
Nivel de significancia 0.05
Estadístico Z -1.1686
p-valor 0.1213
Decisión No rechazar H0
Conclusión No existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

1.3 Prueba de dos colas o bilateral

𝐻0: 𝜇=3.5 frente a 𝐻1: 𝜇≠3.5.

sem <- df1$SemAcum[!is.na(df1$SemAcum)] 

media_sem <- mean(sem)
n_sem <- length(sem)

resultado <- ph_media_z(
  media = media_sem,
  sigma = 0.8,
  n = n_sem,
  mu0 = 3.5,
  alpha = 0.05,
  alternative = "two.sided"
)

resultado
Medida Valor
Media muestral 3.4237
Media bajo H0 3.5
σ 0.8
n 150
Error estándar 0.0653
Tipo de prueba Bilateral
Nivel de significancia 0.05
Estadístico Z -1.1686
p-valor 0.2426
Decisión No rechazar H0
Conclusión No existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

2. Prueba para la media (con 𝑡)

2.1 Prueba de una cola a la derecha

𝐻0: 𝜇≤60 frente a 𝐻1: 𝜇>60.

puntaje <- df2$Score[!is.na(df2$Score)] 

media_puntaje <- mean(puntaje)
s_puntaje <- sd(puntaje)
n_puntaje <- length(puntaje)

resultado <- ph_media_t(
  media = media_puntaje,
  s = s_puntaje,
  n = n_puntaje,
  mu0 = 60,
  alpha = 0.05,
  alternative = "greater"
)

resultado
Medida Valor
Media muestral 40.64
Media bajo H0 60
s 20.3877
n 25
Grados de libertad 24
Error estándar 4.0775
Tipo de prueba Cola derecha
Nivel de significancia 0.05
Estadístico t -4.748
p-valor 1
Decisión No rechazar H0
Conclusión No existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

2.2 Prueba de una cola a la izquierda

𝐻0: 𝜇≥60 frente a 𝐻1: 𝜇<60.

puntaje <- df2$Score[!is.na(df2$Score)] 

media_puntaje <- mean(puntaje)
s_puntaje <- sd(puntaje)
n_puntaje <- length(puntaje)

resultado <- ph_media_t(
  media = media_puntaje,
  s = s_puntaje,
  n = n_puntaje,
  mu0 = 60,
  alpha = 0.05,
  alternative = "less"
)

resultado
Medida Valor
Media muestral 40.64
Media bajo H0 60
s 20.3877
n 25
Grados de libertad 24
Error estándar 4.0775
Tipo de prueba Cola izquierda
Nivel de significancia 0.05
Estadístico t -4.748
p-valor 0
Decisión Rechazar H0
Conclusión Existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

2.3 Prueba de dos colas o bilateral

𝐻0: 𝜇=60 frente a 𝐻1: 𝜇≠60.

puntaje <- df2$Score[!is.na(df2$Score)] 

media_puntaje <- mean(puntaje)
s_puntaje <- sd(puntaje)
n_puntaje <- length(puntaje)

resultado <- ph_media_t(
  media = media_puntaje,
  s = s_puntaje,
  n = n_puntaje,
  mu0 = 60,
  alpha = 0.05,
  alternative = "two.sided"
)

resultado
Medida Valor
Media muestral 40.64
Media bajo H0 60
s 20.3877
n 25
Grados de libertad 24
Error estándar 4.0775
Tipo de prueba Bilateral
Nivel de significancia 0.05
Estadístico t -4.748
p-valor 0.0001
Decisión Rechazar H0
Conclusión Existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

3. Prueba para una proporción

3.1 Prueba de una cola a la derecha

𝐻0: 𝑝≤0.5 frente a 𝐻1: 𝑝>0.5.

gusto <- df1$Like[!is.na(df1$Like)]

total_net <- sum(gusto == 1)
n_net <- length(gusto)

resultado <- ph_proporcion(
  exitos = total_net,
  n = n_net,
  p0 = 0.50,
  alpha = 0.05,
  alternative = "greater"
)

resultado
Medida Valor
Éxitos 0
n 150
Proporción muestral 0
Proporción bajo H0 0.5
ES bajo H0 0.0408
Tipo de prueba Cola derecha
Nivel de significancia 0.05
Estadístico Z -12.2474
p-valor 1
Decisión No rechazar H0
Conclusión No existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

3.2 Prueba de una cola a la izquierda

𝐻0: 𝑝≥0.5 frente a 𝐻1: 𝑝<0.5.

gusto <- df1$Like[!is.na(df1$Like)]

total_net <- sum(gusto == 1)
n_net <- length(gusto)

resultado <- ph_proporcion(
  exitos = total_net,
  n = n_net,
  p0 = 0.50,
  alpha = 0.05,
  alternative = "less"
)

resultado
Medida Valor
Éxitos 0
n 150
Proporción muestral 0
Proporción bajo H0 0.5
ES bajo H0 0.0408
Tipo de prueba Cola izquierda
Nivel de significancia 0.05
Estadístico Z -12.2474
p-valor 0
Decisión Rechazar H0
Conclusión Existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

3.3 Prueba de dos colas o bilateral

𝐻0: 𝑝=0.5 frente a 𝐻1: 𝑝≠0.5.

gusto <- df1$Like[!is.na(df1$Like)]

total_net <- sum(gusto == 1)
n_net <- length(gusto)

resultado <- ph_proporcion(
  exitos = total_net,
  n = n_net,
  p0 = 0.50,
  alpha = 0.05,
  alternative = "two.sided"
)

resultado
Medida Valor
Éxitos 0
n 150
Proporción muestral 0
Proporción bajo H0 0.5
ES bajo H0 0.0408
Tipo de prueba Bilateral
Nivel de significancia 0.05
Estadístico Z -12.2474
p-valor 0
Decisión Rechazar H0
Conclusión Existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

4. Variable Course

4.1 Prueba de una cola a la derecha

𝐻0: 𝑝≤0.5 frente a 𝐻1: 𝑝>0.5.

curso <- df1$Course[!is.na(df1$Course)]

total_virt <- sum(curso == 1)
n_virt <- length(curso)

resultado <- ph_proporcion(
  exitos = total_virt,
  n = n_virt,
  p0 = 0.50,
  alpha = 0.05,
  alternative = "greater"
)

resultado
Medida Valor
Éxitos 0
n 150
Proporción muestral 0
Proporción bajo H0 0.5
ES bajo H0 0.0408
Tipo de prueba Cola derecha
Nivel de significancia 0.05
Estadístico Z -12.2474
p-valor 1
Decisión No rechazar H0
Conclusión No existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

4.2 Prueba de una cola a la izquierda

𝐻0: 𝑝≥0.5 frente a 𝐻1: 𝑝<0.5.

curso <- df1$Course[!is.na(df1$Course)]

total_virt <- sum(curso == 1)
n_virt <- length(curso)

resultado <- ph_proporcion(
  exitos = total_virt,
  n = n_virt,
  p0 = 0.50,
  alpha = 0.05,
  alternative = "less"
)

resultado
Medida Valor
Éxitos 0
n 150
Proporción muestral 0
Proporción bajo H0 0.5
ES bajo H0 0.0408
Tipo de prueba Cola izquierda
Nivel de significancia 0.05
Estadístico Z -12.2474
p-valor 0
Decisión Rechazar H0
Conclusión Existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

4.3 Prueba de dos colas o bilateral

𝐻0: 𝑝=0.5 frente a 𝐻1: 𝑝≠0.5.

curso <- df1$Course[!is.na(df1$Course)]

total_virt <- sum(curso == 1)
n_virt <- length(curso)

resultado <- ph_proporcion(
  exitos = total_virt,
  n = n_virt,
  p0 = 0.50,
  alpha = 0.05,
  alternative = "two.sided"
)

resultado
Medida Valor
Éxitos 0
n 150
Proporción muestral 0
Proporción bajo H0 0.5
ES bajo H0 0.0408
Tipo de prueba Bilateral
Nivel de significancia 0.05
Estadístico Z -12.2474
p-valor 0
Decisión Rechazar H0
Conclusión Existe evidencia estadística suficiente, al nivel α = 0.05, para apoyar H1

5. Tablas

5.1 Tabla univariada (Like)

Muestra <- datosCompleto[1:150,]

Gusto <- as.factor(Muestra$Like)  

Tabla1 <- table(Gusto)
Tabla1
## Gusto
## Network      TV 
##      66      84

5.2 Tabla cruzada (Like y Course)

Curso <- as.factor(Muestra$Course)  

Tabla3 <- table(Gusto, Curso)
Tabla3
##          Curso
## Gusto     Face-to-Face Virtual
##   Network           30      36
##   TV                35      49

6. Diagramas

6.1 Diagrama de barras (caso univariado, Like)

ggplot(Muestra, aes(x = Gusto)) +                            #1
  #geom_bar() +                                             #2
  geom_bar(width=0.5, colour="black", fill="skyblue") +       #2 
  
  labs(x="Like",y= "Frecuencia")  +              #3               
  ylim(c(0,150)) +                               #4
  #xlim(c(0,300)) +                              #4
  ggtitle("Diagrama de barras")  +               #5
  
  # theme_bw() +                                 #6
  theme_bw(base_size = 12) +                     #6
  #coord_flip() +                                #7
  
  geom_text(aes(label=..count..), stat='count',  #8
            position=position_dodge(0.9), 
            vjust=-0.5, 
            size=5.0
            ) + 
  facet_wrap(~"Variable Like")                   #9
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

6.2 Diagrama de barras (caso bivariado: Course dentro de cada nivel de Like)

ggplot(Muestra, aes(Gusto,  fill=Curso)) +      
  geom_bar(position="dodge",colour="black") +
  
  labs(x= "Like",  y="Frecuencias", fill="Course") +
  ylim(c(0,100)) +
  #xlim(c(0,300)) +   
  
  ggtitle("Diagrama de barras") + 
  
  #theme_bw() +                     
  theme_bw(base_size = 12) +          
  #coord_flip() + 
  
  #guides(fill=FALSE)+                                #8                                    
  scale_fill_manual(values = c("orange","green")) +   #9
  
  geom_text(aes(label=..count..), stat='count',       #10
            position=position_dodge(0.9),
            vjust=-0.5, 
            size=5.0
            )+
  
  facet_wrap(~"Course por uso del tiempo libre")  #11

7. Medidas estadisticas

Muestra2 <- datosCompleto[1:150,] 
x <- as.numeric(Muestra2$SemAcum)  # A) Convirtiendo la variable a numérica
x
##   [1] 4.25 2.80 4.15 3.20 3.45 2.75 2.70 4.35 4.30 2.80 4.00 2.65 3.90 3.00 4.10
##  [16] 2.50 2.50 4.35 2.65 3.40 4.30 3.10 3.00 2.65 2.70 2.80 3.55 2.85 3.50 3.80
##  [31] 4.35 3.45 4.05 4.20 3.60 3.55 2.70 4.35 2.95 4.30 3.05 3.50 4.20 4.05 2.80
##  [46] 2.90 3.60 3.90 3.50 2.50 3.15 3.25 3.55 4.05 4.00 3.35 3.25 2.75 3.10 2.50
##  [61] 3.45 3.15 2.80 3.80 3.75 3.60 3.85 3.45 4.30 3.15 3.45 2.95 2.55 2.75 4.40
##  [76] 3.90 3.25 2.70 3.50 2.65 2.90 2.80 2.75 2.65 3.10 3.35 4.00 2.80 3.35 2.80
##  [91] 4.45 2.60 4.25 3.70 3.55 2.50 3.90 2.65 2.50 4.35 2.95 3.80 2.50 4.00 4.00
## [106] 3.55 3.10 4.05 3.20 4.30 3.25 3.30 4.30 2.60 2.55 3.85 4.05 3.00 3.90 4.20
## [121] 4.45 2.85 3.55 4.30 3.00 2.95 4.35 4.30 2.90 3.15 3.60 2.75 2.90 4.35 3.20
## [136] 3.05 2.80 3.55 4.35 4.40 2.75 4.30 3.05 3.20 2.60 4.10 3.10 4.40 4.35 3.65
min(x)          #B) Mínimo
## [1] 2.5
max(x)          #C) Máximo
## [1] 4.45
range(x)        #D) Obtenemos (min, max)
## [1] 2.50 4.45
length(x)       #E) Tamaño
## [1] 150
sum(x)          #F) Suma los valores de los datos
## [1] 513.55
mean(x)         #G) Media aritmética
## [1] 3.423667
median(x)       #H) Mediana
## [1] 3.375
var(x)          #I) Varianza muestral
## [1] 0.3803254
sqrt(var(x))    #J) Desviación estándar muestral (una forma)
## [1] 0.6167053
sd(x)           #K) Desviación estándar muestral (otra forma)
## [1] 0.6167053
quantile(x, probs=0.80)    #M) 80-ésimo percentil
## 80% 
## 4.1
quantile(x, probs=0.25)    #N) Primer cuartil o 25-ésimo percentil
##  25% 
## 2.85
quantile(x, probs=0.50)    #O) Segundo cuartil o 50-ésimo percentil o mediana
##   50% 
## 3.375
quantile(x, probs=0.75)    #P) Tercer cuartil o 75-ésimo percentil
## 75% 
##   4

Conclusiones

Bibliografia

Declaración sobre el uso de IA

Tabla_IA <- data.frame(
  Aspecto = c("Uso de IA",
              "Herramienta utilizada",
              "Uso realizado",
              "Porcentaje estimado de utilización"),
  Informacion = c("Sí",
                  "Claude",
                  "xx",
                  "xx %")
)

kable(Tabla_IA,
      col.names = c("Aspecto", "Información"),
      align = c("l", "l"),
      caption = "Declaración sobre el uso de Inteligencia Artificial") %>%
  kable_styling(full_width = FALSE, position = "left",
                bootstrap_options = c("striped", "hover")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2E5C7F") %>%
  column_spec(1, width = "10cm") %>%
  column_spec(2, width = "10cm")
Declaración sobre el uso de Inteligencia Artificial
Aspecto Información
Uso de IA Sí
Herramienta utilizada Claude
Uso realizado xx
Porcentaje estimado de utilización xx %