## ----results='hide', message=FALSE, warning=FALSE----------------------------- require(recurse) require(scales) ## ----fig.width=6, fig.height=6------------------------------------------------ data(martin) plot(martin$x, martin$y, col = viridis_pal()(nrow(martin)), pch = 20, xlab = "x", ylab = "y", asp = 1) ## ----echo=FALSE, fig.width=4, fig.height=4------------------------------------ steps = sqrt(diff(martin$x)^2 + diff(martin$y)^2) hist(steps, xlab = "Step length", main = "") ## ----fig.width=7, fig.height=3.5, fig.show='hold'----------------------------- martinvisit = getRecursions(martin, 2) par(mfrow = c(1, 2), mar = c(4, 4, 1, 1)) plot(martinvisit, martin, legendPos = c(13, -10)) drawCircle(-15, -10, 2) hist(martinvisit$revisits, breaks = 20, main = "", xlab = "Revisits (radius = 2)") summary(martinvisit$revisits) ## ----------------------------------------------------------------------------- head(martinvisit$revisitStats) ## ----echo=FALSE, fig.width=7, fig.height=4------------------------------------ boxplot(martinvisit$revisitStats$timeInside ~ as.numeric(format(martinvisit$revisitStats$entranceTime, "%H")), xlab = "Entrance time", ylab = "Visit duration (h)") ## ----echo=FALSE, fig.width=7, fig.height=3.5---------------------------------- par(mfrow = c(1, 2), mar = c(4, 4, 1, 1)) hist(martinvisit$revisitStats$timeSinceLastVisit, xlab = "Time since last visit (h)", main = "") plot(martinvisit$revisitStats$timeSinceLastVisit, martinvisit$revisitStats$timeInside, xlab = "Time since last visit (h)", ylab = "Time inside (h)") lines(lowess(x = martinvisit$revisitStats$timeSinceLastVisit, y = martinvisit$revisitStats$timeInside, delta = 0.01 * diff(range(martinvisit$revisitStats$timeSinceLastVisit, na.rm = TRUE))), col = "red") ## ----fig.width=5, fig.height=5------------------------------------------------ data(wren) animals = rbind(martin, wren) plot(animals$x, animals$y, col = c("red", "darkblue")[as.numeric(animals$id)], pch = ".", xlab = "x", ylab = "y", asp = 1) ## ----fig.width=5, fig.height=5, fig.show='hold'------------------------------- popvisit = getRecursions(animals, 2) head(popvisit$revisitStats) plot(popvisit, animals, legendPos = c(15, -10)) ## ----------------------------------------------------------------------------- locations = data.frame(x = c(0, 10, 20), y = c(0, 10, 10)) locvisit = getRecursionsAtLocations(wren, locations, 2) locvisit$revisits ## ----fig.width=5, fig.height=5------------------------------------------------ visitThreshold = quantile(popvisit$revisits, 0.8) popCluster = kmeans(animals[popvisit$revisits > visitThreshold,c("x", "y")], centers = 3) plot(animals$x, animals$y, col = c("red", "darkblue")[as.numeric(animals$id)], pch = ".", xlab = "x", ylab = "y", asp = 1) with(animals[popvisit$revisits > visitThreshold,], points(x, y, col = c(alpha("red", 0.5), alpha("darkblue", 0.5))[as.numeric(id)], pch = c(15:17)[popCluster$cluster]) ) legend("topleft", pch = 15:17, legend = paste("cluster", 1:3), bty = "n") ## ----echo=FALSE, fig.width=5, fig.height=5------------------------------------ protectedArea = sf::st_polygon( list(cbind(c(4, 10, 9, 3.5, 4), c(11, 9, 13, 13.5, 11))) ) protectedArea = sf::st_sfc(protectedArea, crs = "EPSG:3410") plot(martin$x, martin$y, type = "l", pch = 20, xlab = "x", ylab = "y", asp = 1) plot(protectedArea, add = TRUE, border = "red", lwd = 2) ## ----------------------------------------------------------------------------- getRecursionsInPolygon(martin, protectedArea) ## ----------------------------------------------------------------------------- breaks = martin$t[c(1, nrow(martin)/2, nrow(martin))] beforeAfterResTime = calculateIntervalResidenceTime(martinvisit, breaks = breaks, labels = c("before", "after")) head(beforeAfterResTime) tail(beforeAfterResTime) ## ----echo=FALSE, fig.width=4, fig.height=4------------------------------------ plot(x = (1:20), y = pi * (1:20)^2, type = "l", xlab = "radius", ylab = "area") ## ----echo=FALSE, fig.width=5, fig.height=5------------------------------------ radii = seq(from = 0.5, to = 20, by = 0.25) visits = NULL for (i in 1:length(radii)) { visits[[i]] = getRecursions(martin, radius = radii[i]) } plot(x = radii, y = lapply(visits, function(x) mean(x$revisits)), pch = 16, xlab = "radius", ylab = "mean revisits") ## ----echo=FALSE, fig.width=7, fig.height=2.5---------------------------------- radii = radii[1:which(radii == 9.5)] visits = visits[1:length(radii)] par(mfrow = c(1, 3), mar = c(4, 4, 1, 1)) plot(x = radii, y = lapply(visits, function(x) mean(x$revisits)), pch = 16, xlab = "radius", ylab = "mean(revisits)") plot(x = radii, y = lapply(visits, function(x) var(log(x$revisits))), pch = 16, xlab = "radius", ylab = "var(log((revisits))") plot(x = radii, y = lapply(visits, function(x) max(x$revisits)), pch = 16, xlab = "radius", ylab = "max(revisits)") ## ----echo=FALSE, fig.width=7, fig.height=7------------------------------------ par(mfrow = c(2, 2), mar = c(4, 4, 1, 1)) r = c(0.5, 1.5, 4, 6) for (rad in r) { plot(visits[[which(radii == rad)]], martin, main = paste("Radius", rad), legendPos = c(12, -12)) drawCircle(-11, -12, rad) } ## ----fig.width=7, fig.height=7, fig.show='hold'------------------------------- par(mfrow = c(2, 2), mar = c(4, 4, 2, 1)) nLocs = c(600, 500, 400, 300) martin.radomgap = NULL martinvisit.randomgap = NULL for (i in 1:length(nLocs)) { martin.radomgap[[i]] = martin[sort(sample(1:600, nLocs[i], replace = FALSE)),] martinvisit.randomgap[[i]] = getRecursions(martin.radomgap[[i]], radius = 2) print(paste(nLocs[i], "locations, mean revisits:", mean(martinvisit.randomgap[[i]]$revisits))) plot(martinvisit.randomgap[[i]], martin.radomgap[[i]], main = paste(nLocs[i], "locations"), legendPos = c(12, -10)) } ## ----fig.width=7, fig.height=7, fig.show='hold'------------------------------- par(mfrow = c(2, 2), mar = c(4, 4, 2, 1)) nLocs = c(600, 500, 400, 300) martin.biasgap = NULL martinvisit.biasgap = NULL xyVal = order(1:600, -3 * martin$x + martin$y + rnorm(600, 0, 5), decreasing = TRUE) for (i in 1:length(nLocs)) { martin.biasgap[[i]] = martin[sort(xyVal[1:nLocs[i]]),] martinvisit.biasgap[[i]] = getRecursions(martin.biasgap[[i]], radius = 2) print(paste(nLocs[i], "locations, mean revisits:", mean(martinvisit.biasgap[[i]]$revisits))) plot(martinvisit.biasgap[[i]], martin.biasgap[[i]], main = paste(nLocs[i], "locations"), legendPos = c(12, -10)) }