MVKSA | Hook leaf Grevillea
Mvksa Home   Daily Temp   World Bank  
Earth Quake   Stem Cell   Cardio  
Grevillea   Dumbbell   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))