Spatial Point Patterns: Methodology and Applications with R
by Adrian Baddeley, Ege Rubak and Rolf Turner


R code for chapter 8

Below is the R code used to generate results and figures in chapter 8. The code is in a rather raw format extracted from the book manuscript files – please read the instructions for use if you haven’t done so yet. You can download the script here.

### R code from vignette source '08distances.Rnw'
## Copyright (C) Adrian Baddeley, Ege Rubak and Rolf Turner

###################################################
### code chunk number 1: 08distances.Rnw:9-13
###################################################
source("R/startup.R")
Digits <- 4
options(digits=Digits)
# library(envel) # superseded


###################################################
### code chunk number 2: examplediagrams
###################################################
## construct example diagrams for nearest distance
set.seed(104)
## parameters
R <- 0.25
Rplus <- 0.275
Rminus <- 0.2
W <- square(1)
## data point in question
XI <- ppp(0.5, 0.5, window=W)
## points outside circle
H <- disc(Rplus, XI)
OtherPoints <- runifpoint(15, setminus.owin(W, H))
Window(OtherPoints) <- W
X <- superimpose(XI, OtherPoints)
## nearest points
Nearest <- ppp(x=XI$x+R/sqrt(2), y=XI$y+R/sqrt(2), window=W)
#SecondNearest <- OtherPoints[nncross(XI, OtherPoints)$which]
## circles
ContactCircle <- disc(R, XI)
SmallerCircle <- disc(Rminus, XI)
## arrows
ArrowNearest <- onearrow(superimpose(XI, Nearest))
#ArrowSecondNearest <- onearrow(superimpose(XI, SecondNearest))
## construct figures for nearest neighbour
PCEX <- 1
nndistDef <- layered(W, XI, OtherPoints, 
                     Nearest, ContactCircle, ArrowNearest,
                     plotargs=list(list(),
                                   list(pch=16, cex=PCEX),
                                   list(pch=16, cex=PCEX),
                                   list(pch=16, cex=PCEX),
                                   list(lwd=1, lty=2),
                                   list(pch=16, cex=PCEX, col.head="grey", 
                                        do.points=FALSE)))
nndistExceeds <- nndistDef
nndistExceeds[[5]] <- SmallerCircle
layerplotargs(nndistExceeds)[[1]] <- list(type="n")
## figures for empty space
## Find a point that has a lot of empty space around it
## and doesn't have XI as its nearest neighbour
diri <- dirichlet(X)
til <- tiles(diri)
dis <- unlist(lapply(til, 
                    function(z, XX) { 
                        v <- as.ppp(vertices(z), Window(X))
                        dvX <- nncross(v, X, what="d")
                        b <- bdist.points(v)
                        max(0, dvX[dvX < b])
                    },
                    XX=X))
dis[1] <- 0
best <- which.max(dis)
besttile <- til[[best]]
v <- as.ppp(vertices(besttile), Window(X))
dvX <- nncross(v, X, what="d")
bv <- bdist.points(v)
vbest <- v[which.max(dvX[dvX < bv])]
alpha <- 0.8
U <- ppp(alpha * vbest$x + (1-alpha)* X$x[best],
         alpha * vbest$y + (1-alpha)* X$y[best],
         window=W)
## now construct diagram around U
RUX <- nncross(U, X, what="dist")
XJ <- X[nncross(U, X, what="which")]
UXContactCircle <- disc(RUX, U)
UXSmallerCircle <- disc(RUX * 0.75, U)
ArrowUX <- onearrow(superimpose(U, XJ))
emptyspaceDef <- layered(W, U, X,
                         UXContactCircle, ArrowUX,
                         plotargs=list(list(),
                                   list(pch=3, cex=PCEX),
                                   list(pch=16, cex=PCEX),
                                   list(lwd=1, lty=2),
                                   list(pch=16, cex=PCEX, 
                                        do.points=FALSE)))
Closeup <- owin(U$x + c(-1,1) * RUX * 2.5,
                U$y + c(-1,1) * RUX * 1.8)
