max_coverage solves the binary optimisation problem known as the "maximal covering location problem" as described by Church (http://www.geo .ucsb.edu/~forest/G294download/MAX_COVER_RLC_CSR.pdf). This package was implemented to make it easier to solve this problem in the context of the research initially presented by Chan et al (http://circ.ahajournals.org/content/127/17/1801.short) to identify ideal locations to place AEDs.

max_coverage(existing_facility = NULL, proposed_facility, user,
  distance_cutoff, n_added, solver = "lpSolve", return_early = FALSE)

Arguments

existing_facility

data.frame containing the facilities that are already in existing, with columns names lat, and long.

proposed_facility

data.frame containing the facilities that are being proposed, with column names lat, and long.

user

data.frame containing the users of the facilities, along with column names lat, and long.

distance_cutoff

numeric indicating the distance cutoff (in metres) you are interested in. If a number is less than distance_cutoff, it will be 1, if it is greater than it, it will be 0.

n_added

the maximum number of facilities to add.

solver

character lpSolve" (default) or "glpk". "gurobi" is currently in development, see https://github.com/njtierney/maxcovr/issues/25

return_early

logical - should I return the object early?

Value

dataframe of results

Examples

library(dplyr) # already existing locations york_selected <- york %>% filter(grade == "I") # proposed locations york_unselected <- york %>% filter(grade != "I") mc_result <- max_coverage(existing_facility = york_selected, proposed_facility = york_unselected, user = york_crime, distance_cutoff = 100, n_added = 20) mc_result
#> #> ------------------------------------------- #> Model Fit: maxcovr fixed location model #> ------------------------------------------- #> model_used: max_coverage #> existing_facility: york_selected #> proposed_facility: york_unselected #> user: york_crime #> distance_cutoff: 100 #> n_added: 20 #> solver: lpSolve #> -------------------------------------------
summary(mc_result)
#> #> ------------------------------------------- #> Model Fit: maxcovr fixed location model #> ------------------------------------------- #> Distance Cutoff: 100m #> Facilities: #> Added: 20 #> Coverage (Previous): #> # Users: 540 (339) #> Proportion: 0.2977 (0.1869) #> Distance (m) to Facility (Previous): #> Avg: 986 (1400) #> SD: 1188 (1597) #> -------------------------------------------
# get the facilities chosen mc_result$facility_selected
#> [[1]] #> # A tibble: 20 x 7 #> long lat object_id desig_id pref_ref name grade #> <dbl> <dbl> <int> <chr> <int> <chr> <chr> #> 1 -1.09 54.0 5978 DYO1383 462917 <NA> II #> 2 -1.08 54.0 5909 DYO1297 463072 <NA> II #> 3 -1.08 54.0 5872 DYO1244 463186 <NA> II #> 4 -1.08 54.0 5847 DYO1216 463242 <NA> II #> 5 -1.12 54.0 5759 DYO1108 463434 FORMER JUNIOR SCHOOL BUILDING… II #> 6 -1.08 54.0 5748 DYO1096 463469 <NA> II #> 7 -1.08 54.0 5745 DYO1093 463465 <NA> II #> 8 -1.08 54.0 5739 DYO1086 463457 CHURCH OF ST GEORGE AND ATTAC… II #> 9 -1.09 54.0 5638 DYO957 463691 <NA> II #> 10 -1.09 53.9 5606 DYO920 463771 PRESS STAND AT YORK RACECOURSE II #> 11 -1.06 54.0 5592 DYO903 463788 <NA> II #> 12 -1.08 54.0 5529 DYO829 463938 CHURCH OF ST THOMAS II #> 13 -1.08 54.0 5454 DYO705 464133 NUMBERS 45-51 (ODD) AND ATTAC… II #> 14 -1.12 54.0 5349 DYO572 464451 POPPLETON ROAD SCHOOL II #> 15 -1.08 54.0 3991 DYO544 464508 WOODS MILL II #> 16 -1.09 54.0 3863 DYO406 464772 ROYAL YORK HOTEL AND AREA RAI… II #> 17 -1.10 54.0 3250 DYO310 464928 ELM BANK HOTEL II* #> 18 -1.00 54.0 3215 DYO1581 491367 STOCKTON GRANGE AND ATTACHED … II #> 19 -1.08 54.0 3213 DYO1580 490659 NEW CHAPEL AT ST JOHN'S COLLE… II #> 20 -1.08 54.0 4803 DYO1734 NA The Swan Public House II #>
# get the users affected mc_result$user_affected
#> [[1]] #> # A tibble: 201 x 16 #> user_id user_chosen facility_id distance category persistent_id date lat #> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <dbl> #> 1 1 1 66 166. anti-soc… 62299914865f… 2016… 54.0 #> 2 5 1 25 536. anti-soc… 6139f131b724… 2016… 54.0 #> 3 13 1 6 2334. anti-soc… c2aac5cdf98e… 2016… 54.0 #> 4 14 1 2 12687. anti-soc… c0908b075c68… 2016… 54.1 #> 5 15 1 24 620. anti-soc… 40c8c061c48b… 2016… 54.0 #> 6 23 1 NA NA <NA> <NA> <NA> NA #> 7 27 1 NA NA <NA> <NA> <NA> NA #> 8 29 1 2 375. anti-soc… db6cacd76d97… 2016… 54.0 #> 9 33 1 NA NA <NA> <NA> <NA> NA #> 10 48 1 6 7274. anti-soc… 07c425e0ae66… 2016… 54.0 #> # ... with 191 more rows, and 8 more variables: long <dbl>, street_id <chr>, #> # street_name <chr>, context <chr>, id <chr>, location_type <chr>, #> # location_subtype <chr>, outcome_status <chr> #>
# get the summaries mc_result$summary
#> [[1]] #> # A tibble: 2 x 8 #> n_added distance_within n_cov pct_cov n_not_cov pct_not_cov dist_avg dist_sd #> <dbl> <dbl> <int> <dbl> <int> <dbl> <dbl> <dbl> #> 1 0 100 339 0.187 1475 0.813 1400. 1597. #> 2 20 100 540 0.298 1274 0.702 986. 1188. #>