主成分分析
PCA 的時間序列 - 因子載荷的符號變化
我有一個 300 天長的時間序列數據。我在 30 天的移動視窗上計算 PCA 因子載荷。宇宙中有7隻股票。因此,在每次 PCA 計算中都會計算 F1 到 F7 因子。
然而,因子載荷的跡象發生了變化。這在解釋要素價格時間序列時會引起問題。
處理這個問題有哪些不同的方法?
1)特徵向量乘以減一也是一個特徵向量(具有相同的特徵值)。2)對稱矩陣的不同特徵向量(即共變異數)是正交的。1 和 2 意味著您可以將對稱矩陣的所有特徵向量的子集乘以負一,您仍然可以獲得完整的特徵向量集
這意味著,只要強加每個因素的第一個組成部分都是積極的。如果 PCA 將第一個分量返回為負數,則將所有向量乘以負一。這將解決你的問題。
您可以在重疊視窗上計算 PCA,並嘗試匹配特徵向量:您可能不僅需要更改它們的符號(因為只有特徵空間是明確定義的,所以特徵向量的符號是任意的)而且它們的順序。
這是一些(未經測試的)R程式碼來做到這一點。
# Sample data k <- 7 n <- 50 found <- FALSE while(!found) { x <- matrix(rnorm(k*(n*1)),nc=k) e1 <- eigen(var(x[-1,])) e2 <- eigen(var(x[1:n,])) found <- e1$vectors[1,1] * e2$vectors[1,1] < 0 } colnames(e1$vectors) <- LETTERS[1:k] colnames(e2$vectors) <- letters[1:k] # Compare the eigenvectors, # by computing the cosine of the angle they form. d <- cor(e1$vectors, e2$vectors) # Permutation of the vectors i <- apply(abs(d), 1, which.max) e2$values <- e2$values[i] e2$vectors <- e2$vectors[,i] # Change the sign, if needed j <- sign(diag(d[1:k,i])) e2$vectors <- t( t(e2$vectors) * j )