From 38d3979f5ddf8387e732bfb6168564b4a5fac859 Mon Sep 17 00:00:00 2001 From: mcrucifix <michel.crucifix@uclouvain.be> Date: Wed, 20 May 2020 10:58:36 +0200 Subject: [PATCH] number of SSA reconstructed cpmts was hardwired --- R/ssa.R | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/R/ssa.R b/R/ssa.R index 440b704..7830e75 100644 --- a/R/ssa.R +++ b/R/ssa.R @@ -8,11 +8,12 @@ #---------------------------------------------------------------------- # using astronomical forcing as sample data -ssa <- function(X=X,N=length(X),M=M) +ssa <- function(X=X,N=length(X),M=M,Nrec=10) { # construct Toeplitz Matrix for reference signal (eq. 6) # according to Vautard and Ghil, 1989 + # added: Nrec : number of components of reconstruction X <- X - mean(X) cij <- vector("double",M) @@ -38,11 +39,11 @@ ssa <- function(X=X,N=length(X),M=M) # evaluation of the principal components of the original signal (eq. 10) - A <- matrix(0,N-M+1,10) + A <- matrix(0,N-M+1,Nrec) - for (k in 1:10) { for (t in 1:(N-M+1)) + for (k in 1:Nrec) { for (t in 1:(N-M+1)) A[t,k] <- crossprod(X[t:(t+M-1)],rhok[,k]) } @@ -68,16 +69,16 @@ ssa <- function(X=X,N=length(X),M=M) Lt[t]<-t-N+M Ut[t]<-M} - PCA <- matrix(0,10,N); + PCA <- matrix(0,Nrec,N); - for (t in 1:N) {for (k in 1:10) + for (t in 1:N) {for (k in 1:Nrec) { PCA[k,t] <- PCA[k,t] + crossprod(A[t-Lt[t]:Ut[t]+1,k],rhok[Lt[t]:Ut[t],k]); }} - LA <- vector("double",10) - for (k in 1:10) { + LA <- vector("double",Nrec) + for (k in 1:Nrec) { PCA[k,] <- PCA[k,]/Mt LA[k]=crossprod(PCA[k,],X[1:N]) } @@ -91,7 +92,7 @@ ssa <- function(X=X,N=length(X),M=M) plot.SSAObject <- function (SSAObject,...) { - yat <- outer(seq(1:10),10^(seq(-3,5)),"*") + yat <- outer(seq(1:Nrec),10^(seq(-3,5)),"*") ylab <- 10^(-2:5) ss <- lapply(seq(along = ylab), -- GitLab