Closeup <- grow.rectangle(boundingbox(X[Closeup]), RUX/10)
Closeup <- intersect.owin(W, Closeup)
ArrowUX <- onearrow(superimpose(U, XJ, W=Closeup))
emptyspaceExceeds <- layered(Closeup, U[Closeup], X[Closeup],
                         UXSmallerCircle, ArrowUX,
                         plotargs=list(list(type="n"),
                                   list(pch=3, cex=PCEX),
                                   list(pch=16, cex=PCEX),
                                   list(lwd=1),
                                   list(pch=16, cex=PCEX, col.head="grey",
                                        headfraction=0.35,
                                        do.points=FALSE)))


###################################################
### code chunk number 3: Unit2.Rnw:3-5
###################################################
newplot(12.5, 0.9)
setmargins(0)


###################################################
### code chunk number 4: 08distances.Rnw:176-177
###################################################
zeromargins() ## This strips away ALL white space


###################################################
### code chunk number 5: 08distances.Rnw:181-184
###################################################
plot(solist(nndistDef[-5], emptyspaceDef[-4]), 
     main="", main.panel="", nrows=1, 
     equal.scales=TRUE, mar.panel=0, hsep=2)


###################################################
### code chunk number 6: 08distances.Rnw:195-197
###################################################
## temporary
options(digits=2)


###################################################
### code chunk number 7: 08distances.Rnw:205-207
###################################################
M <- pairdist(redwood)
M[1:3, 1:5]


###################################################
### code chunk number 8: 08distances.Rnw:212-214
###################################################
v <- nndist(redwood)
v[1:3]


###################################################
### code chunk number 9: 08distances.Rnw:222-223 (eval = FALSE)
###################################################
## Z <- distmap(redwood)


###################################################
### code chunk number 10: 08distances.Rnw:267-269
###################################################
distmapred <- distmap(redwood, dimyx=1024)
distfunred <- distfun(redwood)


###################################################
### code chunk number 11: Unit2.Rnw:3-5
###################################################
newplot(12.5, 0.9)
setmargins(0)


###################################################
### code chunk number 12: 08distances.Rnw:275-280
###################################################
par(mfrow=c(1,2))
contour(distmapred, main="", drawlabels=FALSE, nlevels=25, lwd=2)
plot(redwood, add=TRUE, pch=16)
contour(distfunred, main="", drawlabels=FALSE, nlevels=25, lwd=2)
plot(redwood, add=TRUE, pch=16)


###################################################
### code chunk number 13: 08distances.Rnw:319-325
###################################################
U <- runifpoint(3, Window(redwood))
Z <- distmap(redwood)
Z[U]
nncross(U, redwood, what="dist")
f <- distfun(redwood)
f(U)


###################################################
### code chunk number 14: 08distances.Rnw:345-348
###################################################
nncross(U, redwood, k=2, what="dist")
f2 <- distfun(redwood, k=2)
f2(U)


###################################################
### code chunk number 15: 08distances.Rnw:379-380
###################################################
options(digits=Digits)


###################################################
### code chunk number 16: 08distances.Rnw:446-449
###################################################
clarkevans(redwood)
clarkevans.test(redwood, correction="donnelly", 
                alternative="clustered")


###################################################
### code chunk number 17: 08distances.Rnw:484-486
###################################################
hopskel(redwood)
hopskel.test(redwood, alternative="clustered")


###################################################
### code chunk number 18: Unit.Rnw:3-5
###################################################
newplot(6, 0.7)
setmargins(0)


###################################################
### code chunk number 19: 08distances.Rnw:516-517
###################################################
zeromargins() 


###################################################
### code chunk number 20: 08distances.Rnw:521-524
###################################################
opa <- par(cex=0.85)
redwoodfull.extra$plotit(main="")
par(opa)


###################################################
### code chunk number 21: 08distances.Rnw:559-560 (eval = FALSE)
###################################################
## stienen(redwoodfull)


