knitr::opts_chunk$set(cache = TRUE, dev = c("png", "pdf"))
library(here)
library(eucs)
library(gaussDiff)
library(raster)
library(rgeos)
library(vegan)

Calculate the geographic distance between the centroid of the Greater Grampians IBRA subregion and the centroids of the other South-eastern subregions.

rgn_names <- sort(unique(southeast$ibra_subregion))
ibra_subs <- aggregate(map_ibra_southeast, by = "IBRA_SUB_N")
centroids <- gCentroid(
  ibra_subs, byid = TRUE, id = ibra_subs@data$IBRA_SUB_N
)
dists     <- spDistsN1(centroids, centroids["Greater Grampians"], TRUE)
dists     <- dists[rownames(centroids@coords) %in% rgn_names]
names(dists) <- rgn_names

Calculate the Kullback-Leibler distance between the Grampians and the other regions based on the environment defined by relief, topographic wetness, moisture index and sand.

vars <- c(
  "mean_moisture_index_of_low_qtr", "topographic_wetness_index_3sec",
  "relief_1000m_radius", "total_nitrogen"
)

kldists <- vapply(
  rgn_names,
  function(x) {
    r <- covariates_southeast$ibra_subregion == x
    f <- function(x, y) {
      x <- na.omit(as.matrix(x))
      for (i in y) {
        x[, i] <- log(x[, i])
      }
      x
    }
    s <- f(covariates_southeast[r, vars], c(1, 3))
    g <- f(covariates_grampians[vars], c(1, 3))
    normdiff(colMeans(g), cov(g), colMeans(s), cov(s), method = "KL")
  },
  numeric(1)
)

cat(
  round(cor(dists, kldists), 1),
  file = here(
    "notebooks/environmental_distance_metrics_files/figure-html/kldistcor.tex"
  )
)

kldists_univariate <- lapply(
  rgn_names,
  function(x) {
    r <- covariates_southeast$ibra_subregion == x
    f <- function(x, y) {
      x <- na.omit(as.matrix(x))
      for (i in y) {
        x[, i] <- log(x[, i])
      }
      x
    }
    s <- f(covariates_southeast[r, vars], c(1, 3))
    g <- f(covariates_grampians[vars], c(1, 3))
    ans <- sapply(
      1:4,
      function(i) {
        normdiff(
          mean(g[, i]), matrix(var(g[, i])), mean(s[, i]), matrix(var(s[, i])),
          method = "KL"
        )
      }
    )
    ans <- rbind(ans)
    rownames(ans) <- x
    colnames(ans) <- vars
    ans
  }
)

kldists_univariate <- do.call(rbind, kldists_univariate)
colnames(kldists_univariate) <- c("mlq", "twi", "r1k", "tn")

kldists_univariate <- reshape(
  data.frame(region = rownames(kldists_univariate), kldists_univariate),
  idvar = "region",
  varying = colnames(kldists_univariate),
  v.names = "kldist_var",
  timevar = "var",
  times = colnames(kldists_univariate),
  direction = "long",
  new.row.names = 1:length(kldists_univariate)
)

Calculate the Jaccard dissimilarity between the Grampians and the Southeast IBRA subregions.

subreg_prev <- do.call(
  rbind,
  lapply(
    split(wide_southeast[-1:-6], wide_southeast$ibra_subregion), colMeans
  )
)
grampians_prev <- colMeans(wide_grampians[-1:-5])
grampians_only <- setdiff(names(grampians_prev), colnames(subreg_prev))
southeast_only <- setdiff(colnames(subreg_prev), names(grampians_prev))
grampians_extra <- rep(0, length(southeast_only))
southeast_extra <- matrix(0, nrow = NROW(subreg_prev), length(grampians_only))
names(grampians_extra) <- southeast_only
colnames(southeast_extra) <- grampians_only
rownames(southeast_extra) <- rownames(subreg_prev)
subreg_prev <- cbind(subreg_prev, southeast_extra)
grampians_prev <- c(grampians_prev, grampians_extra)
subreg_prev <- subreg_prev[, sort(colnames(subreg_prev))]
grampians_prev <- grampians_prev[sort(names(grampians_prev))]
subreg_prev <- rbind(grampians_prev, subreg_prev)
community_dist <- as.matrix(
  vegdist(subreg_prev, method = "jaccard")
)[rgn_names, "grampians_prev"]

