Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Answering questions from users is actually a good way to find potentially interesting things to post…

With the obvious advantage that other people might find it useful too!

So… let’s start… This MetaLandSim user wanted a way to derive the contribution of each individual patch to overall landscape connectivity. Here I used the method presented in the paper by Saura & Pascual-Hortal (2007) “A new habitat availability index to integrate connectivity in landscape conservation planning: Comparison with existing indices and application to a case study“, using his Integral Index of Connectivity (IIC) and equation 1 to derive each patch relevance to overall connectivity.

library(MetaLandSim)

Now, we create a new landscape graph (rl1), which will be plotted if we set plotG to TRUE:

set.seed(123)

rl1 <- rland.graph(mapsize=500, dist_m=50, areaM=0.1,
areaSD=0.02, Npatch=50,
disp=70, plotG=TRUE) This landscape has 50 patches, and we eant to know each individual dIIC, or their individual contribution to connectivity.

If we are following eq. 1 on Saura’s paper we have to start by computing the IIC of the full landscape, with all the patches (full.IIC):

#as.numeric is just to guarantee the output is just a number
full.IIC <- as.numeric(metrics.graph (rl=rl1, metric="IIC"))

Now we extract the data frame with the information on the patches:

patches <- rl1$nodes.characteristics #Here are the top 6 rows: head(patches) ## x y areas radius cluster colour nneighbour ID ## 1 143.78876 394.1526 0.08410288 16.36178 1 #FF0000FF 64.01614 1 ## 2 132.51637 282.2952 0.07285381 15.22829 1 #FF0000FF 51.84446 2 ## 3 338.78532 286.3167 0.12808067 20.19142 1 #FF0000FF 67.61306 3 ## 4 12.30684 238.8980 0.08026654 15.98425 1 #FF0000FF 67.02337 4 ## 5 275.71751 228.3074 0.13367483 20.62766 1 #FF0000FF 50.44706 5 ## 6 71.40001 207.2732 0.08448427 16.39883 1 #FF0000FF 51.92737 6 Then we create a vector to insert the values of the partial IIC (dIIC). I had to modify the function removepoints, which I had originally in the package. The original version removes a number of patches randomly. This adapted version removes one specific patch (by ID), it’s called removepoints.byID. dIIC <- rep(NA, 50) #the new version of the function: removepoints.byID <- function (rl, nr=1, ID) { if (class(rl)!="landscape") { stop(paste(rl, " should be an object of class class 'landscape'.", sep=""), call. = FALSE) } mapsize2 <- rl$mapsize
dist_m2 <- rl$minimum.distance areaM2 <- rl$mean.area
areaSD2 <- rl$SD.area Npatch2 <- rl$number.patches
disp2 <- rl$dispersal rl_0 <- rl$nodes.characteristics
ID2 <- rl_0$ID nr_select <- nrow(rl_0)-nr rl_1 <- rl_0[-ID, ] rl_2 <- rl_1[sort.list(as.numeric(rownames(rl_1))), ] names(rl_2)[names(rl_2) == "ID2"] <- "ID" rl_3 <- list(mapsize=mapsize2, minimum.distance=dist_m2, mean.area=mean(rl_2$areas), SD.area=sd(rl_2$areas), number.patches=nrow(rl_2), dispersal=disp2, nodes.characteristics=rl_2) class(rl_3) <- "landscape" rl_4 <- cluster.id(rl_3) rownames(rl_4$nodes.characteristics) <- 1:nrow(rl_4\$nodes.characteristics)
class(rl_4) <- "landscape"
return(rl_4)
}

Finally… compute the dIIC (partial connectivity) to each patch:

#Set up the loop to do the calculations
for (i in 1:50){

rl2 <- rl1 #This is just no to change rl1

rl3 <- removepoints.byID(rl1,ID=i)#removing patch i

partial.IIC <- as.numeric(metrics.graph (rl=rl3, metric="IIC"))

dIIC[i] <- 100*((full.IIC-partial.IIC)/full.IIC)#send the result to the vector

}

#And here's the result:

dIIC

##    3.4090909 14.7727273  7.9545455  2.8409091 13.0681818  5.1136364
##    2.8409091  7.9545455  7.3863636  6.8181818 11.3636364  3.9772727
##   3.4090909 10.7954545  3.4090909 13.6363636 15.9090909  2.2727273
##   3.9772727  2.2727273  1.7045455  0.5681818  1.7045455  1.7045455
##   3.4090909  2.8409091  1.1363636  4.5454545  2.2727273 10.2272727
##   5.6818182  2.8409091  6.8181818  3.9772727  6.2500000  7.3863636
##   3.4090909  1.1363636  2.2727273  2.2727273  0.5681818  1.7045455
##   2.8409091  4.5454545  2.2727273  1.7045455  2.8409091  3.9772727
##   1.1363636  2.2727273

Let’s plot it:

plot_graph(rl=rl1, species=FALSE, links=TRUE)

#The individual connectivity patches
text(x = patches[,'x'],y = patches[,'y'], pos = 3,
offset = 0.2, labels = round(dIIC,2)) And that’s all.