###################################################
### code chunk number 22: Unit2.Rnw:3-5
###################################################
newplot(12.5, 0.9)
setmargins(0)


###################################################
### code chunk number 23: 08distances.Rnw:569-570
###################################################
zeromargins()


###################################################
### code chunk number 24: 08distances.Rnw:574-578
###################################################
par(mfrow=c(1,2))
stienen(redwoodfull, main="", legend=FALSE, 
        border=list(bg=NULL, lwd=2, cols=grey(0.3)))
plot(dirichlet(redwoodfull), main="")


###################################################
### code chunk number 25: 08distances.Rnw:616-617 (eval = FALSE)
###################################################
## plot(dirichlet(redwoodfull))


###################################################
### code chunk number 26: 08distances.Rnw:763-764
###################################################
zeromargins()


###################################################
### code chunk number 27: 08distances.Rnw:768-769
###################################################
plot(emptyspaceExceeds, main="")


###################################################
### code chunk number 28: fv.Rnw:3-5
###################################################
newplot(6, 0.5)
setmargins(0.5+c(3,3,1,0))


###################################################
### code chunk number 29: 08distances.Rnw:823-837
###################################################
curve(1 - exp(- pi * x^2), 
      from=0, to=1.5, 
      xlab=expression(italic(r)), 
      ylab=expression(italic(F(r))), main="", axes=FALSE)
xx <- (0:15)/10
yy <- (0:10)/10
segments(xx, 0, xx, 1, col=grey(0.6), lty=2)
segments(0, yy, 1.5, yy, col=grey(0.6), lty=2)
curve(1 - exp(- pi * x^2), 
      from=0, to=1.5, add=TRUE, lwd=2)
axis(2, pos=0)
axis(1, at=c(0,0.5,1,1.5), 
     labels=expression(0, 0.5/sqrt(lambda), 1/sqrt(lambda), 1.5/sqrt(lambda)),
     pos=0)


###################################################
### code chunk number 30: 08distances.Rnw:931-933
###################################################
Fs <- Fest(swedishpines)
Gs <- Gest(swedishpines)


###################################################
### code chunk number 31: 08distances.Rnw:957-958
###################################################
Fs


###################################################
### code chunk number 32: 08distances.Rnw:969-972 (eval = FALSE)
###################################################
## swp <- rescale(swedishpines)
## plot(Fest(swp))
## plot(Gest(swp))


###################################################
### code chunk number 33: fv2title.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,1,1))


###################################################
### code chunk number 34: 08distances.Rnw:983-988
###################################################
opa <- par(mfrow=c(1,2), cex=0.85)
swp <- rescale(swedishpines)
plot(Fest(swp))
plot(Gest(swp))
par(opa)


###################################################
### code chunk number 35: 08distances.Rnw:1012-1016
###################################################
load(datafilepath("trichotomy.rda"))
Fregu <- Fest(regu)
Finde <- Fest(inde)
Fclus <- Fest(clus)


###################################################
### code chunk number 36: fv3.Rnw:3-5
###################################################
newplot(12.5, 1.0)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 37: 08distances.Rnw:1022-1033
###################################################
opa <- par(mfrow=c(1,3), pty="s", cex=0.91)
## note: par(mfrow) sets cex=0.83. We increase it by 10%
xl <- c(0, 0.12)
yl <- c(0, 1)
plot(Fregu, 
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, xlim=xl, ylim=yl)
plot(Finde, 
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, xlim=xl, ylim=yl)
plot(Fclus, 
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, xlim=xl, ylim=yl)
par(opa)


###################################################
### code chunk number 38: 08distances.Rnw:1063-1078
###################################################
## synthetic example for dilated set
set.seed(987654)
X <- runifpoint(50)
W <- Window(X)
Xr <- dilation(X, 0.08)
XrW <- intersect.owin(Xr, W)
bXrW <- edges(Xr)[W]
DilationExample <- layered(W, XrW, bXrW, X,
                           plotargs=list(list(type="n"),
                                         list(col="grey", border=NA),
                                         list(lwd=2),
                                         list(pch=16)))
