❓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?
📥 Cargar datos y funciones de formato
# --- Cargar ambos conjuntos de datos ---
path_cuanti <- ("/Users/adrianaholguin/Desktop/Fase 1 cuanti.xlsx")
path_cuali <- ("/Users/adrianaholguin/Desktop/Fase 1 cuali.xlsx")
# Cargar los archivos
datos_cuanti_raw <- read_excel(path_cuanti)
datos_cuali_raw <- read_excel(path_cuali)
# --- Limpieza y Preparación ---
# 1. Preparar Datos Cuantitativos (datos)
datos <- datos_cuanti_raw %>%
transmute(
Sujeto = as.character(Sujeto),
# --- Variables Sociodemográficas ---
Edad = `X1..Edad`,
Sexo = `X2..Sexo`,
Estado_civil = `X3..Estado.civil`,
Trabaja = `X4..Trabaja`,
Residente = `X5..Residente`,
Vive_con = `X6..Vive.con`,
Grupo_vulnerabilidad = `X7..Grupo.de.vulnerabilidad`,
Tipo_familia = `X8..Tipo.de.familia`,
Num_personas_casa = `X9..Numero.de.personas.que.habitan.la.casa.familiar`,
Nivel_socioeconomico = `X10..Nivel.socioeconomico.percibido`,
# --- Variables de Percepción de Voluntariado ---
Involucramiento_familiar = `X11..Involucramiento.familiar.con.la.comunidad.percibido`,
Involucramiento_personal = `X12..Involucramiento.personal.con.su.comunidad.percibido`,
Gusto_voluntariado = `X13..Le.gustaria.realizar.voluntariados.en.sus.materias`,
Areas_interes = `X14..Areas.que.le.interesan.para.realizar.voluntariados`,
# --- Variables de Experiencia (Sí/No) ---
Ha_voluntariado = `X15..Ha.realizado.voluntariados`,
Cantidad_voluntariados = `X16..Cantidad.de.voluntariados.realizados`,
Quien_involucro = `X17..Quien.lo.involucro.en.los.voluntariados`,
Tipos_voluntariados = `X18..Tipos.de.voluntariados.que.ha.realizado`,
Motivacion_voluntariado = `X19..Que.le.motiva.a.realizar.voluntariados`,
Percibe_beneficio = `X20..Percibe.algun.beneficio.por.realizar.voluntariados`,
Beneficio_percibido = `X21..Beneficio.percibido.de.realizar.voluntariados`,
Recuerdo_voluntariado = `X22..Lo.que.mas.recuerda.de.los.voluntariados`,
Volveria_participar = `X23..Volveria.a.participar.en.algun.voluntariado`,
Motivo_no_participar = `X24..Porque.cree.que.no.ha.realizado.voluntariados`,
Le_gustaria_participar = `X25..Le.gustaria.participar.en.algun.voluntariado`,
Beneficio_esperado = `X26..Beneficio.que.cree.que.le.dejaria.realizar.voluntariados`,
# --- Ítems de la Escala (Pre-test) ---
A_item1 = `X27..A_Item1`,
A_item2 = `X28..A_Item2`,
A_item3 = `X29..A_Item3`,
A_item4 = `X30..A_Item4`,
A_item5 = `X31..A_Item5`,
A_item6 = `X32..A_Item6`,
A_item7 = `X33..A_Item7`,
A_item8 = `X34..A_Item8`,
A_item9 = `X35..A_Item9`,
A_item10 = `X36..A_Item10`,
A_item11 = `X37..A_Item11`,
A_item12 = `X38..A_Item12`,
A_item13 = `X39..A_Item13`,
A_item14 = `X40..A_Item14`,
A_item15 = `X41..A_Item15`,
A_item16 = `X42..A_Item16`,
# --- Totales de la Escala (Pre-test) ---
Ayudar_A = as.numeric(`X43..A_Ayudar`),
Compartir_A = as.numeric(`X44..A_Compartir`),
Empatia_A = as.numeric(`X45..A_Empatía`),
Total_A = as.numeric(`X46..A_Total`),
# --- Variable Cuali (Nivel) ---
Nivel = case_when(
Sujeto %in% c("S4", "S5", "S6") ~ "Alto",
Sujeto %in% c("S1", "S2", "S3") ~ "Bajo",
TRUE ~ NA_character_
)
)
# 2. Preparar Datos Cualitativos (datos_cuali)
datos_cuali <- datos_cuali_raw %>%
select(Sujeto, Nivel, `Categoría`, `Subcategoría`, Frase) %>%
filter(!is.na(Sujeto)) # Limpiar filas vacías
cat("--- Carga de Datos Completa ---\n")
## --- Carga de Datos Completa ---
cat(paste("Datos Cuantitativos (datos) cargados con", nrow(datos), "filas.\n"))
## Datos Cuantitativos (datos) cargados con 42 filas.
cat(paste("Datos Cualitativos (datos_cuali) cargados con", nrow(datos_cuali), "filas.\n"))
## Datos Cualitativos (datos_cuali) cargados con 133 filas.
📊 Análisis Cuantitativo
📈 Estadística Descriptiva de la Escala
# 1. Preparar datos: Pivotar las 4 dimensiones
datos_largos_escala <- datos %>%
select(Ayudar_A, Compartir_A, Empatia_A, Total_A) %>%
pivot_longer(
cols = everything(),
names_to = "Dimension",
values_to = "Puntuacion"
)
# 2. Calcular descriptivos (base)
tabla_descriptivos_base <- datos_largos_escala %>%
group_by(Dimension) %>%
summarise(
N = n(),
Media = mean(Puntuacion, na.rm = TRUE),
DE = sd(Puntuacion, na.rm = TRUE),
Mediana = median(Puntuacion, na.rm = TRUE),
Minimo = min(Puntuacion, na.rm = TRUE),
Maximo = max(Puntuacion, na.rm = TRUE)
) %>%
arrange(factor(Dimension, levels = c("Ayudar_A", "Compartir_A", "Empatia_A", "Total_A")))
# --- Dividir en dos tablas ---
tabla_desc_1 <- tabla_descriptivos_base %>%
select(Dimension, N, Media, DE)
tabla_desc_2 <- tabla_descriptivos_base %>%
select(Dimension, Mediana, Minimo, Maximo)
Estadística Descriptiva (Pre-test): Tendencia Central
|
Dimensión
|
N
|
Media
|
DE
|
|
Ayudar_A
|
42
|
21.93
|
3.54
|
|
Compartir_A
|
42
|
12.52
|
1.63
|
|
Empatia_A
|
42
|
20.02
|
2.78
|
|
Total_A
|
42
|
53.60
|
7.32
|
Estadística Descriptiva (Pre-test): Distribución
|
Dimensión
|
Mediana
|
Mín
|
Máx
|
|
Ayudar_A
|
22
|
15
|
28
|
|
Compartir_A
|
12
|
8
|
15
|
|
Empatia_A
|
20
|
15
|
24
|
|
Total_A
|
53
|
37
|
67
|
📦 Gráfico Boxplot General de la Escala
# Etiquetas personalizadas para las dimensiones
facet_labels <- c(
"Ayudar_A" = "Ayudar",
"Compartir_A" = "Compartir",
"Empatia_A" = "Empatía",
"Total_A" = "Total Escala"
)
ggplot(datos_largos_escala, aes(x = Dimension, y = Puntuacion, fill = Dimension)) +
geom_boxplot(alpha = 0.8, color = "gray30") +
# Facetas con etiquetas personalizadas (igual que en los Q-Q plots)
facet_wrap(~ Dimension, scales = "free", labeller = as_labeller(facet_labels)) +
# Títulos y etiquetas
labs(
title = "Distribución de Puntuaciones de la Escala (Pre-test)",
x = "Dimensión",
y = "Puntuación"
) +
# Tema con más contraste
theme_bw(base_size = 13) +
theme(
legend.position = "none", # Ocultar leyenda redundante
strip.background = element_rect(fill = "#34495E", color = NA), # fondo oscuro en las tiras
strip.text = element_text(face = "bold", size = 12, color = "white"), # texto blanco y negrita
plot.title = element_text(face = "bold", hjust = 0.5, size = 14)
) +
# Paleta de colores más estética
scale_fill_brewer(palette = "Set3")

