El presente tutorial guía de forma práctica a los estudiantes de Medicina e Investigadores en Salud en la digitalización, optimización y validación de sus instrumentos de recolección de datos utilizando la plataforma KoboToolbox (versión servidor Global / Humanitario).
El objetivo es trasladar la Matriz de Operacionalización de Variables de cada protocolo de investigación estudiantil a un formulario electrónico robusto que prevenga errores de digitación, respete el rigor ético y garantice la calidad de los datos para su posterior procesamiento en R y RStudio.
carnet@ujmd.edu.sv) y
configure su nombre de usuario en formato snake_case
(ejemplo: juan_perez_2026).Para asegurar la construcción colaborativa entre los 8 integrantes de cada equipo de protocolo:
Protocolo 1.2 - Hipertensión e IMC El Zaite).Para evitar la “limpieza traumática” de bases de datos, aplicaremos desde la fase de diseño en KoboToolbox dos reglas estándar internacionales:
Data Column Name)Es el identificador interno que se convertirá en el encabezado de la columna en R.
snake_case
(minúsculas y guiones bajos).ñ), sin mayúsculas ni caracteres especiales
(?, %, $, /).presion_sistolica,
edad_anos, nivel_actividad_fisica.XML Values)Es el código alfanumérico o numérico puro que se guarda en la base de
datos cuando el usuario selecciona una opción de texto. * Texto
visible: "1 a 2 veces por semana" * Valor
XML: 2 * Permite leer la variable directamente como
factor numérico u ordinal en R sin necesidad de limpiar cadenas de
texto.
| Rol / Naturaleza de la Variable | Tipo de Pregunta en Kobo | Configuración Recomendada |
|---|---|---|
| Identificación / Código ID | Texto (Text) |
Formato corto (ej. PAC-001). |
| Edad en años cumplidos | Número (Number) |
Entero con validador min >= 18 y
max <= 90. |
| Sexo biológico / Categorías | Selección Única (Select One) |
Asignar valores XML: 1=Masculino,
2=Femenino, 99=Prefiero no contestar. |
| Variables continuas (PA, Peso, Talla) | Decimal / Número (Decimal /
Number) |
Captura exacta del dato bruto (Regla de Oro). |
| Síntomas / Comorbilidades múltiples | Selección Múltiple (Select Many) |
Opción de marcar varias alternativas independientes. |
| Escalas clínicas Likert (PHQ-9, GAD-7) | Selección Única (Select One) |
Mantener la escala original (0 a 3) sin alterar la redacción. |
La Lógica de Salto (Skip Logic) evita sesgos de respuesta, ahorra tiempo de aplicación y protege la validez al ocultar preguntas que no aplican a determinado perfil.
En todos los protocolos, si el encuestado cumple un criterio de exclusión o no otorga el consentimiento, el cuestionario debe finalizar o saltar las secciones clínicas.
consentimiento_informado (Selección Única:
1=Sí, 0=No).consentimiento_informado = 1.Para preguntas específicas de antecedentes gineco-obstétricos o embarazo:
sexo_biologico = 2 (Femenino) Yedad_anos >= 12diagnostico_hipertension (1=Sí,
0=No).tiempo_diagnostico_anos,
medicamento_prescrito,
dosis_omitidas_semana.diagnostico_hipertension = 1.Los Criterios de Validación (Validation Criteria) impiden la digitación de valores fuera de los límites biológicos o lógicos esperados durante el trabajo de campo.
Number).>= 70
y <= 260."Valor de PAS fuera de rango fisiológico plausible (70 - 260 mmHg). Verifique la toma y la digitación."Number).>= 40
y <= 150 y
< ${presion_sistolica}."La presión diastólica debe estar entre 40 y 150 mmHg y debe ser menor que la presión sistólica."Decimal).>= 1.20
y <= 2.15."Ingrese la talla en metros con decimales (ej. 1.65). Rango permitido: 1.20 m - 2.15 m."Decimal).>= 30.0
y <= 250.0."Peso fuera del rango permitido (30.0 - 250.0 kg). Verifique la calibración."Estructura Kobo:
- Pregunta: presion_sistolica (Number)
Constraint: . >= 70 and . <= 260
- Pregunta: presion_diastolica (Number)
Constraint: . >= 40 and . <= 150 and . < ${presion_sistolica}
- Pregunta: peso_kg (Decimal)
Constraint: . >= 30.0 and . <= 220.0
- Pregunta: talla_m (Decimal)
Constraint: . >= 1.20 and . <= 2.15
- Pregunta: imc_calculado (Calculate)
Calculation: round(${peso_kg} / (${talla_m} * ${talla_m}), 2)
- Pregunta: consumo_sal_diario (Select One)
XML Values: 1=Bajo (<5g/día), 2=Moderado (5-10g/día), 3=Alto (>10g/día)
Estructura Kobo:
- Pregunta: realiza_actividad_fisica (Select One: 1=Sí, 0=No)
- Pregunta: dias_actividad_intensa (Number)
Skip Logic: ${realiza_actividad_fisica} = 1
Constraint: . >= 0 and . <= 7
- Pregunta: minutos_actividad_intensa (Number)
Skip Logic: ${dias_actividad_intensa} > 0
Constraint: . >= 10 and . <= 720
Error Message: "El tiempo diario debe estar entre 10 y 720 minutos."
Estructura Kobo:
- Pregunta: cum_acumulado (Decimal)
Constraint: . >= 0.0 and . <= 10.0
Error Message: "El CUM debe estar en la escala de 0.00 a 10.00."
- Batería PHQ-9 (Select One para cada ítem 1 a 9):
XML Values: 0=Ningún día, 1=Varios días, 2=Más de la mitad de los días, 3=Casi todos los días
- Pregunta: phq9_score_total (Calculate)
Calculation: ${phq9_1} + ${phq9_2} + ${phq9_3} + ${phq9_4} + ${phq9_5} + ${phq9_6} + ${phq9_7} + ${phq9_8} + ${phq9_9}
En preguntas sensibles (ingresos, orientación, consumo de sustancias,
antecedentes psiquiátricos): * Incluir siempre la opción:
99 = Prefiero no responder / 98 = No aplica. *
Evita forzar datos falsos cuando la pregunta es configurada como
Obligatoria (Mandatory).
Inserte al final del cuestionario una pregunta de tipo Nota (Note) sin restricciones de obligatoriedad:
¡Cuestionario Completado Exitosamente!
Apreciamos sinceramente su tiempo y colaboración en esta investigación. Sus respuestas son anónimas y se tratarán bajo estricta confidencialidad para fines exclusivamente científicos.
Contacto del equipo de investigación:investigacion.medicina@ujmd.edu.sv
Por favor, haga clic en el botón “Enviar” para registrar su información y luego puede cerrar esta pantalla.
Una vez finalizado el trabajo de campo y exportada la base de datos
desde KoboToolbox en formato .csv (con nombres de columna
en snake_case y valores XML numéricos), el análisis inicial
en R/RStudio es directo y limpio:
# Carga de paquetes para análisis bioestadístico
library(tidyverse)
# Lectura de la base de datos exportada desde KoboToolbox
datos_protocolo <- read_csv("data/protocolo_1_2_el_zaite.csv")
# Verificación de la estructura de las variables
glimpse(datos_protocolo)
# Factorización inmediata de variables cualitativas mediante valores XML
datos_protocolo <- datos_protocolo %>%
mutate(
sexo_biologico = factor(sexo_biologico,
levels = c(1, 2, 99),
labels = c("Masculino", "Femenino", "Prefiero no responder")),
control_presion = factor(if_else(presion_sistolica < 140 & presion_diastolica < 90, 1, 0),
levels = c(1, 0),
labels = c("Controlado", "No Controlado"))
)
# Resumen descriptivo directo de variables continuas y categóricas
summary(datos_protocolo$imc_calculado)
table(datos_protocolo$control_presion)
# Evaluación de asociación mediante Regresión Logística (VI: IMC continuo -> VD: Control PA)
modelo_hta <- glm(control_presion ~ imc_calculado + edad_anos + consumo_sal_diario,
data = datos_protocolo,
family = binomial)
summary(modelo_hta)
Antes de hacer clic en “Implementar” (Deploy) en KoboToolbox, verifique: