ProjectField: Project Anomalies onto Modes of Variability

View source: R/ProjectField.R

ProjectFieldR Documentation

Project Anomalies onto Modes of Variability

Description

Project anomalies onto modes of variability to get the temporal evolution of the EOF mode selected. Returns principal components (PCs) by area-weighted projection onto EOF pattern (from EOF()). Able to handle NAs.

Usage

ProjectField(ano, eof, mode = 1)

Arguments

ano

Array of forecast or observational reference anomalies from Ano() or Ano_CrossValid with dimensions (number of forecast systems, ensemble members, start dates, forecast horizons, latitudes, longitudes).

eof

R object with EOFs from EOF.

mode

Variability mode number in the provided EOF object which to project onto.

Value

Array of principal components in verification format (number of forecast systems, ensemble members, start dates, forecast horizons).

Author(s)

History:
0.1 - 2012-03 (F. Lienert) - Original code
0.2 - 2014-03 (Lauriane Batte) - Bug-fixes:
1- Extra weighting of the anomalies before projection.
2- Reversion of the anomalies along latitudes.
3- Extra-normalisation not necessary.
0.3 - 2014-03 (Virginie Guemas) - Bug-fixes:
1- Another extra-normalisation.
2- 15 lines to compute the em reduced to 1. 0.4 - 2014-03 (Lauriane Batte) - Normalization
by std before returning PCs to be coherent with EOF().
0.5 - 2014-04 (Virginie Guemas) - Fixes:
1- Removal of lon, lat, ncpu and neofs argument unused
2- Security checks ano and eof consistency
3- Removal of the mask which is already contained in the EOFs
4- Removal of the PC normalization since we have chosen in
EOF() to normalize the EOFs and multiply the PCs by the normalization
factor and the eigenvalue so that the restitution of the original field is
done simply by PC * EOFs
5 - The new convention in EOF() is to divide by the weights
so that the reconstruction of the original field rather than the weighted
field is obtained by PC * EOFs. The EOFs need therefore to be multiplied
back by the weights before projection so that EOF * t(EOF) = 1
6 - Since W *X = PC * EOF if EOF is multiplied back by the weights,
PC = W * X * t(EOF) and X the input field to be projected (X) needs to be
multiplied by W. Getting input dimensions. 1.0 - 2016-03 (N. Manubens) - Formatting to R CRAN
(J.-P. Baudouin) - Example code and testing

See Also

EOF, 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)
 
# Now ready to compute the EOFs and project.
ano <- Ano_CrossValid(sampleData$mod, sampleData$obs)

# Compute the EOF of the observation.
eof <- EOF(ano$ano_obs[1, 1, , 1, , ], sampleData$lon, sampleData$lat)
# check the first mode represent the NAO
PlotEquiMap(eof$EOFs[1, , ], sampleData$lon, sampleData$lat, filled.continents = FALSE)

mode1_exp <- ProjectField(ano$ano_exp, eof, 1)
mode1_obs <- ProjectField(ano$ano_obs, eof, 1)

# Plot the forecast and the observation of the first mode
# for the last year of forecast
plot(mode1_obs[1, 1, dim(sampleData$mod)[3], ], type = "l", ylim = c(-1, 1), lwd = 2)
for (i in 1:dim(sampleData$mod)[2]) {
 par(new = TRUE)
 plot(mode1_exp[1, i, dim(sampleData$mod)[3], ], type = "l", col = rainbow(10)[i], 
      ylim = c(-15000, 15000))
}


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