🔔 Pruebas de Normalidad (Shapiro-Wilk)
# 1. Calcular la prueba de Shapiro-Wilk para cada dimensión
shapiro_ayudar <- shapiro_test(datos$Ayudar_A)
shapiro_compartir <- shapiro_test(datos$Compartir_A)
shapiro_empatia <- shapiro_test(datos$Empatia_A)
shapiro_total <- shapiro_test(datos$Total_A)
# 2. Unir los resultados en una sola tabla para imprimir
tabla_para_imprimir_shapiro <- bind_rows(
shapiro_ayudar,
shapiro_compartir,
shapiro_empatia,
shapiro_total
) %>%
select(variable, statistic, p.value) %>%
mutate(variable = c("Ayudar_A", "Compartir_A", "Empatia_A", "Total_A"))
Pruebas de Normalidad (Shapiro-Wilk)
|
Dimensión
|
Estadístico W
|
p-value
|
|
Ayudar_A
|
0.953
|
0.083
|
|
Compartir_A
|
0.932
|
0.016
|
|
Empatia_A
|
0.934
|
0.018
|
|
Total_A
|
0.960
|
0.154
|
🧐 Gráficos Q-Q Plot (Visualización de Normalidad)
ggplot(datos_largos_escala, aes(sample = Puntuacion)) +
# Puntos con color turquesa y transparencia
stat_qq(color = "#1ABC9C", size = 2, alpha = 0.8) +
# Línea de referencia más visible
stat_qq_line(color = "gray30", linetype = "dashed", linewidth = 1) +
# Facetas con etiquetas personalizadas
facet_wrap(~ Dimension, scales = "free", labeller = labeller(Dimension = c(
"Ayudar_A" = "Ayudar",
"Compartir_A" = "Compartir",
"Empatia_A" = "Empatía",
"Total_A" = "Total Escala"
))) +
# Títulos y etiquetas
labs(
title = "Gráficos Q-Q Plot de las Dimensiones (Pre-test)",
subtitle = "Los puntos deben seguir la línea discontinua para la normalidad",
x = "Cuantiles Teóricos (Normal)",
y = "Cuantiles de la Muestra"
) +
# Tema con más contraste
theme_bw(base_size = 13) +
theme(
strip.background = element_rect(fill = "#34495E", color = NA), # fondo oscuro en las tiras
strip.text = element_text(face = "bold", size = 12, color = "white"), # texto blanco y negrita
plot.title = element_text(face = "bold", hjust = 0.5, size = 14),
plot.subtitle = element_text(hjust = 0.5, size = 11, color = "gray30")
)

