# http://www.paulamoraga.com/tutorial-areal-data-es/
#Adams es un condado
#head(pennLC$data)
#smocking dice el porcentaje de la gente que fuma en el condado.
# Para hacer el mapa
#Los data frames son estructuras de datos de dos dimensiones (rectangulares) que pueden contener datos de diferentes tipos
#dataframe es d
#AGGREGATE que es
#aggregate the inputted data.frame
#d.f by applying a function specified by
#the FUN parameterto each column of sub-data.frames
#defined by the by input parameter.
#The by parameter has to be a list
library(SpatialEpi)
## Loading required package: sp
library(sp)
data(pennLC)
map <- pennLC$spatial.polygon
d <- aggregate(
x = pennLC$data$cases, #datos
by = list(county = pennLC$data$county), #las comas son relevantes
FUN = sum #funcion
)
names(d) <- c("county", "Y") #nombre columnas
#contar casos esperados: por genero, edad y raza
pennLC$data <- pennLC$data[order(pennLC$data$county,
pennLC$data$race,
pennLC$data$gender,
pennLC$data$age),
]
#E es el numero de casos esperados
E <- expected(population = pennLC$data$population, cases = pennLC$data$cases,
n.strata = 16) #2 razas x 2 generos x 4 edades
#añadimos el vector E al data frame d
d$E <- E
#ahora añadimos los fumadores
#merge two data frames by more columns
#or row rates
d <- merge(d, pennLC$smoking, by = "county")
#ahora se calculan los SMR = Y/E
#y lo agregamos al data frame
d$SMR <- d$Y/d$E
#ahora vamos a meter todo esto al mapa
library(sp)
rownames(d) <- d$county #ponerle nombre de condado a cada fila
map <- SpatialPolygonsDataFrame(map, d, match.ID = TRUE) #unir por condado
#al mapa le unimos los datos, mapa + datos = new mapa
head(map@data)
## county Y E smoking SMR
## adams adams 55 69.62730 0.234 0.7899200
## allegheny allegheny 1275 1182.42804 0.245 1.0782897
## armstrong armstrong 49 67.61012 0.250 0.7247435
## beaver beaver 172 172.55806 0.276 0.9967660
## bedford bedford 37 44.19013 0.228 0.8372910
## berks berks 308 300.70598 0.249 1.0242563
library(leaflet) #para hacer zoom, movernos en el mapa, etc.
l <- leaflet(map) %>% addTiles() #para poner el mapa del fondo
#pal es la paleta de colores y le ponemos el SMR para mostrarlo
pal <- colorNumeric(palette = "YlOrRd", domain = map$SMR)
#vamos a añadir poligonos
#fillcolor para pintar los poligonos
#weight el grosor de la linea
#l es el mapa al cual le vamos a agregar cosas, los poligonos son los condados
#se agrega una leyenda para ver los valores de smr en la esquina
l %>% addPolygons(color = "grey", weight = 1, fillColor = ~pal(SMR), fillOpacity = 0.5) %>%
addLegend(pal = pal, values = ~SMR, opacity = 0.5, title = "SMR", position = "bottomright")
#ahora vamos a poner etiquetas para que quede mas chulo y mas profesional
#br son saltos de linea
labels <- sprintf("<strong>%s</strong><br/>Observed: %s <br/>Expected: %s <br/>Smokers proportion: %s <br/>SMR: %s",
map$county, map$Y, round(map$E, 2), map$smoking, round(map$SMR, 2)) %>%
lapply(htmltools::HTML)
l %>% addPolygons(color = "grey", weight = 1, fillColor = ~pal(SMR), fillOpacity = 0.5,
highlightOptions = highlightOptions(weight = 4), #para que la linea se haga mas gruesa al seleccionar un condado
label = labels,
labelOptions = labelOptions(style = list("font-weight" = "normal", padding = "3px 8px"), #padding es el espacio que hay entre texto y el borde
textsize = "15px", direction = "auto")) %>% #auto para que la etiqueta se ponga solita a la derecha o a la izquiera
addLegend(pal = pal, values = ~SMR, opacity = 0.5, title = "SMR", position = "bottomright")