## trim it
Wtrim <- owin(c(0,1), c(0, 2/3))
DilationExample <- DilationExample[, Wtrim]


###################################################
### code chunk number 39: 08distances.Rnw:1082-1083
###################################################
zeromargins()


###################################################
### code chunk number 40: 08distances.Rnw:1087-1088
###################################################
plot(DilationExample, main="")


###################################################
### code chunk number 41: 08distances.Rnw:1122-1125
###################################################
Gregu <- Gest(regu)
Ginde <- Gest(inde)
Gclus <- Gest(clus)


###################################################
### code chunk number 42: fv3.Rnw:3-5
###################################################
newplot(12.5, 1.0)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 43: 08distances.Rnw:1131-1142
###################################################
par(mfrow=c(1,3), pty="s", cex=0.91)
## note: par(mfrow) sets cex=0.83. We increase it by 10%
xl <- c(0, 0.12)
yl <- c(0, 1)
plot(Gregu, 
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, xlim=xl, ylim=yl)
plot(Ginde,
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, xlim=xl, ylim=yl)
plot(Gclus,
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, xlim=xl, ylim=yl)
par(opa)


###################################################
### code chunk number 44: 08distances.Rnw:1244-1247
###################################################
swp <- rescale(swedishpines)
Fci <- varblock(swp, Fest, nx=5, correction="best")
Gci <- varblock(swp, Gest, nx=5, correction="best")


###################################################
### code chunk number 45: fv2.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 46: 08distances.Rnw:1253-1256
###################################################
par(mfrow=c(1,2))
plot(Fci, main="", legend=FALSE, xlim=c(0, 1))
plot(Gci, main="", legend=FALSE, xlim=c(0, 1))


###################################################
### code chunk number 47: 08distances.Rnw:1269-1271
###################################################
Fenv <- envelope(swp, Fest, nsim=39, fix.n=TRUE)
Genv <- envelope(swp, Gest, nsim=39, fix.n=TRUE)


###################################################
### code chunk number 48: fv2.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 49: 08distances.Rnw:1277-1280
###################################################
par(mfrow=c(1,2))
plot(Fenv, main="", legend=FALSE, xlim=c(0, 1))
plot(Genv, main="", legend=FALSE, xlim=c(0, 1))


###################################################
### code chunk number 50: 08distances.Rnw:1298-1299 (eval = FALSE)
###################################################
## plot(Fenv, hi - lo ~ r, shade=NULL, xlim=c(0, 2))


###################################################
### code chunk number 51: 08distances.Rnw:1339-1343
###################################################
Phi <- function(x) asin(sqrt(x))
Fglob <- envelope(swp, Fest, nsim=19, fix.n=TRUE,
                  global=TRUE, ginterval=c(0,1),
                  transform=expression(Phi(.)))


###################################################
### code chunk number 52: fv.Rnw:3-5
###################################################
newplot(6, 0.5)
setmargins(0.5+c(3,3,1,0))


###################################################
### code chunk number 53: 08distances.Rnw:1354-1355
###################################################
plot(Fglob, main="", xlim=c(0, 1), legend=FALSE)


###################################################
### code chunk number 54: 08distances.Rnw:1423-1424 (eval = FALSE)
###################################################
## plot(Fest(swp), . ~ theo)


###################################################
### code chunk number 55: 08distances.Rnw:1438-1440
###################################################
FS <- Fest(swp)
QG <- QQversion(Gest(swp))


###################################################
### code chunk number 56: fv2.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 57: 08distances.Rnw:1446-1449
###################################################
par(mfrow=c(1,2))
plot(FS, . ~ theo, main="", legend=FALSE)
plot(QG, main="", legend=FALSE)


###################################################
### code chunk number 58: 08distances.Rnw:1471-1472 (eval = FALSE)
###################################################
## plot(QQversion(Gest(swp)))