⚖️ Análisis de Línea Base (Prueba t: Sí vs. No)
# 1. Calcular Prueba de Levene (Homogeneidad de Varianzas)
# Usamos el dataframe 'datos'
levene_test_result <- datos %>%
levene_test(Total_A ~ Ha_voluntariado)
# 2. Calcular Prueba t de Muestras Independientes
t_test_result <- datos %>%
t_test(Total_A ~ Ha_voluntariado, var.equal = TRUE) # Asumimos varianzas iguales
# 3. Limpiar las tablas para impresión
tabla_para_imprimir_levene <- levene_test_result %>%
select(df1, df2, statistic, p)
tabla_para_imprimir_ttest <- t_test_result %>%
select(statistic, df, p)
Prueba de Homogeneidad de Varianzas (Levene)
|
df1
|
df2
|
Estadístico F
|
p-value
|
|
1
|
40
|
1.627
|
0.209
|
Prueba t de Muestras Independientes (Sí vs. No)
|
Estadístico t
|
df
|
p-value
|
|
-0.387
|
40
|
0.7
|
2 🙋 Análisis Cualitativo
df_frecuencias_cuali <- datos_cuali %>%
count(`Categoría`, sort = TRUE) %>%
rename(Frecuencia = n)
ggplot(df_frecuencias_cuali, aes(x = reorder(`Categoría`, Frecuencia),
y = Frecuencia,
fill = `Categoría`)) +
geom_bar(stat = "identity") +
coord_flip() + # Voltear los ejes para que los nombres se lean bien
geom_text(aes(label = Frecuencia), hjust = -0.2, size = 3.5) + # Añadir etiquetas de número
labs(
title = "Frecuencia de Categorías Principales en las Entrevistas (Fase 1)",
x = "Categoría",
y = "Número de Citas (Recurrencias)"
) +
theme_minimal() +
scale_fill_brewer(palette = "Set3") # Paleta de colores suaves y variados

