Este ejercicio consta de diversas partes en un intento de simular lo que se lleva a cabo en un estudio real. Se ha simplicado para hacerlo más practicable por lo que no hace falta que os agobiéis si algo no os cuadre del todo. De lo que se trata es que veamos como aplicar las distintas técnicas que hemos estudiado, de forma integral, en un problema de análisis de datos.
La demora entre el comienzo de los síntomas y el ingreso hospitalario es un factor que determina la mortalidad del infarto agudo de miocardio (IAM). Se estudian 426 sujetos que acuden al servicio de urgencias de 5 hospitales por dolor torácico , recogiendo el tiempo entre los primeros síntomas y la llegada al hospital y una serie de variables sociodemográficas. Se está interesado en estimar el retraso prehospitalario y determinar las variables asociadas.
Los datos los podéis encontrar en los ficheros de Stata demora.dta, de Excel demora.xls y de texto plano separado por comas demora.csv
require(tidyverse)
## Loading required package: tidyverse
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.0 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.1 ✔ tibble 3.1.8
## ✔ lubridate 1.8.0 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
dat <- demora %>% select(demora,edad,noche,ambulan,dolor)
dat %>% dim()
## [1] 426 5
lapply(dat, class)
## $demora
## [1] "integer"
##
## $edad
## [1] "integer"
##
## $noche
## [1] "integer"
##
## $ambulan
## [1] "integer"
##
## $dolor
## [1] "integer"
dat <- dat %>%
mutate(noche = factor(noche, 0:1, c("Dia", "Noche"))) %>%
mutate(ambulan = factor(ambulan, 0:1, c("Ambulancia", "Otros medios"))) %>%
mutate(dolor = factor(dolor, 0:2, c("Intenso", "Moderado", "Ligero")))
Se está interesado en verificar la calidad de los datos y describir la muestra de estudio
require(summarytools)
## Loading required package: summarytools
##
## Attaching package: 'summarytools'
## The following object is masked from 'package:tibble':
##
## view
dfSummary(dat %>% select(demora,edad))
## Data Frame Summary
## dat
## Dimensions: 426 x 2
## Duplicates: 56
##
## -------------------------------------------------------------------------------------------------------------
## No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
## ---- ----------- --------------------------- --------------------- --------------------- ---------- ---------
## 1 demora Mean (sd) : 381.4 (676.7) 139 distinct values : 383 43
## [integer] min < med < max: : (89.9%) (10.1%)
## 4 < 120 < 4345 :
## IQR (CV) : 255 (1.8) :
## : . .
##
## 2 edad Mean (sd) : 62.4 (17.7) 57 distinct values : 426 0
## [integer] min < med < max: : (100.0%) (0.0%)
## 0 < 66 < 91 : : :
## IQR (CV) : 17 (0.3) : : : :
## . . . : : : : :
## -------------------------------------------------------------------------------------------------------------
Que medida es más adecuada para describir los datos, media o mediana?
Que nos indica el percentil 50%? i el 100%?
Que variable tiene más dispersión?
Realizar un resumen gráfico de las variables demora y edad. Interpretar los resultados
ggplot(dat, aes(x = demora) ) +
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(dat, aes(y = demora) ) +
geom_boxplot()
ggplot(dat, aes(x = edad) ) +
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(dat, aes(y = edad) ) +
geom_boxplot()
Son simétricas las variables?
Existe algun outlier?
Realizar un resumen numérico y gráfico de las variables noche, dolor y ambulan. Interpreta los resultados
dfSummary(dat %>% select(noche,dolor, ambulan))
## Data Frame Summary
## dat
## Dimensions: 426 x 3
## Duplicates: 414
##
## ------------------------------------------------------------------------------------------------
## No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
## ---- ---------- ----------------- -------------------- -------------------- ---------- ---------
## 1 noche 1. Dia 285 (66.9%) IIIIIIIIIIIII 426 0
## [factor] 2. Noche 141 (33.1%) IIIIII (100.0%) (0.0%)
##
## 2 dolor 1. Intenso 205 (48.1%) IIIIIIIII 426 0
## [factor] 2. Moderado 183 (43.0%) IIIIIIII (100.0%) (0.0%)
## 3. Ligero 38 ( 8.9%) I
##
## 3 ambulan 1. Ambulancia 352 (82.6%) IIIIIIIIIIIIIIII 426 0
## [factor] 2. Otros medios 74 (17.4%) III (100.0%) (0.0%)
## ------------------------------------------------------------------------------------------------
ggplot(dat, aes(x = noche) ) +
geom_bar()
ggplot(dat, aes(x = ambulan) ) +
geom_bar()
ggplot(dat, aes(x = dolor) ) +
geom_bar()
ggplot(dat, aes(x = dolor)) +
geom_bar(fill = c( "#b37bc9") ) +
ggtitle("Intensidad del dolor") +
xlab("") +
ylab("Recuento")
Se está interesado en conocer la relación entre distintas variables.
require(gmodels)
## Loading required package: gmodels
CrossTable(dat$dolor, dat$ambulan, prop.chisq = F, prop.c = F, prop.r = F)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 426
##
##
## | dat$ambulan
## dat$dolor | Ambulancia | Otros medios | Row Total |
## -------------|--------------|--------------|--------------|
## Intenso | 168 | 37 | 205 |
## | 0.394 | 0.087 | |
## -------------|--------------|--------------|--------------|
## Moderado | 151 | 32 | 183 |
## | 0.354 | 0.075 | |
## -------------|--------------|--------------|--------------|
## Ligero | 33 | 5 | 38 |
## | 0.077 | 0.012 | |
## -------------|--------------|--------------|--------------|
## Column Total | 352 | 74 | 426 |
## -------------|--------------|--------------|--------------|
##
##
ggplot(dat, aes(x = dolor, fill = ambulan) ) +
geom_bar()
El equipo investigador cree que la demora en acudir al hospital y el momento en el que aparece el dolor (variable noche) están relacionadas.
library(dplyr)
dat %>%
group_by(noche) %>%
summarize(median(demora, na.rm = T))
## # A tibble: 2 × 2
## noche `median(demora, na.rm = T)`
## <fct> <dbl>
## 1 Dia 105
## 2 Noche 255
dat %>%
group_by(noche) %>%
summarize(IQR(demora, na.rm = T))
## # A tibble: 2 × 2
## noche `IQR(demora, na.rm = T)`
## <fct> <dbl>
## 1 Dia 160
## 2 Noche 930
ggplot(dat, aes(x = noche, y = demora) ) +
geom_boxplot()
El equipo investigador cree que la demora en acudir al hospital y la edad están relacionadas.
ggplot(dat, aes(x = edad, y = demora) ) +
geom_point()
cor(dat$edad,dat$demora, use = "complete.obs")
## [1] 0.02967572
cor(dat$edad,dat$demora, use = "complete.obs", method = "spearman")
## [1] 0.1554909
require(GGally)
## Loading required package: GGally
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
ggpairs(dat)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.