# R/eigenComputes.r In nFactors: Parallel Analysis and Other Non Graphical Solutions to the Cattell Scree Test

#### Documented in eigenComputes

```#' Computes Eigenvalues According to the Data Type
#'
#' The \code{eigenComputes} function computes eigenvalues from the identified data
#' type. It is used internally in many
#' fonctions of the \pkg{nFactors} package in order to apply these to a vector of
#' eigenvalues, a matrix of correlations or covariance or a data frame.
#' @param x numeric: a \code{vector} of eigenvalues, a \code{matrix} of
#' correlations or of covariances or a \code{data.frame} of data
#' @param cor logical: if \code{TRUE} computes eigenvalues from a correlation
#' matrix, else from a covariance matrix
#' @param model character: \code{"components"} or \code{"factors"}
#' @param ... variable: additionnal parameters to give to the \code{cor} or
#'  \code{cov} functions
#' @return numeric: return a vector of eigenvalues
#'
#' @author Gilles Raiche \cr Centre sur les Applications des Modeles de
#' Reponses aux Items (CAMRI) \cr Universite du Quebec a Montreal\cr
#' \email{raiche.gilles@@uqam.ca}
#' \cr \cr David Magis \cr Departement de mathematiques \cr Universite de Liege
#' \cr \email{David.Magis@@ulg.ac.be}
#' @export
#' @importFrom stats cov cov2cor
#' @keywords multivariate
#' @examples
#' # .......................................................
#' # Different data types
#' # Vector of eigenvalues
#' data(dFactors)
#' x1 <- dFactors\$Cliff1\$eigenvalues
#' eigenComputes(x1)
#'
#' # Data from a data.frame
#' x2 <- data.frame(matrix(20*rnorm(100), ncol=5))
#' eigenComputes(x2, cor=TRUE,  use="everything")
#' eigenComputes(x2, cor=FALSE, use="everything")
#' eigenComputes(x2, cor=TRUE,  use="everything", method="spearman")
#' eigenComputes(x2, cor=TRUE,  use="everything", method="kendall")
#'
# From a covariance matrix
#' x3 <- cov(x2)
#' eigenComputes(x3, cor=TRUE,  use="everything")
#' eigenComputes(x3, cor=FALSE, use="everything")
#'
# From a correlation matrix
#' x4 <- cor(x2)
#' eigenComputes(x4, use="everything")
#' # .......................................................
#'
eigenComputes <-
function(x, cor=TRUE, model="components", ...) {
dataType <- eigenFrom(x)

if (model == "components") {
res <- switch(dataType,
eigenvalues = as.vector(x),
correlation = {if (cor == FALSE) eigen(x)\$values           else  eigen(cov2cor(x))\$values},
data        = {if (cor == TRUE)  eigen(cor(x, ...))\$values else  eigen(cov(x, ...))\$values}
)
}

if (model == "factors") {
res <- switch(dataType,
eigenvalues = as.vector(x),
correlation = {if (cor == FALSE) eigen(corFA(x, method="ginv"))\$values else   eigen(cov2cor(corFA(x, method="ginv")))\$values},
data        = {if (cor == TRUE)  eigen(corFA(cor(x, ...), method="ginv"))\$values else  eigen(corFA(cov(x, ...), method="ginv"))\$values}
)
}
return(res)
}
```

## Try the nFactors package in your browser

Any scripts or data that you put into this service are public.

nFactors documentation built on Oct. 10, 2022, 5:07 p.m.