📚 Librería

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)
library(broom)

❓Preguntas de investigación

Pregunta de investigación general

¿Qué relación existe entre la participación en un voluntariado curricular y el desarrollo de conductas prosociales en estudiantes universitarios?

Pregunta de investigación cuantitativa

¿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?

Pregunta de investigación cualitativa

¿Qué cambios en la prosocialidad son reportados por los estudiantes universitarios después de su participación en el voluntariado curricular?

Pregunta de investigación mixta

¿Cómo cambia la prosocialidad de los estudiantes universitarios tras participar en un voluntariado curricular?

📥 Cargar datos y funciones de formato

path_fase3 <- "/Users/adrianaholguin/Desktop/Fase 3.xlsx"

datos_fase3_raw <- read_excel(path_fase3, sheet = "Hoja1")

# --- 1. Crear dataset largo (experimental + control) ---
exp_data <- datos_fase3_raw %>%
  transmute(
    Grupo   = "Experimental",
    Sujeto  = as.character(Sujeto),
    Edad    = as.numeric(Edad),
    Sexo    = Sexo,
    EstadoCivil = EstadoCivil,
    Trabaja = ifelse(Trabaja == "Si", 1, 0),
    Residente = Residente,
    ViveCon   = ViveCon,
    GrupoVulnerabilidad = GrupoVulnerabilidad,
    TipoFamilia = TipoFamilia,
    NumPersonasCasa = as.numeric(NumPersonasCasa),
    NSEpercibido = as.numeric(NSEpercibido),
    InvolucramientoFamiliar = as.numeric(InvolucramientoFamiliar),
    InvolucramientoPersonal = as.numeric(InvolucramientoPersonal),
    VoluntariadoPrevio = HaVoluntariado,
    A_Total, A_Ayudar, A_Compartir, A_Empatía,
    B_Total, B_Ayudar, B_Compartir, B_Empatía,
    Cambio_Total     = B_Total - A_Total,
    Cambio_Ayudar    = B_Ayudar - A_Ayudar,
    Cambio_Compartir = B_Compartir - A_Compartir,
    Cambio_Empatia   = B_Empatía - A_Empatía
  )

ctrl_data <- datos_fase3_raw %>%
  transmute(
    Grupo   = "Control",
    Sujeto  = as.character(Sujeto_C),
    Edad    = as.numeric(Edad_C),
    Sexo    = Sexo_C,
    EstadoCivil = EstadoCivil_C,
    Trabaja = ifelse(Trabaja_C == "Si", 1, 0),
    Residente = Residente_C,
    ViveCon   = ViveCon_C,
    GrupoVulnerabilidad = GrupoVulnerabilidad_C,
    TipoFamilia = TipoFamilia_C,
    NumPersonasCasa = as.numeric(NumPersonasCasa_C),
    NSEpercibido = as.numeric(NSEpercibido_C),
    InvolucramientoFamiliar = as.numeric(InvolucramientoFamiliar_C),
    InvolucramientoPersonal = as.numeric(InvolucramientoPersonal_C),
    VoluntariadoPrevio = HaVoluntariado_C,
    C_Total, C_Ayudar, C_Compartir, C_Empatía
  )

# --- 2. Unir ambos ---
datos_fase3_listo <- bind_rows(exp_data, ctrl_data)

# --- 3. Convertir columnas de control a numéricas (para que "" se vuelva NA) ---
datos_fase3_listo <- datos_fase3_listo %>%
  mutate(
    C_Total     = as.numeric(C_Total),
    C_Ayudar    = as.numeric(C_Ayudar),
    C_Compartir = as.numeric(C_Compartir),
    C_Empatía   = as.numeric(C_Empatía)
  )

# --- 4. Filtrar controles sin datos (los NA) ---
datos_fase3_listo <- datos_fase3_listo %>%
  filter(!(Grupo == "Control" & is.na(C_Total)))

# --- 5. Revisión ---
table(datos_fase3_listo$Grupo)
## 
##      Control Experimental 
##           35           39
nrow(datos_fase3_listo)
## [1] 74

📈 Estadística descriptiva (A vs B)

