knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
Este documento trata de introducir el paquete MorbiditySpainR a través de casos de uso reales y sencillo. La meta, por lo tanto, es servir de motivación al uso del mismo. Para ello presentaremos algunos casos de exploración de los datos y finalmente esbozaremos algunos modelos predictivos.
devtools::install_github("rOpenSpain/MorbiditySpainR") library(MorbiditySpainR) library(lubridate) library(dplyr) library(ggplot2) library(geofacet)
Para conseguir un conjunto de datos ligero pero suficiente para poder hacer análisis exploratorios atractivos vamos a descargar los datos de ingresos hospitalarios del quinquenio 2010 - 2014
data <- GetMorbiData(y1 = 2010,y2 = 2014) dplyr::glimpse(data)
Un interesante análisis exploratorio es saber la prevalencia de inregsos hospitalrios debidos a la ingesta de alcohol por parte de menores disgregada a nivel provincial
ll <- data %>% filter(year(fecha_ingreso)>=2010) ll2 <- ll %>% FilterEmergency() %>% filter(edad<18) %>% FilterDiagnosis2(35) ll2 <- ll2 %>% AddDiagnosis3() %>% ReduceData(provincia = TRUE,date = "year",diag = "diag3") diag2.35 <- unique(ll2$diag3) diag2.35 <- diag2.35[grepl("alcohol",tolower(diag2.35))] ll2 <- ll2 %>% filter(diag3 %in% diag2.35) ll2 <- ll2 %>% SetPrevalence() ll2 <- ll2 %>% dplyr::group_by(prov,fecha) %>% dplyr::summarise(total=sum(total.prev)) ll2$code <- sprintf("%02d",ll2$prov) ll2$year <- year(ll2$fecha) prov.graf <- geofacet::spain_prov_grid1 ll2 <- full_join(ll2,prov.graf,by="code") ll2.media <- mean(ll2$total,na.rm=TRUE) g <- ggplot(data=ll2) + geom_bar(aes(x=year,y=total),stat="identity",position="dodge") + geom_hline(yintercept = ll2.media,color="red") + facet_geo(~ name, grid = "spain_prov_grid1") +labs(title="Prevalencia de ingresos urgentes relacionados con alcohol en menores",subtitle="Casos por cada 100.000 habitantes",caption="Encuesta de morbilidad.2010-2014") + xlab("") + ylab("") + theme_bw() + theme(axis.text=element_text(size=6, angle=90)) plot(g)
Otro análisis exploratorio que nos permite hacer este conjunto de datos tiene como objetivo conocer cuales son los esguinces más comunes en las personas entre 30 y 45 años, separando los resultados por sexos.
lesiones <- data %>% FilterEmergency() %>% filter(edad>=30 & edad<=45) %>% FilterDiagnosis2(96) %>% AddDiagnosis3() lesiones <- lesiones %>% ReduceData(provincia = TRUE,date = "day",diag = "diag3",sex=TRUE) lesiones.y <- lesiones %>% group_by(diag=diag3,sex=sex) %>% summarise(total=sum(total)) esguinces <- lesiones.y %>% group_by(diag) %>% summarise(tt=sum(total)) %>% top_n(10,tt) esguinces <- esguinces$diag lesiones.y <- lesiones.y %>% filter(diag %in% esguinces) lesiones.y$sex <- factor(x = lesiones.y$sex,labels = c("Hombre","Mujer")) g2 <- ggplot(data=lesiones.y) + geom_bar(aes(x=sex,y=total),stat="identity",position="dodge") + facet_wrap(~diag,nrow = 2,ncol = 5,scales = "free") + labs(title="Prevalencia de ingresos urgentes relacionados con esguinces divididos por sexo",subtitle="Casos totales",caption="Encuesta de morbilidad.2010-2014") + xlab("Sexo") + ylab("") + theme_bw() plot(g2)
Otro análisis nos puedo servir para imitar a los famosos myth buster y responder la pregunta de si las fases lunares tienen alguna relación con el número de partos.
partos <- ll %>% FilterEmergency() %>% FilterDiagnosis2(77) %>% ReduceData(provincia = FALSE,date = "day",sex = FALSE) library(lunar) partos$phase <- lunar.phase(partos$fecha,name=8) partos <- partos %>% group_by(phase) %>% summarise(total=sum(total)) g3 <- ggplot(partos) + geom_bar(aes(x=phase,y=total),stat="identity",position = "dodge") + labs(title="Número de partos y fase lunar",subtitle="Casos totales",caption="Encuesta de morbilidad.2010-2015") + xlab("Fase Lunar") + ylab("") + theme_bw() plot(g3)
Un último ejemplo de análisis exploratorio nos puede servir para construir una serie temporal de los ingresos hospitalarios de menores por enfermedades respiratorias (gripe y neumonía) en la Comunidad de Madrid y confrontarla con una serie climatológica para poder señalar episodios epidemiológicos.
library(zoo) ll.gripe <- data %>% FilterProvincia(28) %>% FilterEmergency() %>% dplyr::filter(edad<18) %>% FilterDiagnosis2(57) %>% ReduceData(provincia = TRUE,date="day",sex = FALSE) %>% SetPrevalence(pop = "total") ll.gripe$yday <- yday(ll.gripe$fecha) ll.gripe.clim <- ll.gripe %>% dplyr::group_by(yday) %>% dplyr::summarise(mean=mean(total.prev,na.rm=TRUE)) ll.gripe.rollmean <- bind_rows(ll.gripe.clim,ll.gripe.clim,ll.gripe.clim) ll.gripe.rollmean <- rollmean(ll.gripe.rollmean$mean,15,fill=NA)[367:732] ll.gripe.clim$mean <- ll.gripe.rollmean # g4 <- ggplot(ll.gripe.clim) + geom_line(aes(x=yday,y=mean)) ll.gripe <- full_join(ll.gripe,ll.gripe.clim,by="yday") ll.gripe$color <- ifelse(test = ll.gripe$total.prev>ll.gripe$mean,"si","no") cols <- c("no" = "gray70", "si" = "red") ll.gripe <- ll.gripe %>% dplyr::filter(year(fecha)>=2010) g4 <- ggplot(ll.gripe) + geom_bar(aes(x=fecha,y=total.prev,fill=color),stat="identity",position = "dodge") + geom_line(aes(x=fecha,y=mean)) + facet_wrap(~year(fecha),ncol=2,scales = "free_x") + scale_fill_manual(values=cols,guide=FALSE) + labs(title="Número de ingresos urgentes de menores de 18 años por Neumonía y Gripe",subtitle="Comunidad de Madrid. Casos por 100.000 habitantes",caption="Encuesta de morbilidad.2010-2014") + xlab("Fecha") + ylab("") + theme_bw() plot(g4)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.