12 votos

Series temporales de PCA - Cambio de signo en las cargas de los factores

Tengo una serie temporal de datos de 300 días. Calculo las cargas factoriales del PCA en una ventana móvil de 30 días. Hay 7 acciones en el universo. Así, los factores F1 a F7 se calculan en cada cálculo del ACP.

Sin embargo, los signos de las cargas factoriales cambian. Esto provoca problemas a la hora de interpretar las series temporales de precios de los factores.

¿Cuáles son los diferentes enfoques para tratar este problema?

0 votos

¿Para todos los componentes? Cuando dices cargas, ¿te refieres a los vectores propios? ¿Podría publicar algún código?

0 votos

Hay una pregunta relacionada que podría ayudar: enlace

0 votos

@michaelv2 No estoy seguro de qué tiene que ver ese enlace con la pregunta aquí.

11voto

RWL01 Puntos 317

1) El vector propio menos uno es también un vector propio (con el mismo valor propio). 2) Los distintos vectores propios de una matriz simétrica (es decir, de covarianza) son ortogonales. 1 y 2 implican que se puede multiplicar un subconjunto de todos los vectores propios de una matriz simétrica por menos uno y seguir obteniendo un conjunto completo de vectores propios

Lo que significa, sólo imponer que el primer componente de cada factor es positivo. Si el PCA devuelve el primer componente como negativo, multiplique todo el vector por menos uno. Eso resolverá su problema.

0 votos

Incluso ahí, Mepuzza, podrías tener un problema. La razón es que tienes que estar seguro de que el primer elemento es mayor que cero en términos absolutos, ya que de lo contrario los pequeños cambios en la matriz histórica podrían perturbar este elemento y hacerlo cambiar de signo.

8voto

BenM Puntos 471

Se puede calcular el PCA en ventanas superpuestas y tratar de igualar los vectores propios: es posible que tenga que cambiar no sólo su signo (ya que sólo los espacios propios están bien definidos, el signo de los vectores propios es arbitrario) sino también su orden.

Aquí hay un código R (no probado) para hacer esto.

# Sample data
k <- 7
n <- 50
found <- FALSE
while(!found) {
  x <- matrix(rnorm(k*(n*1)),nc=k)
  e1 <- eigen(var(x[-1,]))
  e2 <- eigen(var(x[1:n,]))
  found <- e1$vectors[1,1] * e2$vectors[1,1] < 0
}
colnames(e1$vectors) <- LETTERS[1:k]
colnames(e2$vectors) <- letters[1:k]

# Compare the eigenvectors, 
# by computing the cosine of the angle they form.
d <- cor(e1$vectors, e2$vectors)

# Permutation of the vectors
i <- apply(abs(d), 1, which.max)
e2$values  <- e2$values[i]
e2$vectors <- e2$vectors[,i]

# Change the sign, if needed
j <- sign(diag(d[1:k,i]))
e2$vectors <- t( t(e2$vectors) * j )

3voto

Ted Percival Puntos 3712

Si se refiere a este problema entonces hay una respuesta muy completa en el intercambio de pilas validadas en cruz.

3voto

Yo también estoy interesado en resolver este problema, aunque, decidí no crear un hilo separado para ello todavía. Esto es una especie de continuación de la pregunta anterior a continuación.

https://stats.stackexchange.com/questions/34396/im-getting-jumpy-loadings-in-rollapply-pca-in-r-can-i-fix-it

En el análisis factorial, concretamente en el PCA, el signo de las cargas no significa nada, pero si alguien, como yo, quiere proyectar series temporales a la componente principal seleccionada, entonces veremos la imagen como en el enlace anterior: cargas saltantes.

Todas las respuestas que he visto especulan con multiplicar el vector por menos 1 si crees que ese vector concreto con cargas salta demasiado. Incluso hay respuestas que sugieren cómo identificar exactamente ese "demasiado" comparando dos vectores, el actual y el anterior. Pero sigue sin ser suficiente porque incluso según las respuestas podré identificar los cambios de signo sólo en la mitad de la secuencia, cuando haya calculado 2 vectores y pueda compararlos. No es suficiente porque todavía tengo que estar seguro de que el primer signo se definió correctamente y este es el problema - asumes que el primer vector propio es correcto, calculas el siguiente y te das cuenta de que hay que cambiar el signo, lo mismo para el resto de la secuencia y cuando graficas esto en el gráfico te das cuenta de que las cargas ya no son saltarinas sino que el conjunto el gráfico está invertido porque cuando calculaste el primer vector propio era erróneo y nadie ha sugerido todavía cómo comprobar exactamente el PRIMER vector propio sin compararlo con los demás.

