library(readxl)
library(readr)
library(broom)
library(tidyverse)
library(scales)
library(dplyr)
library(tidyr)
library(knitr)
library(psych)
library(rstatix)
library(ggplot2)
library(flextable)
library(treemapify)
library(ggraph)
library(igraph)
library(glue)
library(janitor)
¿Qué relación existe entre la participación en un voluntariado curricular y el desarrollo de conductas prosociales en estudiantes universitarios?
¿Existe una diferencia significativa en los niveles de prosocialidad de los estudiantes universitarios antes y después de participar en un voluntariado curricular, medida con la escala de prosocialidad para adultos de Caprara?
¿Qué cambios en la prosocialidad son reportados por los estudiantes universitarios después de su participación en el voluntariado curricular?
# 1. CARGA DE ARCHIVOS
path_cuanti <- "/Users/adrianaholguin/Desktop/Fase 2 cuanti.xlsx"
path_cuali <- "/Users/adrianaholguin/Desktop/Fase 2 cuali.xlsx"
datos_cuanti_raw <- read_excel(path_cuanti)
datos_cuali_raw <- read_excel(path_cuali)
# 2. LIMPIEZA CUANTITATIVA
datos_cuanti_listo <- datos_cuanti_raw %>%
transmute(
Sujeto = as.character(Sujeto),
# --- Datos sociodemográficos clave ---
Edad = as.numeric(`X1..Edad`),
Sexo = factor(`X2..Sexo`), # Femenino / Masculino / Otro
EstadoCivil = factor(`X3..Estado.civil`),
Trabaja = ifelse(`X4..Trabaja` == "Si", 1, 0),
Residente = factor(`X5..Residente`), # Local / Foráneo
ViveCon = factor(`X6..Vive.con`),
GrupoVulnerabilidad = factor(`X7..Grupo.de.vulnerabilidad`),
TipoFamilia = factor(`X8..Tipo.de.familia`),
NumPersonasCasa = as.numeric(`X9..Numero.de.personas.que.habitan.la.casa.familiar`),
NSEpercibido = as.numeric(`X10..Nivel.socioeconomico.percibido`),
InvolucramientoFamiliar = as.numeric(`X11..Involucramiento.familiar.con.la.comunidad.percibido`),
InvolucramientoPersonal = as.numeric(`X12..Involucramiento.personal.con.su.comunidad.percibido`),
VoluntariadoPrevio = factor(`X15..Ha.realizado.voluntariados`,
levels = c("No", "Si")),
# --- Prosocialidad Pre (Escala Caprara) ---
A_Total = as.numeric(`X46..A_Total`),
A_Ayudar = as.numeric(`X43..A_Ayudar`),
A_Compartir = as.numeric(`X44..A_Compartir`),
A_Empatia = as.numeric(`X45..A_Empatía`),
# --- Prosocialidad Post (Escala Caprara) ---
B_Total = as.numeric(`X66..B_Total`),
B_Ayudar = as.numeric(`X63..B_Ayudar`),
B_Compartir = as.numeric(`X64..B_Compartir`),
B_Empatia = as.numeric(`X65..B_Empatía`),
# --- Variables de cambio ---
Cambio_Total = B_Total - A_Total,
Cambio_Ayudar = B_Ayudar - A_Ayudar,
Cambio_Compartir = B_Compartir - A_Compartir,
Cambio_Empatia = B_Empatia - A_Empatia
)
# 3. LIMPIEZA CUALITATIVA
datos_cuali_listo <- datos_cuali_raw %>%
select(
Sujeto = 1,
Nivel_Excel = 3,
`Familia Categorial`,
`Categoría`,
Testimonio = 7
) %>%
filter(!is.na(Sujeto)) %>%
mutate(Sujeto = as.character(Sujeto))
# 4. INTEGRACIÓN FINAL
datos_integrados <- datos_cuanti_listo %>%
inner_join(datos_cuali_listo, by = "Sujeto")
# --- 1) Diferencias Pre vs. Post desde datos_cuanti_listo ---
datos_diferencias <- datos_cuanti_listo %>%
transmute(
Ayudar = B_Ayudar - A_Ayudar,
Compartir = B_Compartir - A_Compartir,
Empatia = B_Empatia - A_Empatia,
Total = B_Total - A_Total
)
# --- 2) Formato largo ---
datos_diferencias_largo <- datos_diferencias %>%
tidyr::pivot_longer(
cols = everything(),
names_to = "Dimension",
values_to = "Diferencia"
) %>%
dplyr::filter(!is.na(Diferencia))
# --- 3) Wilcoxon de una muestra (mu = 0) ---
wilcox_resultados <- datos_diferencias_largo %>%
dplyr::group_by(Dimension) %>%
rstatix::wilcox_test(Diferencia ~ 1, mu = 0, detailed = TRUE) %>%
dplyr::select(Dimension, statistic, p)
# --- 4) Tamaño de efecto (r) ---
effect_size_resultados <- datos_diferencias_largo %>%
dplyr::group_by(Dimension) %>%
rstatix::wilcox_effsize(Diferencia ~ 1, mu = 0) %>%
dplyr::select(Dimension, effsize, magnitude)
# --- 5) Integración y traducción ---
tabla_inferencia_final <- dplyr::left_join(wilcox_resultados, effect_size_resultados, by = "Dimension") %>%
dplyr::select(Dimension, statistic, p, effsize, magnitude) %>%
dplyr::arrange(factor(Dimension, levels = c("Ayudar", "Compartir", "Empatia", "Total"))) %>%
dplyr::mutate(
Dimension = dplyr::recode(Dimension, "Empatia" = "Empatía"),
p = dplyr::if_else(p < 0.001, "< .001", as.character(round(p, 3))),
magnitude = dplyr::case_when(
magnitude == "small" ~ "Pequeño",
magnitude == "moderate" ~ "Mediano",
magnitude == "large" ~ "Grande",
TRUE ~ magnitude
)
)
| Dimensión | Estadístico (W) | p-value | Efecto (r) | Magnitud |
|---|---|---|---|---|
| Ayudar | 484.5 | < .001 | 0.603 | Grande |
| Compartir | 59.5 | 0.669 | 0.018 | Pequeño |
| Empatía | 377.5 | 0.01 | 0.413 | Mediano |
| Total | 622.0 | < .001 | 0.590 | Grande |
# --- 1. Crear tabla de frecuencias por Familia Categorial ---
df_frecuencias_familias <- datos_cuali_listo %>%
count(`Familia Categorial`, sort = TRUE) %>%
rename(Frecuencia = n)
ggplot(df_frecuencias_familias, aes(x = reorder(`Familia Categorial`, Frecuencia),
y = Frecuencia,
fill = `Familia Categorial`)) +
geom_bar(stat = "identity") +
coord_flip() +
geom_text(aes(label = Frecuencia),
position = position_stack(vjust = 0.5), # etiquetas al centro
color = "black", size = 3.5) +
labs(
title = "Frecuencia de Familias Categoriales en las Entrevistas (Fase 2)",
x = "Familia Categorial",
y = "Número de Citas (Recurrencias)"
) +
theme_minimal() +
scale_fill_brewer(palette = "Set3")
# 1. Usar la base integrada
df_triang_2 <- datos_integrados %>%
filter(!is.na(A_Total))
# 2. Crear el gráfico
ggplot(df_triang_2, aes(x = reorder(`Categoría`, A_Total, median),
y = A_Total)) +
geom_jitter(aes(color = Nivel_Excel), width = 0.2, alpha = 0.7, size = 2) +
stat_summary(fun = median, geom = "crossbar", width = 0.5, color = "black") +
coord_flip() +
labs(
title = "Triangulación: Puntajes de Prosocialidad por Categoría Cualitativa",
subtitle = "Cada punto representa un sujeto; la barra negra indica la mediana",
x = "Categoría Cualitativa",
y = "Puntuación Total de Prosocialidad (Pre)",
color = "Nivel (Cuali)"
) +
theme_bw(base_size = 12)