EOF: Area-Weighted Empirical Orthogonal Function Analysis Using...

View source: R/EOF.R

EOFR Documentation

Area-Weighted Empirical Orthogonal Function Analysis Using SVD

Description

Performs an area-weighted EOF analysis using SVD based on a covariance matrix by default, based on the correlation matrix if corr argument is set to TRUE.

Usage

EOF(ano, lon, lat, neofs = 15, corr = FALSE)

Arguments

ano

Array of anomalies with dimensions (number of timesteps, number of latitudes, number of longitudes). NAs could exist but it should be consistent along time_dim. That is, if one grid point has NAs, all the time steps at this point should be NAs.

lon

Vector of longitudes of ano.

lat

Vector of latitudes of ano.

neofs

Number of modes to be kept. Default = 15.

corr

Whether to base on a correlation matrix (TRUE) or on a covariance matrix (default, FALSE).

Value

EOFs

An array of EOF patterns normalized to 1 (unitless) with dimensions (number of modes, number of latitudes, number of longitues). Multiplying EOFs by PCs gives the original reconstructed field.

PCs

An array of pincipal components with the units of the original field to the power of 2, with dimensions (number of time steps, number of modes). PCs contains already the percentage of explained variance so, to reconstruct the original field it's only needed to multiply EOFs by PCs.

var

Percentage ( mode (number of modes).

mask

Mask with dimensions (number of latitudes, number of longitudes).

wght

Weights with dimensions (number of latitudes, number of longitudes).

Author(s)

History:
0.1 - 2012-10 (F. Lienert) - Original code, inspired by R. Benestad's EOF() in R package clim.pact.
0.2 - 2014-03 (Lauriane Batte) - Bug-fixes:
1- Reversion of latitudes in the weights
2- Correlation matrix was used instead of covariance
3- Double use of the weights
0.3 - 2014-03 (Virginie Guemas) - Bug-fixes:
1- Weight computation - division by sum of cos(lat)
2- Shuffling of EOFs in EOF.2 intermediate vector
3- Crash when neofs = 1 sorted out
4- Crash when neofs > nt sorted out
0.4 - 2014-03 (Lauriane Batte) - Fixes:
1- BIG cleanup of code and clarification
2- Reduction of the number of transpositions and associated bug-fixes
4- Remove of the obsolete LINPACK options
0.5 - 2014-04 (Virginie Guemas) - Fixes:
1- Bug-fix in dimensions handling EOF composition restitutes now the original field in all cases
2- Simplification of the convention transpose
3- Options to use the correlation matrix rather than the covariance matrix
4- Security checks
5- New normalization of PCs so that PC*EOF only reconstruct the original file
6- Weights = sqrt(cos(lat)) for ano so that covariance matrice weighted by cos(lat)
7- Division of EOF by weights so that the reconstruction is simply EOF * PC
1.0 - 2016-03 (N. Manubens) - Formatting to R CRAN

See Also

ProjectField, NAO, PlotBoxWhisker

Examples

# See examples on Load() to understand the first lines in this example
 ## Not run: 
data_path <- system.file('sample_data', package = 's2dverification')
expA <- list(name = 'experiment', path = file.path(data_path, 
            'model/$EXP_NAME$/$STORE_FREQ$_mean/$VAR_NAME$_3hourly',
            '$VAR_NAME$_$START_DATE$.nc'))
obsX <- list(name = 'observation', path = file.path(data_path, 
            '$OBS_NAME$/$STORE_FREQ$_mean/$VAR_NAME$',
            '$VAR_NAME$_$YEAR$$MONTH$.nc'))

# Now we are ready to use Load().
startDates <- c('19851101', '19901101', '19951101', '20001101', '20051101')
sampleData <- Load('tos', list(expA), list(obsX), startDates,
                  leadtimemin = 1, leadtimemax = 4, output = 'lonlat',
                  latmin = 27, latmax = 48, lonmin = -12, lonmax = 40)
 
## End(Not run)
 
# 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.
ano <- Ano_CrossValid(sampleData$mod, sampleData$obs)
eof <- EOF(Mean1Dim(ano$ano_exp, 2)[1, , 1, , ], sampleData$lon, sampleData$lat)
PlotEquiMap(eof$EOFs[1, , ], sampleData$lon, sampleData$lat)


s2dverification documentation built on April 20, 2022, 9:06 a.m.