Solved! Go to Solution.
# ADD REQUIRED PACKAGES require(rgdal) require(sp) require(spatstat) options(scipen=5) # SIMULATE 1000 RANDOM OBS WITH A BINOMINAL [0,1] MARK COLUMN, THE ASSUMPTION IS THAT A # VALUE OF 1 & 2 REPRESENTS PRESENCE OF DESEASE IN EACH SPP i=1000 spp1 <- SpatialPointsDataFrame(cbind(round(runif(i), 2), round(runif(i), 2)), data.frame(ID=seq(1,i,1), MARKS=rbinom(i,1,0.5))) spp2 <- SpatialPointsDataFrame(cbind(round(runif(i), 2), round(runif(i), 2)), data.frame(ID=seq(1,i,1), MARKS=rbinom(i,1,0.5))) # RECODE spp2 MARKS AS 2 spp2@data$MARKS[spp2@data$MARKS == 1] <- 2 ############################################# ###### START MONTE CARLO CROSS-K ANALYSIS HERE ###### ############################################# # COMBINE INTO A SINGLE sp POINT OBJECT AND COERCE MARKS COL TO FACTOR spp <- rbind( spp1[spp1@data$MARKS > 0 ,], spp2[spp2@data$MARKS > 0 ,]) spp@data$MARKS <- as.factor(spp@data$MARKS) # CREATE CONVEX HULL FOR ANALYSIS WINDOW W=ripras(coordinates(spp)) # COERCE TO spatstat ppp OBJECT AND CREATE MARKS spp.ppp=as.ppp(coordinates(spp), W) spp.ppp=setmarks(spp.ppp, as.factor(spp$MARKS)) # ESTIMATE BANDWIDTH area <- area.owin(W) lambda <- spp.ppp$n/area ripley <- min(diff(W$xrange), diff(W$yrange))/4 rlarge <- sqrt(1000/(pi * lambda)) rmax <- min(rlarge, ripley) bw <- seq(0, rmax, by=rmax/10) # CALCULATE PERMUTED CROSS-K AND PLOT RESULTS Lenv <- envelope(spp.ppp, fun="Kcross", r=bw, i="1", j="2", nsim=99, nrank=5, transform=expression(sqrt(./pi)-bw), global=TRUE) plot(Lenv, main="Cross K", xlab="Distance", ylab="L(r)", legend=F, col=c("white","black","grey","grey"), lty=c(1,2,2,2), lwd=c(2,1,1,1) ) polygon( c(Lenv$r, rev(Lenv$r)), c(Lenv$lo, rev(Lenv$hi)), col="lightgrey", border="grey") lines(supsmu(bw, Lenv$obs), lwd=2) lines(bw, Lenv$theo, lwd=1, lty=2) legend("topleft", c(expression(hat(L)(r)), "Simulation Envelope", "theo"), pch=c(-32,22), col=c("black","grey"), lty=c(1,0,2), lwd=c(2,0,2), pt.bg=c("white","grey"))
# ADD REQUIRED PACKAGES require(rgdal) require(sp) require(spatstat) options(scipen=5) # SIMULATE 1000 RANDOM OBS WITH A BINOMINAL [0,1] MARK COLUMN, THE ASSUMPTION IS THAT A # VALUE OF 1 & 2 REPRESENTS PRESENCE OF DESEASE IN EACH SPP i=1000 spp1 <- SpatialPointsDataFrame(cbind(round(runif(i), 2), round(runif(i), 2)), data.frame(ID=seq(1,i,1), MARKS=rbinom(i,1,0.5))) spp2 <- SpatialPointsDataFrame(cbind(round(runif(i), 2), round(runif(i), 2)), data.frame(ID=seq(1,i,1), MARKS=rbinom(i,1,0.5))) # RECODE spp2 MARKS AS 2 spp2@data$MARKS[spp2@data$MARKS == 1] <- 2 ############################################# ###### START MONTE CARLO CROSS-K ANALYSIS HERE ###### ############################################# # COMBINE INTO A SINGLE sp POINT OBJECT AND COERCE MARKS COL TO FACTOR spp <- rbind( spp1[spp1@data$MARKS > 0 ,], spp2[spp2@data$MARKS > 0 ,]) spp@data$MARKS <- as.factor(spp@data$MARKS) # CREATE CONVEX HULL FOR ANALYSIS WINDOW W=ripras(coordinates(spp)) # COERCE TO spatstat ppp OBJECT AND CREATE MARKS spp.ppp=as.ppp(coordinates(spp), W) spp.ppp=setmarks(spp.ppp, as.factor(spp$MARKS)) # ESTIMATE BANDWIDTH area <- area.owin(W) lambda <- spp.ppp$n/area ripley <- min(diff(W$xrange), diff(W$yrange))/4 rlarge <- sqrt(1000/(pi * lambda)) rmax <- min(rlarge, ripley) bw <- seq(0, rmax, by=rmax/10) # CALCULATE PERMUTED CROSS-K AND PLOT RESULTS Lenv <- envelope(spp.ppp, fun="Kcross", r=bw, i="1", j="2", nsim=99, nrank=5, transform=expression(sqrt(./pi)-bw), global=TRUE) plot(Lenv, main="Cross K", xlab="Distance", ylab="L(r)", legend=F, col=c("white","black","grey","grey"), lty=c(1,2,2,2), lwd=c(2,1,1,1) ) polygon( c(Lenv$r, rev(Lenv$r)), c(Lenv$lo, rev(Lenv$hi)), col="lightgrey", border="grey") lines(supsmu(bw, Lenv$obs), lwd=2) lines(bw, Lenv$theo, lwd=1, lty=2) legend("topleft", c(expression(hat(L)(r)), "Simulation Envelope", "theo"), pch=c(-32,22), col=c("black","grey"), lty=c(1,0,2), lwd=c(2,0,2), pt.bg=c("white","grey"))