Ignorons le centrage moyen pendant un moment. Une façon de comprendre les données consiste à visualiser chaque série chronologique comme étant approximativement un multiple fixe d'une "tendance" globale, qui est elle-même une série chronologique (avec nombre de périodes). J'y ferai référence ci-dessous comme «ayant une tendance similaire».x=(x1,x2,…,xp)′p=7
En écrivant pour ces multiples (avec le nombre de séries chronologiques), la matrice de données est approximativementϕ=(ϕ1,ϕ2,…,ϕn)′n=10
X=ϕx′.
Les valeurs propres PCA (sans centrage moyen) sont les valeurs propres de
X′X=(xϕ′)(ϕx′)=x(ϕ′ϕ)x′=(ϕ′ϕ)xx′,
car n'est qu'un nombre. Par définition, pour toute valeur propre et tout vecteur propre correspondant ,ϕ′ϕλβ
λβ=X′Xβ=(ϕ′ϕ)xx′β=((ϕ′ϕ)(x′β))x,(1)
où encore une fois le nombre peut être commuté avec le vecteur . Soit la plus grande valeur propre, donc (sauf si toutes les séries temporelles sont identiques à zéro à tout moment) .x′βxλλ>0
Comme le côté droit de est un multiple de et le côté gauche est un multiple non nul de , le vecteur propre doit également être un multiple de .(1)xββx
En d'autres termes, lorsqu'un ensemble de séries chronologiques est conforme à cet idéal (que toutes sont des multiples d'une série chronologique commune), alors
Il existe une valeur propre positive unique dans l'ACP.
Il existe un espace propre correspondant unique couvert par la série temporelle commune .x
Familièrement, (2) dit "le premier vecteur propre est proportionnel à la tendance".
"Centrage moyen" dans PCA signifie que les colonnes sont centrées. Étant donné que les colonnes correspondent aux temps d'observation des séries chronologiques, cela revient à supprimer la tendance temporelle moyenne en fixant séparément la moyenne de toutes les séries temporelles à zéro à chacun des temps. Ainsi, chaque série temporelle est remplacée par un résiduel , où est la moyenne de . Mais c'est la même situation que précédemment, en remplaçant simplement les par leurs écarts par rapport à leur valeur moyenne. npϕix(ϕi−ϕ¯)xϕ¯ϕiϕ
A l' inverse, quand il est unique très grande valeur propre dans l'APC, nous retenons un seul élément principal et une approximation de la matrice près de données d' origine . Ainsi, cette analyse contient un mécanisme pour vérifier sa validité:X
Toutes les séries chronologiques ont des tendances similaires si et seulement s'il y a une composante principale dominant toutes les autres.
Cette conclusion s'applique à la fois à l'ACP sur les données brutes et à l'ACP sur les données centrées sur la (colonne) moyenne.
Permettez-moi d'illustrer. À la fin de cet article, il y a du R
code pour générer des données aléatoires selon le modèle utilisé ici et analyser leur premier PC. Les valeurs de et sont probablement qualitativement celles indiquées dans la question. Le code génère deux lignes de graphiques: un "tracé d'éboulis" montrant les valeurs propres triées et un tracé des données utilisées. Voici un ensemble de résultats.xϕ
Les données brutes apparaissent en haut à droite. Le tracé d'éboulis en haut à gauche confirme que la plus grande valeur propre domine toutes les autres. Au-dessus des données, j'ai tracé le premier vecteur propre (premier composant principal) sous la forme d'une ligne noire épaisse et la tendance générale (les moyennes par le temps) sous la forme d'une ligne rouge en pointillés. Ils coïncident pratiquement.
Les données centrées apparaissent en bas à droite. Vous maintenant la "tendance" dans les données est une tendance à la variabilité plutôt qu'au niveau. Bien que le tracé d'éboulis soit loin d'être agréable - la plus grande valeur propre ne prédomine plus - néanmoins le premier vecteur propre fait un bon travail pour retracer cette tendance.
#
# 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"
}