###################################################
### code chunk number 59: 08distances.Rnw:1505-1509
###################################################
r0 <- sqrt(area(swp)/2)/npoints(swp)
Gglob <- envelope(swp, Gest, nsim=19, fix.n=TRUE,
                  global=TRUE, ginterval=c(3*r0,1),
                  transform=expression(Phi(.)))


###################################################
### code chunk number 60: fv2.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 61: 08distances.Rnw:1518-1521
###################################################
par(mfrow=c(1,2))
plot(Fglob, . ~ theo, main="", legend=FALSE)
plot(Gglob, . ~ theo, main="", legend=FALSE)


###################################################
### code chunk number 62: 08distances.Rnw:1557-1580
###################################################
## example for hazard rate of point process
X <- swedishpines
W <- Window(X)
P <- X[24]
D2 <- disc(radius=30.7, centre=P)
D1 <- disc(radius=28.5, centre=P)
OO <- setminus.owin(D2, D1)
## remove points from D1
Y <- X[!inside.owin(X, w=D1)]
## arrow from P to nearest neighbour
j <- nncross(P,Y,what="which")
A <- onearrow(superimpose(P, Y[j]))
## clean diagram by removing points close to nearest neighbour
Y <- superimpose(Y[j], Y[pairdist(Y)[j,] > 4])
D3 <- disc(radius=32.2, centre=P)
Y <- Y[!inside.owin(Y, w=setminus.owin(D3, D2))]
# point falling in thin ring with no points in disc
PicHaz <- layered(W, OO, Y, P, A,
                  plotargs=list(list(type="n"), 
                                list(col="grey"), 
                                list(pch=16), 
                                list(pch=3, cex=1),
                                list(do.points=FALSE, col.head="grey")))


###################################################
### code chunk number 63: Unit.Rnw:3-5
###################################################
newplot(6, 0.7)
setmargins(0)


###################################################
### code chunk number 64: 08distances.Rnw:1585-1586
###################################################
zeromargins()


###################################################
### code chunk number 65: 08distances.Rnw:1590-1591
###################################################
plot(PicHaz, main="")


###################################################
### code chunk number 66: 08distances.Rnw:1677-1678 (eval = FALSE)
###################################################
## plot(Fest(cells), cbind(hazard, theohaz) ~ r)


###################################################
### code chunk number 67: fv3.Rnw:3-5
###################################################
newplot(12.5, 1.0)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 68: 08distances.Rnw:1684-1685
###################################################
setmargins(4,4,1,1)


###################################################
### code chunk number 69: 08distances.Rnw:1689-1697
###################################################
par(mfrow=c(1,3), cex=0.91)
plot(Fregu, cbind(hazard, theohaz) ~ r, 
     main="", col=1, legend=FALSE, ylab=expression(italic(h(r))))
plot(Finde, cbind(hazard, theohaz) ~ r, 
     main="", col=1, legend=FALSE, ylab=expression(italic(h(r))))
plot(Fclus, cbind(hazard, theohaz) ~ r, 
     main="", col=1, legend=FALSE, ylab=expression(italic(h(r))))
par(mfrow=c(1,1))


###################################################
### code chunk number 70: 08distances.Rnw:1716-1718
###################################################
hazenv <- envelope(swp, Fhazard, nsim=39, fix.n=TRUE,
                   transform=expression(./(2*pi*r)))


###################################################
### code chunk number 71: fv.Rnw:3-5
###################################################
newplot(6, 0.5)
setmargins(0.5+c(3,3,1,0))


###################################################
### code chunk number 72: 08distances.Rnw:1730-1731
###################################################
plot(hazenv, legend=FALSE, main="")


###################################################
### code chunk number 73: 08distances.Rnw:1821-1824 (eval = FALSE)
###################################################
## FS <- Fest(swp)
## GS <- Gest(swp)
## DD <- eval.fv(GS-FS)


###################################################
### code chunk number 74: 08distances.Rnw:1830-1835 (eval = FALSE)
###################################################
## DigDif <- function(X, ..., r=NULL) {
##   FX <- Fest(X, ..., r=r)
##   GX <- Gest(X, ..., r=FX$r)
##   eval.fv(GX-FX)
## }


