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)

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 solo dos variables. • CLAVE: Clave de aleatorización. • FARMACO: Fármaco administrado (0: Placebo, 1: IECA, 2:Ca Antagonista + diurético).

Lista de ejercicios:

  1. 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.

  2. 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”.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

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

  8. 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.

  1. 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

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.