Skip to contents

lcor() rearranges values in each column of a data-frame so that columns are correlated to match a predefined correlation matrix.

Usage

lcor(data, target, passes = 10)

Arguments

data

data-frame that is to be rearranged

target

target correlation matrix. Must have same dimensions as number of columns in data-frame.

passes

Number of optimization passes (default = 10) Increasing this value MAY improve results if n-columns (target correlation matrix dimensions) are many.

Value

Returns a data frame whose column-wise correlations

Returns a dataframe whose column-wise correlations approximate a user-specified correlation matrix

Details

Values in a column do not change, so univariate statistics remain the same.

Examples


## parameters
n <- 32
lowerbound <- 1
upperbound <- 5
items <- 5

mydat3 <- data.frame(
  x1 = lfast(n, 2.5, 0.75, lowerbound, upperbound, items),
  x2 = lfast(n, 3.0, 1.50, lowerbound, upperbound, items),
  x3 = lfast(n, 3.5, 1.00, lowerbound, upperbound, items)
)
#> best solution in 40 iterations
#> reached maximum of 1024 iterations
#> reached maximum of 1024 iterations

cor(mydat3) |> round(3)
#>       x1     x2     x3
#> x1 1.000  0.014  0.052
#> x2 0.014  1.000 -0.110
#> x3 0.052 -0.110  1.000

tgt3 <- matrix(
  c(
    1.00, 0.50, 0.75,
    0.50, 1.00, 0.25,
    0.75, 0.25, 1.00
  ),
  nrow = 3, ncol = 3
)

## apply function
new3 <- lcor(mydat3, tgt3)

## test output
cor(new3) |> round(3)
#>       X1    X2    X3
#> X1 1.000 0.502 0.751
#> X2 0.502 1.000 0.249
#> X3 0.751 0.249 1.000