

---
title: "rangeMapper"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{rangeMapper}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, echo=FALSE}
library(knitr)
opts_chunk$set(
  warning = FALSE, 
  message = FALSE, 
  fig.height = 5,   
  collapse = TRUE,
  comment = "#>"
  )
```

### Packages and data
```{r}
require(rangeMapper)
require(sf)
require(data.table)
require(ggplot2)
require(viridis)

data(dem)
wrens = read_wrens()
wrens$breeding_range_area = st_area(wrens)

```

### A bare bone  `rangeMapper` project

The project contains nothing but several system tables.

```{r}
# path is not specified so an in-memory file is created.
con = rmap_connect()

```

Wrens breeding ranges are imported. 

```{r}
rmap_add_ranges(con, x = wrens, ID = 'sci_name')
rmap_prepare(con, 'hex', cellsize = 500)
rmap_add_bio(con, wrens, 'sci_name')
```

### Do larger wren species have smaller clutches ?

```{r}
lm(clutch_size~log(body_mass), wrens)  %>%  summary
```

### Does the slope `clutch size ~ body mass` vary spatially? 

First we save a species richness map.

```{r}
rmap_save_map(con)
```

Then we construct a `subset` table with all assemblages with a richness of at least 10 species.

```{r}
rmap_save_subset(con,'sset1', species_richness = 'species_richness > 10')
```

Now we can construct a `clutch size ~ body mass` map with assemblages containing at least 10 species.

```{r}
linmod = function(x) {
  lm(clutch_size ~ log(body_mass), x) %>% 
    summary %>% coefficients %>% data.table %>% .[-1] }

rmap_save_map(con, fun= linmod, subset= 'sset1', src='wrens', dst='slope_clutch_size')
```

We get the map as a `sf data.frame`  and plot it with `ggplot`.

```{r}
x = rmap_to_sf(con)

ggplot() + 
  geom_sf(data = x, aes(fill = Estimate),  size= 0.05) + 
  scale_fill_gradientn(colours =  viridis(10, option = 'E'), na.value= 'grey80') + 
  theme_bw()
```

Here is the "answer" to the question above. 

```{r}
xy = st_centroid(x)  %>% st_coordinates
x = cbind(x, xy )

ggplot(x , aes(y = Estimate, x = Y) ) + 
  geom_point() + 
  geom_smooth() +
  theme_bw() + 
  ylab('Clutch size ~ Body mass slope') + 
  xlab('Distance from equator (km)')

```


