\name{RnipalsPca}
\alias{RnipalsPca}
\title{NIPALS PCA implemented in R}
\usage{RnipalsPca(Matrix, nPcs=2, varLimit=1, maxSteps=5000, threshold=1e-06,
    verbose=interactive(), ...)}
\description{PCA by non-linear iterative partial least squares}
\details{Can be used for computing PCA on a numeric matrix using either the
NIPALS algorithm which is an iterative approach for estimating the
principal components extracting them one at a time. NIPALS can
handle a small amount of missing values. It is not recommended to
use this function directely but rather to use the pca() wrapper
function. There is a C++ implementation given as \code{nipalsPca}
which is faster.}
\value{A \code{pcaRes} object.}
\references{Wold, H. (1966) Estimation of principal components and
related models by iterative least squares. In Multivariate
Analysis (Ed., P.R. Krishnaiah), Academic Press, NY, 391-420.}
\author{Henning Redestig}
\seealso{\code{prcomp}, \code{princomp}, \code{pca}}
\keyword{multivariate}
\arguments{\item{Matrix}{Pre-processed (centered, scaled) numerical matrix
samples in rows and variables as columns.}
\item{nPcs}{Number of components that should be extracted.}
\item{varLimit}{Optionally the ratio of variance that should be
explained. \code{nPcs} is ignored if varLimit < 1}
\item{maxSteps}{Defines how many iterations can be done before
algorithm should abort (happens almost exclusively when there were
some wrong in the input data).}
\item{threshold}{The limit condition for judging if the algorithm
has converged or not, specifically if a new iteration is done if
\eqn{(T_{old} - T)^T(T_{old} - T) > \code{limit}}.}
\item{verbose}{Show simple progress information.}
\item{...}{Only used for passing through arguments.}}
\examples{data(metaboliteData)
mat <- prep(t(metaboliteData))
## c++ version is faster
system.time(pc <- RnipalsPca(mat, method="rnipals", nPcs=2))
system.time(pc <- nipalsPca(mat, nPcs=2))
## better use pca()
pc <- pca(t(metaboliteData), method="rnipals", nPcs=2)
\dontshow{stopifnot(sum((fitted(pc) - t(metaboliteData))^2, na.rm=TRUE) < 200)}}