Learn R Programming

fungible (version 1.91)

fungibleExtrema: Locate Extrema of Fungible Regression Weights

Description

Locate extrema of fungible regression weights.

Usage

fungibleExtrema(R.X, rxy, r.yhata.yhatb, Nstarts = 100, MaxMin = "Max")

Arguments

R.X

p x p Predictor variable correlation matrix.

rxy

p x 1 Vector of predictor-criterion correlations.

r.yhata.yhatb

Correlation between least squares (yhatb) and alternate-weight (yhata) composites.

Nstarts

Maximum number of (max) minimizations from random starting configurations.

MaxMin

Character: "Max" = maximize cos(a,b); "Min" = minimize cos(a,b).

Value

cos.ab

cosine between OLS and alternate weights.

a

extrema of fungible weights.

k

k weights.

z

z weights: a normalized random vector.

b

OLS weights.

u

p x 1 vector of u weights.

r.yhata.yhatb

Correlation between yhata and yhatb.

r.y.yhatb

Correlation between y and yhatb.

gradient

Gradient of converged solution.

References

Koopman, R. F. (1988). On the sensitivity of a composite to its weights. Psychometrika, 53(4), 547--552.

Waller, N. & Jones, J. (2009). Locating the extrema of fungible regression weights in multiple regression. Psychometrika, 74, 589--602.

Examples

Run this code
# NOT RUN {
# }
# NOT RUN {
## Example 
## This is Koopmnan's Table 2 Example


R.X <- matrix(c(1.00,  .69,  .49,  .39,
                 .69, 1.00,  .38,  .19,
                 .49,  .38, 1.00,  .27,
                 .39,  .19,  .27, 1.00),4,4)
                 
                 
b <- c(.39, .22, .02, .43)
rxy <- R.X %*% b

OLSRSQ <- t(b) %*% R.X %*% b

## theta <- .02
## r.yhata.yhatb <- sqrt( 1 - (theta)/OLSRSQ)

r.yhata.yhatb  <- .90
set.seed(5)
output <- fungibleExtrema(R.X, rxy, r.yhata.yhatb, Nstarts = 500, 
                         MaxMin = "Min")

## Scale to replicate Koopman
a <- output$a
a.old <- a
aRa <- t(a) %*% R.X %*% a

## Scale a such that a' R a = .68659
## vc = variance of composite
vc <- aRa
## sf = scale factor
sf <- .68659/vc
a <- as.numeric(sqrt(sf)) * a
cat("\nKoopman Scaling\n")
print(round(a,2))
# }
# NOT RUN {
# }

Run the code above in your browser using DataLab