###################################################
### code chunk number 75: 08distances.Rnw:1840-1841 (eval = FALSE)
###################################################
## DE <- envelope(swp, DigDif, nsim=19, fix.n=TRUE, global=TRUE)


###################################################
### code chunk number 76: 08distances.Rnw:1887-1890
###################################################
Jregu <- Jest(regu)
Jinde <- Jest(inde)
Jclus <- Jest(clus)


###################################################
### code chunk number 77: fv3.Rnw:3-5
###################################################
newplot(12.5, 1.0)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 78: 08distances.Rnw:1894-1895
###################################################
setmargins(4,4,1,1)


###################################################
### code chunk number 79: 08distances.Rnw:1899-1907
###################################################
par(mfrow=c(1,3), cex=0.91)
plot(Jregu, 
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, ylim.covers=c(0,2))
plot(Jinde, 
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, ylim.covers=c(0,2))
plot(Jclus, 
     cbind(km, theo) ~ r, main="", col=1, legend=FALSE, ylim.covers=c(0,2))
par(mfrow=c(1,1))


###################################################
### code chunk number 80: fasp2x2.Rnw:3-5
###################################################
newplot(12, 0.75)
setmargins(4, 4, 0, 0.5)


###################################################
### code chunk number 81: 08distances.Rnw:1987-1988
###################################################
plot(allstats(swp), main="", legend=FALSE)


###################################################
### code chunk number 82: 08distances.Rnw:2089-2092
###################################################
swp <- rescale(swedishpines)
JS <- Jest(swp)
JiS <- Jinhom(swp, sigma=bw.scott)


###################################################
### code chunk number 83: fv2.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 84: 08distances.Rnw:2097-2100
###################################################
par(mfrow=c(1,2))
plot(JS, main="", ylim.covers=0, legend=FALSE)
plot(JiS, main="", ylim.covers=0, legend=FALSE)


###################################################
### code chunk number 85: 08distances.Rnw:2116-2120
###################################################
set.seed(19221101)
X <- rSSI(0.05, win=owin(c(0,1), c(0, 3)))
Y <- affine(X, mat=diag(c(1, 1/3)))
fn <- nnorient(Y)


###################################################
### code chunk number 86: Unit.Rnw:3-5
###################################################
newplot(6, 0.7)
setmargins(0)


###################################################
### code chunk number 87: 08distances.Rnw:2149-2150
###################################################
rose(fn,  main="", col="grey")


###################################################
### code chunk number 88: 08distances.Rnw:2184-2206
###################################################
## synthetic data for diagram
set.seed(1944)
X <- runifpoint(25)
W <- levelset(density(X, dimyx=512), 25)
Y <- runifpoint(1, erosion(complement.owin(W), 0.15))
# clip
B <- shift(shift(square(0.6), origin="midpoint"), coords(Y))
W <- intersect.owin(W, B)
B <- intersect.owin(Frame(W), B)
Y <- Y[B]
X <- X[B]
## project Y onto W 
Z <- project2set(Y, W)
## make arrow
YZ <- onearrow(superimpose(Y, Z, W=Frame(X)))
## 
PCEX <- 1
Hdemo <- layered(W, Y, Z, YZ,
                 plotargs=list(list(col="grey"),
                     list(pch=16, cex=PCEX),
                     list(pch=1, cex=PCEX), 
                     list(headangle=20, lwd=2, col.head="black")))


###################################################
### code chunk number 89: 08distances.Rnw:2210-2211
###################################################
zeromargins()


###################################################
### code chunk number 90: 08distances.Rnw:2215-2216
###################################################
plot(Hdemo, main="")


###################################################
### code chunk number 91: Anemones.Rnw:3-5
###################################################
newplot(7,0.8)
setmargins(0)


###################################################
### code chunk number 92: 08distances.Rnw:2276-2277
###################################################
plot(anemones, main="", markscale=1, bg="grey", legend=FALSE)


