# 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")