Se ha diseñado un ensayo clínico aleatorizado, doble-ciego y controlado con placebo, para estudiar el efecto de dos alternativas terapéuticas en el control de la hipertensión arterial. Se han reclutado 100 pacientes hipertensos y estos han sido distribuidos aleatoriamente en tres grupos de tratamiento. A uno de los grupos (control) se le administró un placebo, a otro grupo se le administró un inhibidor de la enzima conversora de la angiotensina (IECA) y al otro un tratamiento combinado de un diurético y un Antagonista del Calcio. Las variables respuesta final fueron las presiones arteriales sistólica y diastólica. Los datos con las claves de aleatorización han sido introducidos en una base de datos que reside en la central de aleatorización, mientras que los datos clínicos han sido archivados en dos archivos distintos, uno para cada uno de los dos centros participantes en el estudio. Las variables almacenadas en estos archivos clínicos son las siguientes:
El archivo de claves de aleatorización contiene sólo dos variables:
Importe las dos bases de datos y construye un solo data frame con las dos bases de datos:
Descargamos nuestras bases de datos de los hospitales A y B:
library(readxl)
hospitalA <- read_excel("C:/Users/Tatiana/Downloads/hospitalA.xlsm")
hospitalB <- read_excel("C:/Users/Tatiana/Downloads/hospitalB.xlsm")
Unimos ambas bases de datos utilizando la función
merge:
hospitalAB <- merge(hospitalA, hospitalB, by=, all=TRUE)
library(DT)
datatable(hospitalAB)
Importe las claves de aleatorización y agrega a la base de datos el fármaco administrado a cada paciente:
Primero importamos la base de datos correspondiente:
library(readxl)
claves <- read_excel("C:/Users/Tatiana/Downloads/claves.xlsm")
Ahora añadimos a nuestra base de datos la variable
"FARMACO":
Data<-merge(hospitalAB, claves, by=, all=TRUE)
library(DT)
datatable(Data)
Explore los datos y haga una pequeña explicación de lo que observas:
Para un resumen bastante completo de nuestra base de datos,
utilizamos la función skim de la librería
skimr:
skimr::skim(Data)
| Name | Data |
| Number of rows | 100 |
| Number of columns | 13 |
| _______________________ | |
| Column type frequency: | |
| character | 2 |
| numeric | 9 |
| POSIXct | 2 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| NOMBRE | 0 | 1 | 3 | 3 | 0 | 98 | 0 |
| FARMACO | 0 | 1 | 4 | 26 | 0 | 3 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| CLAVE | 0 | 1 | 50.50 | 29.01 | 1 | 25.75 | 50.5 | 75.25 | 100 | ▇▇▇▇▇ |
| SEXO | 0 | 1 | 0.46 | 0.50 | 0 | 0.00 | 0.0 | 1.00 | 1 | ▇▁▁▁▇ |
| ALTURA | 0 | 1 | 167.78 | 10.38 | 146 | 159.00 | 167.0 | 175.00 | 194 | ▂▇▇▅▂ |
| PESO | 0 | 1 | 73.33 | 16.65 | 39 | 62.00 | 73.0 | 85.00 | 116 | ▃▇▇▅▂ |
| ESTRES | 0 | 1 | 24.38 | 10.46 | 4 | 17.00 | 24.0 | 31.25 | 65 | ▅▇▆▁▁ |
| PAD INI | 0 | 1 | 88.42 | 8.02 | 70 | 82.00 | 89.0 | 94.00 | 108 | ▂▇▇▇▂ |
| PAD FIN | 0 | 1 | 86.66 | 18.01 | 42 | 73.75 | 87.0 | 102.00 | 135 | ▂▇▇▇▁ |
| PAS INI | 0 | 1 | 152.52 | 15.13 | 108 | 143.00 | 152.0 | 162.00 | 192 | ▁▃▇▆▁ |
| PAS FIN | 0 | 1 | 149.86 | 16.63 | 114 | 139.75 | 151.5 | 161.00 | 193 | ▃▆▇▃▁ |
Variable type: POSIXct
| skim_variable | n_missing | complete_rate | min | max | median | n_unique |
|---|---|---|---|---|---|---|
| F NACIM | 0 | 1 | 1939-02-25 | 1971-09-27 | 1955-11-21 00:00:00 | 100 |
| F INCLUS | 0 | 1 | 1998-01-11 | 2000-11-18 | 1999-06-20 12:00:00 | 96 |
Estamos trabajando con la base de datos “Data”, la cuál cuenta con 100 observaciones representadas por los pacientes hipertensos y 13 variables, reconocidendo a 4 de ellas de tipo “caracter” y 9 de tipo “numérica”, lo que habría que modificar.
En nuestra base de datos, no encontramos ningún valor faltante.
Podemos ver que la altura promedio de los pacientes es de 167.78, el peso promedio de los pacientes es de 73.33, el nivel de estres promedio es de 24.38.
Basándonos en los promedios de la presión diastólica y sistólica, tanto al principio como al final, podemos observar una disminucion en ambos casos. Los promedios iniciales y finales de la presión diastólica pasaron de 88.42 a 86.66, mientras que los promedios iniciales y finales de la presión sistólica pasaron de 152.52 a 149.86. Esto significa que, en promedio, la presión arterial, tanto diastólica como sistólica, disminuyó desde el inicio hasta el final del período experimental.
Tras analizar los histogramas de nuestras variables cuantitativas, la mayoría parece cumplir con una distribución normal, a excepción de la variable “ESTRES”, la cual no podemos confirmar su normalidad a simple vista debido a la forma de su histograma.
Realice los cambios necesarios en los nombres de las columnas. Además, revise el tipo de dato de cada columna y haga los ajustes necesarios:
Para estandarizar y hacer únicos los nombres de nuestras variables,
utilizamos la función clean_names del paquete
janitor:
Data <- Data %>%
janitor::clean_names()
names(Data)
## [1] "clave" "nombre" "f_nacim" "f_inclus" "sexo" "altura"
## [7] "peso" "estres" "pad_ini" "pad_fin" "pas_ini" "pas_fin"
## [13] "farmaco"
Para revisar el tipo de datos de nuestras variables utilizamos la
función str:
str(Data)
## 'data.frame': 100 obs. of 13 variables:
## $ clave : num 1 2 3 4 5 6 7 8 9 10 ...
## $ nombre : chr "SGL" "JCZ" "APZ" "NDG" ...
## $ f_nacim : POSIXct, format: "1941-09-08" "1957-07-10" ...
## $ f_inclus: POSIXct, format: "1998-07-13" "1998-05-09" ...
## $ sexo : num 1 1 0 0 1 0 1 0 1 0 ...
## $ altura : num 165 154 156 181 184 179 159 153 172 154 ...
## $ peso : num 78 74 81 82 78 80 60 70 57 54 ...
## $ estres : num 42 30 21 33 36 22 31 12 21 24 ...
## $ pad_ini : num 78 95 93 86 89 74 94 94 74 89 ...
## $ pad_fin : num 104 114 102 91 94 99 95 79 64 87 ...
## $ pas_ini : num 176 162 141 162 165 141 168 133 149 147 ...
## $ pas_fin : num 175 160 150 161 162 148 152 143 135 155 ...
## $ farmaco : chr "Ca Antagonista + Diuretico" "Ca Antagonista + Diuretico" "Placebo" "Ca Antagonista + Diuretico" ...
Tenemos que modificar las variables “sexo”, “farmaco”, “f_nacim” y “f_inclus”:
# Modificación para variable "sexo"
Data$sexo <- as.factor(Data$sexo)
levels(Data$sexo) <- c("Hombre", "Mujer")
# Modificación para variable "farmaco"
Data$farmaco <- as.factor(Data$farmaco)
# Modificaciones para variables "f_nacim" y "f_inclus"
library(dplyr)
Data <- Data %>%
mutate(f_nacim = as.Date(f_nacim, format = "%d/%m/%Y"))
Data <- Data %>%
mutate(f_nacim = as.Date(f_inclus, format = "%d/%m/%Y"))
# Para ver cambios
str(Data)
## 'data.frame': 100 obs. of 13 variables:
## $ clave : num 1 2 3 4 5 6 7 8 9 10 ...
## $ nombre : chr "SGL" "JCZ" "APZ" "NDG" ...
## $ f_nacim : Date, format: "1998-07-13" "1998-05-09" ...
## $ f_inclus: POSIXct, format: "1998-07-13" "1998-05-09" ...
## $ sexo : Factor w/ 2 levels "Hombre","Mujer": 2 2 1 1 2 1 2 1 2 1 ...
## $ altura : num 165 154 156 181 184 179 159 153 172 154 ...
## $ peso : num 78 74 81 82 78 80 60 70 57 54 ...
## $ estres : num 42 30 21 33 36 22 31 12 21 24 ...
## $ pad_ini : num 78 95 93 86 89 74 94 94 74 89 ...
## $ pad_fin : num 104 114 102 91 94 99 95 79 64 87 ...
## $ pas_ini : num 176 162 141 162 165 141 168 133 149 147 ...
## $ pas_fin : num 175 160 150 161 162 148 152 143 135 155 ...
## $ farmaco : Factor w/ 3 levels "Ca Antagonista + Diuretico",..: 1 1 3 1 1 3 2 3 2 3 ...
Crea dos nuevas variables con el nombre que consideres para analizar la evolución de la presión arterial diastólica y sistólica, respectivamente:
Para analizar cómo cambia la presión arterial diastólica y sistólica
en nuestros pacientes, creamos una nueva variable para cada una
utilizando la función mutate. Calculamos la diferencia
entre la presión final y la presión inicial para ambos tipos de presión
arterial en los pacientes:
Data <- mutate(Data,evo_pad=pad_fin-pad_ini)
Data <- mutate(Data,evo_pas=pas_fin-pas_ini)
library(DT)
datatable(Data)
Crea dos nuevas variables que indiquen si aumentó o disminuyó la presión arterial diastólica o sistólica, respectivamente:
Para crear esta nueva variable que refleje si la presión arterial diastólica o sistólica ha experimentado un aumento o una disminución, implementamos la función mutate en R, utilizando como fórmula los vectores previamente creados, y dividiéndolos entre valores positivos y negativos:
# Nuevas variables:
Data <- mutate(Data, camb_pad=ifelse(evo_pad<0, "Disminuyo", "Aumento"))
Data <- mutate(Data, camb_pas=ifelse(evo_pas<0, "Disminuyo", "Aumento"))
# Convertirlas tipo factor:
Data$camb_pad <- as.factor(Data$camb_pad)
Data$camb_pas <- as.factor(Data$camb_pas)
library(DT)
datatable(Data)
Crea tablas resúmenes por grupo para hombres y mujeres. ¿Qué puedes concluir?:
Promedio de la evolución de ambos tipos de presión arterial para hombres:
resumen_hombres <-Data %>%
filter(sexo=="Hombre") %>%
summarise(mean_evo_pad=mean(evo_pad),
mean_evo_pas=mean(evo_pas))
head(resumen_hombres)
## mean_evo_pad mean_evo_pas
## 1 -2.907407 -2.537037
Promedio de la evolución de ambos tipos de presión arterial para mujeres:
resumen_mujeres <-Data %>%
filter(sexo=="Mujer") %>%
summarise(mean_evo_pad=mean(evo_pad),
mean_evo_pas=mean(evo_pas))
head(resumen_mujeres)
## mean_evo_pad mean_evo_pas
## 1 -0.4130435 -2.804348
Realice gráficas dinámicas de las diferentes variables, donde puedas explicar a grandes rasgos las diferencias que se presentan por grupo. (No es necesario hacer una gráfica por variable):
library(plotly)
plot_ly(Data, x = ~sexo, color = ~camb_pas)
plot_ly(Data, x = ~sexo, color = ~camb_pad)
Podemos observar que tanto hombres como mujeres experimentaron una disminución en la presión arterial sistólica. Sin embargo, en cuanto a la presión arterial diastólica, solo los hombres registraron una reducción significativa, mientras que la mayoría de las mujeres no experimentaron esa disminución.
Queremos ver gráficamente las diferencias existentes entre los grupos de pacientes que se sometieron a tratamientos diferentes, esto con el fin de determinar cuál de los tratamientos terminó siendo el más efectivo:
prop_pas <- sum(Data$camb_pas == "Disminuyo") / length(Data$camb_pas)
prop_pad <- sum(Data$camb_pad == "Disminuyo") / length(Data$camb_pad)
pie <- plot_ly() %>%
add_pie(Data, values = prop_pas, labels = Data$farmaco)
pie
pie1 <- plot_ly() %>%
add_pie(Data, values = prop_pad, labels = Data$farmaco)
pie1
Histogramas múltiples para apreciar y comparar evolución de presión diastólica para cada grupo de personas sometidos a los diferentes tratamientos:
p1 <- filter(Data, farmaco=="Ca Antagonista + Diuretico") %>% select(evo_pad) %>% as.vector()
p2 <- filter(Data, farmaco=="IECA") %>% select(evo_pad) %>% as.vector()
p3 <- filter(Data, farmaco=="Placebo") %>% select(evo_pad) %>% as.vector()
plot_ly(alpha = 0.6) %>%
add_histogram(x=~p1$evo_pad, name = "Ca Antagonista + Diuretico") %>%
add_histogram(x=~p2$evo_pad, name = "IECA") %>%
add_histogram(x=~p3$evo_pad, name = "Placebo") %>%
layout(barmode = "stack", legend = list(orientation = "h", x = 5, y = 5))
Histogramas multiples para apreciar y comparar evolución de presión sistólica para cada grupo de personas sometidos a los diferentes tratamientos:
p11 <- filter(Data, farmaco=="Ca Antagonista + Diuretico") %>% select(evo_pas) %>% as.vector()
p12 <- filter(Data, farmaco=="IECA") %>% select(evo_pas) %>% as.vector()
p13 <- filter(Data, farmaco=="Placebo") %>% select(evo_pas) %>% as.vector()
plot_ly(alpha = 0.6) %>%
add_histogram(x=~p11$evo_pas, name = "Ca Antagonista + Diuretico") %>%
add_histogram(x=~p12$evo_pas, name = "IECA") %>%
add_histogram(x=~p13$evo_pas, name = "Placebo") %>%
layout(barmode = "stack", legend = list(orientation = "h", x = 5, y = 5))
También podemos hacer el mismo análisis mediante un diagrama de dispersión:
plot_ly(Data, x = ~evo_pas, y = ~evo_pad, color = ~farmaco)
Redacta una conclusión general de todos los hallazgos encontrados, donde puedas explicar las diferencias importantes de cada grupo y que se puede concluir sobre el efecto de las dos alternativas terapéuticas en el control de la hipertensión arterial: