Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
backup_option <- options()
base_wd <- getwd()
## ----include=FALSE------------------------------------------------------------
load(system.file("extdata", "results_vignette_nkde.rda",
package = "spNetwork", mustWork = TRUE))
## ----message=FALSE, warning=FALSE---------------------------------------------
library(ggplot2)
library(reshape2)
library(kableExtra)
library(spNetwork)
library(RColorBrewer)
x <- seq(-15.01,15.01,by = 0.01)
df <- data.frame(
x = x,
gaussian = gaussian_kernel(x,15),
epanechnikov = epanechnikov_kernel(x,15),
quartic = quartic_kernel(x,15),
triangle = triangle_kernel(x,15),
tricube = tricube_kernel(x,15),
triweight = triweight_kernel(x,15),
cosine = cosine_kernel(x,15),
uniform = uniform_kernel(x,15))
df2 <- melt(df, id.vars = "x")
names(df2) <- c("x","kernel","y")
ggplot(df2) +
geom_line(aes(x=x,y=y,color=kernel),size=1)
## ----message=FALSE, warning=FALSE---------------------------------------------
Funs <- c(gaussian_kernel, gaussian_kernel_scaled,epanechnikov_kernel,
quartic_kernel,triangle_kernel, uniform_kernel,
tricube_kernel,triweight_kernel,
cosine_kernel)
Names <- c("gaussian", "scaled gaussian", "epanechnikov", "quartic",
"triangle","uniform", "tricube", "triweight", "cosine")
integrals <- sapply(Funs,function(f){
return(round(integrate(f,upper=15,lower=-15,bw=15)$value,3))
})
df <- data.frame("kernel"=Names,
"integrals" = integrals)
kable(df)
## ----message=FALSE, warning=FALSE---------------------------------------------
x <- seq(-15.01,15.01,by = 0.01)
df <- data.frame(
x = x,
gaussian = gaussian_kernel(x,15),
gaussian_scaled = gaussian_kernel_scaled(x,15),
epanechnikov = epanechnikov_kernel(x,15),
quartic = quartic_kernel(x,15)
)
df2 <- melt(df, id.vars = "x")
names(df2) <- c("x","kernel","y")
ggplot(df2) +
geom_line(aes(x=x,y=y,color=kernel),size=1)
## ----message=FALSE, warning=FALSE---------------------------------------------
# first load data and packages
library(sf)
library(spNetwork)
library(tmap)
data(mtl_network)
data(bike_accidents)
# then plotting the data
tm_shape(mtl_network) +
tm_lines("black") +
tm_shape(bike_accidents) +
tm_dots("red", size = 0.2)
# then calculating some lixels to use as sampling points
lixels <- lixelize_lines(mtl_network,200,mindist = 50)
samples <- lines_center(lixels)
## ----message=FALSE, warning=FALSE, eval=FALSE---------------------------------
# # then applying the NKDE
# densities <- nkde(mtl_network,
# events = bike_accidents,
# w = rep(1,nrow(bike_accidents)),
# samples = samples,
# kernel_name = "quartic",
# bw = 300, div= "bw",
# method = "discontinuous", digits = 1, tol = 1,
# grid_shape = c(1,1), max_depth = 8,
# agg = 5, #we aggregate events within a 5m radius (faster calculation)
# sparse = TRUE,
# verbose = FALSE)
#
## ----message=FALSE, warning=FALSE---------------------------------------------
samples$density <- densities
## ----message=FALSE, warning=FALSE---------------------------------------------
# rescaling to help the mapping
samples$density <- samples$density*1000
samples2 <- samples[order(samples$density),]
colorRamp <- brewer.pal(n = 7, name = "Spectral")
colorRamp <- rev(colorRamp)
title <- paste0("bike accident density by kilometres in 2016,",
"\nwithin a radius of 300 metres")
tm_shape(mtl_network) +
tm_lines("black") +
tm_shape(samples2) +
tm_dots("density", style = "kmeans", palette = colorRamp, n = 7, size = 0.1) +
tm_layout(legend.outside = TRUE,
main.title = title , main.title.size = 1)
## ----message=FALSE, warning=FALSE, eval = FALSE-------------------------------
# # setting the multisession plan
# future::plan(future::multisession(workers=2))
#
# # then applying the NKDE
# densities_mc <- nkde.mc(mtl_network,
# events = bike_accidents,
# w = rep(1,nrow(bike_accidents)),
# samples = samples,
# kernel_name = "quartic",
# bw = 300, div= "bw",
# method = "discontinuous", digits = 1, tol = 1,
# grid_shape = c(2,2), # splitting the study area in 4 rectangles
# max_depth = 8,
# agg = 5, #we aggregate events within a 5m radius
# sparse = TRUE,
# verbose = FALSE)
#
# # let's set back the classical sequential plan
# if (!inherits(future::plan(), "sequential")) future::plan(future::sequential)
## ----message=FALSE, warning=FALSE---------------------------------------------
# we can compare the previous result and the new one
diff <- sum(abs(densities - densities_mc))
print(paste("overall difference between the regular and paralellized method : ",round(diff,12),sep=""))
## ----message=FALSE, warning=FALSE, eval = FALSE-------------------------------
# adapt_densities <- nkde(mtl_network,
# events = bike_accidents,
# w = rep(1,nrow(bike_accidents)),
# samples = samples,
# kernel_name = "quartic",
# bw = 300, div= "bw",
# adaptive = TRUE, # we use here an adaptive bandwidth
# trim_bw = 600, # the maximum local values of bandwidth will be 600m
# method = "discontinuous", digits = 1, tol = 1,
# grid_shape = c(1,1), max_depth = 16,
# agg = 5, #we aggregate events within a 5m radius (faster calculation)
# sparse = TRUE,
# verbose=FALSE)
#
# samples$density <- adapt_densities$k
## ----message=FALSE, warning=FALSE---------------------------------------------
samples$density <- adapt_densities$k
## ----message=FALSE, warning=FALSE---------------------------------------------
circles <- st_buffer(adapt_densities$events,
dist = adapt_densities$events$bw)
ids <- c(1,52,20,86,14,75,126,200,177)
tm_shape(mtl_network) +
tm_lines("black") +
tm_shape(bike_accidents) +
tm_dots("red", size = 0.2) +
tm_shape(circles[ids,]) +
tm_borders("blue", lwd = 2)
## ----echo=FALSE, message=FALSE, warning=FALSE---------------------------------
# rescaling to help the mapping
samples$density <- samples$density*1000
colorRamp <- brewer.pal(n = 7, name = "Spectral")
colorRamp <- rev(colorRamp)
samples2 <- samples[order(samples$density),]
title <- paste0("bike accident density by kilometres in 2016,",
"\nwithin a radius of 300 metres (adaptive bandiwdth)")
tm_shape(mtl_network) +
tm_lines("black") +
tm_shape(samples2) +
tm_dots("density", style = "kmeans", palette = colorRamp, n = 7, size = 0.1) +
tm_layout(legend.outside = TRUE,
main.title = title, main.title.size = 1)
## ----message=FALSE, warning=FALSE---------------------------------------------
# selecting the events in a subset of the data
center_event <- bike_accidents[125,]
study_area <- st_buffer(center_event, dist = 800)
events_sel <- as.vector(st_intersects(bike_accidents, study_area, sparse = FALSE))
events <- subset(bike_accidents,events_sel)
# generating the sampling points
lines_sel <- as.vector(st_intersects(mtl_network, study_area, sparse = FALSE))
lines <- subset(mtl_network,lines_sel)
lixels <- lixelize_lines(lines,200,mindist = 50)
samples <- lines_center(lixels)
tm_shape(study_area) +
tm_borders("black", lwd = 2) +
tm_shape(lines) +
tm_lines("black") +
tm_shape(events) +
tm_dots("red", size = 0.2)
## ----message=FALSE, warning=FALSE, eval = FALSE-------------------------------
# # calculating the NKDE values, adjusted
# adjusted_densities <- nkde(lines = mtl_network,
# events = events,
# w = rep(1,nrow(events)),
# samples = samples,
# kernel_name = "quartic",
# bw = 150,
# adaptive = FALSE,
# method = "discontinuous",
# div = "bw",
# diggle_correction = TRUE, study_area = study_area,
# max_depth = 15,
# digits = 2,tol = 0.1,agg = 5,sparse = TRUE,
# grid_shape = c(1,1),verbose = FALSE)
#
# samples$density <- adjusted_densities
## ----message=FALSE, warning=FALSE---------------------------------------------
samples$density <- adjusted_densities * 1000
## ----echo=FALSE, message=FALSE, warning=FALSE---------------------------------
colorRamp <- brewer.pal(n = 7, name = "Spectral")
colorRamp <- rev(colorRamp)
title <- paste0("bike accident density by kilometres in 2016",
"\nwithin a radius of 150 metres")
tm_shape(lines) +
tm_lines("black") +
tm_shape(samples) +
tm_dots("density", palette = colorRamp, style = "kmeans", n = 7, size = 0.1) +
tm_layout(legend.outside = TRUE,
main.title = title, main.title.size = 1)
## ----eval = FALSE-------------------------------------------------------------
# bws_selection_cv <- bw_cv_likelihood_calc(
# bws = seq(50,700,50),
# lines = mtl_network, events = bike_accidents,
# w = rep(1,nrow(bike_accidents)),
# kernel_name = "quartic", method = "discontinuous",
# diggle_correction = FALSE, study_area = NULL,
# max_depth = 8,
# digits=2, tol=0.1, agg=5,
# sparse=TRUE, grid_shape=c(1,1),
# verbose=FALSE, check=TRUE)
#
# bws_selection_cvl <- bw_cvl_calc(
# bws = seq(50,700,50),
# lines = mtl_network, events = bike_accidents,
# w = rep(1,nrow(bike_accidents)),
# kernel_name = "quartic", method = "discontinuous",
# diggle_correction = FALSE, study_area = NULL,
# max_depth = 8,
# digits=2, tol=0.1, agg=5,
# sparse=TRUE, grid_shape=c(1,1),
# verbose=FALSE, check=TRUE)
#
## ----eval = FALSE-------------------------------------------------------------
# bws_selection_cv_adpt_dis <- bw_cv_likelihood_calc(
# bws = seq(50,700,50),
# trim_bws = seq(50,700,50)*2,
# lines = mtl_network,
# events = bike_accidents,
# w = rep(1,nrow(bike_accidents)),
# adaptive = TRUE,
# kernel_name = "quartic",
# method = "discontinuous",
# diggle_correction = FALSE,
# study_area = NULL,
# max_depth = 8,
# digits=2,
# tol=0.1,
# agg=5,
# sparse=TRUE,
# grid_shape=c(1,1),
# verbose=TRUE,
# check=TRUE)
#
# bws_selection_cv_adpt_cont <- bw_cv_likelihood_calc(
# bws = seq(50,700,50),
# trim_bws = seq(50,700,50)*2,
# lines = mtl_network,
# events = bike_accidents,
# w = rep(1,nrow(bike_accidents)),
# adaptive = TRUE,
# kernel_name = "quartic",
# method = "continuous",
# diggle_correction = FALSE,
# study_area = NULL,
# max_depth = 8,
# digits=2,
# tol=0.1,
# agg=5,
# sparse=TRUE,
# grid_shape=c(1,1),
# verbose=TRUE,
# check=TRUE)
#
# cv_values <- data.frame(
# "bw" = bws_selection_cv$bw,
# "cv_likelihood" = bws_selection_cv$cv_scores,
# "cvl_crit" = bws_selection_cvl$cvl_scores,
# "cv_likelihood_adpt_dis" = bws_selection_cv_adpt_dis$cv_scores,
# "cv_likelihood_adpt_cont" = bws_selection_cv_adpt_cont$cv_scores
# )
## ----echo=FALSE---------------------------------------------------------------
knitr::kable(cv_values, digits = 2,row.names = FALSE)
## ----include = FALSE----------------------------------------------------------
# reset all the user parameters
options(backup_option)
setwd(base_wd)
oldpar <- par(mfrow = c(1,2))
par(oldpar)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.