# rMOST-vignette

    library(rMOST)
    #> Welcome to rMOST.
    #> rMOST estimates Pareto-optimal solutions for personnel selection with 3 objectives using Normal Boundary Intersection algorithm.

This document presents the example application of the rMOST package. Please refer to Study 3 of Zhang et al. (in press) for a complete guideline on adopting multi-objective optimization for personnel selection.

# Prepare inputs

Note that different input parameters are required for different types of optimization problems. Below are the inputs needed for an example multi-objective optimization problem with 5 predictors.

    ## Input ##

    # Predictor intercorrelation matrix
    Rx <- matrix(c(  1,  .37, .51, .16, .25,
                   .37,   1, .03, .31, .02,
                   .51, .03,   1, .13, .34,
                   .16, .31, .13,   1,-.02,
                   .25, .02, .34,-.02,   1), 5, 5)

    # Criterion validity of the predictors
    Rxy1 <- c(.32, .52, .22, .48, .20)
    Rxy2 <- c(.30, .35, .15, .25, .10)
    Rxy3 <- c(.15, .25, .30, .35, .10)

    # Overall selection ratio
    sr <- 0.15

    # Proportion of minority applicants
    prop_b <- 1/8 # Proportion of Black applicants (i.e., (# of Black applicants)/(# of all applicants))
    prop_h <- 1/6 # Proportion of Hispanic applicants

    # Predictor subgroup d
    d_wb <- c(.39, .72, -.09, .39, .04) # White-Black subgroup difference
    d_wh <- c(.17, .79, .08, .04, -.14) # White-Hispanic subgroup difference

# Obtain MOO solutions

## 3 Non-adverse impact objectives

An example of such a MOO problem is when an organization seeks to optimize job performance, retention, and organizational commitment.

    # Example: 3 non-adverse impact objectives
    out_3C = MOST(optProb = "3C",
                  # predictor intercorrelations
                  Rx = Rx,
                  # predictor - objective relations
                  Rxy1 = Rxy1, # non-AI objective 1
                  Rxy2 = Rxy2, # non-AI objective 2
                  Rxy3 = Rxy3, # non-AI objective 3
                  Spac = 10)
    #>
    #>  Estimating Multi-Objective Optimal Solution ...
    #>
    #>  Done.
    #>

    # The first few solutions
    head(out_3C)
    #>   Solution  Optimized    C1    C2    C3    P1    P2    P3    P4    P5
    #> 1        1 C1, C2, C3 0.658 0.400 0.407 0.030 0.399 0.094 0.346 0.161
    #> 2        2 C1, C2, C3 0.658 0.404 0.406 0.049 0.406 0.098 0.343 0.153
    #> 3        3 C1, C2, C3 0.657 0.407 0.404 0.069 0.413 0.100 0.340 0.146
    #> 4        4 C1, C2, C3 0.656 0.410 0.401 0.088 0.421 0.100 0.338 0.141
    #> 5        5 C1, C2, C3 0.654 0.412 0.397 0.106 0.430 0.098 0.335 0.136
    #> 6        6 C1, C2, C3 0.653 0.414 0.394 0.125 0.439 0.095 0.333 0.133

## 2 Non-adverse impact objectives and 1 adverse-impact objective

An example of such a MOO problem is when an organization seeks to optimize job performance, retention, and Black-white adverse impact ratio.

    # Example: 2 non-adverse impact objectives & 1 adverse impact objective
    out_2C_1AI = MOST(optProb = "2C_1AI",
                      # predictor intercorrelations
                      Rx = Rx,
                      # predictor - objective relations
                      Rxy1 = Rxy1, # non-AI objective 1
                      Rxy2 = Rxy2, # non-AI objective 2
                      d1 = d_wb, # subgroup difference for minority 1
                      # selection ratio
                      sr = sr,
                      # proportion of minority
                      prop1 = prop_b, # minority 1
                      Spac = 10)
    #>
    #>  Estimating Multi-Objective Optimal Solution ...
    #>
    #>  Done.
    #>

    # The first few solutions
    head(out_2C_1AI)
    #>   Solution   Optimized    C1    C2   AI1    P1    P2 P3   P4    P5
    #> 1        1 C1, C2, AI1 0.220 0.150 1.147 0.000 0.000  1 0.00 0.000
    #> 2        2 C1, C2, AI1 0.220 0.150 1.147 0.000 0.000  1 0.00 0.000
    #> 3        3 C1, C2, AI1 0.220 0.150 1.147 0.000 0.000  1 0.00 0.000
    #> 4        4 C1, C2, AI1 0.220 0.150 1.147 0.000 0.000  1 0.00 0.000
    #> 5        5 C1, C2, AI1 0.220 0.150 1.147 0.000 0.000  1 0.00 0.000
    #> 6        6 C1, C2, AI1 0.638 0.417 0.269 0.175 0.456  0 0.27 0.098