2.1 📍️ Justificación de la Muestra Cualitativa (Casos Atípicos)
graficar_boxplot_con_etiquetas <- function(datos_df, col_puntaje, nombre_dim) {
entrevistados <- c("15", "41", "20", "9", "19", "42")
# Preparar el dataframe para esta dimensión
df_plot <- data.frame(
Sujeto = datos_df$Sujeto,
Puntaje = datos_df[[col_puntaje]]
) %>%
filter(!is.na(Puntaje)) %>%
mutate(
Entrevistado = ifelse(Sujeto %in% entrevistados, "Sí", "No")
)
# 2. Crear el gráfico
ggplot(df_plot, aes(x = "", y = Puntaje)) +
geom_boxplot(fill = "#D5DBDB", outlier.color = NA) +
geom_text(
aes(label = Sujeto, color = Entrevistado),
position = position_jitter(width = 0.2),
size = 3.5
) +
scale_color_manual(values = c("Sí" = "#E74C3C", "No" = "#7F8C8D")) +
labs(
title = paste("Identificación de Sujetos de Entrevista:", nombre_dim),
subtitle = "Sujetos entrevistados señalados en rojo",
x = "", y = "Puntaje",
color = "Entrevistado"
) +
theme_minimal(base_size = 12) +
theme(legend.position = "right")
}
graficar_boxplot_con_etiquetas(datos, "Total_A", "Total Prosocialidad")

Análisis de Métodos Mixtos (Integración Cuali-Cuanti)
Comparación de Discurso (Alto vs. Bajo)
df_triang_1 <- datos_cuali %>%
# Agrupar por Nivel (Alto/Bajo) y Subcategoría
group_by(Nivel, `Subcategoría`) %>%
# Contar el número de citas (filas) en cada grupo
summarise(Recurrencias = n(), .groups = "drop") %>%
# Filtrar 'NA' en Nivel (si los hubiera)
filter(!is.na(Nivel))
# 2. Crear el gráfico de barras comparativo
ggplot(df_triang_1, aes(x = reorder(`Subcategoría`, Recurrencias),
y = Recurrencias,
fill = Nivel)) +
geom_bar(stat = "identity", position = "dodge") +
coord_flip() + # Voltear los ejes para que se lean las categorías
# Títulos (sin emojis)
labs(
title = "Triangulación 1: Recurrencia de Subcategorías por Nivel",
subtitle = "Comparación del discurso cualitativo ('Alto' vs. 'Bajo')",
x = "Subcategoría",
y = "Número de Citas (Recurrencias)",
fill = "Nivel (Cuanti)"
) +
theme_minimal() +
theme(
# Achicamos el texto del eje Y para que quepan todas las subcategorías
axis.text.y = element_text(size = 8)
)

Integración de Puntuaciones (Cuanti) y Categorías (Cuali)
# 1. Preparar los datos cuantitativos
datos_cuanti_scores <- datos %>%
select(Sujeto, Total_A)
# 2. Unir los puntajes (cuanti) con las citas (cuali)
df_triang_2 <- datos_cuali %>%
mutate(Sujeto = as.character(Sujeto)) %>%
left_join(datos_cuanti_scores, by = "Sujeto") %>%
filter(!is.na(Total_A))
# 3. Crear el gráfico
ggplot(df_triang_2, aes(x = reorder(`Categoría`, Total_A, median),
y = Total_A)) +
geom_jitter(aes(color = Nivel), 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 2: 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",
color = "Nivel (Cuanti)"
) +
theme_bw(base_size = 12)
