Vamos ignorar a centralização da média por um momento. Uma maneira de entender os dados é visualizar cada série temporal como sendo aproximadamente um múltiplo fixo de uma "tendência" geral, que por si só é uma série temporal (com o número de períodos). Vou me referir a isso abaixo como "tendo uma tendência semelhante".x=(x1,x2,…,xp)′p=7
Escrevendo para esses múltiplos (com o número de séries temporais), a matriz de dados é aproximadamenteϕ=(ϕ1,ϕ2,…,ϕn)′n=10
X=ϕx′.
Os autovalores de PCA (sem centralização média) são os autovalores de
X′X=(xϕ′)(ϕx′)=x(ϕ′ϕ)x′=(ϕ′ϕ)xx′,
porque é apenas um número. Por definição, para qualquer valor próprio e qualquer vetor próprio correspondente ,ϕ′ϕλβ
λβ=X′Xβ=(ϕ′ϕ)xx′β=((ϕ′ϕ)(x′β))x,(1)
onde mais uma vez o número pode ser comutado com o vetor . Seja o maior valor próprio, portanto (a menos que todas as séries temporais sejam idênticas a zero o tempo todo) .x λ λ > 0x′βxλλ>0
Como o lado direito de é um múltiplo de o lado esquerdo é um múltiplo diferente de zero de , o vetor próprio deve ser um múltiplo de .x β β x(1)xββx
Em outras palavras, quando um conjunto de séries temporais está em conformidade com esse ideal (que são todos múltiplos de uma série temporal comum),
Existe um autovalor positivo único no PCA.
Existe um espaço próprio exclusivo correspondente, abrangido pela série temporal comum .x
Coloquialmente, (2) diz que "o primeiro vetor próprio é proporcional à tendência".
"Centralização média" no PCA significa que as colunas estão centralizadas. Como as colunas correspondem aos tempos de observação da série temporal, isso equivale a remover a tendência temporal média, definindo separadamente a média de todas as séries temporais como zero em cada um dos tempos . Assim, cada série temporal é substituída por um residual , em que é a média do . Mas esta é a mesma situação de antes, simplesmente substituindo o pelos desvios do valor médio. p ϕ i x ( ϕ i - ˉ ϕ ) x ˉ ϕ ϕ i ϕnpϕix(ϕi−ϕ¯)xϕ¯ϕiϕ
Por outro lado, quando há uma única grande valor próprio no APC, pode-se reter um único componente principal e aproximar de perto a matriz de dados original . Assim, esta análise contém um mecanismo para verificar sua validade:X
Todas as séries temporais têm tendências semelhantes se e somente se houver um componente principal dominando todos os outros.
Esta conclusão se aplica tanto ao PCA nos dados brutos quanto ao PCA nos dados centralizados (coluna) médios.
Permita-me ilustrar. No final deste post, há um R
código para gerar dados aleatórios de acordo com o modelo usado aqui e analisar seu primeiro PC. Os valores de e são qualitativamente prováveis aqueles mostrados na pergunta. O código gera duas linhas de gráficos: um "scree plot" mostrando os autovalores classificados e um plot dos dados utilizados. Aqui está um conjunto de resultados.ϕxϕ
Os dados brutos aparecem no canto superior direito. O gráfico de seixos no canto superior esquerdo confirma que o maior autovalor domina todos os outros. Acima dos dados, plotei o primeiro vetor próprio (primeiro componente principal) como uma linha preta grossa e a tendência geral (a média do tempo) como uma linha vermelha tracejada. Eles são praticamente coincidentes.
Os dados centralizados aparecem no canto inferior direito. Você agora a "tendência" nos dados é uma tendência de variabilidade e não de nível. Embora o gráfico do scree esteja longe de ser bom - o maior valor próprio não predomina mais -, no entanto, o primeiro vetor próprio faz um bom trabalho ao traçar essa tendência.
#
# 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"
}