## 1 Non-adverse impact objectives and 2 adverse-impact objectives

An example of such a MOO problem is when an organization seeks to optimize job performance, Black-white adverse impact ratio, and Hispanic-white adverse impact ratio. Note that the 2 adverse-impact objectives should have the same reference group. For example, the objectives can be Black-white adverse impact ratio and Hispanic-white adverse impact ratio. The objectives cannot be Black-white adverse impact ratio and female-male adverse impact ratio.

    # Example: 1 non-adverse impact objective & 2 adverse impact objectives
    out_1C_2AI = MOST(optProb = "1C_2AI",
                      # predictor intercorrelations
                      Rx = Rx,
                      # predictor - objective relations
                      Rxy1 = Rxy1, # non-AI objective 1
                      d1 = d_wb, # subgroup difference for minority 1
                      d2 = d_wh, # subgroup difference for minority 2
                      # selection ratio
                      sr = sr,
                      # proportion of minority
                      prop1 = prop_b, # minority 1
                      prop2 = prop_h, # minority 2
                      Spac = 10)
    #>
    #>  Estimating Multi-Objective Optimal Solution ...
    #>
    #>  Done.
    #>

    # The first few solutions
    head(out_1C_2AI)
    #>   Solution    Optimized    C1   AI1   AI2    P1    P2    P3    P4    P5
    #> 1        1 C1, AI1, AI2 0.652 0.355 0.483 0.025 0.328 0.164 0.333 0.151
    #> 2        2 C1, AI1, AI2 0.520 0.629 0.687 0.000 0.151 0.450 0.280 0.119
    #> 3        3 C1, AI1, AI2 0.489 0.684 0.714 0.000 0.131 0.501 0.262 0.106
    #> 4        4 C1, AI1, AI2 0.458 0.738 0.740 0.000 0.112 0.551 0.244 0.093
    #> 5        5 C1, AI1, AI2 0.426 0.794 0.768 0.000 0.092 0.601 0.226 0.081
    #> 6        6 C1, AI1, AI2 0.395 0.849 0.794 0.000 0.072 0.651 0.208 0.068

# Understand and use the results

Each row of the output corresponds to a set of predictor weights and the corresponding outcome for each of the three objectives.
* Columns 3 - 5: the expected outcome values for each objective
* Columns 6 - : the weights assigned to each predictor

Given the output of rMOST::MOST(), users can select a final solution (i.e., a final set of predictor weights) based on their goal. Predictor weights of the final solution could be used to create a predictor composite to be used in selection.

Take solution 1 in an optimization problem with 3 non-adverse impact objectives as an example. This solution assigns the weight of 0.03 to predictor P1, 0.399 to predictor P2, 0.094 to predictor P3, 0.346 to predictor P4, and 0.161 to predictor P5.

    out_3C[1, 6:ncol(out_3C)]
    #>     P1    P2    P3    P4    P5
    #> 1 0.03 0.399 0.094 0.346 0.161

Assuming a top-down selection, a predictor composite created with these weights would result in the following outcomes. The predictor composite would have a validity of 0.658 for objective C1, 0.4 for objective C2, and 0.407 for objective C3.

    out_3C[1, 3:5]
    #>      C1  C2    C3
    #> 1 0.658 0.4 0.407