tabla_medias_AB <- datos_fase3_listo %>%
  filter(Grupo == "Experimental") %>%
  summarise(
    n                   = n(),
    mean_pre_total      = mean(A_Total,     na.rm = TRUE),
    sd_pre_total        = sd(A_Total,       na.rm = TRUE),
    mean_post_total     = mean(B_Total,     na.rm = TRUE),
    sd_post_total       = sd(B_Total,       na.rm = TRUE),
    mean_pre_ayudar     = mean(A_Ayudar,    na.rm = TRUE),
    sd_pre_ayudar       = sd(A_Ayudar,      na.rm = TRUE),
    mean_post_ayudar    = mean(B_Ayudar,    na.rm = TRUE),
    sd_post_ayudar      = sd(B_Ayudar,      na.rm = TRUE),
    mean_pre_compartir  = mean(A_Compartir, na.rm = TRUE),
    sd_pre_compartir    = sd(A_Compartir,   na.rm = TRUE),
    mean_post_compartir = mean(B_Compartir, na.rm = TRUE),
    sd_post_compartir   = sd(B_Compartir,   na.rm = TRUE),
    mean_pre_empatia    = mean(A_Empatía,   na.rm = TRUE),
    sd_pre_empatia      = sd(A_Empatía,     na.rm = TRUE),
    mean_post_empatia   = mean(B_Empatía,   na.rm = TRUE),
    sd_post_empatia     = sd(B_Empatía,     na.rm = TRUE)
  )
Estadística descriptiva pre vs post (A vs B, grupo experimental)
Dimensión M Pre SD Pre M Post SD Post
Total 54.15 7.23 56.46 5.29
Ayudar 22.05 3.49 23.38 2.61
Compartir 12.72 1.47 12.77 1.27
Empatía 20.28 2.71 20.95 2.32


🧪 T-tests independientes (A vs B)

# T-tests pareados (A vs B, grupo experimental)
tt_AB_total      <- t.test(datos_fase3_listo$A_Total[datos_fase3_listo$Grupo=="Experimental"],
                           datos_fase3_listo$B_Total[datos_fase3_listo$Grupo=="Experimental"],
                           paired = TRUE)

tt_AB_ayudar     <- t.test(datos_fase3_listo$A_Ayudar[datos_fase3_listo$Grupo=="Experimental"],
                           datos_fase3_listo$B_Ayudar[datos_fase3_listo$Grupo=="Experimental"],
                           paired = TRUE)

tt_AB_compartir  <- t.test(datos_fase3_listo$A_Compartir[datos_fase3_listo$Grupo=="Experimental"],
                           datos_fase3_listo$B_Compartir[datos_fase3_listo$Grupo=="Experimental"],
                           paired = TRUE)

tt_AB_empatia    <- t.test(datos_fase3_listo$A_Empatía[datos_fase3_listo$Grupo=="Experimental"],
                           datos_fase3_listo$B_Empatía[datos_fase3_listo$Grupo=="Experimental"],
                           paired = TRUE)

# Tabla compacta de resultados
res_AB <- bind_rows(
  tidy(tt_AB_total)     %>% mutate(Comparacion = "Pre vs Post (Total, Experimental)"),
  tidy(tt_AB_ayudar)    %>% mutate(Comparacion = "Pre vs Post (Ayudar, Experimental)"),
  tidy(tt_AB_compartir) %>% mutate(Comparacion = "Pre vs Post (Compartir, Experimental)"),
  tidy(tt_AB_empatia)   %>% mutate(Comparacion = "Pre vs Post (Empatía, Experimental)")
) %>%
  select(Comparacion, estimate, statistic, p.value, conf.low, conf.high)
Resultados t-test pre vs post (A vs B, grupo experimental)
Dimensión Dif. medias (Post-Pre) t p-value IC 95%
Pre vs Post (Total, Experimental) -2.31 -4.00 0.000 [-3.47, -1.14]
Pre vs Post (Ayudar, Experimental) -1.33 -4.27 0.000 [-1.97, -0.7]
Pre vs Post (Compartir, Experimental) -0.05 -0.39 0.700 [-0.32, 0.22]
Pre vs Post (Empatía, Experimental) -0.67 -2.86 0.007 [-1.14, -0.19]