Plot of geographic and Jaccard distances of IBRA subregions from the Grampians.

par(mfrow = c(1, 2), oma = c(5, 0, 1, 1), mar = c(0, 5, 0, 0))

plot(
  dists, community_dist, las = 1, xlab = "",
  ylab = "Jaccard dissimilarity", pch = 19, xlim = c(0, 1000),
  ylim = c(.8, 1.01)
)
text(
  dists, community_dist, rgn_names,cex = .75,
  pos =
    ifelse(
      rgn_names %in% c(
        "Strzelecki Ranges", "East Gippsland Lowlands", "Monaro",
        "Highlands-Northern Fall", "Snowy Mountains",
        "Lower Slopes", "Bateman"
      ),
      2,
      ifelse(
        rgn_names == "Jervis",
        3,
        ifelse(rgn_names %in% c("Victorian Alps", "Ettrema"), 1, 4)
      )
    )
)

plot(
  dists, kldists, las = 1, xlab = "Distance from Grampians (km)",
  ylab = "Kullback Leibler Divergence", pch = 19, xlim = c(0, 1000),
  ylim = c(5, 35)
)
text(
  dists, kldists, rgn_names,
  pos =
    ifelse(
      rgn_names %in% c(
        "Strzelecki Ranges", "Highlands-Southern Fall",
        "Bondo", "Monaro", "Jervis", "East Gippsland Lowlands"
      ),
      2, 4
    ),
  cex = .75
)
mtext("Distance from Grampians (km)", 1, 3, outer = TRUE)