Por el momento, tengo tres sugerencias de cómo se pueden eliminar estos saltos en las cargas.

  • resumir todos los valores del vector propio para predecir en qué espacio propio se encuentra
eigenvector [-0.5, 0.2, 0.4]
-0.5 + 0.2 + 0.4 = 0.1 > 0 = sign is correct and should not change

eigenvector [-0.5, 0.2, 0.1]
-0.5 + 0.2 + 0.1 = -0.2 < 0 = change sign
  • calcular el producto punto entre el vector actual y el anterior
vectorActual [-0.5, 0.2]
vectorPrev [0.3, -0.1]
-0.5 * 0.3 + 0.2 * -0.1 = -0.17 < 0 = change sign
  • calcular la diferencia entre los vectores actuales y los anteriores
vectorActual [-0.5, 0.2]
vectorPrev [0.3, -0.1]

Diff = MathAbs(-0.5 - 0.3) + MathAbs(0.2 - -0.1) = 1.1
Sum  = MathAbs(-0.5 + 0.3) + MathAbs(0.2 + -0.1) = 0.3
Diff > Sum = change sign

Adjunto imagen con un gráfico para mostrar lo que quiero decir. Como se puede ver, el resumen simple muestra buenos resultados sin inversión, pero en algunos casos los saltos son posibles. ¡Al mismo tiempo, Dot Product y la comparación entre Diff - Sum muestran el gráfico sin saltos en absoluto, pero se invierte, lo cual es incorrecto!

Imagen de alta resolución - http://snag.gy/zCqHx.jpg

enter image description here

Así que, en la medida en que esto pueda ser una respuesta a la pregunta de este tema, sigo interesado en ¿cómo comprobar que la orientación del primer vector de una secuencia es correcta?

0voto

Chera Puntos 93

Personalmente, no encuentro que ninguna de las respuestas proporcionadas sea de mucha ayuda para responder a la pregunta. El análisis factorial se desarrolló para la información recogida en un único momento. Sólo en las últimas décadas se han hecho extensiones a, primero, dos o unos pocos períodos de tiempo, y luego, más recientemente, se han propuesto modelos verdaderamente longitudinales. Todos los que escriben sobre estos retos señalan los mismos problemas que el OP ha señalado: las puntuaciones y las cargas pueden cambiar y cambiarán con el tiempo, y no sólo eso, el significado cualitativo de los factores puede cambiar y cambiará. Por ejemplo, si los datos de las series temporales no se masajean y transforman de forma coherente, ¿cómo se puede distinguir entre el cambio real subyacente y el simple ruido? Estos retos deben abordarse de forma sistemática y rigurosa, algo que, por ejemplo, los módulos de R de "ventanas superpuestas" o "rollover" simplemente no abordan. Esto se debe a que, por muy grande que sea la muestra de datos, sigue siendo una muestra de datos finita sujeta a todos los caprichos y vicisitudes de las cantidades de información menos que infinitas. En otras palabras, sólo en el límite asintótico teórico infinito se cumplen muchos teoremas, pruebas y resultados. Esto es tan cierto para la AF como para la teoría de la cartera.

Desde mi punto de vista, tienes que morder la bala y trabajar a través de la literatura académica. Las respuestas kluge de la literatura financiera cuantitativa son las ya señaladas en las respuestas publicadas en este hilo. Olvídate de eso y lee la literatura académica psicométrica. Allí encontrará sugerencias y respuestas bien pensadas a estos desafíos. También encontrará que el "estado del arte" puede no tener todo las respuestas que buscas. En otras palabras, es posible que las respuestas de los libros de texto aún no se hayan desarrollado. Si encuentras soluciones nuevas y creativas, puede que consigas que te publiquen un artículo.

Aquí hay un ejemplo de un libro reciente que tiene artículos sobre este tema: El análisis factorial al 100: evolución histórica y futuro de Cudek y McCallum (eds., 2007). En particular, preste atención a los dos trabajos de MacArdle, Brown y Zhong. La bibliografía sobre ecuaciones estructurales también tiene aportaciones útiles. Basta con buscar en Google "longitudinal factor analysis" y aparecerá una plétora de artículos.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X