📈 Estadística descriptiva (A vs C)

# Crear columna común de pretest (A para experimental, C para control)
datos_fase3_listo <- datos_fase3_listo %>%
  mutate(
    Pre_Total     = ifelse(Grupo == "Experimental", A_Total,     C_Total),
    Pre_Ayudar    = ifelse(Grupo == "Experimental", A_Ayudar,    C_Ayudar),
    Pre_Compartir = ifelse(Grupo == "Experimental", A_Compartir, C_Compartir),
    Pre_Empatia   = ifelse(Grupo == "Experimental", A_Empatía,   C_Empatía)
  )

# Estadística descriptiva por grupo
tabla_medias_pre <- datos_fase3_listo %>%
  group_by(Grupo) %>%
  summarise(
    n               = n(),
    mean_total      = mean(Pre_Total,     na.rm = TRUE),
    sd_total        = sd(Pre_Total,       na.rm = TRUE),
    mean_ayudar     = mean(Pre_Ayudar,    na.rm = TRUE),
    sd_ayudar       = sd(Pre_Ayudar,      na.rm = TRUE),
    mean_compartir  = mean(Pre_Compartir, na.rm = TRUE),
    sd_compartir    = sd(Pre_Compartir,   na.rm = TRUE),
    mean_empatia    = mean(Pre_Empatia,   na.rm = TRUE),
    sd_empatia      = sd(Pre_Empatia,     na.rm = TRUE)
  )
Estadística descriptiva pre-test (A vs C)
Grupo n M Total SD Total M Ayudar SD Ayudar M Compartir SD Compartir M Empatía SD Empatía
Control 35 48.17 8.59 20.20 4.38 11.23 2.00 17.91 3.42
Experimental 39 54.15 7.23 22.05 3.49 12.72 1.47 20.28 2.71


🧪 T-tests independientes (A vs C)

# t-tests independientes (A vs C)
tt_AC_total      <- t.test(Pre_Total     ~ Grupo, data = datos_fase3_listo, na.action = na.omit)
tt_AC_ayudar     <- t.test(Pre_Ayudar    ~ Grupo, data = datos_fase3_listo, na.action = na.omit)
tt_AC_compartir  <- t.test(Pre_Compartir ~ Grupo, data = datos_fase3_listo, na.action = na.omit)
tt_AC_empatia    <- t.test(Pre_Empatia   ~ Grupo, data = datos_fase3_listo, na.action = na.omit)

# Tabla compacta de resultados
res_AC <- bind_rows(
  tidy(tt_AC_total)     %>% mutate(Comparacion = "Pre (Total) Exp vs Ctrl"),
  tidy(tt_AC_ayudar)    %>% mutate(Comparacion = "Pre (Ayudar) Exp vs Ctrl"),
  tidy(tt_AC_compartir) %>% mutate(Comparacion = "Pre (Compartir) Exp vs Ctrl"),
  tidy(tt_AC_empatia)   %>% mutate(Comparacion = "Pre (Empatía) Exp vs Ctrl")
) %>%
  select(Comparacion, estimate, statistic, p.value, conf.low, conf.high)
Resultados t-test pre-test (A vs C)
Dimensión Dif. medias (Exp-Ctrl) t p-value IC 95%
Pre (Total) Exp vs Ctrl -5.98 -3.22 0.002 [-9.69, -2.28]
Pre (Ayudar) Exp vs Ctrl -1.85 -2.00 0.050 [-3.7, 0]
Pre (Compartir) Exp vs Ctrl -1.49 -3.62 0.001 [-2.31, -0.67]
Pre (Empatía) Exp vs Ctrl -2.37 -3.28 0.002 [-3.81, -0.92]


📈 Estadística descriptiva (B vs C)

# Crear columna común de post-test (B para experimental, C para control)
datos_fase3_listo <- datos_fase3_listo %>%
  mutate(
    Post_Total     = ifelse(Grupo == "Experimental", B_Total,     C_Total),
    Post_Ayudar    = ifelse(Grupo == "Experimental", B_Ayudar,    C_Ayudar),
    Post_Compartir = ifelse(Grupo == "Experimental", B_Compartir, C_Compartir),
    Post_Empatia   = ifelse(Grupo == "Experimental", B_Empatía,   C_Empatía)
  )

