Lassen Sie uns die Mittelwertzentrierung für einen Moment ignorieren. Eine Möglichkeit, die Daten zu verstehen, besteht darin, jede Zeitreihe als ungefähr ein festes Vielfaches eines gesamten "Trends" , der selbst eine Zeitreihe (mit die Anzahl der Zeiträume). Ich werde dies im Folgenden als "mit einem ähnlichen Trend" bezeichnen.x=(x1,x2,…,xp)′p=7
Wenn Sie für diese Vielfachen schreiben (mit die Anzahl der Zeitreihen), ist die Datenmatrix ungefährϕ=(ϕ1,ϕ2,…,ϕn)′n=10
X=ϕx′.
Die PCA-Eigenwerte (ohne mittlere Zentrierung) sind die Eigenwerte von
X′X=(xϕ′)(ϕx′)=x(ϕ′ϕ)x′=(ϕ′ϕ)xx′,
weil nur eine Zahl ist. Per Definition gilt für jeden Eigenwert und jeden entsprechenden Eigenvektor ,ϕ′ϕλβ
λβ=X′Xβ=(ϕ′ϕ)xx′β=((ϕ′ϕ)(x′β))x,(1)
wobei wiederum die Zahl mit dem Vektor . Sei der größte Eigenwert, also (es sei denn, alle Zeitreihen sind zu allen Zeiten identisch Null) .x λ λ > 0x′βxλλ>0
Da die rechte Seite von ein Vielfaches von und die linke Seite ein Vielfaches ungleich Null von , muss der Eigenvektor auch ein Vielfaches von sein.x β β x(1)xββx
Mit anderen Worten, wenn eine Reihe von Zeitreihen diesem Ideal entspricht (dass alle Vielfache einer gemeinsamen Zeitreihe sind), dann
Es gibt einen eindeutigen positiven Eigenwert in der PCA.
Es gibt einen eindeutigen entsprechenden Eigenraum, der von der gemeinsamen Zeitreihe überspannt wird .x
Umgangssprachlich sagt (2) "der erste Eigenvektor ist proportional zum Trend."
"Mittlere Zentrierung" in PCA bedeutet, dass die Spalten zentriert sind. Da die Spalten den Beobachtungszeiten der Zeitreihen entsprechen, bedeutet dies, den durchschnittlichen Zeittrend zu entfernen, indem der Durchschnitt aller Zeitreihen zu jeder der Zeiten separat auf Null gesetzt wird . Somit wird jede Zeitreihe durch ein Residuum , wobei der Mittelwert des . Dies ist jedoch die gleiche Situation wie zuvor, indem einfach die durch ihre Abweichungen von ihrem Mittelwert ersetzt werden. p ϕ i x ( ϕ i - ˉ ϕ ) x ˉ ϕ ϕ i ϕnpϕix(ϕi−ϕ¯)xϕ¯ϕiϕ
Wenn umgekehrt in der PCA ein eindeutiger, sehr großer Eigenwert vorhanden ist, können wir eine einzelne Hauptkomponente beibehalten und die ursprüngliche Datenmatrix genau approximieren . Daher enthält diese Analyse einen Mechanismus zur Überprüfung ihrer Gültigkeit:X
Alle Zeitreihen weisen genau dann ähnliche Trends auf, wenn eine Hauptkomponente alle anderen dominiert.
Diese Schlussfolgerung gilt sowohl für PCA für die Rohdaten als auch für PCA für die (Spalten-) mittleren zentrierten Daten.
Gestatten Sie mir zu veranschaulichen. Am Ende dieses Beitrags befindet sich R
Code zum Generieren von Zufallsdaten gemäß dem hier verwendeten Modell und zum Analysieren des ersten PCs. Die Werte von und sind qualitativ wahrscheinlich die in der Frage gezeigten. Der Code generiert zwei Grafikzeilen: ein "Geröllplot" mit den sortierten Eigenwerten und ein Plot der verwendeten Daten. Hier ist eine Reihe von Ergebnissen.ϕxϕ
Die Rohdaten werden oben rechts angezeigt. Das Geröllplot oben links bestätigt, dass der größte Eigenwert alle anderen dominiert. Über den Daten habe ich den ersten Eigenvektor (erste Hauptkomponente) als dicke schwarze Linie und den Gesamttrend (das Mittel nach Zeit) als gestrichelte rote Linie dargestellt. Sie sind praktisch zufällig.
Die zentrierten Daten werden unten rechts angezeigt. Sie jetzt ist der "Trend" in den Daten eher ein Trend in der Variabilität als in der Ebene. Obwohl die Geröllkurve alles andere als schön ist - der größte Eigenwert überwiegt nicht mehr -, kann der erste Eigenvektor diesen Trend gut nachvollziehen.
#
# 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"
}