ちょっと平均心を無視しましょう。データを理解する1つの方法は、各時系列を全体的な「トレンド」のほぼ固定された倍数として表示することです。これは、それ自体が時系列(期間の数)。以下、これを「同様の傾向がある」と呼びます。 p = 7x = (x1、x2、… 、xp)』p = 7
これらの倍数(は時系列の数)に対してを書くと、データ行列はおよそ n = 10ϕ = (ϕ1、ϕ2、… 、ϕん)』n = 10
バツ= ϕ x』。
PCA固有値(平均センタリングなし)は、次の固有値です。
バツ』バツ= (x ϕ』)(ϕ x』)= x (ϕ』ϕ )x』= (ϕ』ϕ )x x』、
のでちょうど数です。定義により、固有値および対応する固有ベクトル、λ βφ』φλβ
λ β= X』バツβ= (ϕ』ϕ )x x』β= ((ϕ』ϕ )(x』β))x 、(1)
ここでも、数値はベクトルと交換できます。してみましょうそう最大固有値、(すべての時系列が同じよう常にゼロでない限り)こと。X λ λ > 0バツ』βバツλλ>0
の右側は倍数であり、左側は非ゼロの倍数であるため、固有ベクトルも倍数でなければなりません。X β β X(1)xββx
言い換えると、時系列のセットがこの理想(すべてが共通の時系列の倍数である)に適合する場合、
PCAには固有の正の固有値があります。
共通の時系列またがる一意の対応する固有空間があります。x
口語的に、(2)は「最初の固有ベクトルはトレンドに比例する」と述べています。
PCAの「平均の中央揃え」とは、列が中央揃えされることを意味します。列は時系列の観測時間に対応しているため、これは、時間ごとにすべての時系列の平均をゼロに個別に設定することにより、平均時間トレンドを削除することになります。したがって、各時系列は残差に置き換えられ。ここで、は平均です。しかし、これは以前と同じ状況で、単純にを平均値からの偏差で置き換えます。 P φ I X (φ I - ˉ φ)X ˉ φ φ I φnpϕix(ϕi−ϕ¯)xϕ¯ϕiϕ
逆に、PCAに固有の非常に大きな固有値がある場合、単一の主成分を保持し、元のデータ行列厳密に近似することができます。したがって、この分析には、その有効性をチェックするメカニズムが含まれています。X
他のすべてを支配する1つの主成分がある場合に限り、すべての時系列は同様の傾向を示します。
この結論は、生データのPCAと(列)平均中心データのPCAの両方に適用されます。
説明させてください。 この投稿の最後には、R
ここで使用されているモデルに従ってランダムデータを生成し、最初のPCを分析するコードがあります。との値は、質的に、質問に示されている値である可能性があります。このコードは、2行のグラフィックスを生成します。並べ替えられた固有値を示す「スクリーンプロット」と、使用されたデータのプロットです。これが結果のセットです。ϕxϕ
生データは右上に表示されます。左上のスクリープロットは、最大の固有値が他のすべてを支配していることを確認します。データの上に、最初の固有ベクトル(最初の主成分)を太い黒い線としてプロットし、全体の傾向(時間平均)を赤い破線としてプロットしました。 彼らは事実上偶然です。
中央に配置されたデータが右下に表示されます。これで、データの「傾向」はレベルではなく変動の傾向になります。スクリープロットは良いとは言えませんが、最大の固有値が優勢ではなくなりましたが、最初の固有ベクトルはこの傾向をうまく追跡しています。
#
# 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"
}