En este documento -v1.1- nos enfocaremos en presentar, revisar y aplicar los métodos estadísticos de la publicación: “A Randomized Comparison Between the Pentax AWS Video Laryngoscope and the Macintosh Laryngoscope in Morbidly Obese Patients”, ver aquí artículo, publicado en ANESTHESIA & ANALGESIA (2011), revista oficial de la International Anesthesia Research Society.
Nuestro propósito principal es brindar apoyo en la aplicación de la modelación estadística a profesionistas y estudiantes de ciencias biológicas y de la salud, para ello, emplearemos este ejemplo de ensayos clínicos. Es deseable que los lectores cuenten con un conocimiento básico de estadística descriptiva, estadística inferencial, y de investigación. Presentaremos los conceptos, tanto estadísticos como de salud, de manera accesible.
Otro de nuestros propósitos es fomentar la utilización del software libre R como herramienta para llevar a cabo el análisis estadístico en ciencias de la salud. Para ello, se presentarán los métodos, técnicas y ejemplos relevantes que permitan a los lectores comprender cómo utilizar dicha herramienta. Aunque se asume cierta familiaridad con los conceptos estadísticos, se proporcionará una orientación paso a paso para la adecuada comprensión y aplicación.
Es importante precisar que este documento NO ES UN TRABAJO EXHAUSTIVO de aplicación estadística ni de ciencias de la salud y, sólo promueve la divulgación educativa para adentrase en las aplicaciones estadísticas y fue producto de colaboración de los autores en el marco de las estancias de verano 2023 que organiza CIMAT. Para correcciones, contribuciones y trabajos especializados (o con mayor rigor estadístico) favor de ponerse en contacto con el autor de correspondencia.
A continuación, presentaremos el contexto y los generales relevantes de la publicación que vamos a trabajar.
La proporción de pacientes obesos y con obesidad mórbida está aumentando rápidamente en todo el mundo. Se conoce que en estos pacientes la intubación traqueal puede presentar mayor dificultad debido al espacio reducido y la limitación orofaríngea, misma que provoca una visualización inadecuada.(1) Las intubaciones traqueales difíciles y fallidas en estos pacientes se encuentran entre las principales causas de mortalidad y morbilidad relacionadas con la anestesia.(2)
Los especialistas en el área de la salud saben que una buena visión laríngea facilita la intubación traqueal y, por ello, se han introducido nuevas tecnologías para mejorar la visualización. Los videolaringoscopios, como Pentax AWS, suelen utilizar cámaras en miniatura para facilitar la visualización de la laringe.
El Pentax AWS (Figura 2.1) es un novedoso videolaringoscopio, disponible en Japón desde 2006, diseñado para facilitar la intubación proporcionando una imagen de vídeo de la glotis. Incorpora una cámara de vídeo en miniatura y un monitor LCD integrado alimentado por pilas con una cuchilla desechable que se acopla al sistema de base y, la incorporación de una pantalla LCD permite ver la glotis simultáneamente a la inserción del tubo endotraqueal. En este sentido, se diferencia de otros videolaringoscopios, los cuales utilizan monitores externos. El Pentax AWS también difiere en tener un canal lateral que posiciona la guía al tubo endotraqueal. Diversos estudios sugieren que este video-laringoscopio puede ayudar a intubar de mejor forma, pero los estudios aún siguen siendo escasos.(3) El método convencional para realizar laringoscopia ha sido con el laringoscopio Macintosh estándar con hoja nº4 (Figura 2.2). Siendo la principal diferencia no tener una cámara de video integrada como el Pentax AWS.(4)
Figure 2.1: Pentax AWS
Figure 2.2: Macintosh estándar
La intubación con Pentax AWS tiene mayor eficacia y rapidez comparada con el dispositivo Macintosh estándar.
Pacientes con obesidad mórbida (índice de masa corporal entre 30 y 50 kg/\(x^{2}\)) que requerían intubación orotraqueal para cirugía electiva.
Ensayo clínico aleatorizado de dos brazos (grupos). La aleatorización fue con números aleatorios generados por computadora y la asignación de grupos fue ciega.
En todos los casos, la cabeza del paciente se colocó en posición neutral sobre una almohada de espuma “donut” y el laringoscopista era libre de manipular la cabeza según fuera necesario para obtener la mejor vista posible.
Todas las tráqueas de los pacientes fueron intubadas por 1 de 2 anestesiólogos asistentes, cada uno de los cuales había utilizado previamente el Pentax AWS de 5 a 10 veces antes de comenzar el estudio.
El estudio comienza con la administración de oxígeno y la inducción de la anestesia general en los pacientes para después asignarlos al azar a la técnica de intubación, ya sea Macintosh (n = 49) o el Pentax AWS (n = 50).
De 105 pacientes incluidos, cuatro no completaron el estudio por cancelación de cirugía o porque el anestesiólogo no pudo llegar al quirófano a tiempo, y dos pacientes del grupo Pentax AWS tuvieron resultados primarios faltantes. Por lo tanto, los datos están disponibles sólo para 99 pacientes.
En los siguientes videos, se muestra la intubación de pacientes.
Para el que corresponde al laringoscopio Macintosh ver: https://www.youtube.com/watch?v=4b0M3zJcQ2A
Presentar y aplicar comprensivamente la modelación estadística para la comparación del método Pentax AWS y Macintosh en pacientes con obesidad mórbida.
Contrastar los resultados estadísticos obtenidos en el presente documento versus los obtenidos en la publicación.
Presentar el desarrollo y programación de los métodos estadísticos usando R.
### Instalación
list.of.packages <- c("medicaldata", "Hmisc", "janitor","dplyr","ggplot2","cowplot","gmodels","rstatix","psych",
"RColorBrewer","ggpubr","car","stats", "corrplot", "tidyverse","MVN","DescTools",
"broom","survival", "survminer","vembedr", "kableExtra", "gtsummary", "forcats",
"MASS","smd")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)### Activación
# Manejo de datos
library(dplyr)
library(Hmisc)
library(janitor)
library(gmodels)
library(rstatix)
library(car)
library(stats)
library(tidyverse)
library(MVN)
library(DescTools)
library(broom)
library(survival)
library(survminer)
library(forcats)
library(MASS)
library(smd)
# Visualización de datos
library(ggplot2)
library(cowplot)
library(psych)
library(RColorBrewer)
library(ggpubr)
library(corrplot)
library(gtsummary)
# Incrustar videos de youtube
library(vembedr)
# Manejo de tablas
library(kableExtra)
# Creación de Rmarkdown
library(rmarkdown)
# Bases de datos (BD)
library(medicaldata)La información se encuentra disponible en la paquetería medicaldata de R. Una vez instalada y activada esta librería se puede cargar la base de datos (BD) como se muestra a continuación.
data(laryngoscope, package="medicaldata" )
names(laryngoscope) #Muestra los nombres de las variables en la BD original
#> [1] "age" "gender"
#> [3] "asa" "BMI"
#> [5] "Mallampati" "Randomization"
#> [7] "attempt1_time" "attempt1_S_F"
#> [9] "attempt2_time" "attempt2_assigned_method"
#> [11] "attempt2_S_F" "attempt3_time"
#> [13] "attempt3_assigned_method" "attempt3_S_F"
#> [15] "attempts" "failures"
#> [17] "total_intubation_time" "intubation_overall_S_F"
#> [19] "bleeding" "ease"
#> [21] "sore_throat" "view"Utilizaremos la función rename() para renombrar las variables, utilizar la siguiente estructura: “nuevo nombre” = “nombre antiguo”.
laringoscopia <- rename(laryngoscope,
Edad = age, Sexo = gender, Estado_fisico = asa,
IMC = BMI, Mallampati = Mallampati, Grupo = Randomization,
Tiempo_total_intubacion = total_intubation_time, Num_intentos = attempts, Nivel_dificultad = ease,
Tiempo_1_intento = attempt1_time, Exito_1_intento = attempt1_S_F,
Tiempo_2_intento = attempt2_time, Exito_2_intento = attempt2_S_F,
Metodo_2_intento = attempt2_assigned_method, Tiempo_3_intento = attempt3_time,
Metodo_3_intento = attempt3_assigned_method, Exito_3_intento = attempt3_S_F,
Fracasos = failures, Exito_intubacion = intubation_overall_S_F,
Sangrado = bleeding, Dolor_garganta = sore_throat, Vista_glotis = view)Es importante definir los tipos de variables que se utilizarán en el análisis estadístico. En esta parte se utiliza la función factor() en la cual se indican las variables que serán declaradas como factores, sus niveles y las etiquetas de los niveles.
# Factores del estudio
laringoscopia$Sexo <- factor(laringoscopia$Sexo, levels = c(0,1), labels = c("Femenino","Masculino"))
laringoscopia$Grupo <- factor(laringoscopia$Grupo, levels = c(0,1), labels = c("Macintosh","Pentax_AWS"))
laringoscopia$Estado_fisico <- factor(laringoscopia$Estado_fisico, levels = c(2,3,4), labels = c("II","III","IV"))
laringoscopia$Exito_1_intento <- factor(laringoscopia$Exito_1_intento, levels = c(0,1), labels = c("No","Si"))
laringoscopia$Exito_2_intento <- factor(laringoscopia$Exito_2_intento , levels = c(0,1), labels = c("No","Si"))
laringoscopia$Exito_3_intento <- factor(laringoscopia$Exito_3_intento, levels = c(0,1), labels = c("No","Si"))
laringoscopia$Fracasos <- factor(laringoscopia$Fracasos, levels = c(1,2,3), labels = c("1","2","3"))
laringoscopia$Exito_intubacion <- factor(laringoscopia$Exito_intubacion, levels = c(0,1), labels= c("No","Si"))
laringoscopia$Sangrado <- factor(laringoscopia$Sangrado , levels = c(0,1), labels = c("No","Si"))
laringoscopia$Dolor_garganta <- factor(laringoscopia$Dolor_garganta , levels = c(0,1,2,3), labels = c("Ninguno","Leve","Moderado","Severo"))
laringoscopia$Vista_glotis <- factor(laringoscopia$Vista_glotis , levels = c(0,1), labels = c("Malo","Bueno"))
laringoscopia$Metodo_2_intento <- factor(laringoscopia$Metodo_2_intento, levels = c(0,1), labels = c("No","Si"))
laringoscopia$Metodo_3_intento <- factor(laringoscopia$Metodo_3_intento, levels = c(0,1), labels = c("No","Si"))** Primeros 10 pacientes **
head(laringoscopia,10)
#> Edad Sexo Estado_fisico IMC Mallampati Grupo Tiempo_1_intento
#> 1 51 Femenino III 56.20 1 Macintosh 29.00
#> 2 52 Femenino III 44.60 2 Macintosh 29.00
#> 3 37 Femenino III 41.60 1 Macintosh 31.00
#> 4 20 Femenino III 46.32 2 Macintosh 31.00
#> 5 35 Femenino III 61.00 2 Macintosh 21.00
#> 6 39 Femenino III 44.00 2 Macintosh 10.00
#> 7 52 Femenino III 44.00 2 Macintosh 13.00
#> 8 59 Femenino III 41.90 2 Macintosh 23.00
#> 9 32 Femenino III 47.00 1 Macintosh 15.00
#> 10 24 Femenino III 45.00 1 Macintosh 8.96
#> Exito_1_intento Tiempo_2_intento Metodo_2_intento Exito_2_intento
#> 1 Si NA <NA> <NA>
#> 2 Si NA <NA> <NA>
#> 3 No 60 Si Si
#> 4 No 46 Si Si
#> 5 Si NA <NA> <NA>
#> 6 Si NA <NA> <NA>
#> 7 Si NA <NA> <NA>
#> 8 Si NA <NA> <NA>
#> 9 Si NA <NA> <NA>
#> 10 Si NA <NA> <NA>
#> Tiempo_3_intento Metodo_3_intento Exito_3_intento Num_intentos Fracasos
#> 1 NA <NA> <NA> 1 <NA>
#> 2 NA <NA> <NA> 1 <NA>
#> 3 NA <NA> <NA> 2 1
#> 4 NA <NA> <NA> 2 1
#> 5 NA <NA> <NA> 1 <NA>
#> 6 NA <NA> <NA> 1 <NA>
#> 7 NA <NA> <NA> 1 <NA>
#> 8 NA <NA> <NA> 1 <NA>
#> 9 NA <NA> <NA> 1 <NA>
#> 10 NA <NA> <NA> 1 <NA>
#> Tiempo_total_intubacion Exito_intubacion Sangrado Nivel_dificultad
#> 1 29.00 Si No 5
#> 2 29.00 Si No 20
#> 3 91.00 Si No 80
#> 4 77.00 Si No 80
#> 5 21.00 Si No 20
#> 6 10.00 Si No 2
#> 7 13.00 Si No 10
#> 8 23.00 Si No 60
#> 9 15.00 Si No 15
#> 10 8.96 Si No 0
#> Dolor_garganta Vista_glotis
#> 1 Ninguno Bueno
#> 2 Ninguno Bueno
#> 3 Ninguno Malo
#> 4 <NA> Malo
#> 5 Ninguno Bueno
#> 6 Ninguno Bueno
#> 7 Leve Bueno
#> 8 Ninguno Bueno
#> 9 Moderado Bueno
#> 10 Leve Bueno** Últimos 10 pacientes **
tail(laringoscopia,10)
#> Edad Sexo Estado_fisico IMC Mallampati Grupo Tiempo_1_intento
#> 90 52 Femenino II 44.20 1 Pentax_AWS 49
#> 91 72 Femenino III 41.00 2 Pentax_AWS 30
#> 92 52 Femenino II 34.10 2 Pentax_AWS 36
#> 93 58 Femenino III NA 1 Pentax_AWS 35
#> 94 49 Masculino III 41.41 2 Pentax_AWS 47
#> 95 58 Masculino III NA 4 Pentax_AWS 49
#> 96 51 Femenino II 41.10 1 Pentax_AWS 29
#> 97 59 Masculino III 40.00 1 Pentax_AWS 29
#> 98 58 Femenino III 34.09 1 Pentax_AWS 41
#> 99 52 Masculino II 36.81 3 Pentax_AWS 34
#> Exito_1_intento Tiempo_2_intento Metodo_2_intento Exito_2_intento
#> 90 No 49 Si No
#> 91 Si NA <NA> <NA>
#> 92 Si NA <NA> <NA>
#> 93 Si NA <NA> <NA>
#> 94 Si NA <NA> <NA>
#> 95 Si NA <NA> <NA>
#> 96 Si NA <NA> <NA>
#> 97 No 27 Si Si
#> 98 No 49 Si Si
#> 99 Si NA <NA> <NA>
#> Tiempo_3_intento Metodo_3_intento Exito_3_intento Num_intentos Fracasos
#> 90 30 No Si 3 2
#> 91 NA <NA> <NA> 1 <NA>
#> 92 NA <NA> <NA> 1 <NA>
#> 93 NA <NA> <NA> 1 <NA>
#> 94 NA <NA> <NA> 1 <NA>
#> 95 NA <NA> <NA> 1 <NA>
#> 96 NA <NA> <NA> 1 <NA>
#> 97 NA <NA> <NA> 2 1
#> 98 NA <NA> <NA> 2 1
#> 99 NA <NA> <NA> 1 <NA>
#> Tiempo_total_intubacion Exito_intubacion Sangrado Nivel_dificultad
#> 90 98 No No 100
#> 91 30 Si No 40
#> 92 36 Si No 25
#> 93 35 Si No 20
#> 94 47 Si No 30
#> 95 49 Si No 85
#> 96 29 Si No 15
#> 97 56 Si No 55
#> 98 90 Si No 90
#> 99 34 Si No 15
#> Dolor_garganta Vista_glotis
#> 90 Moderado Bueno
#> 91 Ninguno Bueno
#> 92 Ninguno Bueno
#> 93 Ninguno Bueno
#> 94 Moderado Bueno
#> 95 Ninguno Malo
#> 96 Ninguno Bueno
#> 97 Ninguno Bueno
#> 98 Moderado Malo
#> 99 Ninguno BuenoNOTA IMPORTANTE. Para la reproducción de los resultados del artículo se utilizará la BD original y no la transformada. A continuación, presentamos paso a paso el análisis estadístico y el manejo del software R.
La función tbl_summary() calcula estadísticas descriptivas para variables continuas, categóricas y dicotómicas. Presentamos los resultados en una tabla de resumen personalizada lista para su publicación. (5)
En la tabla 1 se inspeccionan las variables iniciales del estudio con el propósito de evaluar la homogeneidad entre los grupos de tratamiento (Balance o pareo). Se calcula la diferencia entre Pentax AWX y Macintosh en la media o proporción según corresponda a la variable y se calcula también el intervalo de confianza al 95% y el valor p para la diferencia estandarizada.
tabla1 <- medicaldata::laryngoscope %>%
# Selección de las variables
select("Randomization", "age", "gender", "BMI", "asa", "Mallampati") %>%
# Cambiar nombres de los niveles del grupo de tratamiento
mutate(Randomization = factor(Randomization, labels = c("Macintosh", "Pentax_AWS"))) %>%
# Cambiar orden de los niveles del grupo de tratamiento
mutate(Randomization = fct_relevel(Randomization, "Pentax_AWS", "Macintosh")) %>%
# Tabla de estadísticas descriptivas
tbl_summary(by = Randomization,
missing = "no",
statistic = list(c("age", "BMI") ~ "{mean} ({sd})",
c("asa", "Mallampati", "gender") ~ "{n} ({p}%)")) %>%
# Diferencia estandarizada por grupo
add_difference(test = list(all_continuous() ~ "smd",
all_categorical() ~ "smd")) %>%
# Mostrar los nombres de las etiquetas de los niveles en cursiva
italicize_levels() %>%
# Cambio de encabezado arriba de las columnas de los grupos
modify_spanning_header(c("stat_1", "stat_2") ~ "*Grupos:*") %>%
# Cambio del encabezado de la columna de las variables
modify_header(label = "*Característica*") %>%
# Titulo de la tabla
modify_caption("Distribución de características demográficas y clínicas de los pacientes.") %>%
# Etiquetas de columnas y renglones en negritas
bold_labels()
tabla1| Característica |
Grupos:
|
Difference2 | 95% CI2,3 | |
|---|---|---|---|---|
| Pentax_AWS N = 501 |
Macintosh N = 491 |
|||
| age | 50 (12) | 49 (14) | 0.14 | -0.26, 0.53 |
| gender | 11 (22%) | 10 (20%) | 0.04 | -0.36, 0.43 |
| BMI | 41.4 (4.4) | 42.5 (5.9) | -0.21 | -0.61, 0.19 |
| asa | -0.28 | -0.68, 0.11 | ||
| 2 | 15 (30%) | 7 (14%) | ||
| 3 | 32 (64%) | 40 (82%) | ||
| 4 | 3 (6.0%) | 2 (4.1%) | ||
| Mallampati | -0.12 | -0.51, 0.28 | ||
| 1 | 21 (42%) | 14 (29%) | ||
| 2 | 18 (36%) | 21 (44%) | ||
| 3 | 7 (14%) | 13 (27%) | ||
| 4 | 4 (8.0%) | 0 (0%) | ||
| 1 Mean (SD); n (%) | ||||
| 2 Standardized Mean Difference | ||||
| 3 CI = Confidence Interval | ||||
Iniciamos con el análisis exploratorio (AE) de las variables respuesta o resultado: Tiempo total de intubación (variable primaria) y las variables secundarias: número de intentos y el grado de dificultad; posteriormente, estudiamos el balanceo de los brazos: Pentax AWS Vs Macintosh (grupos aleatorizados). El balanceo, también conocido como pareo, fue evaluado con la diferencia estandarizada (i.e., diferencia en medias o proporciones divididas por la desviación estándar combinada). Cualquier covariable con diferencia estandarizada mayor a 0.25 (en valor absoluto) fue ajustada en el análisis, a menos que se especifique lo contrario.
El tiempo total de la intubación fue definido como el tiempo desde el inicio del primer intento de inserción del laringoscopio hasta obtener una señal del capnograma, dentro del código se puede encontrar dicha variable como: total_intubation_time. Si un intento con el dispositivo asignado fallaba, entonces otro intento u otra técnica se ensayaba y fue registrado en las variables attempt2_S_F y attempt3_S_F. La intubación usando el método asignado dentro de los 100 segundos, independientemente del número de intentos, se consideró exitoso y fue registrado en la variable: intubation_overall_S_F.
Para los pacientes que cambiaron al otro método o cuyas tráqueas fueron entubadas en un tiempo mayor a 100 segundos, la intubación fue censurada (i.e., el tiempo total de intubación no ocurrió) y fue almacenada en la variable: failures.
La vista de la glotis para cada laringoscopia fue evaluada utilizando el sistema de calificación Cormack-Lehane (variable: view). La dificultad o facilidad de la intubación traqueal se registró en una escala de Likert (0 = extremadamente fácil a 100 = extremadamente difícil) en la variable: ease, la presencia de manchas de sangre fue registrada en la variable: bleeding (0 = no y 1 = si), y para la gravedad de cualquier dolor de garganta postoperatorio ( variable: sore_throat) se registró con una escala likert (0 = ninguna, 1 = baja , 2 = moderada y 3 = severa).
Empleamos la función attach() para un manejo simple de variables usando sus nombres únicamente:
La función str() proporciona una visión detallada de la estructura de la base de datos, permitiendo identificar el tipo de dato asociado a cada variable y nos ayuda a vislumbrar el tipo de análisis estadístico según el tipo de dato.
# Estructura de los datos
str(laryngoscope)
#> 'data.frame': 99 obs. of 22 variables:
#> $ age : num 51 52 37 20 35 39 52 59 32 24 ...
#> $ gender : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ asa : num 3 3 3 3 3 3 3 3 3 3 ...
#> $ BMI : num 56.2 44.6 41.6 46.3 61 ...
#> $ Mallampati : num 1 2 1 2 2 2 2 2 1 1 ...
#> $ Randomization : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ attempt1_time : num 29 29 31 31 21 10 13 23 15 8.96 ...
#> $ attempt1_S_F : num 1 1 0 0 1 1 1 1 1 1 ...
#> $ attempt2_time : num NA NA 60 46 NA NA NA NA NA NA ...
#> $ attempt2_assigned_method: num NA NA 1 1 NA NA NA NA NA NA ...
#> $ attempt2_S_F : num NA NA 1 1 NA NA NA NA NA NA ...
#> $ attempt3_time : num NA NA NA NA NA NA NA NA NA NA ...
#> $ attempt3_assigned_method: num NA NA NA NA NA NA NA NA NA NA ...
#> $ attempt3_S_F : num NA NA NA NA NA NA NA NA NA NA ...
#> $ attempts : num 1 1 2 2 1 1 1 1 1 1 ...
#> $ failures : num 0 0 1 1 0 0 0 0 0 0 ...
#> $ total_intubation_time : num 29 29 91 77 21 10 13 23 15 8.96 ...
#> $ intubation_overall_S_F : num 1 1 1 1 1 1 1 1 1 1 ...
#> $ bleeding : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ ease : num 5 20 80 80 20 2 10 60 15 0 ...
#> $ sore_throat : num 0 0 0 NA 0 0 1 0 2 1 ...
#> $ view : num 1 1 0 0 1 1 1 1 1 1 ...Se tiene una base de datos con información de 99 pacientes y 22 variables de tipo numérico.
Realizamos un análisis descriptivo y gráfico “apropiado” a las variables respuesta que nos interesa estudiar. El tiempo total es continuo y por tanto es adecuado hacer un resumen de estadísticos (valor mínimo, Q1, Q2, Media, Q3 y valor máximo), un boxplot y un histograma; la variable número de intentos es de conteo (puede ser trabajada como ordinal), presentamos un tabla de frecuencias para cada valor y un gráfico de barras (también se puede emplear uno de pastel); por último, la variable dificultad fue colectada en un rango de 0-100 y puede ser estudiada tanto por resumen de estadísticos o por tabla de frecuencias. A continuación, se presentan el código empleado y los resultados obtenidos.
###### Tiempo total de intubación
summary(laryngoscope$total_intubation_time) # Estadísticos resumen
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 8.96 24.37 31.00 37.48 45.37 100.00
Hmisc::describe(laryngoscope$total_intubation_time)
#> laryngoscope$total_intubation_time
#> n missing distinct Info Mean Gmd .05 .10
#> 99 0 74 0.999 37.48 21.65 13.72 16.63
#> .25 .50 .75 .90 .95
#> 24.37 31.00 45.37 70.40 87.30
#>
#> lowest : 8.96 10 11.57 12.42 13 , highest: 87 90 91 98 100
boxplot(laryngoscope$total_intubation_time, main = "Tiempo total de intubación", ylab = "Tiempo (segundos)") hist(laryngoscope$total_intubation_time, nclass=10, main = "Tiempo total de intubación",xlab = "Tiempo (segundos)", ylab = "Frecuencia")### Tiempo total de intubación por grupos
laryngoscope %>%
mutate(Randomization = factor(Randomization, labels = c("Macintosh", "Pentax_AWS"))) %>%
ggplot(aes(x = total_intubation_time )) +
geom_histogram(aes(y = ..density..), colour = 1, fill = "white",binwidth = 10) +
geom_density(col=2, lwd=1) +
facet_wrap(~ Randomization)###### Dificultad de intubación
table(laryngoscope$ease) # En tabla
#>
#> 0 2 5 10 15 20 25 30 35 40 50 55 60 70 75 80 85 90 100
#> 2 1 4 13 8 5 3 6 2 9 2 1 14 6 2 6 5 5 5
summary(laryngoscope$ease) # Estadísticos resumen
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.00 15.00 40.00 45.22 70.00 100.00
boxplot(laryngoscope$ease, main = "Nivel de dificultad", ylab = "Dificultad") hist(laryngoscope$ease, nclass=10, main = "Nivel de dificultad",xlab = "Escala de dificultad", ylab = "Frecuencia")
### Dificultad de intubación por grupos
laryngoscope %>%
mutate(Randomization = factor(Randomization, labels = c("Macintosh", "Pentax_AWS"))) %>%
ggplot(aes(x = ease)) +
geom_histogram(aes(y = ..density..), colour = 1, fill = "white") +
geom_density(col=2, lwd=1) +
facet_wrap(~ Randomization)Una cuestión importante en la modelación estadística es identificar si las muestras provienen de una distribución normal o Gaussiana, este conocimiento nos ayudará a definir el enfoque estadístico: paramétrico, semi-paramétrico o no paramétrico. Para evaluar la normalidad de las variables cuantitativas continuas se puede utilizar la función mvn() que nos brinda la prueba de Shapiro Wilks.
Si el valor p (probabilidad de rechazar \(H_0\)) es menor al nivel de significancia (\(alpha=0.05=5\)%), se rechaza la hipótesis nula (\(H_0\): Los datos no se distribuyen de forma normal).
normalidad <- mvn(laryngoscope[,c(17,20)], univariateTest = "SW", desc = FALSE)
normalidad$univariateNormality
#> Test Variable Statistic p value Normality
#> 1 Shapiro-Wilk total_intubation_time 0.8475 <0.001 NO
#> 2 Shapiro-Wilk ease 0.9240 <0.001 NORechazamos la hipótesis nula de normalidad y, por tanto, utilizaremos el modelo de riesgos proporcionales de Cox (semi-parametrico) y las pruebas no paramétricas de Kaplan-Meier y la log-rank para estudiar la relación del ** tiempo de intubación** y los factores de estudio.
La prueba exacta de Fisher es una prueba estadística (NO PARAMÉTRICA) utilizada para estudiar la asociación entre dos variables categóricas en una tabla de contingencia, se recomienda su uso cuando alguna celda de la tabla presenta frecuencias observadas iguales o menores a 5. Esta prueba calcula la probabilidad de obtener la distribución de frecuencias observadas. Si la probabilidad resultante es menor a 0.05 se rechaza la hipótesis nula y se concluye que hay evidencia suficiente para afirmar la asociación entre dos variables categóricas.(6)
Hipótesis nula (\(H_0\)): No hay asociación entre las dos variables categóricas; es decir, la distribución de las frecuencias es independiente.
Hipótesis alternativa (\(H_1\)): Existe asociación entre las dos variables categóricas (No hay independencia).
Variable: Éxito de intubación en general
# Prueba exacta de Fisher
table(laryngoscope$intubation_overall_S_F, laryngoscope$Randomization) #El primer componente es para Filas y el segundo para Columnas
#>
#> 0 1
#> 0 0 4
#> 1 49 46
prueba_fisher_intub <- fisher.test(table(laryngoscope$intubation_overall_S_F, laryngoscope$Randomization))
prueba_fisher_intub
#>
#> Fisher's Exact Test for Count Data
#>
#> data: table(laryngoscope$intubation_overall_S_F, laryngoscope$Randomization)
#> p-value = 0.1175
#> alternative hypothesis: true odds ratio is not equal to 1
#> 95 percent confidence interval:
#> 0.000000 1.508182
#> sample estimates:
#> odds ratio
#> 0
# Obtener valor p
valorp_exitoGe <- round(prueba_fisher_intub$p.value,2)
# Tabla de estadísticas descriptivas
tbl_est_exito_intu <- laryngoscope %>%
dplyr::select(Randomization, intubation_overall_S_F) %>%
tbl_summary(by = Randomization) %>%
bold_labels()
tbl_est_exito_intu| Characteristic | 0 N = 491 |
1 N = 501 |
|---|---|---|
| intubation_overall_S_F | 49 (100%) | 46 (92%) |
| 1 n (%) | ||
# Extracción de valores de los resultados de las estadísticas
exitogeneral_estadi <- as_tibble(tbl_est_exito_intu$table_body)
pentax_aws_stats_exitoGe <- exitogeneral_estadi$stat_2
macintosh_stats_exitoGe <- exitogeneral_estadi$stat_1Dado que no hubo casos (0) en la casilla de Macintosh (Código=0) y cuando no hubo éxito de intubación (Código=0), es decir con Macintosh todos fueron intubados y sólo cuatro casos no fue posible la intubación cuando se utilizó Pentax AWS (Código=1); aqui no fue poeible estimar un valor de asociación con la prueba exacta de Fisher.
Variable: Sangrado
# Prueba exacta de Fisher
table(laryngoscope$bleeding, laryngoscope$Randomization)
#>
#> 0 1
#> 0 49 48
#> 1 0 2
prueba_fisher_sangrado <- fisher.test(table(laryngoscope$bleeding, laryngoscope$Randomization))
prueba_fisher_sangrado
#>
#> Fisher's Exact Test for Count Data
#>
#> data: table(laryngoscope$bleeding, laryngoscope$Randomization)
#> p-value = 0.4949
#> alternative hypothesis: true odds ratio is not equal to 1
#> 95 percent confidence interval:
#> 0.1846149 Inf
#> sample estimates:
#> odds ratio
#> Inf
# Obtener valor p
valorp_sangrado <- round(prueba_fisher_sangrado$p.value,2)
# Tabla de estadísticas descriptivas
tbl_est_sangrado <- laryngoscope %>%
dplyr::select(Randomization, bleeding) %>%
tbl_summary(by = Randomization) %>%
bold_labels()
tbl_est_sangrado| Characteristic | 0 N = 491 |
1 N = 501 |
|---|---|---|
| bleeding | 0 (0%) | 2 (4.0%) |
| 1 n (%) | ||
Hacemos este tipo de modelación cuando asumimos que conocemos el modelo de donde provienen los datos (por ejemplo uno normal) y lo único que necesitamos es estimar los paramétros de dicho modelo, el método de estimación con mayor aplicación es máxima verosimilitud, qué es un principio estadístico utilizado para estimar los parámetros desconocidos de un modelo probabilístico. Busca encontrar los valores de los parámetros que hacen que los datos observados sean más probables bajo el modelo dado.
La herramienta estadística de Análisis de la Varianza (ANOVA) fue desarrollada por Ronald Fisher a principios del siglo XX y su campo de aplicación inicial fue en la agricultura. El ANOVA es una herramienta de análisis que particiona la variación total de los datos en un conjunto de fuentes de variación para comparar las medias de dos o más grupos diferentes y determinar si existe alguna diferencia significativa entre ellos. El objetivo principal del ANOVA es evaluar si las diferencias observadas en las medias de los grupos son el resultado de la variación aleatoria o si existen diferencias reales y significativas.
En el análisis de varianza, se parte de la hipótesis nula (\(H_0\)) de que NO hay diferencia significativa entre las medias de los grupos. Luego, se realiza una prueba de hipótesis para determinar si existe evidencia suficiente para rechazar la hipótesis nula a favor de la hipótesis alternativa (\(H_1\)), que indica que al menos una de las medias de los grupos es diferente.(7)
El código siguiente realiza un ANOVA para determinar si hay una diferencia significativa en la variable respuesta ease (Nivel de dificultad de intubación) entre los diferentes niveles de la variable Randomization (Pentax AWS o Macintosh).
# Ajustar un modelo de regresión lineal
anova_result <- lm(ease ~ Randomization, data = laryngoscope)
summary(anova_result)
#>
#> Call:
#> lm(formula = ease ~ Randomization, data = laryngoscope)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -47.10 -27.65 -2.10 25.40 51.80
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 38.204 4.258 8.971 2.23e-14 ***
#> Randomization 13.896 5.992 2.319 0.0225 *
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 29.81 on 97 degrees of freedom
#> Multiple R-squared: 0.05253, Adjusted R-squared: 0.04276
#> F-statistic: 5.378 on 1 and 97 DF, p-value: 0.02249
# Obtener valor p
p_value_nivel <- round(summary(anova_result)$coefficients["Randomization", "Pr(>|t|)"],2)
# Tabla de estadísticas descriptivas
tbl_descriptivas_nivel <- laryngoscope %>%
select(ease, Randomization) %>%
mutate(Randomization = factor(Randomization, labels = c("Macintosh", "Pentax_AWS"))) %>%
mutate(Randomization = fct_relevel(Randomization, "Pentax_AWS", "Macintosh")) %>%
tbl_summary( by = Randomization,
statistic = list(ease ~ "{mean} ± {sd}")) %>%
add_difference(test = list(all_continuous() ~ "smd"))
tbl_descriptivas_nivel| Characteristic | Pentax_AWS N = 501 |
Macintosh N = 491 |
Difference2 | 95% CI2,3 |
|---|---|---|---|---|
| ease | 52 ± 31 | 38 ± 28 | 0.47 | 0.07, 0.87 |
| 1 Mean ± SD | ||||
| 2 Standardized Mean Difference | ||||
| 3 CI = Confidence Interval | ||||
# Extracción de valores para tabla resumen de resultados
nivel_estadi <- as_tibble(tbl_descriptivas_nivel$table_body)
pentax_aws_stats_nivel <- nivel_estadi$stat_1
macintosh_stats_nivel <- nivel_estadi$stat_2La función lm() en R se emplea para ajustar modelos lineales. Al especificar el argumento data = laryngoscope, estamos indicando que el modelo debe ajustarse utilizando el dataframe laryngoscope.
Mediante la función summary(), obtenemos un resumen detallado del modelo ajustado, lo que nos permite inspeccionar las estadísticas asociadas con la variable Randomization. Una métrica clave a considerar es el valor \(p\), que proporciona una cuantificación de la evidencia en contra de la hipótesis nula \(H_0\).
Dado que se obtuvo un valor \(p = 0.02\) y considerando un nivel de significancia \(\alpha = 0.05\), se tiene evidencia suficiente para rechazar la hipótesis nula \(H_0\). Esto sugiere que existen diferencias estadísticamente significativas entre los grupos de tratamiento con respecto a la variable respuesta ease.
La regresión logística es una técnica estadística utilizada para modelar la relación entre una variable respuesta binaria (variable dependiente dicotómica) y uno o más predictores (variables independientes) que pueden ser categóricos o continuos. Es una de las técnicas más comunes en el análisis de datos con variables dependientes dicotómicas, donde el objetivo es predecir la probabilidad de que ocurra un evento o una categoría específica. Se utiliza una función logística (también conocida como función de enlace logit).
Éxito de intubacion en el primer intento
# Modelo de regresion logística
model <- glm(attempt1_S_F ~ Randomization + asa + Mallampati, data = laryngoscope, family = binomial)
summary(model)
#>
#> Call:
#> glm(formula = attempt1_S_F ~ Randomization + asa + Mallampati,
#> family = binomial, data = laryngoscope)
#>
#> Coefficients:
#> Estimate Std. Error z value Pr(>|z|)
#> (Intercept) 3.4387 2.0865 1.648 0.0993 .
#> Randomization -0.6186 0.6693 -0.924 0.3553
#> asa -0.4690 0.6486 -0.723 0.4696
#> Mallampati 0.1705 0.3852 0.443 0.6580
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> (Dispersion parameter for binomial family taken to be 1)
#>
#> Null deviance: 68.832 on 97 degrees of freedom
#> Residual deviance: 67.337 on 94 degrees of freedom
#> (1 observation deleted due to missingness)
#> AIC: 75.337
#>
#> Number of Fisher Scoring iterations: 5
# # Tabla para modelo de regresion logística
tbl_regresion <- tbl_regression(model, exponentiate = TRUE)
tbl_regresion| Characteristic | OR1 | 95% CI1 | p-value |
|---|---|---|---|
| Randomization | 0.54 | 0.13, 1.94 | 0.4 |
| asa | 0.63 | 0.17, 2.18 | 0.5 |
| Mallampati | 1.19 | 0.58, 2.69 | 0.7 |
| 1 OR = Odds Ratio, CI = Confidence Interval | |||
# Tabla de estadística descriptiva
tbl_estad_exito1 <- laryngoscope %>%
dplyr::select(Randomization, attempt1_S_F) %>%
tbl_summary(by = Randomization) %>%
bold_labels()
tbl_estad_exito1| Characteristic | 0 N = 491 |
1 N = 501 |
|---|---|---|
| attempt1_S_F | 45 (92%) | 43 (86%) |
| 1 n (%) | ||
# Extracción de valores de los resultados de las estadísticas
exito_estadi <- as_tibble(tbl_estad_exito1$table_body)
pentax_aws_stats_exito1 <- exito_estadi$stat_2
macintosh_stats_exito1 <- exito_estadi$stat_1
exito_estadi
#> # A tibble: 1 × 7
#> variable var_type row_type var_label label stat_1 stat_2
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 attempt1_S_F dichotomous label attempt1_S_F attempt1_S_F 45 (92%) 43 (86%)
# Extracción de valores para tabla resumen de resultados
modelo_exito1 <- as_tibble(tbl_regresion$table_body[1,])
oddR_exito1 <- round(modelo_exito1$estimate,2)
ConfLo_exito1 <- round(modelo_exito1$conf.low,2)
ConfSu_exito1 <- round(modelo_exito1$conf.high,2)
p_value_exito1 <- round(modelo_exito1$p.value,2)Vista de la glotis
model_glotis <- glm(view ~ Randomization + asa + Mallampati, data = laryngoscope, family = binomial)
summary(model_glotis)
#>
#> Call:
#> glm(formula = view ~ Randomization + asa + Mallampati, family = binomial,
#> data = laryngoscope)
#>
#> Coefficients:
#> Estimate Std. Error z value Pr(>|z|)
#> (Intercept) 3.1861 1.8249 1.746 0.0808 .
#> Randomization 0.5331 0.5384 0.990 0.3221
#> asa -0.5514 0.5795 -0.952 0.3413
#> Mallampati -0.1794 0.3106 -0.578 0.5635
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> (Dispersion parameter for binomial family taken to be 1)
#>
#> Null deviance: 93.476 on 97 degrees of freedom
#> Residual deviance: 90.814 on 94 degrees of freedom
#> (1 observation deleted due to missingness)
#> AIC: 98.814
#>
#> Number of Fisher Scoring iterations: 4
tbl_modelo_glotis <- tbl_regression(model_glotis, exponentiate = TRUE)
tbl_modelo_glotis| Characteristic | OR1 | 95% CI1 | p-value |
|---|---|---|---|
| Randomization | 1.70 | 0.60, 5.10 | 0.3 |
| asa | 0.58 | 0.17, 1.74 | 0.3 |
| Mallampati | 0.84 | 0.46, 1.56 | 0.6 |
| 1 OR = Odds Ratio, CI = Confidence Interval | |||
tbl_estad_glotis <- laryngoscope %>%
dplyr::select(Randomization, view) %>%
tbl_summary(by = Randomization) %>%
bold_labels()
tbl_estad_glotis| Characteristic | 0 N = 491 |
1 N = 501 |
|---|---|---|
| view | 38 (78%) | 43 (86%) |
| 1 n (%) | ||
# Extracción de valores de los resultados de las estadísticas
glotis_estadi <- as_tibble(tbl_estad_glotis$table_body)
pentax_aws_stats_glotis <- glotis_estadi$stat_2
macintosh_stats_glotis <- glotis_estadi$stat_1
glotis_estadi
#> # A tibble: 1 × 7
#> variable var_type row_type var_label label stat_1 stat_2
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 view dichotomous label view view 38 (78%) 43 (86%)
# Extracción de valores del modelo para tabla resumen de resultados
glotis_modelo <- as_tibble(tbl_modelo_glotis$table_body[1,])
oddR_glotis <- round(glotis_modelo$estimate,2)
ConfLo_glotis <- round(glotis_modelo$conf.low,2)
ConfSu_glotis <- round(glotis_modelo$conf.high,2)
p_value_glotis <- round(glotis_modelo$p.value,2)La regresión logística ordinal (o de odds proporcionales), modela la relación entre variables independientes cuantitativas y/o cualitativas y una variable respuesta con orden natural. Se usa cuando la proporción de odds es constante para distintos valores de las variables independientes. En R, se aplica con la función polr(), que es una función de la librería MASS que ajusta modelos de regresión para variables respuesta con distribución ordinal, con funciones enlace logit o probit. Si los coeficientes son significativos (\(p\) < 0.05), se puede afirmar que hay un efecto significativo de las variables independientes en los odds.
Dolor de garganta
# Modelo de regresion de odds proporcionales u ordinal
modelo_dolor <- polr(as.factor(sore_throat) ~ Randomization + asa + Mallampati, data = laryngoscope)
summary(modelo_dolor)
#> Call:
#> polr(formula = as.factor(sore_throat) ~ Randomization + asa +
#> Mallampati, data = laryngoscope)
#>
#> Coefficients:
#> Value Std. Error t value
#> Randomization 0.069860 0.4327 0.16143
#> asa 0.590238 0.4466 1.32176
#> Mallampati -0.002668 0.2583 -0.01033
#>
#> Intercepts:
#> Value Std. Error t value
#> 0|1 2.4307 1.4085 1.7258
#> 1|2 3.7964 1.4403 2.6357
#> 2|3 5.1832 1.5216 3.4064
#>
#> Residual Deviance: 175.2702
#> AIC: 187.2702
#> (2 observations deleted due to missingness)
tbl_modelo_dolor <- tbl_regression(modelo_dolor, exponentiate = TRUE)
tbl_modelo_dolor| Characteristic | OR1 | 95% CI1 |
|---|---|---|
| Randomization | 1.07 | 0.46, 2.52 |
| asa | 1.80 | 0.77, 4.51 |
| Mallampati | 1.00 | 0.59, 1.65 |
| 1 OR = Odds Ratio, CI = Confidence Interval | ||
# Obtener valor p
valor_p_dolorg <- round(modelo_dolor$coefficients["Randomization"],2)
# Tabla de estadísticas descriptivas
tbl_estad_dolor <- laryngoscope %>%
select(Randomization, sore_throat) %>%
tbl_summary(
by = Randomization,
statistic = list(all_categorical() ~ "{n} ({p}%)"
)
)
tbl_estad_dolor| Characteristic | 0 N = 491 |
1 N = 501 |
|---|---|---|
| sore_throat | ||
| 0 | 32 (67%) | 34 (68%) |
| 1 | 12 (25%) | 9 (18%) |
| 2 | 3 (6.3%) | 5 (10%) |
| 3 | 1 (2.1%) | 2 (4.0%) |
| Unknown | 1 | 0 |
| 1 n (%) | ||
# Extracción de valores para tabla resumen de resultados
dolor_estadi <- as_tibble(tbl_estad_dolor$table_body)
pentax_aws_stats_dolor_l1 <- dolor_estadi$stat_2[2]
pentax_aws_stats_dolor_l2 <- dolor_estadi$stat_2[3]
pentax_aws_stats_dolor_l3 <- dolor_estadi$stat_2[4]
pentax_aws_stats_dolor_l4 <- dolor_estadi$stat_2[5]
macintosh_stats_dolor_l1 <- dolor_estadi$stat_1[2]
macintosh_stats_dolor_l2 <- dolor_estadi$stat_1[3]
macintosh_stats_dolor_l3 <- dolor_estadi$stat_1[4]
macintosh_stats_dolor_l4 <- dolor_estadi$stat_1[5]
# Extracción de valores del modelo para tabla resumen de resultados
tabla_dolor <- as_tibble(tbl_modelo_dolor$table_body[1,])
oddR_dolor <- round(tabla_dolor$estimate,2)
ConfLo_dolor <- round(tabla_dolor$conf.low,2)
ConfSu_dolor <- round(tabla_dolor$conf.high,2)La prueba de suma de rangos de Wilcoxon se utiliza como una alternativa a la prueba t de Student, dado que la distribución de las variables sobre las cuales se realizan las comparaciones no siguen una distribución normal. La prueba evalúa las hipótesis:
Hipótesis nula (\(H_0\)): No hay diferencia significativa entre las distribuciones de las dos muestras.
Hipótesis alternativa (\(H_1\)): Existe una diferencia significativa entre las distribuciones de las dos muestras.
Si el valor \(p\) resultante es menor que el nivel de significancia predefinido (generalmente 0.05), se rechaza la hipótesis nula, lo que sugiere que hay evidencia suficiente para afirmar que existe una diferencia significativa entre las dos muestras.
En R se puede utilizar la función wilcox.test() como se muestra en el código siguiente.
Número de intentos de intubación
# Prueba de suma de rangos de Wilcoxon
wilcox_test <- wilcox.test(attempts ~ Randomization, data = laryngoscope)
wilcox_test
#>
#> Wilcoxon rank sum test with continuity correction
#>
#> data: attempts by Randomization
#> W = 1172, p-value = 0.482
#> alternative hypothesis: true location shift is not equal to 0
# Extracción de valores de la prueba
valorp_intentos <- round(wilcox_test$p.value,2)
# Tabla de estadísticas descriptivas
tbl_intentos <- laryngoscope %>%
select(Randomization, attempts) %>%
tbl_summary(
by = Randomization,
statistic = list(
all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} ({p}%)"
)
)
tbl_intentos| Characteristic | 0 N = 491 |
1 N = 501 |
|---|---|---|
| attempts | ||
| 1 | 45 (92%) | 44 (88%) |
| 2 | 4 (8.2%) | 3 (6.0%) |
| 3 | 0 (0%) | 3 (6.0%) |
| 1 n (%) | ||
# Extracción de valores para tabla resumen de resultados
intentos_estadi <- as_tibble(tbl_intentos$table_body)
pentax_aws_stats_intentos_l1 <- intentos_estadi$stat_2[2]
pentax_aws_stats_intentos_l2 <- intentos_estadi$stat_2[3]
pentax_aws_stats_intentos_l3 <- intentos_estadi$stat_2[4]
macintosh_stats_intentos_l1 <- intentos_estadi$stat_1[2]
macintosh_stats_intentos_l2 <- intentos_estadi$stat_1[3]
macintosh_stats_intentos_l3 <- intentos_estadi$stat_1[4]El procedimiento de Kaplan-Meier es una técnica estadística no paramétrica utilizada para estimar la función de supervivencia en estudios de sobrevida o análisis de tiempo hasta la ocurrencia de un evento (ejemplo: muerte). El análisis de supervivencia se enfoca en estudiar el tiempo transcurrido hasta que se produce un evento de interés en una muestra de individuos o elementos.
Kaplan-Meier construye una curva de supervivencia al estimar la función de supervivencia S(t) en diferentes puntos de tiempo. La curva de supervivencia muestra cómo la probabilidad de supervivencia cambia a lo largo del tiempo. Para estimar S(t), se utilizan las tasas de supervivencia en cada intervalo de tiempo basadas en el número de eventos ocurridos y la cantidad de individuos en riesgo de experimentar el evento en cada intervalo.(8)
En esta práctica se utilizará la prueba de Kaplan-Meier para estimar el éxito en el porcentaje de intubación a lo largo del tiempo.
# Ajustar el modelo de supervivencia para el grupo Macintosh
fit_macintosh <- survfit(Surv(total_intubation_time, intubation_overall_S_F) ~ Randomization, data = laryngoscope[Randomization == "0",])
# Ajustar el modelo de supervivencia para el grupo Pentax_AWS
fit_pentax_aws <- survfit(Surv(total_intubation_time, intubation_overall_S_F) ~ Randomization, data = laryngoscope[Randomization == "1",])
# Grafica las curvas de supervivencia para ambos grupos
par(mfrow = c(1, 1)) # Organiza el gráfico en una sola fila
# Coloca las etiquetas del eje Y en formato de porcentajes invertidos
options(scipen=999) # Evita la notación científica en los ejes
# Grafica la curva de supervivencia para el grupo 'Macintosh'
plot(fit_macintosh, col = "blue", lwd = 2, main = "Curvas de Supervivencia de Kaplan-Meier",
xlab = "Tiempo total de incubación (s)", ylab = "% de exito de intubación", xlim = c(0, max(total_intubation_time)),
ylim = c(1, 0), yaxt = "n") # Invierte el eje Y
# Grafica la curva de supervivencia para el grupo 'Pentax_AWS'
lines(fit_pentax_aws, col = "red", lwd = 2)
# Modifica las etiquetas del eje Y para mostrar porcentajes invertidos
porcentajes_invertidos <- seq(0, 100, by = 10)
etiquetas_eje_y <- sprintf("%1.0f%%", rev(porcentajes_invertidos))
axis(2, at = rev(porcentajes_invertidos) / 100, labels = etiquetas_eje_y)
# Agrega leyendas
legend("topleft", legend = c("Macintosh", "Pentax_AWS"), col = c("blue", "red"), lwd = 2)
# Agrega etiquetas de tamaño de muestra en la parte de abajo a la derecha
muestra_macintosh <- sum(Randomization == "0")
muestra_pentax_aws <- sum(Randomization == "1")
muestra_texto <- paste("N Macintosh=", muestra_macintosh, " N Pentax AWS =", muestra_pentax_aws)
text(x = 40, y = 0, labels = muestra_texto, pos = 4, adj = 1)Otra forma de realizar las curvas de Kaplan-Meier integrando el intervalo de confianza de las curvas y el valor \(p\) para la diferencia entre ellas, es con el código siguiente.
# Creación de función de supervivencia
survObject <- Surv(total_intubation_time, intubation_overall_S_F)
# Creación de curvas de supervivencia
fit <- survfit(survObject ~ Randomization, data = laryngoscope)
summary(fit)
#> Call: survfit(formula = survObject ~ Randomization, data = laryngoscope)
#>
#> Randomization=0
#> time n.risk n.event survival std.err lower 95% CI upper 95% CI
#> 8.96 49 1 0.9796 0.0202 0.94079 1.000
#> 10.00 48 1 0.9592 0.0283 0.90535 1.000
#> 11.57 47 1 0.9388 0.0342 0.87399 1.000
#> 13.00 46 1 0.9184 0.0391 0.84482 0.998
#> 13.80 45 1 0.8980 0.0432 0.81708 0.987
#> 15.00 44 1 0.8776 0.0468 0.79040 0.974
#> 15.92 43 1 0.8571 0.0500 0.76456 0.961
#> 16.53 42 1 0.8367 0.0528 0.73939 0.947
#> 16.66 41 1 0.8163 0.0553 0.71480 0.932
#> 19.00 40 1 0.7959 0.0576 0.69071 0.917
#> 21.00 39 1 0.7755 0.0596 0.66706 0.902
#> 21.21 38 1 0.7551 0.0614 0.64381 0.886
#> 21.90 37 1 0.7347 0.0631 0.62092 0.869
#> 22.00 36 2 0.6939 0.0658 0.57612 0.836
#> 22.98 34 1 0.6735 0.0670 0.55417 0.818
#> 23.00 33 2 0.6327 0.0689 0.51110 0.783
#> 23.22 31 1 0.6122 0.0696 0.48995 0.765
#> 23.60 30 1 0.5918 0.0702 0.46905 0.747
#> 24.00 29 1 0.5714 0.0707 0.44839 0.728
#> 24.74 28 1 0.5510 0.0711 0.42796 0.709
#> 25.00 27 1 0.5306 0.0713 0.40776 0.690
#> 25.31 26 1 0.5102 0.0714 0.38779 0.671
#> 26.00 25 1 0.4898 0.0714 0.36805 0.652
#> 27.00 24 2 0.4490 0.0711 0.32924 0.612
#> 28.00 22 2 0.4082 0.0702 0.29135 0.572
#> 29.00 20 6 0.2857 0.0645 0.18351 0.445
#> 29.42 14 1 0.2653 0.0631 0.16649 0.423
#> 29.45 13 1 0.2449 0.0614 0.14978 0.400
#> 32.00 12 1 0.2245 0.0596 0.13341 0.378
#> 32.47 11 1 0.2041 0.0576 0.11740 0.355
#> 33.00 10 2 0.1633 0.0528 0.08662 0.308
#> 37.00 8 1 0.1429 0.0500 0.07195 0.284
#> 39.00 7 1 0.1224 0.0468 0.05787 0.259
#> 42.13 6 1 0.1020 0.0432 0.04447 0.234
#> 44.13 5 1 0.0816 0.0391 0.03192 0.209
#> 69.00 4 1 0.0612 0.0342 0.02045 0.183
#> 77.00 3 1 0.0408 0.0283 0.01050 0.159
#> 87.00 2 1 0.0204 0.0202 0.00293 0.142
#> 91.00 1 1 0.0000 NaN NA NA
#>
#> Randomization=1
#> time n.risk n.event survival std.err lower 95% CI upper 95% CI
#> 12.4 50 1 0.980 0.0198 0.94195 1.000
#> 14.2 49 1 0.960 0.0277 0.90719 1.000
#> 17.4 48 1 0.940 0.0336 0.87643 1.000
#> 23.6 47 1 0.920 0.0384 0.84779 0.998
#> 28.0 46 2 0.880 0.0460 0.79438 0.975
#> 29.0 44 3 0.820 0.0543 0.72014 0.934
#> 29.5 41 1 0.800 0.0566 0.69647 0.919
#> 29.5 40 1 0.780 0.0586 0.67323 0.904
#> 30.0 39 1 0.760 0.0604 0.65038 0.888
#> 31.0 38 2 0.720 0.0635 0.60571 0.856
#> 33.0 36 1 0.700 0.0648 0.58384 0.839
#> 34.0 35 2 0.660 0.0670 0.54093 0.805
#> 34.6 33 1 0.640 0.0679 0.51987 0.788
#> 35.0 32 3 0.580 0.0698 0.45813 0.734
#> 36.0 29 1 0.560 0.0702 0.43801 0.716
#> 36.0 28 1 0.540 0.0705 0.41811 0.697
#> 36.5 27 1 0.520 0.0707 0.39843 0.679
#> 38.0 26 1 0.500 0.0707 0.37896 0.660
#> 38.3 25 1 0.480 0.0707 0.35971 0.641
#> 38.9 24 1 0.460 0.0705 0.34067 0.621
#> 39.0 23 1 0.440 0.0702 0.32185 0.602
#> 44.0 22 1 0.420 0.0698 0.30324 0.582
#> 46.6 21 1 0.400 0.0693 0.28486 0.562
#> 47.0 20 1 0.380 0.0686 0.26670 0.541
#> 48.0 19 1 0.360 0.0679 0.24877 0.521
#> 48.0 18 1 0.340 0.0670 0.23108 0.500
#> 48.2 17 1 0.320 0.0660 0.21363 0.479
#> 49.0 16 2 0.280 0.0635 0.17952 0.437
#> 50.0 14 1 0.260 0.0620 0.16289 0.415
#> 50.1 13 1 0.240 0.0604 0.14655 0.393
#> 52.0 12 2 0.200 0.0566 0.11489 0.348
#> 56.0 10 1 0.180 0.0543 0.09962 0.325
#> 59.6 9 1 0.160 0.0518 0.08478 0.302
#> 70.0 8 1 0.140 0.0491 0.07043 0.278
#> 72.0 7 1 0.120 0.0460 0.05665 0.254
#> 90.0 4 1 0.090 0.0432 0.03516 0.230
#> 100.0 2 1 0.045 0.0384 0.00843 0.240
# Prueba de log-rank para la diferencia entre las curvas de los grupos
logRank <- survdiff(survObject ~ Randomization)
# Calculo del valor p de la prueba log-rank
pval <- pchisq(logRank$chisq, length(logRank$n) - 1) # Crear gráfica
ggsurvplot(fit, data=laryngoscope, pval = round(pval,10), xlab="Tiempo", ylab="Éxito de intubación %", conf.int = T,legend.labs = c("Macintosh", "Pentax AWS")) De la gráfica anterior observamos que el laringoscopio Macintosh (representado en color rojo) no presenta diferencia con el laringoscopio Pentax AWS que incluso ofrece peores resultados.
En ensayos clínicos o estudios observacionales que buscan evaluar el impacto de una intervención sobre el tiempo hasta la aparición de un evento de interés, es esencial considerar y ajustar por el efecto de otras variables, conocidas como covariables o covariantes. Estas pueden estar directamente relacionadas con el evento bajo estudio. Ejemplos de covariantes incluyen variables demográficas como la edad o el sexo; indicadores de laboratorio, como el nivel de bilirrubina o la presión arterial; y otros factores, como la duración de exposición a una terapia anterior o la naturaleza específica de una enfermedad. Estas covariantes, al ser consideradas, permiten obtener resultados más precisos y confiables en el análisis.(9)
El modelo de Cox establece la relación entre la distribución del tiempo de fallo y las covariantes, donde las covariantes tienen un efecto multiplicativo en la función de riesgo.
En muchos estudios epidemiológicos en los que se compara una población expuesta a cierta condición, por ejemplo asbestos, con otra no expuesta, la tasa de riesgos o hazard ratio, es a menudo la única medida de efecto que se considera y se interpreta como la razón entre la tasa de incidencia del grupo expuesto y la tasa de incidencia del grupo no expuesto.
Una de las aplicaciones más importantes del modelo de riesgos proporcionales se da en un ensayo clínico en el que se comparan las supervivencias de dos poblaciones. Si las funciones de riesgo para cada población son \(λ_0(t)\) y \(λ_1(t)\), el modelo establece \(λ_1(t) = e^β λ_0(t)\), y las funciones de supervivencia están relacionadas mediante \(S_1(t) = S_0(t)e^β\). Si se introducen otras covariantes, el modelo de Cox permite obtener una estimación del efecto del tratamiento ajustado por la presencia de las mismas. La inclusión de una covariante con alto poder predictivo, además de la variable tratamiento, añade ventajas adicionales.
En esta práctica se utiliza un modelo de Cox para evaluar la relación entre el tiempo total de intubación, la variable tratamiento (Pentax AWS o Macintosh), y las covariables estado físico (asa) y mallampati.
# Crear un objeto de supervivencia
surv_obj <- Surv(total_intubation_time, intubation_overall_S_F)
# Crear un modelo de cox
modelo_cox <- coxph(surv_obj ~ Randomization + asa + Mallampati, data = laryngoscope)
summary(modelo_cox)
#> Call:
#> coxph(formula = surv_obj ~ Randomization + asa + Mallampati,
#> data = laryngoscope)
#>
#> n= 98, number of events= 94
#> (1 observation deleted due to missingness)
#>
#> coef exp(coef) se(coef) z Pr(>|z|)
#> Randomization -1.06738 0.34391 0.22401 -4.765 1.89e-06 ***
#> asa -0.45267 0.63593 0.23910 -1.893 0.0583 .
#> Mallampati 0.02296 1.02323 0.12130 0.189 0.8498
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> exp(coef) exp(-coef) lower .95 upper .95
#> Randomization 0.3439 2.9078 0.2217 0.5335
#> asa 0.6359 1.5725 0.3980 1.0161
#> Mallampati 1.0232 0.9773 0.8067 1.2979
#>
#> Concordance= 0.684 (se = 0.027 )
#> Likelihood ratio test= 23.48 on 3 df, p=3e-05
#> Wald test = 22.91 on 3 df, p=4e-05
#> Score (logrank) test = 24.58 on 3 df, p=2e-05
# Obtener resultados del modelo en una tabla
tbl_cox <- tbl_regression(modelo_cox, exponentiate = TRUE, label= Randomization ~ "Tiempo total de intubación")
tbl_cox | Characteristic | HR1 | 95% CI1 | p-value |
|---|---|---|---|
| Tiempo total de intubación | 0.34 | 0.22, 0.53 | <0.001 |
| asa | 0.64 | 0.40, 1.02 | 0.058 |
| Mallampati | 1.02 | 0.81, 1.30 | 0.8 |
| 1 HR = Hazard Ratio, CI = Confidence Interval | |||
# Obtener resultados solo para la variable de tratamiento
tbl_efecto_tratamiento <- tbl_cox %>%
modify_table_body(~.x[.x$variable == "Randomization", ])
tbl_efecto_tratamiento| Characteristic | HR1 | 95% CI1 | p-value |
|---|---|---|---|
| Tiempo total de intubación | 0.34 | 0.22, 0.53 | <0.001 |
| 1 HR = Hazard Ratio, CI = Confidence Interval | |||
# Tabla de estadísticas descriptivas
tbl_descriptivas_tiem <- laryngoscope %>%
select(total_intubation_time, Randomization) %>%
mutate(Randomization = factor(Randomization, labels = c("Macintosh", "Pentax_AWS"))) %>%
tbl_summary(by = Randomization,
statistic = total_intubation_time ~ "{median} ({p25}, {p75})",
label = list(total_intubation_time = "Tiempo total de intubación"))
tbl_descriptivas_tiem| Characteristic | Macintosh N = 491 |
Pentax_AWS N = 501 |
|---|---|---|
| Tiempo total de intubación | 26 (22, 29) | 38 (31, 50) |
| 1 Median (Q1, Q3) | ||
# Extracción de valores del modelo para tabla resumen de resultados
tiem_estadi <- as_tibble(tbl_descriptivas_tiem$table_body)
pentax_aws_stats_tiem <- tiem_estadi$stat_2
macintosh_stats_tiem <- tiem_estadi$stat_1
modelo_tiem <- as_tibble(tbl_efecto_tratamiento$table_body)
oddR_tiem <- round(modelo_tiem$estimate,2)
ConfLo_tiem <- round(modelo_tiem$conf.low,2)
ConfSu_tiem <- round(modelo_tiem$conf.high,2)
pvalue_tiem <- modelo_tiem$p.value
p_value_tiem <- if (pvalue_tiem < 0.001) "<0.001" else round(value, 3)El código de arriba realiza un análisis de supervivencia utilizando el modelo de riesgos proporcionales de Cox. Antes de interpretar los resultados, es importante entender el contexto y las variables:
total_intubation_time: Representa el tiempo que se tarda en un ensayo clínico en entubar a una persona.
intubation_overall_S_F: Es un indicador de censura. Si se logró entubar a la persona, tiene un valor de 1 (evento ocurrido), y si no, un valor de 0 (censurado).
Randomization: Es una variable que indica el grupo de tratamiento al que estaba asignado el paciente.
asa y Mallampati: Son covariables, es decir, variables que se consideran en el modelo para ajustar el efecto de la variable principal (Randomization).
La función coxph se utiliza para ajustar el modelo de Cox, y tbl_regression se utiliza para obtener una tabla con los resultados del modelo.
El Hazard Ratio (HR) para la variable Randomization se obtiene de la tabla tbl_efecto_tratamiento la cual extrae los resultados para la variable principal (Randomization).
Interpretación del Hazard Ratio (HR) para Randomization:
El Hazard Ratio de 0.34 indica que la riesgo de intubación en el grupo Pentax AWS es 0.34 veces (o 34% del riesgo) en comparación con el grupo de referencia, después de ajustar por las covariables asa y Mallampati.
Dado que Randomization es una variable binaria que indica si un paciente recibió el tratamiento Pentax AWS (valor = 1) o el tratamiento Macintosh (valor = 0), y el HR para Randomization es 0.34, entonces esto sugiere que los pacientes que recibieron el tratamiento Pentax AWS tienen una posibilidad 66% menor de ser intubados en comparación con aquellos que recibieron el tratamiento Macintosh, manteniendo constantes las covariables asa y Mallampati.
Es importante recordar que, además del valor del HR, se debe considerar el intervalo de confianza asociado y el valor \(p\). Si el intervalo de confianza no incluye el valor 1 y el valor \(p\) es menor que 0.05 (o el nivel de significancia que hayas elegido), entonces podemos decir que la diferencia es estadísticamente significativa.
final_results <- data.frame(
`Variables respuesta` = c("Respuesta primaria", "Tiempo de intubacion total", "Respuesta secundaria", "Nivel de dificultad de intubacion", " ","Exito de intubacion en el primer intento", "Exito de intubacion", "Numero de intentos de intubacion", "1", "2","3","Vista de la glotis", "Sangrado", "Dolor de garganta", "Ninguno","Leve","Moderado","Severo"),
`Pentax AWS` = c(" ", pentax_aws_stats_tiem, " ", pentax_aws_stats_nivel, " ", pentax_aws_stats_exito1, pentax_aws_stats_exitoGe, " ", pentax_aws_stats_intentos_l1, pentax_aws_stats_intentos_l2, pentax_aws_stats_intentos_l3, pentax_aws_stats_glotis, pentax_aws_stats_sangrado, " ",pentax_aws_stats_dolor_l1, pentax_aws_stats_dolor_l2, pentax_aws_stats_dolor_l3, pentax_aws_stats_dolor_l4),
`Macintosh` = c(" ", macintosh_stats_tiem, " ", macintosh_stats_nivel, " ", macintosh_stats_exito1, macintosh_stats_exitoGe, " ", macintosh_stats_intentos_l1, macintosh_stats_intentos_l2, macintosh_stats_intentos_l3, macintosh_stats_glotis, macintosh_stats_sangrado , " ", macintosh_stats_dolor_l1, macintosh_stats_dolor_l2, macintosh_stats_dolor_l3, macintosh_stats_dolor_l4),
`Efecto del tratamiento(95% IC)` = c("Hazard ratio", paste(oddR_tiem, " (", ConfLo_tiem, "-", ConfSu_tiem, ")", sep = ""), "Diferencia de media", " " ,"Odds ratio",paste(oddR_exito1, " (", ConfLo_exito1, "-", ConfSu_exito1, ")", sep = ""), "Inestimable", "N/A"," "," "," ", paste(oddR_glotis, " (", ConfLo_glotis, "-", ConfSu_glotis, ")", sep = ""), "Inestimable", paste(oddR_dolor, " (", ConfLo_dolor, "-", ConfSu_dolor, ")", sep = ""), " ", " ", " ", " "),
`Valor p` = c(" ", p_value_tiem, " ", p_value_nivel, " ",p_value_exito1, valorp_exitoGe, valorp_intentos, " ", " ", " ", p_value_glotis, valorp_sangrado, valor_p_dolorg, " ", " ", " ", " ")
)
# Print the table
final_results %>%
kable() %>%
kable_styling(full_width = F)| Variables.respuesta | Pentax.AWS | Macintosh | Efecto.del.tratamiento.95..IC. | Valor.p |
|---|---|---|---|---|
| Respuesta primaria | Hazard ratio | |||
| Tiempo de intubacion total | 38 (31, 50) | 26 (22, 29) | 0.34 (0.22-0.53) | <0.001 |
| Respuesta secundaria | Diferencia de media | |||
| Nivel de dificultad de intubacion | 52 ± 31 | 38 ± 28 | 0.02 | |
| Odds ratio | ||||
| Exito de intubacion en el primer intento | 43 (86%) | 45 (92%) | 0.54 (0.13-1.94) | 0.36 |
| Exito de intubacion | 46 (92%) | 49 (100%) | Inestimable | 0.12 |
| Numero de intentos de intubacion | N/A | 0.48 | ||
| 1 | 44 (88%) | 45 (92%) | ||
| 2 | 3 (6.0%) | 4 (8.2%) | ||
| 3 | 3 (6.0%) | 0 (0%) | ||
| Vista de la glotis | 43 (86%) | 38 (78%) | 1.7 (0.6-5.1) | 0.32 |
| Sangrado | 2 (4.0%) | 0 (0%) | Inestimable | 0.49 |
| Dolor de garganta | 1.07 (0.46-2.52) | 0.07 | ||
| Ninguno | 34 (68%) | 32 (67%) | ||
| Leve | 9 (18%) | 12 (25%) | ||
| Moderado | 5 (10%) | 3 (6.3%) | ||
| Severo | 2 (4.0%) | 1 (2.1%) |
Efectividad y Tiempo de Intubación: Se observó que el grupo que utilizó Pentax AWS obtuvo un éxito de intubación del 86% en el primer intento, aumentando significativamente al 92% en el segundo intento. En comparación, el grupo Macintosh logró un éxito del 92% en el primer intento, alcanzando un 100% en el segundo intento. Además, se encontró que el tiempo promedio de intubación fue de 38 segundos para Pentax AWS y de 26 segundos para Macintosh. Estos resultados coinciden con los datos presentados en el artículo original.
Análisis de Riesgo: Los resultados principales se centran en el tiempo de intubación y el análisis de riesgo. En este sentido, se calculó un Hazard Ratio (HR) de 0.35 con un intervalo de confianza del 95% (0.23 a 0.55) para el tiempo de intubación. Esto implica que el grupo Macintosh tiene un riesgo significativamente menor en comparación con el grupo de estudio Pentax AWS. Este valor es respaldado por un valor de \(p\) menor a 0.001, lo que confirma la significancia estadística de la asociación.
Dificultad de Intubación: La dificultad de intubación se evaluó mediante la comparación de los grupos Pentax AWS y Macintosh. Se obtuvo un valor para Macintosh de media de 35 mientras que para el grupo Pentax AWS se tuvo un valor de 53. En el artículo reportan un valor de 40 y 52 respectivamente para los grupos. Se encontró que el grupo Pentax AWS experimentó una mayor dificultad en comparación con el grupo Macintosh, con un valor de \(p\) de 0.02. Este resultado es estadísticamente significativo y respalda las conclusiones del artículo original, aunque se encontraran valores ligeramente diferentes.
Al examinar los grupos de Pentax AWS y Macintosh, se observó que el 86% de los pacientes en el grupo de Pentax AWS presentaron una vista “buena” de la glotis, en comparación con el 78% en el grupo Macintosh. El cálculo de un valor de p de 0.32 para esta comparación sugiere que la diferencia en la dificultad de intubación, evaluada a través del parámetro de Cormack-Lehane, no es estadísticamente significativa entre los grupos. Los resultados obtenidos coinciden con las conclusiones reportadas en el artículo original.
No se encontraron diferencias significativas entre los grupos en el número de intentos, la presencia de sangrado y dolor de garganta, con valores de \(p\) de 0.48, 0.49 y 0.07, respectivamente. Si bien estos valores difieren de los reportados en el artículo, es importante notar que en ambos casos los valores de \(p\) obtenidos también son mayores a 0.05, indicando que obtuvimos tendencias similares.
Con nuestra revisión de los cálculos del artículo “Comparación aleatoria entre el videolaringoscopio Pentax AWS y el laringoscopio Macintosh en pacientes con obesidad mórbida” reproducimos, en su mayoría, las cifras publicados, las tendencias y conclusiones generales se mantuvieron. Estos resultados refuerzan la importancia de elegir el dispositivo adecuado en función de la situación clínica, al tiempo que subrayan la relevancia de la replicabilidad en la investigación médica.
El software estadístico R fue una herramienta efectiva, valiosa y suficiente para la realización de análisis en ciencias biologícas y de la salud, dado que cuenta con gran cantidad de librerías pertinentes para análisis estadístico y bioestadístico. Los resultados obtenidos en este ejercicio respaldan las conclusiones previas y destacan la utilidad de R en este tipo de investigaciones.
Para trabajos futuros se pretende desarrollar aún más los métodos estadísticos, hacer la validación de supuestos, investigar la potencia estadística de las pruebas y ampliar la revisión de conceptos médicos (por ejemplo ASA), que con un poco de esfuerzo adicional el lector puede revisar en la intenet.
Consideramos que nuestro objetivo principal y secundario fueron cumplidos, es decir, los profesionistas y estudiantes de ciencias biologícas y médicas cuentan con un ejemplo de modelación estadística en ciencias de la salud usando R.
Entrada de BibTeX para usarios de Latex:
@Article{bioestadis_R, author = {Humberto Martínez Bautista, Ricardo A. Rodriguez Ojeda and María de Lourdes Delgadillo Hurtado}, title = {Una comprensiva revisión estadística del artículo: Comparación aleatoria entre el video-laringoscopio Pentax AWS y el laringoscopio Macintosh en pacientes con obesidad mórbida}
| Variable | Etiqueta | Unidad | Codificación |
|---|---|---|---|
| Edad | Edad | Años | |
| Sexo | Sexo | Femenino,Masculino | |
| Estado_fisico | Estado físico, asignado por la Sociedad Americana de Anestesiólogos | I= Un paciente sano normal; II = Un paciente con enfermedad sistémica leve; III = Un paciente con enfermedad sistémica grave; IV = Un paciente con enfermedad sistémica grave que es una amenaza constante para la vida | |
| IMC | Indice de masa corporal | kg/m2 | |
| Mallampati | Escala para predecir la dificultad de intubación traqueal | ||
| Grupo | A que grupo pertenece el paciente | I = Las amígdalas, la úvula y el paladar blando del paciente son completamente visibles, II = El paladar duro y blando, las amígdalas superiores y la úvula son visibles, III = El paladar duro y blando son visibles, la úvula está algo oscurecida, IV = Solo el paladar duro es visible | |
| Tiempo_1_intento | Tiempo de intubación en el primer intento | Segundos | Pentax AWS. Macintosh hoja #4 |
| Exito_1_intento | Intubación exitosa en el primer intento | ||
| Tiempo_2_intento | Tiempo de intubación en el segundo intento | Segundos | Si, No |
| Metodo_2_intento | Segundo intento realizado con el laringoscopio asignado | ||
| Exito_2_intento | Éxito en el segundo intento | Si, No | |
| Tiempo_3_intento | Tiempo de intubación en el tercer intento | Segundos | Si, No |
| Metodo_3_intento | Tercer intento realizado con el laringoscopio asignado | ||
| Exito_3_intento | Éxito en el tercer intento | Si, No | |
| Num_intentos | Número de intentos realizados | Número de intentos al operar | Si, No |
| Fracasos | Número de fracasos | Número de intentos al operar | |
| Tiempo_total_intubacion | Tiempo total de intubación | ||
| Exito_intubacion | Intubación exitosa | ||
| Sangrado | Presencia de sangrado | Si, No | |
| Nivel_dificultad | Dificultad en la intubación traqueal | Si, No | |
| Dolor_garganta | Severidad en el dolor de garganta | 0 = extremadamente facil, 100 = extremadamente dificil | |
| Vista_glotis | Visibilidad de la glotis en escala Cormack-lehane | ||
| Edad | Edad | Años | Bueno, Malo |
xfun::session_info()
#> R version 4.4.1 (2024-06-14)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Sonoma 14.6
#>
#> Locale: en_US.UTF-8 / en_US.UTF-8 / en_US.UTF-8 / C / en_US.UTF-8 / en_US.UTF-8
#>
#> Package version:
#> abind_1.4-8 askpass_1.2.1 assertthat_0.2.1
#> backports_1.5.0 base_4.4.1 base64enc_0.1-3
#> bigD_0.2.0 bit_4.5.0 bit64_4.5.2
#> bitops_1.0.9 blob_1.2.4 bookdown_0.40
#> boot_1.3-30 broom_1.0.7 broom.helpers_1.17.0
#> bslib_0.8.0 cachem_1.1.0 callr_3.7.6
#> car_3.1-3 carData_3.0-5 cards_0.3.0
#> cardx_0.2.1 cellranger_1.1.0 checkmate_2.3.2
#> class_7.3-22 cli_3.6.3 clipr_0.8.0
#> cluster_2.1.6 colorspace_2.1-1 commonmark_1.9.2
#> compiler_4.4.1 conflicted_1.2.0 corrplot_0.94
#> cowplot_1.1.3 cpp11_0.5.0 crayon_1.5.3
#> curl_5.2.3 data.table_1.16.0 DBI_1.2.3
#> dbplyr_2.5.0 Deriv_4.1.6 DescTools_0.99.57
#> digest_0.6.37 doBy_4.6.22 dplyr_1.1.4
#> dtplyr_1.3.1 e1071_1.7-16 energy_1.7-12
#> evaluate_1.0.0 Exact_3.3 exactRankTests_0.8.35
#> expm_1.0-0 fansi_1.0.6 farver_2.1.2
#> fastmap_1.2.0 fontawesome_0.5.2 forcats_1.0.0
#> foreign_0.8-86 Formula_1.2-5 fs_1.6.4
#> gargle_1.5.2 gdata_3.0.0 generics_0.1.3
#> ggplot2_3.5.1 ggpubr_0.6.0 ggrepel_0.9.6
#> ggsci_3.2.0 ggsignif_0.6.4 ggtext_0.1.2
#> gld_2.6.6 glue_1.8.0 gmodels_2.19.1
#> googledrive_2.1.1 googlesheets4_1.1.1 GPArotation_2024.3.1
#> graphics_4.4.1 grDevices_4.4.1 grid_4.4.1
#> gridExtra_2.3 gridtext_0.1.5 gsl_2.1-8
#> gt_0.11.1 gtable_0.3.5 gtools_3.9.5
#> gtsummary_2.0.3 haven_2.5.4 highr_0.11
#> Hmisc_5.1-3 hms_1.1.3 htmlTable_2.4.3
#> htmltools_0.5.8.1 htmlwidgets_1.6.4 httr_1.4.7
#> ids_1.0.1 isoband_0.2.7 janitor_2.2.0
#> jpeg_0.1.10 jquerylib_0.1.4 jsonlite_1.8.9
#> juicyjuice_0.1.0 kableExtra_1.4.0 km.ci_0.5-6
#> KMsurv_0.1-5 knitr_1.48 labeling_0.4.3
#> labelled_2.13.0 lattice_0.22-6 lifecycle_1.0.4
#> lme4_1.1.35.5 lmom_3.2 lubridate_1.9.3
#> magrittr_2.0.3 markdown_1.13 MASS_7.3-60.2
#> Matrix_1.7-0 MatrixModels_0.5.3 maxstat_0.7.25
#> medicaldata_0.2.0 memoise_2.0.1 methods_4.4.1
#> mgcv_1.9.1 microbenchmark_1.5.0 mime_0.12
#> minqa_1.2.8 mnormt_2.1.1 modelr_0.1.11
#> moments_0.14.1 munsell_0.5.1 MVN_5.9
#> mvtnorm_1.3-1 nlme_3.1-164 nloptr_2.1.1
#> nnet_7.3-19 nortest_1.0-4 numDeriv_2016.8.1.1
#> openssl_2.2.2 parallel_4.4.1 pbkrtest_0.5.3
#> pillar_1.9.0 pkgconfig_2.0.3 plyr_1.8.9
#> png_0.1.8 polynom_1.4.1 prettyunits_1.2.0
#> processx_3.8.4 progress_1.2.3 proxy_0.4-27
#> ps_1.8.0 psych_2.4.6.26 purrr_1.0.2
#> quantreg_5.98 R6_2.5.1 ragg_1.3.3
#> rappdirs_0.3.3 RColorBrewer_1.1-3 Rcpp_1.0.13
#> RcppEigen_0.3.4.0.2 reactable_0.4.4 reactR_0.6.1
#> readr_2.1.5 readxl_1.4.3 rematch_2.0.0
#> rematch2_2.1.2 reprex_2.1.1 rlang_1.1.4
#> rmarkdown_2.28 rootSolve_1.8.2.4 rpart_4.1.23
#> rstatix_0.7.2 rstudioapi_0.16.0 rvest_1.0.4
#> sass_0.4.9 scales_1.3.0 selectr_0.4.2
#> smd_0.7.0 snakecase_0.11.1 SparseM_1.84.2
#> splines_4.4.1 stats_4.4.1 stringi_1.8.4
#> stringr_1.5.1 survival_3.6-4 survminer_0.4.9
#> survMisc_0.5.6 svglite_2.1.3 sys_3.4.3
#> systemfonts_1.1.0 textshaping_0.4.0 tibble_3.2.1
#> tidyr_1.3.1 tidyselect_1.2.1 tidyverse_2.0.0
#> timechange_0.3.0 tinytex_0.53 tools_4.4.1
#> tzdb_0.4.0 utf8_1.2.4 utils_4.4.1
#> uuid_1.2.1 V8_5.0.1 vctrs_0.6.5
#> vembedr_0.1.5 viridis_0.6.5 viridisLite_0.4.2
#> vroom_1.6.5 withr_3.0.1 xfun_0.48
#> xml2_1.3.6 xtable_1.8-4 yaml_2.3.10
#> zoo_1.8-12