# Estadística descriptiva por grupo (post-test)
tabla_medias_post <- datos_fase3_listo %>%
  group_by(Grupo) %>%
  summarise(
    n               = n(),
    mean_total      = mean(Post_Total,     na.rm = TRUE),
    sd_total        = sd(Post_Total,       na.rm = TRUE),
    mean_ayudar     = mean(Post_Ayudar,    na.rm = TRUE),
    sd_ayudar       = sd(Post_Ayudar,      na.rm = TRUE),
    mean_compartir  = mean(Post_Compartir, na.rm = TRUE),
    sd_compartir    = sd(Post_Compartir,   na.rm = TRUE),
    mean_empatia    = mean(Post_Empatia,   na.rm = TRUE),
    sd_empatia      = sd(Post_Empatia,     na.rm = TRUE)
  )
Estadística descriptiva post-test (B vs C)
Grupo n M Total SD Total M Ayudar SD Ayudar M Compartir SD Compartir M Empatía SD Empatía
Control 35 48.17 8.59 20.20 4.38 11.23 2.00 17.91 3.42
Experimental 39 56.46 5.29 23.38 2.61 12.77 1.27 20.95 2.32


🧪 T-tests independientes (B vs C)

# T-tests independientes (B vs C)
tt_BC_total      <- t.test(Post_Total     ~ Grupo, data = datos_fase3_listo, na.action = na.omit)
tt_BC_ayudar     <- t.test(Post_Ayudar    ~ Grupo, data = datos_fase3_listo, na.action = na.omit)
tt_BC_compartir  <- t.test(Post_Compartir ~ Grupo, data = datos_fase3_listo, na.action = na.omit)
tt_BC_empatia    <- t.test(Post_Empatia   ~ Grupo, data = datos_fase3_listo, na.action = na.omit)

# Tabla compacta de resultados
res_BC <- bind_rows(
  tidy(tt_BC_total)     %>% mutate(Comparacion = "Post (Total) Exp vs Ctrl"),
  tidy(tt_BC_ayudar)    %>% mutate(Comparacion = "Post (Ayudar) Exp vs Ctrl"),
  tidy(tt_BC_compartir) %>% mutate(Comparacion = "Post (Compartir) Exp vs Ctrl"),
  tidy(tt_BC_empatia)   %>% mutate(Comparacion = "Post (Empatía) Exp vs Ctrl")
) %>%
  select(Comparacion, estimate, statistic, p.value, conf.low, conf.high)
Resultados t-test post-test (B vs C)
Dimensión Dif. medias (Exp-Ctrl) t p-value IC 95%
Post (Total) Exp vs Ctrl -8.29 -4.93 0 [-11.66, -4.92]
Post (Ayudar) Exp vs Ctrl -3.18 -3.75 0 [-4.89, -1.48]
Post (Compartir) Exp vs Ctrl -1.54 -3.91 0 [-2.33, -0.75]
Post (Empatía) Exp vs Ctrl -3.03 -4.42 0 [-4.41, -1.66]


🛡️ Pruebas de robustez: Wilcoxon

