wd <-"C:/Users/mario.camacho/OneDrive - UFV/Hospitales CAM"wd <-file.path(wd, "Sureste/Bea Isidoro 202511/20251118 Adherencia Higiene Manos en Centro de Simulación Clínica")setwd(wd) # cambia el WD de la sesiónknitr::opts_knit$set(root.dir = wd) # mantiene el WD en todos los chunks al rendersource('scr/zz_libraries.R')source('scr/zz_funciones.R')# Opciones globales de chunkopts_chunk$set(fig.width =6,fig.height =4,fig.align ="center",out.width ="80%",fig.show ="hold")# Espaciado entre imágenes en HTMLcat("<style>img { margin-bottom: 20px; }</style>")
<style>img { margin-bottom: 20px; }</style>
options(skimr.max_char =100) # Para que no trunque los nombres de los factores
Ingesta
# Al hacer render y un nuevo hedline, se crea un nudata_raw <-read_excel("raw/20251118 Base datos Registros HM UFV.xlsx", sheet ="Registros HM")data <- data_raw# View(data)# View(data |> filter(id_video=='v153738-578'), title = "id_video v153738-578")
Evaluación de medidas repetidas
# Registros por cada idid_count <- data |>group_by(id) |>summarise(n_registros =n(), .groups ="drop")unicos <-sum(id_count$n_registros ==1)multiples <-sum(id_count$n_registros >1)if (multiples ==0) {print("Solo un registro por cada id en la base de datos")} else {print(paste(unicos, "id tienen un único registro y", multiples, "id tienen más de un registro"))}
[1] "Solo un registro por cada id en la base de datos"
# Cursos por cada idid_curso_count <- data |>group_by(id,curso) |>summarise(n_registros =n(), .groups ="drop")unicos <-sum(id_curso_count$n_registros ==1)multiples <-sum(id_curso_count$n_registros >1)if (multiples ==0) {print("Ningún alumno (id) ha sido evaluado en más de un curso")} else {print(paste(unicos, "alumnos (id) han sido evaluados en un único curso y", multiples, "alumnos han sido evaluados en más de una vez"))}
[1] "Ningún alumno (id) ha sido evaluado en más de un curso"
Formatos
### Solo para hacer pruebas con las continuas# data <- data |> mutate(guantes = as.numeric(guantes == "SI"))####var <-c('curso','escenario','situacion','indicacion','accion','guantes')data[var] |>mutate(across(everything(), factor)) |>summary()
curso escenario situacion
4º (post-formación corto plazo): 73 Box :572 Entrada : 12
4º (pre-formación) :371 Consulta :325 Punto de atención:1130
5º (post-formación largo plazo):698 Procedimiento invasivo:245
indicacion accion guantes
Antes de realizar una técnica aséptica :136 Agua + Jabón: 9 NO:1021
Antes del contacto con el paciente :472 No HM :885 SI: 121
Después del contacto con el entorno del paciente: 41 PBA :248
Después del contacto con el paciente :355
Después del riesgo de exposición a fluidos :138
data <- data |>mutate(across(var[1], ~factor(., levels =c("4º (pre-formación)", "4º (post-formación corto plazo)", "5º (post-formación largo plazo)"),ordered =TRUE)))data <- data |>mutate(across(var[4], ~factor(., levels =c("Antes del contacto con el paciente","Antes de realizar una técnica aséptica","Después del riesgo de exposición a fluidos","Después del contacto con el paciente","Después del contacto con el entorno del paciente"),labels =c("M1", "M2", "M3", "M4", "M5"),ordered =FALSE))) # Puse TRUE pero creo que es FALSEdata[var] |>select(where(is.character)) |>mutate(across(where(is.character), factor)) |>summary()
escenario situacion accion guantes
Box :572 Entrada : 12 Agua + Jabón: 9 NO:1021
Consulta :325 Punto de atención:1130 No HM :885 SI: 121
Procedimiento invasivo:245 PBA :248
data <- data |>mutate(across(any_of(var) &where(is.character), factor))# View(data |> filter(id_video=='v153738-578'), title = "id_video v153738-578")data <- data |>select(-all_of(intersect("id", names(data))))data <- data |>select(-all_of(intersect("id_video", names(data)))) # OJO QUE SE PODRÍA USAR EL VÍDEO COMO UN FACTOR ALEATORIO# (cada vídeo es revisado en por gente diferente, por gente diferente... y eso afectase a la evaluación - no sé si evaluar HM es muy subjetivo o no)data |>str()