básicamente quiero realizar un promedio diagonal en R. A continuación se muestra un código adaptado del paquete simsalabim para hacer el promedio diagonal. Solo que esto es lento.Ayuda a acelerar un bucle en R
¿Alguna sugerencia para vectorizar esto en lugar de usar sapply?
reconSSA <- function(S,v,group=1){
### S : matrix
### v : vector
N <- length(v)
L <- nrow(S)
K <- N-L+1
XX <- matrix(0,nrow=L,ncol=K)
IND <- row(XX)+col(XX)-1
XX <- matrix(v[row(XX)+col(XX)-1],nrow=L,ncol=K)
XX <- S[,group] %*% t(t(XX) %*% S[,group])
##Diagonal Averaging
.intFun <- function(i,x,ind) mean(x[ind==i])
RC <- sapply(1:N,.intFun,x=XX,ind=IND)
return(RC)
}
Para los datos que usted podría utilizar el siguiente
data(AirPassengers)
v <- AirPassengers
L <- 30
T <- length(v)
K <- T-L+1
x.b <- matrix(nrow=L,ncol=K)
x.b <- matrix(v[row(x.b)+col(x.b)-1],nrow=L,ncol=K)
S <- eigen(x.b %*% t(x.b))[["vectors"]]
out <- reconSSA(S, v, 1:10)
Ejemplo de datos por favor. –
he agregado algunos datos. Gracias por el recordatorio. – pslice
Excelente; obtendrá respuestas mucho mejores con un ejemplo reproducible. –