Mari kita abaikan pemusatan keji untuk sesaat. Salah satu cara untuk memahami data adalah dengan melihat setiap rangkaian waktu sebagai kira-kira kelipatan tetap dari "tren" keseluruhan, yang dengan sendirinya merupakan rangkaian waktux = (x1,x2, ... ,xhal)′ (dengan p = 7jumlah periode waktu). Saya akan merujuk ini di bawah ini sebagai "memiliki tren yang sama."
Penulisan ϕ = (ϕ1,ϕ2, ... ,ϕn)′ untuk kelipatan tersebut (dengan n = 10 jumlah deret waktu), matriks data kira-kira
X= ϕx′.
Nilai eigen PCA (tanpa pemusatan rata-rata) adalah nilai eigen dari
X′X= ( xϕ′) ( ϕx′) = x (ϕ′ϕ )x′= (ϕ′ϕ ) xx′,
karena ϕ′ϕhanya angka. Menurut definisi, untuk nilai eigen apa punλ dan vektor eigen terkait β,
λ β=X′Xβ= (ϕ′ϕ ) xx′β= ( (ϕ′ϕ ) (x′β) ) x ,(1)
dimana sekali lagi angkanya x′β dapat diringankan dengan vektor x. Membiarkanλ menjadi nilai eigen terbesar, jadi (kecuali semua deret waktu sama dengan nol di setiap waktu) λ > 0.
Karena sisi kanan ( 1 ) adalah kelipatan dari xdan sisi kiri adalah kelipatan bukan nol dariβ, vektor eigen β harus merupakan kelipatan dari xjuga.
Dengan kata lain, ketika satu set deret waktu sesuai dengan ideal ini (bahwa semua adalah kelipatan dari deret waktu umum), maka
Ada nilai eigen positif unik di PCA.
Ada eigenspace yang sesuai unik yang direntang oleh seri waktu umum x.
Bahasa sehari-hari, (2) mengatakan "vektor eigen pertama sebanding dengan tren."
"Mean centering" di PCA berarti kolom berada di tengah. Karena kolom sesuai dengan waktu pengamatan dari rangkaian waktu, ini sama dengan menghapus tren waktu rata-rata dengan secara terpisah mengatur rata-rata semuan seri waktu ke nol di masing - masing halwaktu. Jadi, setiap deret waktuϕsayax diganti dengan residu (ϕsaya-ϕ¯) xdimana ϕ¯ adalah rata - rata dari ϕsaya. Tetapi ini adalah situasi yang sama seperti sebelumnya, hanya menggantiϕ oleh penyimpangan mereka dari nilai rata-rata mereka.
Sebaliknya, ketika ada nilai eigen unik yang sangat besar di PCA, kami dapat mempertahankan satu komponen utama dan mendekati matriks data asli X. Dengan demikian, analisis ini berisi mekanisme untuk memeriksa validitasnya:
Semua seri waktu memiliki tren yang sama jika dan hanya jika ada satu komponen utama yang mendominasi yang lainnya.
Kesimpulan ini berlaku untuk PCA pada data mentah dan PCA pada (kolom) data terpusat rata-rata.
Izinkan saya memberi ilustrasi. Pada akhir posting ini adalah R
kode untuk menghasilkan data acak sesuai dengan model yang digunakan di sini dan menganalisis PC pertama mereka. Nilai-nilaix dan ϕsecara kualitatif kemungkinan yang ditunjukkan dalam pertanyaan. Kode ini menghasilkan dua baris grafik: "scree plot" yang menunjukkan nilai eigen yang diurutkan dan plot data yang digunakan. Ini adalah satu set hasil.
Data mentah muncul di kanan atas. Plot scree di kiri atas mengkonfirmasi nilai eigen terbesar mendominasi yang lainnya. Di atas data saya telah merencanakan vektor eigen pertama (komponen utama pertama) sebagai garis hitam tebal dan tren keseluruhan (rata-rata berdasarkan waktu) sebagai garis merah putus-putus. Mereka praktis bertepatan.
Data terpusat muncul di kanan bawah. Anda sekarang "tren" dalam data adalah tren dalam variabilitas daripada level. Meskipun plot scree jauh dari baik - nilai eigen terbesar tidak lagi mendominasi - namun vektor eigen pertama melakukan pekerjaan yang baik untuk melacak tren ini.
#
# 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"
}