Repository navigation
Expand file tree
/
Copy pathVulnerability_index_computation.R
More file actions
107 lines (73 loc) · 6.93 KB
/
Copy pathVulnerability_index_computation.R
File metadata and controls
107 lines (73 loc) · 6.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#This script is an example of how compute vulnerability metric, and particularly:
#Step 2: Rescaling the values of vulnerability components
#Step 3: Quantification of vulnerability index
#This example used generated random variables
#################################################################################################
###################################Download necessary packages###################################
library(dplyr)
library(plyr)
library(scales)
################################################################################################
####################Generating random variables for vulnerability components####################
adaptive.capacity.comp <- data.frame(geo.isolation = runif(340, 0.17, 1.50), prot.areas = runif(340, 0.00, 1.00), phylo.distinctiveness = runif(340, 3.86, 22.41), ex.rate = runif(340, 0.00, 0.20), row.names = paste("island", 1:340))
exposure.comp <- data.frame(lcc.isl = runif(340, 0.86, 69.78), lcc.buf100 = runif(340, 1.28, 66.66), lcc.buf500 = runif(340, 1.65, 24.88), row.names = paste("island", 1:340))
sensitivity.comp <- data.frame(hab.spe = runif(340, 1.16, 1.4), diet.spe = runif(340, 1.00, 2.72), gener.length = runif(340, 3.86, 22.41), eco.red = runif(340, 1.00, 2.42), row.names = paste("island", 1:340))
################################################################################################
####################Step 2: Rescaling the values of vulnerability components####################
##################################################
##basic transformation: max-min linear rescaling##
basic_function <- function(x){(x-min(x))/(max(x)-min(x))}
#Adaptive capacity
adaptive.capacity.comp.basic <- colwise(basic_function)(adaptive.capacity.comp)
adaptive.capacity.comp.basic$adapt.cap <- basic_function((1 - adaptive.capacity.comp.basic$geo.isolation) + adaptive.capacity.comp.basic$prot.areas + adaptive.capacity.comp.basic$phylo.distinctiveness + adaptive.capacity.comp.basic$ex.rate)
#Exposure
exposure.comp.basic <- colwise(basic_function)(exposure.comp)
exposure.comp.basic$exposure <- basic_function(exposure.comp.basic$lcc.isl + exposure.comp.basic$lcc.buf100 + exposure.comp.basic$lcc.buf500)
#Sensitivity
sensitivity.comp.basic <- colwise(basic_function)(sensitivity.comp)
sensitivity.comp.basic$sens <- basic_function((1 - sensitivity.comp.basic$hab.spe) + (1 - sensitivity.comp.basic$diet.spe) + sensitivity.comp.basic$gener.length + (1 - sensitivity.comp.basic$eco.red))
#############################################################################
##natural-log transformation: log(x+1)-tranformed and rescaled between 0-1##
log_function <- function(x){log(x+1)}
rescale_many <- function(dat, column.nos) { nms <- names(dat)
for(col in column.nos) { name <- paste(nms[col],".rescaled", sep = "")
dat[name] <- rescale(dat[,col], to = c(0, 1)) }
cat(paste("Rescaled ", length(column.nos), " variable(s)n"))
dat
}
#Adaptive capacity
adaptive.capacity.comp.log <- rescale_many(log_function(adaptive.capacity.comp), 1:4)
adaptive.capacity.comp.log$adapt.cap <- rescale(log_function((1 - adaptive.capacity.comp.log$geo.isolation.rescaled) + adaptive.capacity.comp.log$prot.areas.rescaled + adaptive.capacity.comp.log$phylo.distinctiveness.rescaled + adaptive.capacity.comp.log$ex.rate.rescaled), to = c(0, 1))
#Exposure
exposure.comp.log <- rescale_many(log_function(exposure.comp),1:3)
exposure.comp.log$exposure <- rescale(log_function(exposure.comp.log$lcc.isl.rescaled + exposure.comp.log$lcc.buf100.rescaled + exposure.comp.log$lcc.buf500.rescaled), to = c(0, 1))
#Sensitivity
sensitivity.comp.log <- rescale_many(log_function(sensitivity.comp), 1:4)
sensitivity.comp.log$sens <- rescale(log_function((1 - sensitivity.comp.log$hab.spe.rescaled) + (1 - sensitivity.comp.log$diet.spe.rescaled) + sensitivity.comp.log$gener.length.rescaled + (1 - sensitivity.comp.log$eco.red.rescaled)), to = c(0, 1))
##################################
##percentile rank transformation##
#Adaptive capacity
adaptive.capacity.comp.prank <- adaptive.capacity.comp %>% mutate_at(.vars = vars(one_of('geo.isolation', 'prot.areas', 'phylo.distinctiveness', 'ex.rate')), .funs = funs(percent_rank(.)))
adaptive.capacity.comp.prank$adapt.cap <- percent_rank((1 - adaptive.capacity.comp.prank$geo.isolation) + adaptive.capacity.comp.prank$prot.areas + adaptive.capacity.comp.prank$phylo.distinctiveness + adaptive.capacity.comp.prank$ex.rate)
#Exposure
exposure.comp.prank <- exposure.comp %>% mutate_at(.vars = vars(one_of('lcc.isl', 'lcc.buf100', 'lcc.buf500')), .funs = funs(percent_rank(.)))
exposure.comp.prank$exposure <- percent_rank(exposure.comp.prank$lcc.isl + exposure.comp.prank$lcc.buf100 + exposure.comp.prank$lcc.buf500)
#Sensitivity
sensitivity.comp.prank <- sensitivity.comp %>% mutate_at(.vars = vars(one_of('hab.spe', 'diet.spe', 'gener.length', 'eco.red')), .funs = funs(percent_rank(.)))
sensitivity.comp.prank$sens <- percent_rank((1 - sensitivity.comp.basic$hab.spe) + (1 - sensitivity.comp.basic$diet.spe) + sensitivity.comp.basic$gener.length + (1 - sensitivity.comp.basic$eco.red))
#################################################################################################
##########################Step 3: Quantification of vulnerability index##########################
##########################Example using basic transformation variables###########################
vulnerability.solution <- data.frame(matrix(nrow = 2, ncol = 3))
colnames(vulnerability.solution) <- c("exposure", "sensitivity", "adaptive.capacity")
rownames(vulnerability.solution) <- c("pos", "neg")
vulnerability.solution[1,] <- c(0, 0, 1)
vulnerability.solution[2,] <- c(1, 1, 0)
vulnerability <- data.frame(matrix(nrow = 340, ncol = 6))
colnames(vulnerability) <- c("exposure", "sensitivity", "adaptive.capacity", "positive.ideal.solution", "negative.ideal.solution", "vulnerability")
vulnerability$exposure <- exposure.comp.basic$exposure
vulnerability$sensitivity <- sensitivity.comp.basic$sens
vulnerability$adaptive.capacity <- adaptive.capacity.comp.basic$adapt.cap
vulnerability$positive.ideal.solution <- ((vulnerability$exposure - vulnerability.solution[1,1])^2 + (vulnerability$sensitivity - vulnerability.solution[1,2])^2 + (vulnerability$adaptive.capacity - vulnerability.solution[1,3])^2)^0.5
vulnerability$negative.ideal.solution <- ((vulnerability$exposure - vulnerability.solution[2,1])^2 + (vulnerability$sensitivity - vulnerability.solution[2,2])^2 + (vulnerability$adaptive.capacity - vulnerability.solution[2,3])^2)^0.5
vulnerability$vulnerability <- vulnerability$positive.ideal.solution / (vulnerability$positive.ideal.solution + vulnerability$negative.ideal.solution)