EOF.Rd 3.55 KB
Newer Older
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/EOF.R
\name{EOF}
\alias{EOF}
\title{Area-weighted empirical orthogonal function analysis using SVD}
\usage{
aho's avatar
aho committed
EOF(ano, lat, lon, time_dim = "sdate", space_dim = c("lat", "lon"),
  neofs = 15, corr = FALSE, ncores = NULL)
}
\arguments{
\item{ano}{A numerical array of anomalies with named dimensions to calculate
EOF. The dimensions must have at least 'time_dim' and 'space_dim'.}

aho's avatar
aho committed
\item{lat}{A vector of the latitudes of 'ano'.}
aho's avatar
aho committed
\item{lon}{A vector of the longitudes of 'ano'.}

\item{time_dim}{A character string indicating the name of the time dimension
aho's avatar
aho committed
of 'ano'. The default value is 'sdate'.}

\item{space_dim}{A vector of two character strings. The first is the dimension
name of latitude of 'ano' and the second is the dimension name of longitude
of 'ano'. The default value is c('lat', 'lon').}

\item{neofs}{An integer of the modes to be kept. The default value is 15.
If time length or the product of latitude length and longitude length is 
less than neofs, neofs is equal to the minimum of the three values.}

\item{corr}{A logical value indicating whether to base on a correlation (TRUE)
or on a covariance matrix (FALSE). The default value is FALSE.}

\item{ncores}{An integer indicating the number of cores to use for parallel 
computation. The default value is NULL.}
}
\value{
A list containing:
\item{EOFs}{
 An array of EOF patterns normalized to 1 (unitless) with dimensions 
 (number of modes, rest of the dimensions of ano except 'time_dim'). 
 Multiplying \code{EOFs} by \code{PCs} gives the original reconstructed 
 field.
}
\item{PCs}{
 An array of principal components with the units of the original field to 
aho's avatar
aho committed
 the power of 2, with dimensions (time_dim, number of modes, rest of the
 dimensions except 'space_dim'). 
 \code{PCs} contains already the percentage of explained variance so, 
 to reconstruct the original field it's only needed to multiply \code{EOFs} 
 by \code{PCs}.
} 
\item{var}{
aho's avatar
aho committed
 An array of the percentage (%) of variance fraction of total variance 
 explained by each mode (number of modes). The dimensions are (number of 
 modes, rest of the dimension except 'time_dim' and 'space_dim').
aho's avatar
aho committed
 An array of the mask with dimensions (space_dim, rest of the dimension
 except 'time_dim').
aho's avatar
aho committed
 An array of the weights with dimensions (space_dim).
}
}
\description{
Perform an area-weighted EOF analysis using SVD based on a covariance matrix 
by default, based on the correlation matrix if \code{corr} argument is set to 
\code{TRUE}.
}
\examples{
# This example computes the EOFs along forecast horizons and plots the one that 
# explains the greatest amount of variability. The example data is very low 
# resolution so it does not make a lot of sense.
\dontshow{
startDates <- c('19851101', '19901101', '19951101', '20001101', '20051101')
sampleData <- s2dv:::.LoadSampleData('tos', c('experiment'),
                                    c('observation'), startDates,
                                    leadtimemin = 1,
                                    leadtimemax = 4,
                                    output = 'lonlat',
                                    latmin = 27, latmax = 48,
                                    lonmin = -12, lonmax = 40)
}
ano <- Ano_CrossValid(sampleData$mod, sampleData$obs)
aho's avatar
aho committed
tmp <- MeanDims(ano$ano_exp, c('dataset', 'member'))
ano <- tmp[, 1, ,]
names(dim(ano)) <- names(dim(tmp))[-2]
eof <- EOF(ano, sampleData$lat, sampleData$lon)
\dontrun{
PlotEquiMap(eof$EOFs[1, , ], sampleData$lon, sampleData$lat)
}

}
\seealso{
ProjectField, NAO, PlotBoxWhisker
}