# pcp: convenience version of the singular value decomposition In hddplot: Use Known Groups in High-Dimensional Data to Derive Scores for Plots

## Description

Packages results from an SVD on what can be either a cases by variables (features) or variables by cases layout, for use in principal component and related calculations

## Usage

 ```1 2``` ```pcp(x = datasets::USArrests, varscores = TRUE, cases = "rows", center = "vars", standardize = FALSE, scale.cases = 1, log = FALSE, sc = 1, reflect = c(1, 1)) ```

## Arguments

 `x` matrix on which SVD is to be performed `varscores` logical; should scores be returned? `cases` specify either `"rows"` or `"columns"` `center` logical: if set to `"vars"`, then values of variables will be centered `standardize` logical: should values of variables be standardized to zero mean and unit deviance. Takes precedence over the setting of `center` `scale.cases` set to a value in [0,1]. `scale.cases=0` gives a pure rotation of the variables. `scale.cases=1` weights a/c the singular values `log` logical: should logarithms be taken, prior to the calculation? `sc` the variable scores are divided by sqrt{sc-1}. By default, `sc` = number of cases `reflect` a vector of two elements, by default `c(1,1)`. Use of -1 in one or both positions can be useful in reconciling results with output from other software

## Value

 `g` case scores `h` variable scores `avv` variable means `sdev` singular values, divides by the square root of one less than the number of cases

## Author(s)

John Maindonald

`La.svd`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49``` ```USArrests.svd <- pcp(x = datasets::USArrests) ## The function is currently defined as function(x=datasets::USArrests, varscores=TRUE, cases="rows", center="vars", standardize=FALSE, scale.cases=1, log=FALSE, sc=1, reflect=c(1,1)) { x <- as.matrix(x) avv <- 0 sdv <- 1 casedim <- 2-as.logical(cases=="rows") vardim <- 3-casedim ## casedim=1 if rows are cases; otherwise casedim=2 ## scale.cases=0 gives a pure rotation of the variables ## scale.cases=1 weights a/c the singular values ncases <- dim(x)[casedim] nvar <- dim(x)[vardim] if(is.null(sc))sc <- dim(x)[casedim]-1 if(log)x <- log(x, base=2) if(standardize){ avv <- apply(x, vardim, mean) sdv <- apply(x, vardim, sd) x <- sweep(x, vardim, avv,"-") x <- sweep(x, vardim, sdv,"/") } else if(as.logical(match("vars", center, nomatch=0))){ avv <- apply(x,vardim, mean) x <- sweep(x, vardim, avv,"-")} svdx <- La.svd(x, method = c("dgesdd")) h <- NULL if(cases=="rows"){ g <- sweep(svdx\$u, 2, svdx\$d^scale.cases, "*")*sqrt(sc) if(varscores) h <- t((svdx\$d^(1-scale.cases)* svdx\$vt ))/sqrt(sc) } else if(cases=="columns"){ g <- sweep(t(svdx\$vt), 2, svdx\$d^scale.cases, "*")*sqrt(sc) if(varscores) h <- sweep(svdx\$u, 2, svdx\$d^(1-scale.cases),"*")/sqrt(sc) } invisible(list(g=g, rotation=h, av=avv, sdev=svdx\$d/sqrt(ncases-1))) } ```