###################################################
### code chunk number 93: 08distances.Rnw:2304-2307
###################################################
Anemones <- anemones
width <- sidelengths(Window(Anemones))[1]
unitname(Anemones) <- list("cm", "cm", 145/width)


###################################################
### code chunk number 94: 08distances.Rnw:2316-2318
###################################################
Anemones <- rescale(Anemones)
marks(Anemones) <- marks(Anemones) * 145/width


###################################################
### code chunk number 95: 08distances.Rnw:2324-2327
###################################################
AnemoneSet <- discs(Anemones, eps=0.1, mask=TRUE)
Hanem <- Hest(AnemoneSet, conditional=TRUE)
Hsmooth <- Smooth(Hanem, which="hazard")


###################################################
### code chunk number 96: fv2.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 97: 08distances.Rnw:2332-2339
###################################################
par(mfrow=c(1,2))
plot(Hanem, main="", 
     ylab=expression(italic(hat(H)(r))),
     legend=FALSE)
plot(Hsmooth, hazard ~ r, 
     ylab=expression(italic(hat(h)(r))), 
     main="")


###################################################
### code chunk number 98: 08distances.Rnw:2354-2355 (eval = FALSE)
###################################################
## AnemoneSet <- discs(Anemones, eps=0.1, mask=TRUE)


###################################################
### code chunk number 99: 08distances.Rnw:2364-2365 (eval = FALSE)
###################################################
## Hanem <- Hest(AnemoneSet, conditional=TRUE)


###################################################
### code chunk number 100: 08distances.Rnw:2370-2371 (eval = FALSE)
###################################################
## Hsmooth <- Smooth(Hanem, which="hazard")


###################################################
### code chunk number 101: 08distances.Rnw:2374-2383
###################################################
if(draftversion) {
  hh <- heather$coarse
  resolutionmessage <- 
      inFont("textbf", "(Coarse resolution image used for draft)")
} else {
  hh <- heather$fine
  resolutionmessage <- ""
}
hh <- flipxy(hh)


###################################################
### code chunk number 102: HeatherHoriz.Rnw:3-5
###################################################
newplot(6, 0.5)
zeromargins()


###################################################
### code chunk number 103: 08distances.Rnw:2390-2391
###################################################
plot(hh, main="")


###################################################
### code chunk number 104: 08distances.Rnw:2425-2427
###################################################
HH <- with(heather, Hest(fine))
SH <- Smooth(HH)


###################################################
### code chunk number 105: fv2.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 106: 08distances.Rnw:2434-2437
###################################################
par(mfrow=c(1,2))
plot(HH, main="")
plot(SH, hazard ~ r, main="", ylab=expression(italic(h(r))))


###################################################
### code chunk number 107: 08distances.Rnw:2544-2546
###################################################
GC <- with(copper, Gfox(SouthPoints, SouthLines))
JC <- with(copper, Jfox(SouthPoints, SouthLines, eps=0.1))


###################################################
### code chunk number 108: fv2.Rnw:3-5
###################################################
newplot(12, 0.95)
setmargins(0.5+c(3,3,0,1))


###################################################
### code chunk number 109: 08distances.Rnw:2557-2560
###################################################
par(mfrow=c(1,2))
plot(GC, main="", legend=FALSE)
plot(JC, main="", legend=FALSE, ylim.covers=0)


###################################################
### code chunk number 110: 08distances.Rnw:2623-2697
###################################################
## synthetic example for edge corrections
set.seed(1492192)
W <- square(1)
Wplus <- grow.rectangle(W, 1, 0.5)
## reference point
P <- ppp(0.9, 0.85, window=W)
R <- 0.4
DD <- disc(R, P)
Dlarge <- disc(R * 1.3, P)
Dsmall <- disc(R * 0.7, P)
## nearest neighbour (falls outside window)
Y <- runifpoint(2, setminus.owin(Dsmall, grow.rectangle(W, 0.04)))
## other, non-relevant, points
Z <- runifpoint(50, setminus.owin(Wplus, Dlarge))
## all data points
X <- superimpose(Y, Z, W=Wplus)
## 
FedgeEffect <- layered(Wplus, W, P, DD, X)
PCEX <- 1
layerplotargs(FedgeEffect) <- list(list(type="n"),
                                 list(lwd=2),
                                 list(pch=3, cex=PCEX),
                                 list(lty=2, lwd=2),
                                 list(pch=16, cex=PCEX))
