14 votos

Reducción de dimensionalidad SVD para series temporales de diferente longitud

Estoy utilizando la Descomposición de Valores Singulares como técnica de reducción de dimensionalidad.

Dado N vectores de dimensión D, la idea es representar las características en un espacio transformado de dimensiones no correlacionadas, que condensa la mayoría de la información de los datos en los autovectores de este espacio en un orden decreciente de importancia.

Ahora estoy intentando aplicar este procedimiento a datos de series temporales. El problema es que no todas las secuencias tienen la misma longitud, por lo tanto no puedo construir realmente la matriz num-by-dim y aplicar SVD. Mi primera idea fue rellenar la matriz con ceros construyendo una matriz num-by-maxDim y llenando los espacios vacíos con ceros, pero no estoy seguro de si ese es el método correcto.

¿Mi pregunta es cómo aplicar el enfoque de SVD de reducción de dimensionalidad a series temporales de diferentes longitudes? Alternativamente, ¿existen otros métodos similares de representación de espacios propios que se utilizan comúnmente con series temporales?

A continuación se muestra un fragmento de código de MATLAB para ilustrar la idea:

X = randn(100,4);                       % matriz de datos de tamaño N-by-dim

X0 = bsxfun(@minus, X, mean(X));        % estandarizar
[U S V] = svd(X0,0);                    % SVD
varianzas = diag(S).^2 / (size(X,1)-1); % varianzas a lo largo de los autovectores

KEEP = 2;                               % número de dimensiones a mantener
newX = U(:,1:KEEP)*S(1:KEEP,1:KEEP);    % datos reducidos y transformados

(Principalmente programo en MATLAB, pero me siento lo suficientemente cómodo como para leer también R/Python/..)

5voto

Kristof Provost Puntos 293

Existe un área de investigación bastante nueva llamada Completación de Matrices, que probablemente hace lo que deseas. Una introducción muy buena se da en esta conferencia de Emmanuel Candes

2voto

jldugger Puntos 7490

Solo una idea: es posible que no necesites el SVD completo para tu problema. Deja que M = U S V* sea el SVD de tu matriz d por n (i.e., las series temporales son las columnas). Para lograr la reducción de la dimensión, utilizarás las matrices V y S. Puedes encontrarlas diagonalizando M* M = V (S*S) V*. Sin embargo, debido a que te faltan algunos valores, no puedes calcular M* M. Sin embargo, puedes estimarlo. Sus entradas son sumas de productos de columnas de M. Al calcular cualquiera de los SSPs, ignora las parejas que involucran valores faltantes. Reescala cada producto para tener en cuenta los valores faltantes: es decir, cada vez que un SSP involucre n-k parejas, reescálalo por n/(n-k). Este procedimiento es un estimador "razonable" de M* M y puedes continuar desde ahí. Si deseas realizar algo más elaborado, tal vez técnicas de imputación múltiple o Completación de Matrices podrían ayudar.

(Esto se puede llevar a cabo en muchos paquetes estadísticos calculando una matriz de covarianza por pares del conjunto de datos transpuesto y aplicando PCA o análisis de factores sobre ella.)

2voto

David Pokluda Puntos 4284

Rellenar con ceros es malo. Intenta rellenar con remuestreo usando observaciones del pasado.

1voto

Akira Puntos 1061

Estoy algo confundido por tu código de ejemplo, ya que parece que omites la variable V en el cálculo de newX. ¿Estás buscando modelar X como un producto de rango reducido, o estás interesado en un espacio de columna reducido de X? En este último caso, creo que un enfoque de EM-PCA funcionaría. Puedes encontrar código de matlab bajo el título PCA probabilístico con valores faltantes.

Saludos,

1voto

Podrías estimar modelos de series temporales univariadas para la serie 'corta' y extrapolarlos hacia el futuro para 'alinear' todas las series.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X