mvstat.net MVKSA Book GPS Trajectory Contact
Daily
Temp
World
Bank
Earth
Quake
Stem
Cell
Foetal
Cardio
Grevillea
 
Dumb
Bell
Air
Quality

Hook leaf grevillea (Grevillea uncinulata) locations in the south Western Australia biodiversity hotspot.
library(ks)
library(colorspace)
library(RColorBrewer)
library(maps)
library(oz)

## colour functions
pt.col <- function(pos=1, alpha=1, ...) {return(paste0(brewer.pal(12, "Paired"), format(as.hexmode(round(alpha*255,0)), width=2))[pos])}
seq.col <- function(n, alpha=1, ...){c("transparent", rev(sequential_hcl(n=n-1, h=290, power=1.1, alpha=alpha, ...)))}
seq.col2 <- function(n, alpha=1, ...) {c("transparent",tail(rev(diverge.col(2*n-1, alpha=alpha, ...)), n-1))}
diverge.col <- function(n, alpha=1, ...){cols <- paste0(brewer.pal(n, "PuOr"), as.hexmode(round(alpha*255,0))); cols[n %/% 2+1] <- grey(1, alpha=0); return(cols)}

## plot parameters
par(oma=c(0,0,0,0), mgp=c(0,0,0), mar=c(0,0,0,0), cex.axis=1.2, cex.lab=1.2)

## WA map
wa.map <- function(xlim, ylim)
{
    if (missing(xlim)) xlim <- c(114.75, 121.5)
    if (missing(ylim)) ylim <- c(-33, -31.5)
    wa.coast <- ozRegion(section=1)
    col <- rainbow_hcl(12, alpha=0.5)[9]
    oz(section=1, xlim=xlim, ylim=ylim)
    polypath(c(wa.coast$lines[[1]]$x, NA, c(wa.coast$rangex+c(-2,2), rev(wa.coast$rangex+c(-2,2)))), c(wa.coast$lines[[1]]$y, NA, rep(wa.coast$rangey+c(-2,2), each=2)), col=col, rule="evenodd")
    box()
}
wa.coast <- ozRegion(section=1)
wa.polygon <- cbind(wa.coast$lines[[1]]$x, wa.coast$lines[[1]]$y)

## load data
data(grevillea)
## Figure 2.8a 
## scattter plot   
wa.map()
points(grevillea, cex=1.2, pch=21, col=grey(0,alpha=0.5), bg=pt.col(4,alpha=0.5))
## Fig 2.8b
## Kernel density estimate with unconstrained bandwidth 
fhat.grevillea <- kde(x=grevillea)
fhat.grevillea <- kde.truncate(fhat.grevillea, wa.polygon)

wa.map()
plot(fhat.grevillea, add=TRUE, drawlabels=FALSE, display="filled.contour", lwd=1, col.fun=seq.col)
plotmixt(mus=c(120.75,-29.5), Sigmas=fhat.grevillea$H, props=1, drawlabels=FALSE, xlim=c(114.75, 121.5), ylim=c(-32.5, -29), add=TRUE)
## Fig 2.8c
## kernel density estimate with diagonal bandwidth 
fhat.grevillea.diag <- kde(x=grevillea, H=Hpi.diag(grevillea))
fhat.grevillea.diag <- kde.truncate(fhat.grevillea.diag, wa.polygon)
					      
wa.map()
plot(fhat.grevillea.diag, add=TRUE, drawlabels=FALSE, xaxs="i", yaxs="i", display="filled.contour", lwd=1, col.fun=seq.col)
plotmixt(mus=c(120.75,-29.5), Sigmas=fhat.grevillea.diag$H, props=1, drawlabels=FALSE, xlim=c(114.75, 121.5), ylim=c(-32.5, -29), add=TRUE)
## Fig 2.10a
## undersmoothed kernel density estimate
fhat.grevillea.us <- kde(grevillea, H=fhat.grevillea$H %*% fhat.grevillea$H)
fhat.grevillea.us <- kde.truncate(fhat.grevillea.us, wa.polygon)