## clip to smaller window
FedgeEffect <- FedgeEffect[ , trim.rectangle(Wplus, 0.5, 0.25)]
## 
Rtiny <- 0.2
Xplusr <- dilation(X, Rtiny)
bdryXplusr <- edges(Xplusr)[Wplus]
XplusrW <- intersect.owin(W, Xplusr)
FaverageArea <- layered(Wplus, bdryXplusr, XplusrW, W, P, X)
layerplotargs(FaverageArea) <- list(list(type="n"),
                                  list(),
                                  list(col="grey"),
                                  list(lwd=2),
                                  list(pch=3, cex=PCEX),
                                  list(pch=16, cex=PCEX))
## clip to smaller window
FaverageArea <- FaverageArea[ , trim.rectangle(Wplus, 0.5, 0.25)]
##
rr <- 0.155
Xplusrr <- dilation(X, rr)
Wminus <- erosion(W, rr)
bdryXplusrrW <- edges(Xplusrr)[setminus.owin(W, Wminus)]
WW <- grow.rectangle(W, rr)
XX <- X[WW]
XplusrrWminus <- intersect.owin(Wminus, Xplusrr)
Yard <- yardstick(mean(Wminus$xrange), Wminus$yrange[2],
                  mean(Wminus$xrange), W$yrange[2],
                  expression(italic(r)))
Fborder <- layered(WW, bdryXplusrrW, XplusrrWminus, W, Wminus, XX, Yard,
                   plotargs=list(list(type="n"),
                                 list(),
                                 list(col="grey", border=NA),
                                 list(lwd=2),
                                 list(lty=2, lwd=2),
                                 list(pch=16, cex=PCEX),
                                 list(cex=1.2)
                       ))
notXplusrrWminus <- setminus.owin(Wminus, Xplusrr)
bdryXplusrrWminus <- edges(Xplusrr)[Wminus]
FhazardGraph <- layered(WW, bdryXplusrrW, 
                   notXplusrrWminus, bdryXplusrrWminus, 
                   W, Wminus, XX, Yard, 
                   plotargs=list(list(type="n"),
                                 list(),
                                 list(col="grey", border=NA),
                                 list(lwd=5),
                                 list(lwd=2),
                                 list(lty=2, lwd=2),
                                 list(pch=16, cex=PCEX),
                                 list(cex=1.2, split=FALSE, length=0.15)
                       ))


###################################################
### code chunk number 111: 08distances.Rnw:2767-2768
###################################################
zeromargins()


###################################################
### code chunk number 112: 08distances.Rnw:2772-2773
###################################################
plot(FaverageArea[-5], main="")


###################################################
### code chunk number 113: 08distances.Rnw:2840-2841
###################################################
zeromargins()


###################################################
### code chunk number 114: 08distances.Rnw:2845-2846
###################################################
plot(FedgeEffect, main="")


###################################################
### code chunk number 115: Unit2.Rnw:3-5
###################################################
newplot(12.5, 0.9)
setmargins(0)


###################################################
### code chunk number 116: 08distances.Rnw:2967-2968
###################################################
zeromargins()


###################################################
### code chunk number 117: 08distances.Rnw:2972-2974
###################################################
plot(solist(Fborder, FhazardGraph), 
     main="", main.panel="", equal.scales=TRUE, mar.panel=0, hsep=1)


###################################################
### code chunk number 118: 08distances.Rnw:3756-3758
###################################################
(1 - 0.9) == 0.1
1 - 10 * (1 - 0.9)