eofBoot | R Documentation |
The eofBoot
function uses a bootstrap randomization approach to
calculate distributions of Empirical Orthogonal Function analysis (EOF)
singular values with the eof
function.
EOF mode significance is assessed against the distributions of
neighboring EOF singular values ("Lambda") calculated by the permutated
models. A bootstrap routine follows the procedure of Babamoradi et al. (2013) whereby
permutations sample rows (samples) more than once, which is a non-parametric
approach does not make assumptions about the distribution of data.
eofBoot( F1, centered = TRUE, scaled = FALSE, nu = NULL, method = NULL, recursive = FALSE, nperm = 99 )
F1 |
A data field. The data should be arraunged as samples in the column dimension (typically each column is a time series for a spatial location). |
centered |
Logical ( |
scaled |
Logical ( |
nu |
Numeric value. Defines the number of EOFs to return. Defaults to return the full set of EOFs. |
method |
Method for matrix decomposition (' |
recursive |
Logical. When |
nperm |
Numeric. The number of null model permutations to calculate. |
Babamoradi, H., van den Berg, F., Rinnan, A, 2013. Bootstrap based confidence limits in principal component analysis - A case study, Chemometrics and Intelligent Laboratory Systems, Volume 120, pp. 97-105. doi:10.1016/j.chemolab.2012.10.007.
# Generate data m=50 n=100 frac.gaps <- 0.5 # the fraction of data with NaNs N.S.ratio <- 0.1 # the Noise to Signal ratio for adding noise to data x <- (seq(m)*2*pi)/m t <- (seq(n)*2*pi)/n # True field Xt <- outer(sin(x), sin(t)) + outer(sin(2.1*x), sin(2.1*t)) + outer(sin(3.1*x), sin(3.1*t)) + outer(tanh(x), cos(t)) + outer(tanh(2*x), cos(2.1*t)) + outer(tanh(4*x), cos(0.1*t)) + outer(tanh(2.4*x), cos(1.1*t)) + tanh(outer(x, t, FUN="+")) + tanh(outer(x, 2*t, FUN="+")) Xt <- t(Xt) # Noise field set.seed(1) RAND <- matrix(runif(length(Xt), min=-1, max=1), nrow=nrow(Xt), ncol=ncol(Xt)) R <- RAND * N.S.ratio * Xt # True field + Noise field Xp <- Xt + R res <- eofBoot(Xp, centered=FALSE, scaled=FALSE, nperm=499) ylim <- range(res$Lambda.orig, res$Lambda) boxplot(res$Lambda, log="y", col=8, border=2, outpch="", ylim=ylim) points(res$Lambda.orig) abline(v=res$n.sig+0.5, lty=2, col=4) mtext(paste("Non-mixed PCs =", res$n.sig), side=3, line=0.5, col=4)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.