wa.map()
plot(fhat.grevillea.us, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col)
## Fig 2.10b
## oversmoothed kernel density estimate
fhat.grevillea.os <- kde(grevillea, H=matrix.sqrt(fhat.grevillea$H))
fhat.grevillea.os <- kde.truncate(fhat.grevillea.os, wa.polygon)

wa.map()
plot(fhat.grevillea.os, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col)
## Fig 2.11a
## kernel density estimate with normal scale bandwidth
fhat.grevillea.ns <- kde(grevillea, H=Hns(grevillea))
fhat.grevillea.ns <- kde.truncate(fhat.grevillea.ns, wa.polygon)

wa.map()
plot(fhat.grevillea.ns, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col)
## Fig 2.11b
## kernel density estimate with normal mixture bandwidth
fhat.grevillea.nm <- kde(x=grevillea, H=Hnm(grevillea))
fhat.grevillea.nm <- kde.truncate(fhat.grevillea.nm, wa.polygon)

wa.map()
plot(fhat.grevillea.nm, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col)
## Fig 2.11c
## kernel density estimate with UCV bandwidth
fhat.grevillea.ucv <- kde(grevillea,  H=Hucv(jitter(grevillea)))
fhat.grevillea.ucv <- kde.truncate(fhat.grevillea.ucv, wa.polygon)

wa.map()
plot(fhat.grevillea.ucv, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col)
## Fig 2.11d
## kernel density estimate with BCV bandwidth
fhat.grevillea.bcv <- kde(grevillea, H=Hbcv(grevillea))
fhat.grevillea.bcv <- kde.truncate(fhat.grevillea.bcv, wa.polygon)

wa.map()
plot(fhat.grevillea.bcv, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col)
## Fig 2.11e
## kernel density estimate with plug-in bandwidth
wa.map()
plot(fhat.grevillea, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col)
## Fig 2.11f
## kernel density estimate with SCV bandwidth
fhat.grevillea.scv <- kde(grevillea, H=Hscv(grevillea))
fhat.grevillea.scv <- kde.truncate(fhat.grevillea.scv, wa.polygon)

wa.map()
plot(fhat.grevillea.scv, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col)
## Fig 5.3a
## kernel density gradient estimate with unconstrained bandwidth 
fhat1.grevillea <- kdde(x=grevillea, deriv.order=1)
fhat1.grevillea <- kdde.truncate(fhat1.grevillea, wa.polygon)

wa.map()
plot(fhat1.grevillea, display="quiver", add=TRUE, thin=6, lwd=2, transf=1/8, asp=1)
## Fig 5.3b
## Kernel density gradient estimate with diagonal bandwidth 
fhat1.grevillea.diag <- kdde(x=grevillea, deriv.order=1, H=Hpi.diag(grevillea, deriv.order=1))
fhat1.grevillea.diag <- kdde.truncate(fhat1.grevillea.diag, wa.polygon)

wa.map()
plot(fhat1.grevillea.diag, display="quiver", add=TRUE, thin=6, lwd=2, transf=1/8, asp=1)
## Fig 5.3c
## kernel density curvature estimate with unconstrained bandwidth 
fhat2.grevillea <- kdde(x=grevillea, deriv.order=2)
fhat2.grevillea.curv <- kcurv(fhat2.grevillea)

wa.map()
plot(fhat2.grevillea.curv, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col2)
## Fig 5.3d
## kernel density curvature estimate with diagonal bandwidth 
fhat2.grevillea.diag <- kdde(x=grevillea, deriv.order=2, H=Hpi.diag(grevillea, deriv.order=2))
fhat2.grevillea.curv.diag <- kcurv(fhat2.grevillea.diag)

wa.map()
plot(fhat2.grevillea.curv.diag, display="filled.contour2", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col2)
## Fig 5.6a
## kernel density gradient estimate with normal scale bandwidth
fhat1.grevillea.ns <- kdde(x=grevillea, deriv.order=1, H=Hns(grevillea, deriv.order=1))
fhat1.grevillea.ns <- kdde.truncate(fhat1.grevillea.ns, wa.polygon)

