Ignoremos el centrado de la media por un momento. Una forma de entender los datos es ver cada serie de tiempo como aproximadamente un múltiplo fijo de una "tendencia" general, que en sí misma es una serie de tiempox=(x1,x2,…,xp)′ (con p=7El número de períodos de tiempo). Me referiré a esto a continuación como "tener una tendencia similar".
Escritura ϕ=(ϕ1,ϕ2,…,ϕn)′ para esos múltiplos (con n=10 el número de series de tiempo), la matriz de datos es aproximadamente
X=ϕx′.
Los valores propios de PCA (sin centrado medio) son los valores propios de
X′X=(xϕ′)(ϕx′)=x(ϕ′ϕ)x′=(ϕ′ϕ)xx′,
porque ϕ′ϕEs solo un número. Por definición, para cualquier valor propioλ y cualquier vector propio correspondiente β,
λβ=X′Xβ=(ϕ′ϕ)xx′β=((ϕ′ϕ)(x′β))x,(1)
donde una vez más el número x′β se puede conmutar con el vector x. Dejarλ ser el valor propio más grande, entonces (a menos que todas las series de tiempo sean idénticamente cero en todo momento) λ>0.
Desde el lado derecho de (1) es un múltiplo de xy el lado izquierdo es un múltiplo distinto de ceroβ, el vector propio β debe ser un múltiplo de x, también.
En otras palabras, cuando un conjunto de series de tiempo se ajusta a este ideal (que todos son múltiplos de una serie de tiempo común), entonces
Hay un valor propio positivo único en la PCA.
Hay un espacio propio correspondiente único que abarca la serie temporal común x.
Coloquialmente, (2) dice que "el primer vector propio es proporcional a la tendencia".
"Centrado medio" en PCA significa que las columnas están centradas. Dado que las columnas corresponden a los tiempos de observación de las series de tiempo, esto equivale a eliminar la tendencia de tiempo promedio al establecer por separado el promedio de todosn series temporales a cero en cada una de las pveces. Por lo tanto, cada serie de tiempoϕix es reemplazado por un residual (ϕi−ϕ¯)x, dónde ϕ¯ es la media de ϕi. Pero esta es la misma situación que antes, simplemente reemplazando elϕ por sus desviaciones de su valor medio.
Por el contrario, cuando hay un valor propio único muy grande en el PCA, podemos retener un único componente principal y aproximarnos de cerca a la matriz de datos original X. Por lo tanto, este análisis contiene un mecanismo para verificar su validez:
Todas las series temporales tienen tendencias similares si y solo si hay un componente principal que domina a todos los demás.
Esta conclusión se aplica tanto a PCA en los datos sin procesar como a PCA en los datos centrados en la media (columna).
Permíteme ilustrar. Al final de esta publicación hay un R
código para generar datos aleatorios de acuerdo con el modelo utilizado aquí y analizar su primera PC. Los valores dex y ϕson cualitativamente probables los que se muestran en la pregunta. El código genera dos filas de gráficos: un "gráfico de pantalla" que muestra los valores propios ordenados y un gráfico de los datos utilizados. Aquí hay un conjunto de resultados.
Los datos en bruto aparecen en la esquina superior derecha. El diagrama de pantalla en la esquina superior izquierda confirma que el valor propio más grande domina a todos los demás. Por encima de los datos, he trazado el primer vector propio (primer componente principal) como una línea negra gruesa y la tendencia general (las medias por tiempo) como una línea roja discontinua. Son prácticamente coincidentes.
Los datos centrados aparecen en la esquina inferior derecha. Ahora la "tendencia" en los datos es una tendencia en la variabilidad en lugar de nivel. Aunque el diagrama de pantalla está lejos de ser agradable, el valor propio más grande ya no predomina, sin embargo, el primer vector propio hace un buen trabajo al rastrear esta tendencia.
#
# Specify a model.
#
x <- c(5, 11, 15, 25, 20, 35, 28)
phi <- exp(seq(log(1/10)/5, log(10)/5, length.out=10))
sigma <- 0.25 # SD of errors
#
# Generate data.
#
set.seed(17)
D <- phi %o% x * exp(rnorm(length(x)*length(phi), sd=0.25))
#
# Prepare to plot results.
#
par(mfrow=c(2,2))
sub <- "Raw data"
l2 <- function(y) sqrt(sum(y*y))
times <- 1:length(x)
col <- hsv(1:nrow(X)/nrow(X), 0.5, 0.7, 0.5)
#
# Plot results for data and centered data.
#
k <- 1 # Use this PC
for (X in list(D, sweep(D, 2, colMeans(D)))) {
#
# Perform the SVD.
#
S <- svd(X)
X.bar <- colMeans(X)
u <- S$v[, k] / l2(S$v[, k]) * l2(X) / sqrt(nrow(X))
u <- u * sign(max(X)) * sign(max(u))
#
# Check the scree plot to verify the largest eigenvalue is much larger
# than all others.
#
plot(S$d, pch=21, cex=1.25, bg="Tan2", main="Eigenvalues", sub=sub)
#
# Show the data series and overplot the first PC.
#
plot(range(times)+c(-1,1), range(X), type="n", main="Data Series",
xlab="Time", ylab="Value", sub=sub)
invisible(sapply(1:nrow(X), function(i) lines(times, X[i,], col=col[i])))
lines(times, u, lwd=2)
#
# If applicable, plot the mean series.
#
if (zapsmall(l2(X.bar)) > 1e-6*l2(X)) lines(times, X.bar, lwd=2, col="#a03020", lty=3)
#
# Prepare for the next step.
#
sub <- "Centered data"
}