IycgLS0tCiMnIHRpdGxlOiAiTWV0cmljcyBvZiBlbnZpcm9ubWVudGFsIGFuZCBjb21tdW5pdHkgZGlzc2ltaWxhcml0eSBiZXR3ZWVuIHJlZ2lvbnMiCiMnIGF1dGhvcjogIldpbGxpYW0gSy4gTW9ycmlzIgojJyBkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCiMnIG91dHB1dDoKIycgICBybWFya2Rvd246Omh0bWxfbm90ZWJvb2s6CiMnICAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKIycgLS0tCgojKyBzZXR1cCwgbWVzc2FnZT1GQUxTRQprbml0cjo6b3B0c19jaHVuayRzZXQoY2FjaGUgPSBUUlVFLCBkZXYgPSBjKCJwbmciLCAicGRmIikpCmxpYnJhcnkoaGVyZSkKbGlicmFyeShldWNzKQpsaWJyYXJ5KGdhdXNzRGlmZikKbGlicmFyeShyYXN0ZXIpCmxpYnJhcnkocmdlb3MpCmxpYnJhcnkodmVnYW4pCgojJyBDYWxjdWxhdGUgdGhlIGdlb2dyYXBoaWMgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY2VudHJvaWQgb2YgdGhlIEdyZWF0ZXIKIycgR3JhbXBpYW5zIElCUkEgc3VicmVnaW9uIGFuZCB0aGUgY2VudHJvaWRzIG9mIHRoZSBvdGhlciBTb3V0aC1lYXN0ZXJuCiMnIHN1YnJlZ2lvbnMuCiMrIGdlb2dyYXBoaWMtZGlzdCwgbWVzc2FnZT1GQUxTRSwgd2FyaW5nPUZBTFNFCnJnbl9uYW1lcyA8LSBzb3J0KHVuaXF1ZShzb3V0aGVhc3QkaWJyYV9zdWJyZWdpb24pKQppYnJhX3N1YnMgPC0gYWdncmVnYXRlKG1hcF9pYnJhX3NvdXRoZWFzdCwgYnkgPSAiSUJSQV9TVUJfTiIpCmNlbnRyb2lkcyA8LSBnQ2VudHJvaWQoCiAgaWJyYV9zdWJzLCBieWlkID0gVFJVRSwgaWQgPSBpYnJhX3N1YnNAZGF0YSRJQlJBX1NVQl9OCikKZGlzdHMgICAgIDwtIHNwRGlzdHNOMShjZW50cm9pZHMsIGNlbnRyb2lkc1siR3JlYXRlciBHcmFtcGlhbnMiXSwgVFJVRSkKZGlzdHMgICAgIDwtIGRpc3RzW3Jvd25hbWVzKGNlbnRyb2lkc0Bjb29yZHMpICVpbiUgcmduX25hbWVzXQpuYW1lcyhkaXN0cykgPC0gcmduX25hbWVzCgojJyBDYWxjdWxhdGUgdGhlIEt1bGxiYWNrLUxlaWJsZXIgZGlzdGFuY2UgYmV0d2VlbiB0aGUgR3JhbXBpYW5zIGFuZCB0aGUgb3RoZXIKIycgcmVnaW9ucyBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQgZGVmaW5lZCBieSByZWxpZWYsIHRvcG9ncmFwaGljIHdldG5lc3MsCiMnIG1vaXN0dXJlIGluZGV4IGFuZCBzYW5kLgojKyBrbC1kaXN0cwp2YXJzIDwtIGMoCiAgIm1lYW5fbW9pc3R1cmVfaW5kZXhfb2ZfbG93X3F0ciIsICJ0b3BvZ3JhcGhpY193ZXRuZXNzX2luZGV4XzNzZWMiLAogICJyZWxpZWZfMTAwMG1fcmFkaXVzIiwgInRvdGFsX25pdHJvZ2VuIgopCgprbGRpc3RzIDwtIHZhcHBseSgKICByZ25fbmFtZXMsCiAgZnVuY3Rpb24oeCkgewogICAgciA8LSBjb3ZhcmlhdGVzX3NvdXRoZWFzdCRpYnJhX3N1YnJlZ2lvbiA9PSB4CiAgICBmIDwtIGZ1bmN0aW9uKHgsIHkpIHsKICAgICAgeCA8LSBuYS5vbWl0KGFzLm1hdHJpeCh4KSkKICAgICAgZm9yIChpIGluIHkpIHsKICAgICAgICB4WywgaV0gPC0gbG9nKHhbLCBpXSkKICAgICAgfQogICAgICB4CiAgICB9CiAgICBzIDwtIGYoY292YXJpYXRlc19zb3V0aGVhc3RbciwgdmFyc10sIGMoMSwgMykpCiAgICBnIDwtIGYoY292YXJpYXRlc19ncmFtcGlhbnNbdmFyc10sIGMoMSwgMykpCiAgICBub3JtZGlmZihjb2xNZWFucyhnKSwgY292KGcpLCBjb2xNZWFucyhzKSwgY292KHMpLCBtZXRob2QgPSAiS0wiKQogIH0sCiAgbnVtZXJpYygxKQopCgpjYXQoCiAgcm91bmQoY29yKGRpc3RzLCBrbGRpc3RzKSwgMSksCiAgZmlsZSA9IGhlcmUoCiAgICAibm90ZWJvb2tzL2Vudmlyb25tZW50YWxfZGlzdGFuY2VfbWV0cmljc19maWxlcy9maWd1cmUtaHRtbC9rbGRpc3Rjb3IudGV4IgogICkKKQoKa2xkaXN0c191bml2YXJpYXRlIDwtIGxhcHBseSgKICByZ25fbmFtZXMsCiAgZnVuY3Rpb24oeCkgewogICAgciA8LSBjb3ZhcmlhdGVzX3NvdXRoZWFzdCRpYnJhX3N1YnJlZ2lvbiA9PSB4CiAgICBmIDwtIGZ1bmN0aW9uKHgsIHkpIHsKICAgICAgeCA8LSBuYS5vbWl0KGFzLm1hdHJpeCh4KSkKICAgICAgZm9yIChpIGluIHkpIHsKICAgICAgICB4WywgaV0gPC0gbG9nKHhbLCBpXSkKICAgICAgfQogICAgICB4CiAgICB9CiAgICBzIDwtIGYoY292YXJpYXRlc19zb3V0aGVhc3RbciwgdmFyc10sIGMoMSwgMykpCiAgICBnIDwtIGYoY292YXJpYXRlc19ncmFtcGlhbnNbdmFyc10sIGMoMSwgMykpCiAgICBhbnMgPC0gc2FwcGx5KAogICAgICAxOjQsCiAgICAgIGZ1bmN0aW9uKGkpIHsKICAgICAgICBub3JtZGlmZigKICAgICAgICAgIG1lYW4oZ1ssIGldKSwgbWF0cml4KHZhcihnWywgaV0pKSwgbWVhbihzWywgaV0pLCBtYXRyaXgodmFyKHNbLCBpXSkpLAogICAgICAgICAgbWV0aG9kID0gIktMIgogICAgICAgICkKICAgICAgfQogICAgKQogICAgYW5zIDwtIHJiaW5kKGFucykKICAgIHJvd25hbWVzKGFucykgPC0geAogICAgY29sbmFtZXMoYW5zKSA8LSB2YXJzCiAgICBhbnMKICB9CikKCmtsZGlzdHNfdW5pdmFyaWF0ZSA8LSBkby5jYWxsKHJiaW5kLCBrbGRpc3RzX3VuaXZhcmlhdGUpCmNvbG5hbWVzKGtsZGlzdHNfdW5pdmFyaWF0ZSkgPC0gYygibWxxIiwgInR3aSIsICJyMWsiLCAidG4iKQoKa2xkaXN0c191bml2YXJpYXRlIDwtIHJlc2hhcGUoCiAgZGF0YS5mcmFtZShyZWdpb24gPSByb3duYW1lcyhrbGRpc3RzX3VuaXZhcmlhdGUpLCBrbGRpc3RzX3VuaXZhcmlhdGUpLAogIGlkdmFyID0gInJlZ2lvbiIsCiAgdmFyeWluZyA9IGNvbG5hbWVzKGtsZGlzdHNfdW5pdmFyaWF0ZSksCiAgdi5uYW1lcyA9ICJrbGRpc3RfdmFyIiwKICB0aW1ldmFyID0gInZhciIsCiAgdGltZXMgPSBjb2xuYW1lcyhrbGRpc3RzX3VuaXZhcmlhdGUpLAogIGRpcmVjdGlvbiA9ICJsb25nIiwKICBuZXcucm93Lm5hbWVzID0gMTpsZW5ndGgoa2xkaXN0c191bml2YXJpYXRlKQopCgojJyBDYWxjdWxhdGUgdGhlIEphY2NhcmQgZGlzc2ltaWxhcml0eSBiZXR3ZWVuIHRoZSBHcmFtcGlhbnMgYW5kIHRoZSBTb3V0aGVhc3QKIycgSUJSQSBzdWJyZWdpb25zLgojKwpzdWJyZWdfcHJldiA8LSBkby5jYWxsKAogIHJiaW5kLAogIGxhcHBseSgKICAgIHNwbGl0KHdpZGVfc291dGhlYXN0Wy0xOi02XSwgd2lkZV9zb3V0aGVhc3QkaWJyYV9zdWJyZWdpb24pLCBjb2xNZWFucwogICkKKQpncmFtcGlhbnNfcHJldiA8LSBjb2xNZWFucyh3aWRlX2dyYW1waWFuc1stMTotNV0pCmdyYW1waWFuc19vbmx5IDwtIHNldGRpZmYobmFtZXMoZ3JhbXBpYW5zX3ByZXYpLCBjb2xuYW1lcyhzdWJyZWdfcHJldikpCnNvdXRoZWFzdF9vbmx5IDwtIHNldGRpZmYoY29sbmFtZXMoc3VicmVnX3ByZXYpLCBuYW1lcyhncmFtcGlhbnNfcHJldikpCmdyYW1waWFuc19leHRyYSA8LSByZXAoMCwgbGVuZ3RoKHNvdXRoZWFzdF9vbmx5KSkKc291dGhlYXN0X2V4dHJhIDwtIG1hdHJpeCgwLCBucm93ID0gTlJPVyhzdWJyZWdfcHJldiksIGxlbmd0aChncmFtcGlhbnNfb25seSkpCm5hbWVzKGdyYW1waWFuc19leHRyYSkgPC0gc291dGhlYXN0X29ubHkKY29sbmFtZXMoc291dGhlYXN0X2V4dHJhKSA8LSBncmFtcGlhbnNfb25seQpyb3duYW1lcyhzb3V0aGVhc3RfZXh0cmEpIDwtIHJvd25hbWVzKHN1YnJlZ19wcmV2KQpzdWJyZWdfcHJldiA8LSBjYmluZChzdWJyZWdfcHJldiwgc291dGhlYXN0X2V4dHJhKQpncmFtcGlhbnNfcHJldiA8LSBjKGdyYW1waWFuc19wcmV2LCBncmFtcGlhbnNfZXh0cmEpCnN1YnJlZ19wcmV2IDwtIHN1YnJlZ19wcmV2Wywgc29ydChjb2xuYW1lcyhzdWJyZWdfcHJldikpXQpncmFtcGlhbnNfcHJldiA8LSBncmFtcGlhbnNfcHJldltzb3J0KG5hbWVzKGdyYW1waWFuc19wcmV2KSldCnN1YnJlZ19wcmV2IDwtIHJiaW5kKGdyYW1waWFuc19wcmV2LCBzdWJyZWdfcHJldikKY29tbXVuaXR5X2Rpc3QgPC0gYXMubWF0cml4KAogIHZlZ2Rpc3Qoc3VicmVnX3ByZXYsIG1ldGhvZCA9ICJqYWNjYXJkIikKKVtyZ25fbmFtZXMsICJncmFtcGlhbnNfcHJldiJdCgojJyBQbG90IG9mIGdlb2dyYXBoaWMgYW5kIEphY2NhcmQgZGlzdGFuY2VzIG9mIElCUkEgc3VicmVnaW9ucyBmcm9tIHRoZQojJyBHcmFtcGlhbnMuCiMrIHBsb3QtamFjYywgZmlnLndpZHRoPTcuNSwgZmlnLmhlaWdodD0zLjUsIGRldi5hcmdzPWxpc3QocG9pbnRzaXplPTgpCnBhcihtZnJvdyA9IGMoMSwgMiksIG9tYSA9IGMoNSwgMCwgMSwgMSksIG1hciA9IGMoMCwgNSwgMCwgMCkpCgpwbG90KAogIGRpc3RzLCBjb21tdW5pdHlfZGlzdCwgbGFzID0gMSwgeGxhYiA9ICIiLAogIHlsYWIgPSAiSmFjY2FyZCBkaXNzaW1pbGFyaXR5IiwgcGNoID0gMTksIHhsaW0gPSBjKDAsIDEwMDApLAogIHlsaW0gPSBjKC44LCAxLjAxKQopCnRleHQoCiAgZGlzdHMsIGNvbW11bml0eV9kaXN0LCByZ25fbmFtZXMsY2V4ID0gLjc1LAogIHBvcyA9CiAgICBpZmVsc2UoCiAgICAgIHJnbl9uYW1lcyAlaW4lIGMoCiAgICAgICAgIlN0cnplbGVja2kgUmFuZ2VzIiwgIkVhc3QgR2lwcHNsYW5kIExvd2xhbmRzIiwgIk1vbmFybyIsCiAgICAgICAgIkhpZ2hsYW5kcy1Ob3J0aGVybiBGYWxsIiwgIlNub3d5IE1vdW50YWlucyIsCiAgICAgICAgIkxvd2VyIFNsb3BlcyIsICJCYXRlbWFuIgogICAgICApLAogICAgICAyLAogICAgICBpZmVsc2UoCiAgICAgICAgcmduX25hbWVzID09ICJKZXJ2aXMiLAogICAgICAgIDMsCiAgICAgICAgaWZlbHNlKHJnbl9uYW1lcyAlaW4lIGMoIlZpY3RvcmlhbiBBbHBzIiwgIkV0dHJlbWEiKSwgMSwgNCkKICAgICAgKQogICAgKQopCgpwbG90KAogIGRpc3RzLCBrbGRpc3RzLCBsYXMgPSAxLCB4bGFiID0gIkRpc3RhbmNlIGZyb20gR3JhbXBpYW5zIChrbSkiLAogIHlsYWIgPSAiS3VsbGJhY2sgTGVpYmxlciBEaXZlcmdlbmNlIiwgcGNoID0gMTksIHhsaW0gPSBjKDAsIDEwMDApLAogIHlsaW0gPSBjKDUsIDM1KQopCnRleHQoCiAgZGlzdHMsIGtsZGlzdHMsIHJnbl9uYW1lcywKICBwb3MgPQogICAgaWZlbHNlKAogICAgICByZ25fbmFtZXMgJWluJSBjKAogICAgICAgICJTdHJ6ZWxlY2tpIFJhbmdlcyIsICJIaWdobGFuZHMtU291dGhlcm4gRmFsbCIsCiAgICAgICAgIkJvbmRvIiwgIk1vbmFybyIsICJKZXJ2aXMiLCAiRWFzdCBHaXBwc2xhbmQgTG93bGFuZHMiCiAgICAgICksCiAgICAgIDIsIDQKICAgICksCiAgY2V4ID0gLjc1CikKbXRleHQoIkRpc3RhbmNlIGZyb20gR3JhbXBpYW5zIChrbSkiLCAxLCAzLCBvdXRlciA9IFRSVUUpCg==