wa.map()
plot(fhat1.grevillea.ns, display="quiver", add=TRUE, thin=6, lwd=2, transf=1/8, asp=1)
## Fig 5.6b
## kernel density gradient estimate with UCV bandwidth
fhat1.grevillea.ucv <- kdde(x=grevillea, deriv.order=1, H=Hucv(jitter(grevillea), deriv.order=1))
fhat1.grevillea.ucv <- kdde.truncate(fhat1.grevillea.ucv, wa.polygon)

wa.map()
plot(fhat1.grevillea.ucv, display="quiver", add=TRUE, thin=6, lwd=2, transf=1/8, asp=1)
## Fig 5.6c
## kernel density gradient estimate with plug-in bandwidth
wa.map()
plot(fhat1.grevillea, display="quiver", add=TRUE, thin=6, lwd=2, transf=1/8, asp=1)
## Fig 5.6d
## kernel density gradient estimate with SCV bandwidth
fhat1.grevillea.scv <- kdde(x=grevillea, deriv.order=1, H=Hscv(grevillea, deriv.order=1))
fhat1.grevillea.scv <- kdde.truncate(fhat1.grevillea.scv, wa.polygon)

wa.map()
plot(fhat1.grevillea.scv, display="quiver", add=TRUE, thin=6, lwd=2, transf=1/8, asp=1)
## Fig 5.7a
## kernel density curvature estimate with normal scale bandwidth
fhat2.grevillea.ns <- kdde(x=grevillea, deriv.order=2, H=Hns(grevillea, deriv.order=2))
fhat2.grevillea.ns <- kdde.truncate(fhat2.grevillea.ns, wa.polygon)
fhat2.grevillea.curv.ns <- kcurv(fhat2.grevillea.ns)

wa.map()
plot(fhat2.grevillea.curv.ns, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col2)
## Fig 5.7b
## kernel density curvature estimate with UCV bandwidth
fhat2.grevillea.ucv <- kdde(x=grevillea, deriv.order=2, H=Hucv(jitter(grevillea), deriv.order=2))
fhat2.grevillea.ucv <- kdde.truncate(fhat2.grevillea.ucv, wa.polygon)
fhat2.grevillea.curv.ucv <- kcurv(fhat2.grevillea.ucv)

wa.map()
plot(fhat2.grevillea.curv.ucv, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col2)
## Fig 5.7c
## kernel density curvature estimate with plug-in bandwidth
wa.map()
plot(fhat2.grevillea.curv, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1, col.fun=seq.col2)
## Fig 5.7d
## kernel density curvature estimate with SCV bandwidth
fhat2.grevillea.scv <- kdde(x=grevillea, deriv.order=2, H=Hscv(grevillea, deriv.order=2))
fhat2.grevillea.scv <- kdde.truncate(fhat2.grevillea.scv, wa.polygon)
fhat2.grevillea.curv.scv <- kcurv(fhat2.grevillea.scv)

wa.map()
plot(fhat2.grevillea.curv.scv, display="filled.contour", add=TRUE, drawlabels=FALSE, lwd=1,  col.fun=seq.col2)
## Fig 6.4
## kernel support/range estimate
chull.grevillea <- fhat.grevillea$x[chull(fhat.grevillea$x),]
chull.grevillea95 <- ksupp(fhat.grevillea, cont=95, convex.hull=TRUE)
chull.grevillea99 <- ksupp(fhat.grevillea, cont=99, convex.hull=TRUE)

wa.map()
points(grevillea, cex=1, pch=21, col=grey(0,alpha=0.5), bg=pt.col(4,alpha=0.5))
plot(fhat.grevillea, display="slice", cont=99, add=TRUE, drawlabels=FALSE, lwd=2)
polygon(chull.grevillea99, lwd=2, lty=2, border=seq.col(3)[3])
polygon(chull.grevillea, lwd=2, lty=3, border=grey(0,alpha=0.5))