📚 Librería
library(readxl)
library(glue)
library(dplyr)
library(psych)
library(ggplot2)
library(knitr)
library(janitor)
library(nortest)
library(kableExtra)
library(tidyr)
library(ggrepel)
library(rstatix)
📥 Importar datos
datos <- read_excel("/Users/adrianaholguin/Desktop/Fase 1 cuanti.xlsx")
Limpiar nombres
# Renombrar columnas
names(datos) <- c(
"Sujeto", "Edad", "Sexo", "Estado_civil", "Trabaja", "Residente", "Vive_con",
"Grupo_vulnerabilidad", "Tipo_familia", "Num_personas_casa", "Nivel_socioeconomico",
"Involucramiento_familiar", "Involucramiento_personal", "Gusto_voluntariado",
"Areas_interes", "Ha_voluntariado", "Cantidad_voluntariados", "Quien_involucro",
"Tipos_voluntariados", "Motivacion_voluntariado", "Percibe_beneficio",
"Beneficio_percibido", "Recuerdo_voluntariado", "Volveria_participar",
"Motivo_no_participar", "Le_gustaria_participar", "Beneficio_esperado",
# Ítems del instrumento A
"A_item1", "A_item2", "A_item3", "A_item4", "A_item5", "A_item6",
"A_item7", "A_item8", "A_item9", "A_item10", "A_item11", "A_item12",
"A_item13", "A_item14", "A_item15", "A_item16",
# Puntajes por dimensión
"Ayudar_A", "Compartir_A", "Empatia_A", "Total_A"
)
❓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?
1 📊 Estadística descriptiva sociodemográfica
📊👥 Variables de respuesta única (todos los sujetos)
vars_categoricas <- c(
"Sexo" = "identidad de género",
"Estado_civil" = "estado civil",
"Trabaja" = "condición laboral",
"Residente" = "residencia habitual",
"Vive_con" = "personas con quienes vive",
"Grupo_vulnerabilidad" = "pertenencia a grupo de vulnerabilidad",
"Tipo_familia" = "tipo de familia",
"Nivel_socioeconomico" = "nivel socioeconómico percibido",
"Gusto_voluntariado" = "le gustaría realizar voluntariados en sus materias",
"Ha_voluntariado" = "ha realizado voluntariados previamente"
)
vars_numericas_titulos <- c(
"Edad" = "edad de los participantes",
"Num_personas_casa" = "número de personas en el hogar",
"Involucramiento_familiar" = "involucramiento familiar en voluntariado",
"Involucramiento_personal" = "involucramiento personal en voluntariado"
)
# Vector solo con los nombres de columna
vars_numericas <- names(vars_numericas_titulos)
Distribución de Identidad de género
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Femenino
|
33
|
78.6%
|
78.6%
|
|
Masculino
|
9
|
21.4%
|
100%
|
Distribución de Estado civil
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Soltero
|
41
|
97.6%
|
97.6%
|
|
Unión libre
|
1
|
2.4%
|
100%
|
Distribución de Condición laboral
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
No
|
20
|
47.6%
|
47.6%
|
|
Si
|
22
|
52.4%
|
100%
|
Distribución de Residencia habitual
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Foráneo
|
23
|
54.8%
|
54.8%
|
|
Local
|
19
|
45.2%
|
100%
|
Distribución de Personas con quienes vive
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Familia
|
24
|
57.1%
|
57.1%
|
|
Romíes
|
16
|
38.1%
|
95.2%
|
|
Solo
|
2
|
4.8%
|
100%
|
Distribución de Pertenencia a grupo de vulnerabilidad
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Madre soltera
|
2
|
4.8%
|
4.8%
|
|
Ninguno
|
40
|
95.2%
|
100%
|
Distribución de Tipo de familia
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Extensa
|
7
|
16.7%
|
16.7%
|
|
Monoparental
|
6
|
14.3%
|
31%
|
|
Tradicional
|
29
|
69%
|
100%
|
Distribución de Nivel socioeconómico percibido
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Bajo
|
4
|
9.5%
|
9.5%
|
|
Medio
|
38
|
90.5%
|
100%
|
Distribución de Le gustaría realizar voluntariados en sus
materias
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
No
|
10
|
23.8%
|
23.8%
|
|
Si
|
32
|
76.2%
|
100%
|
Distribución de Ha realizado voluntariados previamente
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
No
|
17
|
40.5%
|
40.5%
|
|
Si
|
25
|
59.5%
|
100%
|
Estadística Descriptiva de Variables Numéricas
|
Variable
|
N
|
Media
|
DE
|
Mediana
|
Mín
|
Máx
|
|
Edad de los participantes
|
42
|
18.76
|
1.10
|
18
|
18
|
22
|
|
Involucramiento familiar en voluntariado
|
42
|
5.33
|
2.28
|
5
|
1
|
10
|
|
Involucramiento personal en voluntariado
|
42
|
4.33
|
2.18
|
4
|
1
|
9
|
|
Número de personas en el hogar
|
42
|
4.24
|
1.16
|
4
|
2
|
7
|
📊👥 Variable de respuesta múltiple (Todos los sujetos)
En la siguiente tabla, los participantes podían seleccionar más de
una opción. Las respuestas fueron separadas por comas y desagregadas
para su análisis. Esta decisión metodológica permite visualizar la
diversidad de intereses sin forzar exclusividad en las categorías.
# Función para variables
tabla_apa_categorica <- function(variable, nombre_variable) {
variable <- as.character(variable)
variable <- trimws(variable)
# --- CORRECCIÓN AQUÍ ---
# Aplicar filtros en pasos separados para evitar errores con NA
variable <- variable[!is.na(variable)]
variable <- variable[variable != ""]
variable <- variable[toupper(variable) != "NA"]
# --- FIN DE LA CORRECCIÓN ---
if (length(variable) == 0) {
return(invisible(NULL))
}
frec <- table(variable)
porc <- round(prop.table(frec) * 100, 1)
acum <- cumsum(porc)
if (length(acum) > 0) { acum[length(acum)] <- 100.0 }
tabla <- data.frame(
"Categoría" = names(frec),
"Frecuencia" = as.vector(frec),
"% Frecuencia" = paste0(porc, "%"),
"% Acumulado" = paste0(acum, "%"),
check.names = FALSE
)
cat('<div style="font-family:\'Lucida Sans\', sans-serif; font-size:14pt; display:table; margin-left:auto; margin-right:auto;">')
cat(paste0('<div style="text-align:left; border-bottom: 1px solid black; margin-bottom:6px;"><em>Distribución de ', nombre_variable, '</em></div>'))
print(kable(tabla, format = "html", align = c("l", "c", "c", "c"), escape = FALSE))
cat('<style>thead tr {border-bottom: 1px solid black;}</style>')
cat('<div style="border-bottom: 1px solid black; margin-top:6px;"></div>')
cat('</div>')
cat('<br>')
}
# --- 2. Función para variables NUMÉRICAS ---
tabla_apa_numerica <- function(datos, vars_numericas, titulos_numericos) {
datos_largos_num <- pivot_longer(datos,
cols = all_of(vars_numericas),
names_to = "Variable",
values_to = "Puntuacion"
)
tabla_num <- datos_largos_num %>%
group_by(Variable) %>%
summarise(
N = n(),
Media = mean(Puntuacion, na.rm = TRUE),
DE = sd(Puntuacion, na.rm = TRUE),
Mediana = median(Puntuacion, na.rm = TRUE),
Mín = min(Puntuacion, na.rm = TRUE),
Máx = max(Puntuacion, na.rm = TRUE)
) %>%
mutate(Variable = titulos_numericos[Variable])
nombre_variable <- "Estadística Descriptiva de Variables Numéricas"
cat('<div style="font-family:\'Lucida Sans\', sans-serif; font-size:14pt; display:table; margin-left:auto; margin-right:auto;">')
cat(paste0('<div style="text-align:left; border-bottom: 1px solid black; margin-bottom:6px;"><em>', nombre_variable, '</em></div>'))
print(kable(tabla_num,
format = "html",
align = c("l", "c", "c", "c", "c", "c"),
escape = FALSE,
digits = 2,
col.names = c("Variable", "N", "Media", "DE", "Mediana", "Mín", "Máx")))
cat('<style>thead tr {border-bottom: 1px solid black;}</style>')
cat('<div style="border-bottom: 1px solid black; margin-top:6px;"></div>')
cat('</div>')
cat('<br>')
}
# --- 3. Función para variables MÚLTIPLES ---
tabla_apa_multiple <- function(variable, nombre_variable) {
df <- data.frame(respuesta = variable)
df <- df %>%
separate_rows(respuesta, sep = ",") %>%
mutate(respuesta = trimws(respuesta)) %>%
filter(respuesta != "" & !is.na(respuesta))
frec <- table(df$respuesta)
porc <- round(prop.table(frec) * 100, 1)
acum <- cumsum(porc)
if (length(acum) > 0) { acum[length(acum)] <- 100.0 }
tabla <- data.frame(
"Categoría" = names(frec),
"Frecuencia" = as.vector(frec),
"% Frecuencia" = paste0(porc, "%"),
"% Acumulado" = paste0(acum, "%"),
check.names = FALSE
)
cat('<div style="font-family:\'Lucida Sans\', sans-serif; font-size:14pt; display:table; margin-left:auto; margin-right:auto;">')
cat(paste0('<div style="text-align:left; border-bottom: 1px solid black; margin-bottom:6px;"><em>Distribución de ', nombre_variable, ' (respuestas múltiples)</em></div>'))
print(kable(tabla, format = "html", align = c("l", "c", "c", "c"), escape = FALSE))
cat('<style>thead tr {border-bottom: 1px solid black;}</style>')
cat('<div style="border-bottom: 1px solid black; margin-top:6px;"></div>')
cat('</div>')
cat('<br>')
}
Distribución de Áreas de interés para realizar voluntariados
(respuestas múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Ambiental-ecológico
|
6
|
8%
|
8%
|
|
Educativo
|
20
|
26.7%
|
34.7%
|
|
Emergencias-desastres
|
13
|
17.3%
|
52%
|
|
No respondió
|
3
|
4%
|
56%
|
|
Salud
|
13
|
17.3%
|
73.3%
|
|
Social-comunitario
|
20
|
26.7%
|
100%
|
Distribución de Quién lo involucró en voluntariados previos
(respuestas múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Amigo
|
9
|
15.5%
|
15.5%
|
|
Escuela
|
16
|
27.6%
|
43.1%
|
|
Familia
|
10
|
17.2%
|
60.3%
|
|
Gobierno
|
1
|
1.7%
|
62%
|
|
NA
|
17
|
29.3%
|
91.3%
|
|
Religión
|
5
|
8.6%
|
100%
|
Distribución de Tipos de voluntariados que ha realizado (respuestas
múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Ambiental-ecológico
|
13
|
19.7%
|
19.7%
|
|
Educación
|
5
|
7.6%
|
27.3%
|
|
Emergencias-desastres
|
4
|
6.1%
|
33.4%
|
|
NA
|
17
|
25.8%
|
59.2%
|
|
Salud
|
6
|
9.1%
|
68.3%
|
|
Social-comunitario
|
21
|
31.8%
|
100%
|
Distribución de Motivación para realizar voluntariados (respuestas
múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Altruismo
|
5
|
8.8%
|
8.8%
|
|
Compromiso cívico
|
4
|
7%
|
15.8%
|
|
Desarrollo personal
|
13
|
22.8%
|
38.6%
|
|
Diversión
|
9
|
15.8%
|
54.4%
|
|
NA
|
17
|
29.8%
|
84.2%
|
|
Obligación
|
6
|
10.5%
|
94.7%
|
|
Reconocimiento
|
3
|
5.3%
|
100%
|
Distribución de Beneficios percibidos de voluntariados previos
(respuestas múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Aprendizaje
|
9
|
11.1%
|
11.1%
|
|
Autoestima
|
2
|
2.5%
|
13.6%
|
|
Consciencia
|
6
|
7.4%
|
21%
|
|
Curriculum
|
13
|
16%
|
37%
|
|
Empatía
|
19
|
23.5%
|
60.5%
|
|
NA
|
17
|
21%
|
81.5%
|
|
Satisfacción
|
15
|
18.5%
|
100%
|
Distribución de Motivos para no participar en voluntariados
(respuestas múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Falta de interés
|
1
|
2.1%
|
2.1%
|
|
Falta de oportunidades
|
10
|
21.3%
|
23.4%
|
|
Falta de tiempo
|
9
|
19.1%
|
42.5%
|
|
NA
|
25
|
53.2%
|
95.7%
|
|
Prejuicios
|
2
|
4.3%
|
100%
|
Distribución de Beneficios esperados al participar (respuestas
múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Aprendizaje
|
13
|
19.1%
|
19.1%
|
|
Autoestima
|
3
|
4.4%
|
23.5%
|
|
Consciencia
|
8
|
11.8%
|
35.3%
|
|
Curriculum
|
5
|
7.4%
|
42.7%
|
|
Empatía
|
5
|
7.4%
|
50.1%
|
|
NA
|
25
|
36.8%
|
86.9%
|
|
Satisfacción
|
9
|
13.2%
|
100%
|
1.1 🤝 Sujetos que han participado previamente en voluntariados (n =
25)
👤🤝 Variables de respuesta única
vars_condicionales_si <- c(
"Cantidad_voluntariados" = "Cantidad de voluntariados realizados",
"Percibe_beneficio" = "Percibe algún beneficio por realizar voluntariados",
"Volveria_participar" = "Volvería a participar en algún voluntariado"
)
# --- Ejecutar la función 'tabla_apa_categorica' ---
# (Esta función fue definida en el chunk 'setup_funciones_tablas')
for (var_col in names(vars_condicionales_si)) {
tabla_apa_categorica(datos[[var_col]], nombre_variable = vars_condicionales_si[[var_col]])
}
Distribución de Cantidad de voluntariados realizados
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
1
|
4
|
16.7%
|
16.7%
|
|
10
|
1
|
4.2%
|
20.9%
|
|
2
|
9
|
37.5%
|
58.4%
|
|
3
|
5
|
20.8%
|
79.2%
|
|
4
|
2
|
8.3%
|
87.5%
|
|
5
|
3
|
12.5%
|
100%
|
Distribución de Percibe algún beneficio por realizar
voluntariados
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Si
|
25
|
100%
|
100%
|
Distribución de Volvería a participar en algún voluntariado
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
No
|
3
|
12%
|
12%
|
|
Si
|
22
|
88%
|
100%
|
👤🤝 Variables de respuesta múltiple
Cada tabla a continuación representa variables donde los
participantes podían seleccionar más de una opción. Las respuestas
fueron separadas por comas y desagregadas para su análisis. Esta
decisión metodológica permite visualizar la diversidad de experiencias y
motivaciones sin forzar exclusividad en las categorías.
tabla_apa_multiple <- function(variable, nombre_variable) {
df <- data.frame(respuesta = variable)
df <- df %>%
separate_rows(respuesta, sep = ",") %>%
mutate(respuesta = trimws(respuesta)) %>%
filter(
!is.na(respuesta),
respuesta != "",
toupper(respuesta) != "NA"
)
frec <- table(df$respuesta)
porc <- round(prop.table(frec) * 100, 1)
acum <- round(cumsum(porc), 1)
tabla <- data.frame(
Categoría = names(frec),
Frecuencia = as.vector(frec),
`% Frecuencia` = paste0(porc, "%"),
`% Acumulado` = paste0(acum, "%"),
check.names = FALSE
)
# Título con línea inferior
cat('<div style="font-family:\'Lucida Sans\', sans-serif; font-size:14pt; display:table; margin-left:auto; margin-right:auto;">')
cat(paste0('<div style="text-align:left; border-bottom: 1px solid black; margin-bottom:6px;"><em>Distribución de ', nombre_variable, ' (respuestas múltiples)</em></div>'))
# Tabla centrada sin líneas internas
print(kable(tabla, format = "html", align = c("c", "c", "c", "c"), escape = FALSE))
# Línea debajo del encabezado
cat('<style>thead tr {border-bottom: 1px solid black;}</style>')
# Línea final
cat('<div style="border-bottom: 1px solid black; margin-top:6px;"></div>')
cat('</div>')
}
Distribución de quién le involucró en el voluntariado (respuestas
múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Amigo
|
9
|
22%
|
22%
|
|
Escuela
|
16
|
39%
|
61%
|
|
Familia
|
10
|
24.4%
|
85.4%
|
|
Gobierno
|
1
|
2.4%
|
87.8%
|
|
Religión
|
5
|
12.2%
|
100%
|
Distribución de tipos de voluntariado realizados (respuestas
múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Ambiental-ecológico
|
13
|
26.5%
|
26.5%
|
|
Educación
|
5
|
10.2%
|
36.7%
|
|
Emergencias-desastres
|
4
|
8.2%
|
44.9%
|
|
Salud
|
6
|
12.2%
|
57.1%
|
|
Social-comunitario
|
21
|
42.9%
|
100%
|
Distribución de motivaciones para participar en voluntariados
(respuestas múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Altruismo
|
5
|
12.5%
|
12.5%
|
|
Compromiso cívico
|
4
|
10%
|
22.5%
|
|
Desarrollo personal
|
13
|
32.5%
|
55%
|
|
Diversión
|
9
|
22.5%
|
77.5%
|
|
Obligación
|
6
|
15%
|
92.5%
|
|
Reconocimiento
|
3
|
7.5%
|
100%
|
Distribución de beneficios percibidos de participar en voluntariados
(respuestas múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Aprendizaje
|
9
|
14.1%
|
14.1%
|
|
Autoestima
|
2
|
3.1%
|
17.2%
|
|
Consciencia
|
6
|
9.4%
|
26.6%
|
|
Curriculum
|
13
|
20.3%
|
46.9%
|
|
Empatía
|
19
|
29.7%
|
76.6%
|
|
Satisfacción
|
15
|
23.4%
|
100%
|
Distribución de lo que más recuerda del voluntariado (respuestas
múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
A las personas
|
11
|
26.8%
|
26.8%
|
|
Lo que aprendí
|
7
|
17.1%
|
43.9%
|
|
Lo que hice
|
10
|
24.4%
|
68.3%
|
|
Lo que sentí
|
13
|
31.7%
|
100%
|
1.2 🧤 Sujetos que no han participado previamente en voluntariados
(n = 17)
👤🧤 Variable de respuesta única
# Seleccionar y reordenar los datos
datos_largos_fase1 <- pivot_longer(datos,
cols = c("Total_A", "Ayudar_A", "Compartir_A", "Empatia_A"),
names_to = "Dimension",
values_to = "Puntuacion"
)
# Calcular los descriptivos
# Esta será la 'tabla' que usará tu plantilla
tabla <- datos_largos_fase1 %>%
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)
) %>%
# Reordenar las columnas
arrange(factor(Dimension, levels = c("Ayudar_A", "Compartir_A", "Empatia_A", "Total_A")))
Distribución de Le gustaría participar en un voluntariado
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
No
|
2
|
11.8%
|
11.8%
|
|
Si
|
15
|
88.2%
|
100%
|
👤🧤 Variables de respuesta múltiple
Cada tabla a continuación representa variables donde los
participantes podían seleccionar más de una opción. Las respuestas
fueron separadas por comas y desagregadas para su análisis. Esta
decisión metodológica permite visualizar la diversidad de experiencias y
motivaciones sin forzar exclusividad en las categorías.
Distribución de Motivos para no participar en voluntariado
(respuestas múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Falta de interés
|
1
|
4.5%
|
4.5%
|
|
Falta de oportunidades
|
10
|
45.5%
|
50%
|
|
Falta de tiempo
|
9
|
40.9%
|
90.9%
|
|
Prejuicios
|
2
|
9.1%
|
100%
|
Distribución de Beneficios esperados del voluntariado (respuestas
múltiples)
|
Categoría
|
Frecuencia
|
% Frecuencia
|
% Acumulado
|
|
Aprendizaje
|
13
|
30.2%
|
30.2%
|
|
Autoestima
|
3
|
7%
|
37.2%
|
|
Consciencia
|
8
|
18.6%
|
55.8%
|
|
Curriculum
|
5
|
11.6%
|
67.4%
|
|
Empatía
|
5
|
11.6%
|
79%
|
|
Satisfacción
|
9
|
20.9%
|
99.9%
|
2 🛡️ Análisis de la Escala de Prosocialidad (Pre-test)
2.1 🎯 Fiabilidad de la Escala de Prosocialidad (Alpha de
Cronbach)
# Definición de ítems
items_ayudar_A <- c("A_item1", "A_item3", "A_item4", "A_item6", "A_item7", "A_item13")
items_empatia_A <- c("A_item5", "A_item8", "A_item10", "A_item12", "A_item16")
items_compartir_A <- c("A_item2", "A_item9", "A_item14")
items_total_A <- c(items_ayudar_A, items_empatia_A, items_compartir_A)
# Calcular los Alfas
alfa_ayudar <- psych::alpha(datos[, items_ayudar_A], check.keys = TRUE)
alfa_compartir <- psych::alpha(datos[, items_compartir_A], check.keys = TRUE)
alfa_empatia <- psych::alpha(datos[, items_empatia_A], check.keys = TRUE)
alfa_total <- psych::alpha(datos[, items_total_A], check.keys = TRUE)
# Crear la tabla de resultados
tabla_para_imprimir_alfa <- data.frame(
Dimension = c("Ayudar (Pre-test)",
"Compartir (Pre-test)",
"Empatía (Pre-test)",
"Total Escala (Pre-test)"),
Alfa_Cronbach = c(alfa_ayudar$total$raw_alpha,
alfa_compartir$total$raw_alpha,
alfa_empatia$total$raw_alpha,
alfa_total$total$raw_alpha)
)
Fiabilidad de la Escala (Alfa de Cronbach)
|
Dimensión
|
Alfa de Cronbach (α)
|
|
Ayudar (Pre-test)
|
0.753
|
|
Compartir (Pre-test)
|
0.504
|
|
Empatía (Pre-test)
|
0.584
|
|
Total Escala (Pre-test)
|
0.833
|
2.2 🧮 Estadística Descriptiva de la escala de prosocialidad
# Preparar datos
datos_largos_fase1 <- pivot_longer(datos,
cols = c("Total_A", "Ayudar_A", "Compartir_A", "Empatia_A"),
names_to = "Dimension",
values_to = "Puntuacion"
)
# Calcular descriptivos y guardar en una variable
tabla_para_imprimir <- datos_largos_fase1 %>%
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")))
Estadística Descriptiva de la Escala (Fase 1 - Pre-test)
|
Dimensión
|
N
|
Media
|
DE
|
Mediana
|
Mín
|
Máx
|
|
Ayudar_A
|
42
|
21.93
|
3.54
|
22
|
15
|
28
|
|
Compartir_A
|
42
|
12.52
|
1.63
|
12
|
8
|
15
|
|
Empatia_A
|
42
|
20.02
|
2.78
|
20
|
15
|
24
|
|
Total_A
|
42
|
54.48
|
6.83
|
53
|
40
|
67
|
📈🧮 Distribución de puntuaciones de la Escala de Prosocialiad

2.3 🧭 Pruebas de normalidad escala de prosocialidad
# Función de ayuda para calcular normalidad
calcular_normalidad <- function(variable) {
# Limpieza de datos
variable <- as.character(variable)
variable <- trimws(variable)
variable <- variable[!is.na(variable) & variable != "" & variable != "NA"]
variable <- as.numeric(variable)
# Check de seguridad
if (length(variable) < 3) {
return(list(Shapiro_W = NA, Shapiro_p = NA, KS_D = NA, KS_p = NA))
}
# Pruebas (se guardan los resultados)
shapiro <- shapiro.test(variable)
ks <- ks.test(variable, "pnorm", mean(variable), sd(variable))
# Retornar una lista con los valores clave
return(list(
Shapiro_W = shapiro$statistic,
Shapiro_p = shapiro$p.value,
KS_D = ks$statistic,
KS_p = ks$p.value
))
}
# Aplicar la función a cada dimensión
res_ayudar <- calcular_normalidad(datos$Ayudar_A)
res_compartir <- calcular_normalidad(datos$Compartir_A)
res_empatia <- calcular_normalidad(datos$Empatia_A)
res_total <- calcular_normalidad(datos$Total_A)
# Crear el data.frame con los resultados
tabla_para_imprimir_normalidad <- data.frame(
Dimension = c("Ayudar (Pre-test)",
"Compartir (Pre-test)",
"Empatía (Pre-test)",
"Total Prosocialidad (Pre-test)"),
Shapiro_W = c(res_ayudar$Shapiro_W, res_compartir$Shapiro_W, res_empatia$Shapiro_W, res_total$Shapiro_W),
Shapiro_p_value = c(res_ayudar$Shapiro_p, res_compartir$Shapiro_p, res_empatia$Shapiro_p, res_total$Shapiro_p),
KS_D = c(res_ayudar$KS_D, res_compartir$KS_D, res_empatia$KS_D, res_total$KS_D),
KS_p_value = c(res_ayudar$KS_p, res_compartir$KS_p, res_empatia$KS_p, res_total$KS_p)
)
Pruebas de Normalidad de la Escala (Fase 1 - Pre-test)
|
Dimensión
|
Shapiro W
|
p-value (S)
|
KS D
|
p-value (KS)
|
|
Ayudar (Pre-test)
|
0.953
|
0.083
|
0.125
|
0.524
|
|
Compartir (Pre-test)
|
0.932
|
0.016
|
0.159
|
0.236
|
|
Empatía (Pre-test)
|
0.934
|
0.018
|
0.120
|
0.584
|
|
Total Prosocialidad (Pre-test)
|
0.955
|
0.094
|
0.140
|
0.385
|
📈🧭 Gráficos Q-Q plot de normalidad Escala de Prosocialidad
# Crear etiquetas limpias para las facetas
facet_labels <- c(
"Ayudar_A" = "Ayudar",
"Compartir_A" = "Compartir",
"Empatia_A" = "Empatía",
"Total_A" = "Total Escala"
)
# Crear el gráfico
# Usamos 'datos_largos_fase1' (creado en el chunk 'descriptivos_calculo')
ggplot(datos_largos_fase1, aes(sample = Puntuacion)) +
# 1. geom_qq() grafica los puntos
geom_qq(color = "#3498DB", size = 2) +
# 2. geom_qq_line() dibuja la línea de referencia CORRECTA
geom_qq_line(color = "#E74C3C", linetype = "dashed", linewidth = 1) +
# 3. facet_wrap() crea la cuadrícula 2x2
facet_wrap(~ Dimension, scales = "free", labeller = as_labeller(facet_labels)) +
# Títulos y tema
labs(
title = "Gráficos Q-Q de Normalidad de la Escala (Fase 1 - Pre-test)",
x = "Cuantiles teóricos (Normal)",
y = "Cuantiles observados"
) +
theme_minimal(base_size = 12)

3 ⚖️ Análisis de Línea Base (Comparación Interna del Grupo)
# Preparar datos:
datos_linea_base <- datos %>%
filter(Ha_voluntariado %in% c("Si", "No"))
# --- Check de Seguridad ---
# Comprobar si tenemos al menos dos grupos para comparar
if (n_distinct(datos_linea_base$Ha_voluntariado) < 2) {
# Si no, crear tablas de NA para que el chunk de impresión no falle
levene_resultado <- data.frame(df1=NA_real_, df2=NA_real_, statistic=NA_real_, p=NA_real_)
t_resultado <- data.frame(Variable="Total_A", n1=NA_real_, n2=NA_real_, t=NA_real_, df=NA_real_, p=NA_real_)
} else {
# Si todo está bien, correr las pruebas
levene_resultado <- datos_linea_base %>%
levene_test(Total_A ~ Ha_voluntariado)
t_resultado <- datos_linea_base %>%
t_test(Total_A ~ Ha_voluntariado, var.equal = FALSE) %>%
select(Variable = .y., n1, n2, t = statistic, df, p = p)
}
Prueba de Homogeneidad de Varianzas (Levene) - Experiencia
Previa
|
df1
|
df2
|
Estadístico F
|
p-value
|
|
1
|
40
|
1.279
|
0.265
|
Prueba t de Muestras Independientes - Prosocialidad por Experiencia
Previa (Sí vs. No)
|
Variable
|
N (No)
|
N (Sí)
|
Estadístico t
|
df
|
p-value
|
|
Total_A
|
17
|
25
|
-0.429
|
38.15
|
0.67
|
4.📍 Identificación de Casos Atípicos
# Función para graficar boxplot con etiquetas de sujetos
graficar_boxplot <- function(variable, nombre_dim, sujetos, entrevistados = c("9", "15", "19", "20", "41", "42")) {
# Crear data frame con sujetos y puntajes
df <- data.frame(
Sujeto = as.character(sujetos),
Puntaje = suppressWarnings(as.numeric(as.character(variable)))
)
# Filtrar filas válidas
df <- df[!is.na(df$Puntaje) & df$Puntaje != "", ]
# Marcar entrevistados
df$Entrevistado <- ifelse(df$Sujeto %in% entrevistados, "Sí", "No")
# Graficar
ggplot(df, aes(x = "", y = Puntaje)) +
geom_boxplot(fill = "#D5DBDB", outlier.color = "#E74C3C") +
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("Boxplot con sujetos:", nombre_dim),
subtitle = "Sujetos entrevistados señalados en rojo",
x = "", y = "Puntaje",
color = "Entrevistado"
) +
theme_minimal(base_size = 12) +
theme(legend.position = "right")
}
# Aplicar la función a cada dimensión
graficar_boxplot(datos$Ayudar_A, "Ayudar", datos$Sujeto)

graficar_boxplot(datos$Compartir_A, "Compartir", datos$Sujeto)

graficar_boxplot(datos$Empatia_A, "Empatía", datos$Sujeto)

graficar_boxplot(datos$Total_A, "Total prosocialidad", datos$Sujeto)
