Universidad de Puerto Rico, Recinto de Río Piedras Facultad de Administración de Empresas Instituto de Estadística y Sistemas Computadorizados de Información Minería de Datos
(ESTA5504)
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:
CLAVE: Clave de aleatorización.
NOMBRE: Iniciales del paciente
F NACIM: Fecha de Nacimiento.
F INCLUS: Fecha de inclusión.
SEXO: Sexo (0: Hombre 1: Mujer).
ALTURA: Altura en cm.
PESO: Peso en Kg.
PAD INI: Presión diastólica basal (inicial).
PAD FIN: Presión diastólica final.
PAS INI: Presión sistólica basal (inicial).
PAS FIN: Presión sistólica final.
El archivo de claves de aleatorización contiene solo dos variables. • CLAVE: Clave de aleatorización. • FARMACO: Fármaco administrado (0: Placebo, 1: IECA, 2:Ca Antagonista + diurético).
Importe las dos bases de datos y construye un solo data frame con las dos bases de datos.
hospital_a <- read.csv("hospital_a.csv")
hospital_b <- read.csv("hospital_b.csv")
str(hospital_a)
## 'data.frame': 10 obs. of 12 variables:
## $ CLAVE : int 1 2 3 4 5 6 7 8 9 10
## $ NOMBRE : chr "SGL" "JCZ" "APZ" "NDG" ...
## $ F.NACIM : chr "8/9/1941" "10/7/1957" "18-8-1967" "8/5/1956" ...
## $ F.INCLUS: chr "13-7-1998" "9/5/1998" "1/4/2000" "13-11-1998" ...
## $ SEXO : int 1 1 0 0 1 0 1 0 1 0
## $ ALTURA : int 165 154 156 181 184 179 159 153 172 154
## $ PESO : int 78 74 81 82 78 80 60 70 57 54
## $ ESTRES : int 42 30 21 33 36 22 31 12 21 24
## $ PAD.INI : int 78 95 93 86 89 74 94 94 74 89
## $ PAD.FIN : int 104 114 102 91 94 99 95 79 64 87
## $ PAS.INI : int 176 162 141 162 165 141 168 133 149 147
## $ PAS.FIN : int 175 160 150 161 162 148 152 143 135 155
str(hospital_b)
## 'data.frame': 90 obs. of 12 variables:
## $ CLAVE : int 11 12 13 14 15 16 17 18 19 20 ...
## $ NOMBRE : chr "VSH" "SZS" "JSS" "BMH" ...
## $ F.NACIM : chr "12/15/1965" "3/7/1971" "1/3/1964" "8/16/1941" ...
## $ F.INCLUS: chr "12/6/1999" "2/13/1999" "10/31/1998" "9/16/1999" ...
## $ SEXO : int 0 1 1 0 1 1 0 1 1 1 ...
## $ ALTURA : int 170 154 162 162 173 177 164 175 184 155 ...
## $ PESO : int 59 61 49 77 95 63 85 67 116 51 ...
## $ ESTRES : num 32 20.2 30 26 18 ...
## $ PAD.INI : int 90 92 86 93 81 72 85 84 94 96 ...
## $ PAD.FIN : int 82 102 94 77 77 96 107 111 105 55 ...
## $ PAS.INI : int 161 147 161 152 147 145 157 165 192 126 ...
## $ PAS.FIN : int 148 153 162 151 145 150 165 175 179 114 ...
hosp <- rbind(hospital_a,hospital_b)
str(hosp)
## 'data.frame': 100 obs. of 12 variables:
## $ CLAVE : int 1 2 3 4 5 6 7 8 9 10 ...
## $ NOMBRE : chr "SGL" "JCZ" "APZ" "NDG" ...
## $ F.NACIM : chr "8/9/1941" "10/7/1957" "18-8-1967" "8/5/1956" ...
## $ F.INCLUS: chr "13-7-1998" "9/5/1998" "1/4/2000" "13-11-1998" ...
## $ SEXO : int 1 1 0 0 1 0 1 0 1 0 ...
## $ ALTURA : int 165 154 156 181 184 179 159 153 172 154 ...
## $ PESO : int 78 74 81 82 78 80 60 70 57 54 ...
## $ ESTRES : num 42 30 21 33 36 22 31 12 21 24 ...
## $ PAD.INI : int 78 95 93 86 89 74 94 94 74 89 ...
## $ PAD.FIN : int 104 114 102 91 94 99 95 79 64 87 ...
## $ PAS.INI : int 176 162 141 162 165 141 168 133 149 147 ...
## $ PAS.FIN : int 175 160 150 161 162 148 152 143 135 155 ...
Importamos las bases de datos, y construímos un data frame con las
mismas, el cual llamamos “hosp”. Para asegurarnos de que esté bien hecho
el trabajo, se utilizó la función str(), esta función nos
brindó información sobre la cantidad de observaciones y los primeros
datos, lo que nos ayuda a saber que esté correcto en cantidad y
orden.
Importe las claves de aleatorización y agrega a la base de datos el fármaco administrado a cada paciente.
c_a <- read.csv("claves_aleatorizacion.csv")
hosp <- cbind(hosp,c_a[,2])
Las claves de aleatorización fueron importadas, y de estas agregamos los fármacos administrados a cada paciente a “hosp”.
Explore los datos y haga una pequeña explicación de lo que observas.
head(hosp)
## CLAVE NOMBRE F.NACIM F.INCLUS SEXO ALTURA PESO ESTRES PAD.INI PAD.FIN
## 1 1 SGL 8/9/1941 13-7-1998 1 165 78 42 78 104
## 2 2 JCZ 10/7/1957 9/5/1998 1 154 74 30 95 114
## 3 3 APZ 18-8-1967 1/4/2000 0 156 81 21 93 102
## 4 4 NDG 8/5/1956 13-11-1998 0 181 82 33 86 91
## 5 5 CLO 2/11/1958 24-2-1999 1 184 78 36 89 94
## 6 6 LFZ 13-6-1953 16-3-2000 0 179 80 22 74 99
## PAS.INI PAS.FIN c_a[, 2]
## 1 176 175 Ca Antagonista + Diuretico
## 2 162 160 Ca Antagonista + Diuretico
## 3 141 150 Placebo
## 4 162 161 Ca Antagonista + Diuretico
## 5 165 162 Ca Antagonista + Diuretico
## 6 141 148 Placebo
glimpse(hosp)
## Rows: 100
## Columns: 13
## $ CLAVE <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, …
## $ NOMBRE <chr> "SGL", "JCZ", "APZ", "NDG", "CLO", "LFZ", "OAR", "SGH", "ZL…
## $ F.NACIM <chr> "8/9/1941", "10/7/1957", "18-8-1967", "8/5/1956", "2/11/195…
## $ F.INCLUS <chr> "13-7-1998", "9/5/1998", "1/4/2000", "13-11-1998", "24-2-19…
## $ SEXO <int> 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1,…
## $ ALTURA <int> 165, 154, 156, 181, 184, 179, 159, 153, 172, 154, 170, 154,…
## $ PESO <int> 78, 74, 81, 82, 78, 80, 60, 70, 57, 54, 59, 61, 49, 77, 95,…
## $ ESTRES <dbl> 42.00, 30.00, 21.00, 33.00, 36.00, 22.00, 31.00, 12.00, 21.…
## $ PAD.INI <int> 78, 95, 93, 86, 89, 74, 94, 94, 74, 89, 90, 92, 86, 93, 81,…
## $ PAD.FIN <int> 104, 114, 102, 91, 94, 99, 95, 79, 64, 87, 82, 102, 94, 77,…
## $ PAS.INI <int> 176, 162, 141, 162, 165, 141, 168, 133, 149, 147, 161, 147,…
## $ PAS.FIN <int> 175, 160, 150, 161, 162, 148, 152, 143, 135, 155, 148, 153,…
## $ `c_a[, 2]` <chr> "Ca Antagonista + Diuretico", "Ca Antagonista + Diuretico",…
Tenemos una base de datos de 100 filas y 13 columnas que contiene la información de hospital a y hospital b, junto a los fármacos utilizados para cada paciente. Donde la última columna no está correctamente identificada, y las fechas no están en el formato correcto.
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.
hosp <- hosp %>%
rename(Fármacos = `c_a[, 2]`) %>%
clean_names() %>%
mutate(f_nacim = as.Date.character(f_nacim, tryFormats = c("%d-%m-%y", "%m/%d/%y")),
f_inclus = as.Date.character(f_inclus, tryFormats = c("%d-%m-%y", "%m/%d/%y")))
Realizamos cambios en los nombres de las columnas, e intentamos realizar ajustes en el tipo de datos de las columnas.
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.
hosp <- hosp %>%
mutate(pad_evo = pad_fin - pad_ini,
pas_evo = pas_ini - pas_fin)
Creamos dos variables, que expresen la evolucion de la presión arterial diastólica y sistólica, respectivamente en forma numérica.
Crea dos nuevas variables que indiquen si aumentó o disminuyó la presión arterial diastólica o sistólica, respectivamente.
hosp <- hosp %>%
mutate(pad_res = case_when(
pad_evo > 0 ~ "+",
pad_evo < 0 ~ "-"),
pas_res = as.factor(case_when(
pas_evo > 0 ~ "+",
pas_evo < 0 ~ "-")))
Se crearon dos nuevas variables que indican si aumentó “+” o disminuyó “-” la presión arterial diastólica o sistólica, respectivamente.
Crea tablas resúmenes por grupo para hombres y mujeres. ¿Qué puedes concluir?
Hombres <- hosp %>%
filter(sexo == 0)
Mujeres <- hosp %>%
filter(sexo == 1)
Hombres
skim(Hombres)
| Name | Hombres |
| Number of rows | 54 |
| Number of columns | 17 |
| _______________________ | |
| Column type frequency: | |
| character | 3 |
| Date | 2 |
| factor | 1 |
| numeric | 11 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| nombre | 0 | 1.00 | 3 | 3 | 0 | 54 | 0 |
| farmacos | 0 | 1.00 | 4 | 26 | 0 | 3 | 0 |
| pad_res | 1 | 0.98 | 1 | 1 | 0 | 2 | 0 |
Variable type: Date
| skim_variable | n_missing | complete_rate | min | max | median | n_unique |
|---|---|---|---|---|---|---|
| f_nacim | 2 | 0.96 | 2019-01-03 | 2019-12-19 | 2019-06-12 | 50 |
| f_inclus | 50 | 0.07 | 2019-10-15 | 2020-03-16 | 2019-11-29 | 4 |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| pas_res | 5 | 0.91 | FALSE | 2 | +: 28, -: 21 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| clave | 0 | 1 | 51.20 | 27.39 | 3 | 29.75 | 50.5 | 73.75 | 100 | ▆▇▇▆▇ |
| sexo | 0 | 1 | 0.00 | 0.00 | 0 | 0.00 | 0.0 | 0.00 | 0 | ▁▁▇▁▁ |
| altura | 0 | 1 | 169.11 | 10.15 | 150 | 162.25 | 167.5 | 176.50 | 194 | ▅▇▆▅▂ |
| peso | 0 | 1 | 75.17 | 17.11 | 39 | 63.00 | 76.0 | 85.75 | 116 | ▂▆▇▃▂ |
| estres | 0 | 1 | 23.15 | 9.11 | 4 | 16.25 | 23.5 | 29.75 | 43 | ▂▆▇▆▂ |
| pad_ini | 0 | 1 | 87.85 | 7.44 | 70 | 82.00 | 88.0 | 94.00 | 105 | ▂▇▇▇▂ |
| pad_fin | 0 | 1 | 84.94 | 18.92 | 42 | 74.00 | 82.5 | 99.00 | 135 | ▂▇▇▆▁ |
| pas_ini | 0 | 1 | 150.80 | 14.38 | 108 | 143.00 | 150.0 | 160.00 | 192 | ▁▃▇▅▁ |
| pas_fin | 0 | 1 | 148.26 | 16.29 | 116 | 136.75 | 150.0 | 158.00 | 193 | ▃▅▇▂▁ |
| pad_evo | 0 | 1 | -2.91 | 20.20 | -44 | -16.75 | -3.5 | 9.00 | 41 | ▂▆▇▃▃ |
| pas_evo | 0 | 1 | 2.54 | 9.21 | -10 | -6.75 | 1.0 | 13.00 | 16 | ▇▃▃▁▇ |
Se tiene observación de 54 hombres, una cantidad mayor de hombres pero no una cantidad significativa, los mismos tienen una altura promedio de 169 cm y un peso promedio de 75 kg. En promedio los hombres disminuyen 2.91 puntos en la evolución de la presión arterial diastólica, y aumentan 2.54 puntos en la sistólica.
Mujeres
skim(Mujeres)
| Name | Mujeres |
| Number of rows | 46 |
| Number of columns | 17 |
| _______________________ | |
| Column type frequency: | |
| character | 3 |
| Date | 2 |
| factor | 1 |
| numeric | 11 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| nombre | 0 | 1.00 | 3 | 3 | 0 | 46 | 0 |
| farmacos | 0 | 1.00 | 4 | 26 | 0 | 3 | 0 |
| pad_res | 2 | 0.96 | 1 | 1 | 0 | 2 | 0 |
Variable type: Date
| skim_variable | n_missing | complete_rate | min | max | median | n_unique |
|---|---|---|---|---|---|---|
| f_nacim | 1 | 0.98 | 2019-01-01 | 2019-12-27 | 2019-06-17 | 43 |
| f_inclus | 42 | 0.09 | 2019-02-24 | 2020-06-21 | 2019-08-01 | 4 |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| pas_res | 3 | 0.93 | FALSE | 2 | +: 27, -: 16 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| clave | 0 | 1 | 49.67 | 31.09 | 1 | 20.25 | 51.0 | 76.75 | 98 | ▇▅▃▆▇ |
| sexo | 0 | 1 | 1.00 | 0.00 | 1 | 1.00 | 1.0 | 1.00 | 1 | ▁▁▇▁▁ |
| altura | 0 | 1 | 166.22 | 10.54 | 146 | 156.50 | 166.5 | 172.75 | 187 | ▃▇▇▆▃ |
| peso | 0 | 1 | 71.17 | 16.01 | 47 | 62.00 | 68.0 | 78.75 | 116 | ▅▇▅▁▁ |
| estres | 0 | 1 | 25.83 | 11.79 | 6 | 17.25 | 27.5 | 32.75 | 65 | ▆▇▇▁▁ |
| pad_ini | 0 | 1 | 89.09 | 8.69 | 72 | 83.25 | 90.0 | 94.00 | 108 | ▅▅▇▅▂ |
| pad_fin | 0 | 1 | 88.67 | 16.85 | 47 | 74.00 | 92.5 | 102.00 | 114 | ▁▅▃▅▇ |
| pas_ini | 0 | 1 | 154.54 | 15.88 | 125 | 145.00 | 156.5 | 165.00 | 192 | ▃▆▇▃▁ |
| pas_fin | 0 | 1 | 151.74 | 17.02 | 114 | 142.00 | 153.0 | 163.50 | 183 | ▃▃▇▇▃ |
| pad_evo | 0 | 1 | -0.41 | 18.05 | -53 | -9.50 | 0.5 | 11.75 | 27 | ▁▂▃▇▅ |
| pas_evo | 0 | 1 | 2.80 | 8.90 | -10 | -5.75 | 1.0 | 12.75 | 17 | ▇▂▆▁▇ |
Se tiene observación de 46 mujeres, una cantidad menor que de hombres pero no una diferencia significativa, las mismos tienen una altura promedio de 162 cm y un peso promedio de 71 kg. En promedio las mujeres disminuyen 0.41 puntos en la evolución de la presión arterial diastólica, y aumentan 2.80 puntos en la sistólica.
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).
ppd <- plot_ly(data = hosp, x = ~farmacos, y = ~pad_evo, color = ~factor(sexo))
ppd
La diferencia o evolución entre la presión diastólica inicial y la final, no son muy diferentes entre los grupos o géneros, sin embargo vemos que ambos grupos se dirigen al mismo camino, pero las gráficas muestran una menor variación por parte del grupo de las mujeres. Debemos destacar que el farmaco que logro disminuir la mayor cantidad de puntos es IECA y el que más logro aumentarlos es el Placebo.
pps <- plot_ly(data = hosp, x = ~farmacos, y = ~pas_evo, color = ~factor(sexo))
pps
Al contrario de la diastólica la presión sistólica disminuye más con el Placebo, aumenta el IECA mientras mantene Ca Antagonista + Diuretico cercano al cero.
hosp$farmacos <- as.factor(hosp$farmacos)
pppd <- hosp %>%
plot_ly(x = ~farmacos, y = ~pad_ini, color = ~factor(sexo), type = "bar", name = "Presión diastólica inicial") %>%
add_trace(y = ~pad_fin, name = "Presión diastólica final")
pppd
hosp$farmacos <- as.factor(hosp$farmacos)
ppps <- hosp %>%
plot_ly(x = ~farmacos, y = ~pas_ini, color = ~factor(sexo), type = "bar", name = "Presión sistólica inicial") %>%
add_trace(y = ~pas_fin, name = "Presión sistólica final")
ppps
Estás gráficas expresan un comportamiento similar entre las dos presiones y los dos grupos tomando en cuenta que hay una mayor cantidad de hombres (verde) que de mujeres (morado) debemos destacar la cantidad que logra tener el grupo de mujeres con el farmaco Ca Antagonista + Diuretico, donde es un número mayor que el de los hombres, y para los hombres podemos destacar el Placebo, donde desde un inicio destaca y sorprende con las preiones finales en ambas gráficas.
Después de analizar los datos, encontramos diferencias entre los tratamientos: el IECA parece aumentar la presión arterial sistólica, mientras que el tratamiento combinado muestra un efecto positivo en la presión diastólica al igual que el IECA. Además, las mujeres tienden a tener una menor variación en la presión arterial. Resulta sorprendente que el grupo tratado con placebo experimente una disminución significativa en la presión arterial sistólica. En resumen, el tratamiento con IECA puede tener un efecto no deseado en la presión arterial sistólica, mientras que el tratamiento combinado puede ser más efectivo en el control de la presión diastólica, especialmente en mujeres. Sin embargo, se necesitan más investigaciones para confirmar estos hallazgos y comprender mejor cómo afectan a los pacientes con hipertensión arterial.