主成分分析

PCA 的時間序列 - 因子載荷的符號變化

  • June 16, 2015

我有一個 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 )

引用自:https://quant.stackexchange.com/questions/3094