| utility.aggregation.create {utility} | R Documentation |
Construct an aggregation node
Description
Function to construct an aggregation node for value or utlity functions.
Usage
utility.aggregation.create(name.node,
nodes,
name.fun,
par,
names.par = rep(NA, length(par)),
required = FALSE,
num.required = 1,
col = "black",
shift.levels = 0,
add.arg.fun = NULL)
Arguments
name.node |
name of the node to be constructed as a character string. |
nodes |
list of nodes to be aggregated. |
name.fun |
name of the function to be used for aggregation.
This function must accept the arguments |
par |
numeric vector of parameter values to be passed to the function specified unter |
names.par |
(optional) vector of parameter names corresponging to the vector of values specified under |
required |
(optional) logical variable indicating if the value of this node is required for aggregation at the next higher level.
If this variable is |
num.required |
number of lower-level values or utilities that must at least be available to make the evaluation possible. |
col |
(optional) color used for plotting the bounding box of the node in the objective hierarchy.
Default value is |
shift.levels |
(optional) number of hierarchical levels by which the node in the objective hierarchy is shifted to make a branch fit better to other branches.
Default value is |
add.arg.fun |
(optional) an additional argument to the aggregation function |
Value
The function returns the created object of type utility.aggregation with the properties specified in the arguments of the function.
Author(s)
Peter Reichert <peter.reichert@emeriti.eawag.ch>
References
Short description of the package:
Reichert, P., Schuwirth, N. and Langhans, S.,
Constructing, evaluating and visualizing value and utility functions for decision support, Environmental Modelling & Software 46, 283-291, 2013.
Description of aggregation techniques:
Langhans, S.D., Reichert, P. and Schuwirth, N.,
The method matters: A guide for indicator aggregation in ecological assessments.
Ecological Indicators 45, 494-507, 2014.
Textbooks on the use of utility and value functions in decision analysis:
Keeney, R. L. and Raiffa, H. Decisions with Multiple Objectives - Preferences and Value Tradeoffs. John Wiley & Sons, 1976.
Eisenfuehr, F., Weber, M. and Langer, T., Rational Decision Making, Springer, Berlin, 2010.
See Also
Print, evaluate and plot the node with
print.utility.aggregation,
summary.utility.aggregation,
evaluate.utility.aggregation and
plot.utility.aggregation.
Create end nodes with
utility.endnode.discrete.create,
utility.endnode.intpol1d.create,
utility.endnode.intpol2d.create,
utility.endnode.parfun1d.create,
utility.endnode.cond.create, or
utility.endnode.firstavail.create.
Create conversion nodes with
utility.conversion.intpol.create, or
utility.conversion.parfun.create.
Examples
# define discrete end node for width variability
# (attribute "widthvariability_class" with levels "high",
# "moderate" and "none")
widthvar <-
utility.endnode.discrete.create(
name.node = "width variability",
attrib.levels = data.frame(widthvariability_class=
c("high","moderate","none")),
u = c(1,0.4125,0),
names.u = c("u.high","u_moderate","u.none"),
required = FALSE,
utility = FALSE)
# define 1d interpolation end node for bed modification with
# riprap
# (attribute "bedmodfract_percent" with levels from 0 to 100)
bedmod_riprap <-
utility.endnode.intpol1d.create(
name.node = "bed modification riprap",
name.attrib = "bedmodfract_percent",
range = c(0,100),
x = c(0,10,30,100),
u = c(1,0.775,0.5625,0.24),
required = FALSE,
utility = FALSE)
# define 1d interpolation end node for bed modification with
# other material
# (attribute "bedmodfract_percent" with levels from 0 to 100)
bedmod_other <-
utility.endnode.intpol1d.create(
name.node = "bed modification other",
name.attrib = "bedmodfract_percent",
range = c(0,100),
x = c(0,10,30,100),
u = c(1,0.775,0.5625,0),
required = FALSE,
utility = FALSE)
# define combination end node for bed modification
# (attributes "bedmodtype_class" and "bedmodfract_percent")
bedmod <-
utility.endnode.cond.create(
name.node = "bed modification",
attrib.levels = data.frame(bedmodtype_class=
c("riprap","other")),
nodes = list(bedmod_riprap,bedmod_other),
required = FALSE,
utility = FALSE)
# define 1d interpolation end node for bank modification with
# permeable material
# (attribute "bankmodfract_percent" with levels from 0 to 100)
bankmod_perm <-
utility.endnode.intpol1d.create(
name.node = "bank modification perm",
name.attrib = "bankmodfract_percent",
range = c(0,100),
x = c(0,10,30,60,100),
u = c(1,0.8667,0.675,0.4125,0.24),
required = FALSE,
utility = FALSE)
# define 1d interpolation end node for bank modification with
# impermeable material
# (attribute "bankmodfract_percent" with levels from 0 to 100)
bankmod_imperm <-
utility.endnode.intpol1d.create(
name.node = "bank modification imperm",
name.attrib = "bankmodfract_percent",
range = c(0,100),
x = c(0,10,30,60,100),
u = c(1,0.775,0.5625,0.24,0),
required = FALSE,
utility = FALSE)
# define combination end node for bank modification
# (attributes "bankmodtype_class" and "bankmodfract_percent")
bankmod <-
utility.endnode.cond.create(
name.node = "bank modification",
attrib.levels = data.frame(bankmodtype_class=
c("perm","imperm")),
nodes = list(bankmod_perm,bankmod_imperm),
required = FALSE,
utility = FALSE)
# define 2d interpolation end node for riparian zone width
# (attributes "riparianzonewidth_m" and "riparianzonewidth_m")
riparzone_width <-
utility.endnode.intpol2d.create(
name.node = "riparian zone width",
name.attrib = c("riverbedwidth_m","riparianzonewidth_m"),
ranges = list(c(0,16),c(0,30)),
isolines = list(list(x=c(0,16),y=c(0,0)),
list(x=c(0,2,10,16),y=c(5,5,15,15)),
list(x=c(0,16),y=c(15,15)),
list(x=c(0,16),y=c(30,30))),
u = c(0.0,0.6,1.0,1.0),
lead = 1,
utility = FALSE)
# define discrete end node for riparian zone vegetation
# (attriute "riparianzoneveg_class" with levels "natural",
# "seminatural" and "artificial")
riparzone_veg <-
utility.endnode.discrete.create(
name.node = "riparian zone veg.",
attrib.levels = data.frame(riparianzoneveg_class=
c("natural","seminatural","artificial")),
u = c(1,0.5625,0),
required = FALSE,
utility = FALSE)
# define aggregation node for riparian zone
riparzone <-
utility.aggregation.create(
name.node = "riparian zone",
nodes = list(riparzone_width,riparzone_veg),
name.fun = "utility.aggregate.cobbdouglas",
par = c(1,1),
required = FALSE)
# define aggregation node for ecomorphological state
morphol <-
utility.aggregation.create(
name.node = "ecomorphology",
nodes = list(widthvar,bedmod,bankmod,riparzone),
name.fun = "utility.aggregate.mix",
par = c(0.25,0.25,0.25,0.25,0,0,1),
names.par = c("w_widthvar","w_bedmod","w_bankmod","w_riparzone",
"w_add","w_min","w_cobbdouglas"),
required = TRUE)
# print individual definitions
print(widthvar)
print(bedmod)
# print all definitions
print(morphol)
# plot objectives hierarchy with attributes
plot(morphol)
# plot individual nodes:
plot(widthvar)
plot(widthvar,par=c(u_moderate=0.2))
plot(bedmod_other)
plot(bankmod)
#plot(riparzone_width)
# plot selected node definitions of a hierarchy
plot(morphol,type="nodes",nodes=c("width variability",
"bed modification other",
"bank modification"))
# evaluate value function for data sets and plot colored hierarchies
# and table
attrib_channelized <- data.frame(widthvariability_class = "none",
bedmodtype_class = "riprap",
bedmodfract_percent = 50,
bankmodtype_class = "imperm",
bankmodfract_percent = 70,
riverbedwidth_m = 10,
riparianzonewidth_m = 5,
riparianzoneveg_class = "seminatural")
attrib_rehab <- data.frame(widthvariability_class = "high",
bedmodtype_class = "riprap",
bedmodfract_percent = 50,
bankmodtype_class = "imperm",
bankmodfract_percent = 20,
riverbedwidth_m = 15,
riparianzonewidth_m = 15,
riparianzoneveg_class = "natural")
res_channelized <- evaluate(morphol,attrib=attrib_channelized)
res_channelized_add <- evaluate(morphol,attrib=attrib_channelized,
par=c(w_add=1,w_min=0,w_cobbdouglas=0))
res_rehab <- evaluate(morphol,attrib=attrib_rehab)
res_both <- rbind(res_channelized,res_rehab)
rownames(res_both) <- c("channelized","rehabilitated")
plot(morphol,u=res_channelized)
plot(morphol,u=res_channelized_add)
plot(morphol,u=res_rehab)
plot(morphol,u=res_rehab,uref=res_channelized)
plot(morphol,u=res_both,type="table")
# consideration of uncertain attribute levels (higher uncertainty for
# predicted state after rehabilitation than for observed channelized state):
sampsize <- 2000
attrib_channelized_unc <- data.frame(
widthvariability_class = rep("high",sampsize),
bedmodtype_class = rep("riprap",sampsize),
bedmodfract_percent = rnorm(sampsize,mean=50,sd=5),
bankmodtype_class = rep("imperm",sampsize),
bankmodfract_percent = rnorm(sampsize,mean=70,sd=5),
riverbedwidth_m = rep(10,sampsize),
riparianzonewidth_m = rep(5,sampsize),
riparianzoneveg_class = c("seminatural","artificial")[rbinom(sampsize,1,0.5)+1])
attrib_rehab_unc <- data.frame(
widthvariability_class = c("moderate","high")[rbinom(sampsize,1,0.5)+1],
bedmodtype_class = rep("riprap",sampsize),
bedmodfract_percent = rnorm(sampsize,mean=50,sd=15),
bankmodtype_class = rep("imperm",sampsize),
bankmodfract_percent = rnorm(sampsize,mean=20,sd=5),
riverbedwidth_m = rnorm(sampsize,mean=10,sd=2),
riparianzonewidth_m = rnorm(sampsize,mean=10,sd=2),
riparianzoneveg_class = c("natural","seminatural")[rbinom(sampsize,1,0.5)+1])
res_channelized_unc <- evaluate(morphol,attrib=attrib_channelized_unc)
res_rehab_unc <- evaluate(morphol,attrib=attrib_rehab_unc)
plot(morphol,u=res_channelized_unc)
plot(morphol,u=res_rehab_unc)
plot(morphol,u=res_rehab_unc,uref=res_channelized_unc)