Bases de Datos:

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)
Data summary
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

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: