Allows users to derive multi-objective weights from pairwise comparisons, which research shows is more repeatable, transparent, and intuitive other techniques. These weights can be rank existing alternatives or to define a multi-objective utility function for optimization.
Most real-world decisions must reconcile multiple, competing objectives. In buying a car, you might be concerned about cost, reliability, and performance, but before you can make a decision, you must establish the relative importance of these goals. A common mathematical approach to this problem is to define weights for each of these objectives. Although you might have a ballpark intuition for the weights, it is difficult to set them in a repeatable and defendable manner.
Preference elicitation relieves some of this burden. Instead of determining the weights directly, you make a series of pairwise comparisons between alternatives: do you prefer car A, car B, or are you indifferent? Research has shown that these pairwise comparisons are far easier to make and much easier to justify than explicitly setting the weights directly. This package implements a preference elicitation algorithm that takes your stated preferences and uses them to calculate an optimal set of weights. It can even suggest which comparisons you should make to get the most accurate weights with the fewest number of queries.
Technical details about how this package works can be found in the article here.
This package is not yet added to CRAN, but you can install it directly from Github with the
library(prefeR)# Each column of data is a variable, i.e. objective,# and each row is an alternative.p <- prefEl(data = data.frame(x = c(1, 0, 1),y = c(0, 1, 1)))# Set the prior belief on the weights for objectives x and yp$priors <- c(Normal(0, 1),Normal(0, 1))# Add in some pairwise preferencesp$addPref(1 %>% 3) # prefer row 1 to row 3p$addPref(3 %<% 2) # prefer row 2 to row 3# Run the inferencep$infer() # returns that x and y are of equal importance# What comparision should you make next?p$suggest() # suggest compare 1 to 2p$addPref(1 %=% 2)# Re-run the infernence algorithmp$infer() # maintains belief that 1 and 2 are equalp$rank() # calculates the value of all three alternatives