# --- Wilcoxon A vs B (pareado) ---
wil_AB_total      <- wilcox.test(datos_fase3_listo$A_Total[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$B_Total[datos_fase3_listo$Grupo=="Experimental"], paired = TRUE)
wil_AB_ayudar     <- wilcox.test(datos_fase3_listo$A_Ayudar[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$B_Ayudar[datos_fase3_listo$Grupo=="Experimental"], paired = TRUE)
wil_AB_compartir  <- wilcox.test(datos_fase3_listo$A_Compartir[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$B_Compartir[datos_fase3_listo$Grupo=="Experimental"], paired = TRUE)
wil_AB_empatia    <- wilcox.test(datos_fase3_listo$A_Empatía[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$B_Empatía[datos_fase3_listo$Grupo=="Experimental"], paired = TRUE)

res_wil_AB <- tibble::tibble(
  Comparación = "A vs B (Experimental pre vs post)",
  Dimensión   = c("Total","Ayudar","Compartir","Empatía"),
  W           = c(wil_AB_total$statistic, wil_AB_ayudar$statistic, wil_AB_compartir$statistic, wil_AB_empatia$statistic),
  p.value     = c(wil_AB_total$p.value,   wil_AB_ayudar$p.value,   wil_AB_compartir$p.value,   wil_AB_empatia$p.value)
)

# --- Wilcoxon B vs C (independientes) ---
wil_BC_total      <- wilcox.test(datos_fase3_listo$B_Total[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$C_Total[datos_fase3_listo$Grupo=="Control"])
wil_BC_ayudar     <- wilcox.test(datos_fase3_listo$B_Ayudar[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$C_Ayudar[datos_fase3_listo$Grupo=="Control"])
wil_BC_compartir  <- wilcox.test(datos_fase3_listo$B_Compartir[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$C_Compartir[datos_fase3_listo$Grupo=="Control"])
wil_BC_empatia    <- wilcox.test(datos_fase3_listo$B_Empatía[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$C_Empatía[datos_fase3_listo$Grupo=="Control"])

res_wil_BC <- tibble::tibble(
  Comparación = "B vs C (Experimental post vs Control)",
  Dimensión   = c("Total","Ayudar","Compartir","Empatía"),
  W           = c(wil_BC_total$statistic, wil_BC_ayudar$statistic, wil_BC_compartir$statistic, wil_BC_empatia$statistic),
  p.value     = c(wil_BC_total$p.value,   wil_BC_ayudar$p.value,   wil_BC_compartir$p.value,   wil_BC_empatia$p.value)
)

# --- Wilcoxon A vs C (independientes) ---
wil_AC_total      <- wilcox.test(datos_fase3_listo$A_Total[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$C_Total[datos_fase3_listo$Grupo=="Control"])
wil_AC_ayudar     <- wilcox.test(datos_fase3_listo$A_Ayudar[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$C_Ayudar[datos_fase3_listo$Grupo=="Control"])
wil_AC_compartir  <- wilcox.test(datos_fase3_listo$A_Compartir[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$C_Compartir[datos_fase3_listo$Grupo=="Control"])
wil_AC_empatia    <- wilcox.test(datos_fase3_listo$A_Empatía[datos_fase3_listo$Grupo=="Experimental"],
                                 datos_fase3_listo$C_Empatía[datos_fase3_listo$Grupo=="Control"])

res_wil_AC <- tibble::tibble(
  Comparación = "A vs C (Experimental pre vs Control)",
  Dimensión   = c("Total","Ayudar","Compartir","Empatía"),
  W           = c(wil_AC_total$statistic, wil_AC_ayudar$statistic, wil_AC_compartir$statistic, wil_AC_empatia$statistic),
  p.value     = c(wil_AC_total$p.value,   wil_AC_ayudar$p.value,   wil_AC_compartir$p.value,   wil_AC_empatia$p.value)
)

# --- Unir todo ---
res_wil_all <- bind_rows(res_wil_AB, res_wil_BC, res_wil_AC) %>%
  mutate(across(where(is.numeric), ~round(.x, 3)))
Pruebas Wilcoxon (A vs B, B vs C, A vs C)
Comparación Dimensión W p-value
A vs B (Experimental pre vs post) Total 119.0 0.000
A vs B (Experimental pre vs post) Ayudar 76.5 0.000
A vs B (Experimental pre vs post) Compartir 45.5 0.669
A vs B (Experimental pre vs post) Empatía 118.5 0.010
B vs C (Experimental post vs Control) Total 1059.5 0.000
B vs C (Experimental post vs Control) Ayudar 1007.5 0.000
B vs C (Experimental post vs Control) Compartir 1002.0 0.000
B vs C (Experimental post vs Control) Empatía 1035.5 0.000
A vs C (Experimental pre vs Control) Total 952.0 0.004
A vs C (Experimental pre vs Control) Ayudar 853.0 0.064
A vs C (Experimental pre vs Control) Compartir 985.0 0.001
A vs C (Experimental pre vs Control) Empatía 954.5 0.003


```