Paso 1: Cargar las librerías necesarias
# Instalamos el paquete psych para los descriptivos avanzados
library(psych)
# Cargamos readxl para poder importar el archivo Excel
library(readxl)
# Cargamos ggplot2 para la construcción de gráficos
library(ggplot2)
# Hacemos que R muestre los resultados en decimales y no en notación científica
options(scipen = 999)
Paso 2: Importar los datos
# Aplastamos en el apartado 'import datatest', seleccionamos from excel,
# en browse seleccionamos el archivo y guardamos con el nombre 'Datos'
Datos <- read_excel("C:/Users/Daniela/Documents/Bases/Datos.xlsx",
sheet = "Datos")
Paso 3: Valores perdidos (NA) en GAD7_total
# Contamos cuántos valores perdidos hay en GAD7_total ANTES de limpiar
na_antes <- sum(is.na(Datos$GAD7_total))
cat("Valores perdidos en GAD7_total:", na_antes, "\n")
## Valores perdidos en GAD7_total: 12
# is.na() detecta cada celda vacía en la columna GAD7_total y devuelve TRUE o
# FALSE. sum() cuenta cuántos TRUE hay
# Resultado esperado: 12 valores perdidos
# Eliminamos los 12 casos que no tienen dato en GAD7_total
Datos_limpios <- Datos[!is.na(Datos$GAD7_total), ]
# el ! significa "NO", entonces le estamos diciendo "quédate solo con las filas
# que NO tienen NA en GAD7_total". El resultado se guarda en Datos_limpios
# Calculamos y reportamos el tamaño de muestra final efectivo
N_efectivo <- nrow(Datos_limpios)
cat("N efectivo (muestra válida para el análisis):", N_efectivo, "\n")
## N efectivo (muestra válida para el análisis): 638
# nrow() cuenta las filas que quedaron
# Resultado esperado: 638 participantes
# Confirmamos que ya no quedan NA en la variable principal
cat("NA en GAD7_total después de la limpieza:", sum(is.na(Datos_limpios$GAD7_total)), "\n")
## NA en GAD7_total después de la limpieza: 0
Paso 4: Estadísticos descriptivos de la muestra
# --- Medidas de tendencia central y variabilidad de la EDAD ---
cat("\n--- Descriptivos de la Edad ---\n")
##
## --- Descriptivos de la Edad ---
mean(Datos_limpios$Edad) # Media de edad
## [1] 34.54859
median(Datos_limpios$Edad) # Mediana de edad
## [1] 33
sd(Datos_limpios$Edad) # Desviación estándar de edad
## [1] 9.19337
min(Datos_limpios$Edad) # Edad mínima de la muestra
## [1] 18
max(Datos_limpios$Edad) # Edad máxima de la muestra
## [1] 78
range(Datos_limpios$Edad) # Rango (mínimo y máximo juntos)
## [1] 18 78
# Resumen completo de la distribución de Edad
summary(Datos_limpios$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 28.00 33.00 34.55 39.00 78.00
# Resumen detallado con asimetría y curtosis usando psych
describe(Datos_limpios$Edad)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 638 34.55 9.19 33 33.62 7.41 18 78 60 1.07 1.5 0.36
# --- Frecuencias por Sexo ---
# table() nos dice cuántas personas hay de cada sexo
cat("\n--- Distribución por Sexo ---\n")
##
## --- Distribución por Sexo ---
table(Datos_limpios$Sexo)
##
## Hombre Mujer
## 265 373
# --- Medidas de tendencia central y variabilidad del GAD-7 ---
cat("\n--- Descriptivos del GAD7_total ---\n")
##
## --- Descriptivos del GAD7_total ---
mean(Datos_limpios$GAD7_total) # Puntaje promedio de ansiedad
## [1] 7.601881
median(Datos_limpios$GAD7_total) # Valor central del GAD7
## [1] 7
sd(Datos_limpios$GAD7_total) # Qué tanto varían los puntajes
## [1] 4.124224
min(Datos_limpios$GAD7_total) # Puntaje más bajo registrado
## [1] 0
max(Datos_limpios$GAD7_total) # Puntaje más alto registrado
## [1] 20
# Resumen completo del GAD-7 (mínimo, cuartiles, media, máximo)
summary(Datos_limpios$GAD7_total)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 4.000 7.000 7.602 10.000 20.000
# Resumen detallado del GAD-7 con asimetría y curtosis
describe(Datos_limpios$GAD7_total)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 638 7.6 4.12 7 7.43 4.45 0 20 20 0.39 -0.22 0.16
Análisis 1: Frecuencias de niveles de ansiedad (GAD-7)
# Creamos una nueva columna que clasifica a cada persona en su nivel de ansiedad
# Puntos de corte del GAD-7:
# 0 a 4 = Ansiedad mínima
# 5 a 9 = Ansiedad leve
# 10 a 14 = Ansiedad moderada
# 15 a 21 = Ansiedad severa
Datos_limpios$Nivel_ansiedad <- ifelse(Datos_limpios$GAD7_total <= 4, "Mínima",
ifelse(Datos_limpios$GAD7_total <= 9, "Leve",
ifelse(Datos_limpios$GAD7_total <= 14, "Moderada",
"Severa")))
# Convertimos la variable a factor con el orden clínico correcto
Datos_limpios$Nivel_ansiedad <- factor(Datos_limpios$Nivel_ansiedad,
levels = c("Mínima", "Leve", "Moderada", "Severa"))
# Usamos table() para contar cuántas personas caen en cada nivel de ansiedad
tabla_niveles <- table(Datos_limpios$Nivel_ansiedad)
print(tabla_niveles)
##
## Mínima Leve Moderada Severa
## 164 279 156 39
# Calculamos los porcentajes de cada nivel
cat("\nPorcentajes por nivel de ansiedad:\n")
##
## Porcentajes por nivel de ansiedad:
round(prop.table(tabla_niveles) * 100, 2)
##
## Mínima Leve Moderada Severa
## 25.71 43.73 24.45 6.11
# Histograma de la distribución del puntaje GAD-7
# geom_histogram() agrupa los puntajes en barras para ver cómo se distribuyen
ggplot(Datos_limpios, aes(x = GAD7_total)) +
geom_histogram(binwidth = 1, fill = "orange", color = "black", alpha = 0.7) +
# binwidth = 1 significa que cada barra representa un punto del puntaje
labs(title = "Distribución del Puntaje Total GAD-7",
x = "Puntaje GAD-7",
y = "Frecuencia") +
theme_minimal()

Análisis 2: Prueba t de Student — Ansiedad según Sexo
# Revisamos la media de ansiedad en cada grupo
# tapply aplica una función (mean) a una variable, separada por grupos
cat("Media de GAD7 por Sexo:\n")
## Media de GAD7 por Sexo:
tapply(Datos_limpios$GAD7_total, Datos_limpios$Sexo, mean)
## Hombre Mujer
## 7.324528 7.798928
# Revisamos cuántas personas hay en cada grupo
cat("\nN por Sexo:\n")
##
## N por Sexo:
table(Datos_limpios$Sexo)
##
## Hombre Mujer
## 265 373
# Ejecutamos la prueba t de muestras independientes
# Variable dependiente primero, luego la variable que agrupa, separadas por ~
resultado_t <- t.test(Datos_limpios$GAD7_total ~ Datos_limpios$Sexo)
print(resultado_t)
##
## Welch Two Sample t-test
##
## data: Datos_limpios$GAD7_total by Datos_limpios$Sexo
## t = -1.4494, df = 590.68, p-value = 0.1478
## alternative hypothesis: true difference in means between group Hombre and group Mujer is not equal to 0
## 95 percent confidence interval:
## -1.1172352 0.1684365
## sample estimates:
## mean in group Hombre mean in group Mujer
## 7.324528 7.798928
# Si el valor t es negativo, significa que el segundo grupo (Mujer)
# tiene una puntuación más alta que el primero (Hombre)
# Boxplot de ansiedad por Sexo
# geom_boxplot() muestra la distribución completa de puntajes para cada grupo
# El subtítulo toma el p-value directamente del resultado para que sea exacto
ggplot(Datos_limpios, aes(x = Sexo, y = GAD7_total, fill = Sexo)) +
geom_boxplot(alpha = 0.7, show.legend = FALSE) +
scale_fill_manual(values = c("Mujer" = "#F5B041", "Hombre" = "#5DADE2")) +
# R calcula e inserta el p-value automáticamente en el subtítulo
labs(title = "Comparación de Puntajes GAD-7 según el Sexo",
subtitle = paste("Prueba t de Student (p =", round(resultado_t$p.value, 4), ")"),
x = "Sexo",
y = "Puntaje Total de Ansiedad") +
theme_minimal() +
theme(plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
plot.subtitle = element_text(size = 11, hjust = 0.5, face = "italic"))

Análisis 3: Chi-cuadrado — Nivel de ansiedad según Situación
Laboral
# Creamos la tabla de contingencia que cruza Situación laboral y Nivel de ansiedad
# Esto nos muestra cuántas personas de cada grupo laboral caen en cada nivel de ansiedad
tabla_comparacion <- table(Datos_limpios$Situacion_laboral, Datos_limpios$Nivel_ansiedad)
cat("\nTabla de contingencia (Situación laboral × Nivel de ansiedad):\n")
##
## Tabla de contingencia (Situación laboral × Nivel de ansiedad):
print(tabla_comparacion)
##
## Mínima Leve Moderada Severa
## Desempleado/a 20 52 21 10
## Empleado/a 95 134 81 20
## Hogar 16 36 17 2
## Independiente 23 38 27 5
## Jubilado/a 10 19 10 2
# Ejecutamos la prueba Chi-cuadrado de independencia
# Si p < 0.05 hay una asociación estadísticamente significativa entre las variables
resultado_chi <- chisq.test(x = tabla_comparacion)
## Warning in chisq.test(x = tabla_comparacion): Chi-squared approximation may be
## incorrect
print(resultado_chi)
##
## Pearson's Chi-squared test
##
## data: tabla_comparacion
## X-squared = 11.113, df = 12, p-value = 0.5193
# Barras porcentuales apiladas por situación laboral
# position = "fill" apila las barras y las escala al 100% para comparar proporciones
ggplot(Datos_limpios, aes(x = Situacion_laboral, fill = Nivel_ansiedad)) +
geom_bar(position = "fill", color = "white", alpha = 0.8) +
# Convertimos el eje Y a porcentajes para facilitar la lectura
scale_y_continuous(labels = scales::percent) +
scale_fill_brewer(palette = "YlOrRd") +
# R calcula e inserta el p-value automáticamente en el subtítulo
labs(title = "Distribución de la Gravedad de Ansiedad por Situación Laboral",
subtitle = paste("Prueba de Chi-cuadrado (p =", round(resultado_chi$p.value, 4), ")"),
x = "Situación Laboral",
y = "Porcentaje Proporcional",
fill = "Nivel de Ansiedad") +
theme_minimal() +
theme(plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
plot.subtitle = element_text(size = 11, hjust = 0.5, face = "italic"),
axis.text.x = element_text(angle = 15, hjust = 1))

# Inclinamos las etiquetas del eje X para que no se encimen
Resumen final del procesamiento
cat("\n========= RESUMEN FINAL =========\n")
##
## ========= RESUMEN FINAL =========
cat("Muestra inicial: N =", nrow(Datos), "\n")
## Muestra inicial: N = 650
cat("Valores perdidos en GAD7_total: ", na_antes, "\n")
## Valores perdidos en GAD7_total: 12
cat("N efectivo para análisis: N =", N_efectivo, "\n")
## N efectivo para análisis: N = 638
cat("Media GAD7_total: ", round(mean(Datos_limpios$GAD7_total), 2), "\n")
## Media GAD7_total: 7.6
cat("DE GAD7_total: ", round(sd(Datos_limpios$GAD7_total), 2), "\n")
## DE GAD7_total: 4.12
cat("\nAnálisis ejecutados:\n")
##
## Análisis ejecutados:
cat(" 1. Frecuencias de niveles de ansiedad (GAD-7)\n")
## 1. Frecuencias de niveles de ansiedad (GAD-7)
cat(" 2. Prueba t de Student: Ansiedad por Sexo\n")
## 2. Prueba t de Student: Ansiedad por Sexo
cat(" 3. Chi-cuadrado: Nivel de ansiedad por Situación Laboral\n")
## 3. Chi-cuadrado: Nivel de ansiedad por Situación Laboral
cat("==================================\n")
## ==================================