Chúng ta hãy bỏ qua việc tập trung vào một lúc. Một cách để hiểu dữ liệu là xem từng chuỗi thời gian là xấp xỉ bội số cố định của một "xu hướng" tổng thể, mà chính nó là chuỗi thời gian (với số lượng khoảng thời gian). Tôi sẽ đề cập đến điều này dưới đây là "có một xu hướng tương tự." p = 7x=(x1,x2,…,xp)′p=7
ϕ=(ϕ1,ϕ2,…,ϕn)′n=10
X=ϕx′.
Các giá trị riêng của PCA (không có định tâm trung bình) là các giá trị riêng của
X′X=(xϕ′)(ϕx′)=x(ϕ′ϕ)x′=(ϕ′ϕ)xx′,
ϕ′ϕλβ
λβ=X′Xβ=(ϕ′ϕ)xx′β=((ϕ′ϕ)(x′β))x,(1)
trong đó một lần nữa, số có thể được tính bằng vectơ . Đặt là giá trị riêng lớn nhất, vì vậy (trừ khi tất cả các chuỗi thời gian đều bằng 0 tại mọi thời điểm) .x bước sóng bước sóng > 0x′βxλλ>0
Vì phía bên phải của là bội số của và phía bên trái là bội số khác của , nên eigenvector cũng phải là bội số của .x β β x(1)xββx
Nói cách khác, khi một tập hợp chuỗi thời gian phù hợp với lý tưởng này (tất cả đều là bội số của chuỗi thời gian chung), thì
Có một giá trị riêng dương tính duy nhất trong PCA.
Có một không gian eigens không gian tương ứng duy nhất được kéo dài theo chuỗi thời gian chung .x
Thông thường, (2) nói rằng "trình sinh riêng đầu tiên tỷ lệ thuận với xu hướng".
"Định tâm trung bình" trong PCA có nghĩa là các cột được căn giữa. Vì các cột tương ứng với thời gian quan sát của chuỗi thời gian, điều này giúp loại bỏ xu hướng thời gian trung bình bằng cách đặt riêng trung bình của tất cả chuỗi thời gian thành 0 tại mỗi lần . Do đó, mỗi chuỗi thời gian được thay thế bằng phần dư , trong đó là giá trị trung bình của . Nhưng đây là tình huống tương tự như trước đây, chỉ đơn giản là thay thế bằng độ lệch so với giá trị trung bình của chúng. p φ i x ( φ i - ˉ φ ) x ˉ φ φ i φnpϕix(ϕi−ϕ¯)xϕ¯ϕiϕ
Ngược lại, khi có một eigenvalue rất lớn duy nhất trong PCA, chúng tôi có thể giữ lại một thành phần chủ yếu duy nhất và gần sát với bản gốc ma trận dữ liệu . Do đó, phân tích này chứa một cơ chế để kiểm tra tính hợp lệ của nó:X
Tất cả các chuỗi thời gian có xu hướng tương tự khi và chỉ khi có một thành phần chính chi phối tất cả các thành phần khác.
Kết luận này áp dụng cho cả PCA trên dữ liệu thô và PCA trên dữ liệu trung tâm (cột).
Cho phép tôi minh họa. Cuối bài này là R
mã để tạo dữ liệu ngẫu nhiên theo mô hình được sử dụng ở đây và phân tích PC đầu tiên của họ. Các giá trị của và có khả năng định tính trong các câu hỏi. Mã này tạo ra hai hàng đồ họa: một "biểu đồ scree" hiển thị các giá trị riêng được sắp xếp và một biểu đồ của dữ liệu được sử dụng. Đây là một bộ kết quả.ϕxϕ
Dữ liệu thô xuất hiện ở phía trên bên phải. Biểu đồ scree ở phía trên bên trái xác nhận giá trị riêng lớn nhất thống trị tất cả những cái khác. Trên dữ liệu tôi đã vẽ sơ đồ đầu tiên (thành phần chính đầu tiên) là một đường màu đen dày và xu hướng chung (phương tiện theo thời gian) là một đường màu đỏ đứt nét. Họ thực tế là trùng hợp.
Dữ liệu trung tâm xuất hiện ở phía dưới bên phải. Bây giờ bạn "xu hướng" trong dữ liệu là một xu hướng thay đổi thay vì mức độ. Mặc dù cốt truyện scree không còn tốt đẹp - giá trị riêng lớn nhất không còn chiếm ưu thế - tuy nhiên, người bản địa đầu tiên thực hiện tốt công việc tìm ra xu hướng này.
#
# 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"
}