簡単な時系列を考えてみましょう:
> tp <- seq_len(10)
> tp
[1] 1 2 3 4 5 6 7 8 9 10
サンプル間の時間リンクを表すこの時系列の隣接行列を計算できます。この行列の計算では、時間0に架空のサイトを追加し、この観測と時間1の最初の実際の観測間のリンクをリンク0と呼びます。時間1と時間2の間では、リンクはリンク1などです。時間は方向性のあるプロセスであるため、サイトはサイトの「上流」にあるリンクに接続されます(影響を受けます)。したがって、すべてのサイトはリンク0に接続されますが、リンク9はサイト10にのみ接続されます。これは、サイト10を除く各サイトの後に一時的に発生します。このように定義された隣接行列は、次のように作成されます。
> adjmat <- matrix(0, ncol = length(tp), nrow = length(tp))
> adjmat[lower.tri(adjmat, diag = TRUE)] <- 1
> rownames(adjmat) <- paste("Site", seq_along(tp))
> colnames(adjmat) <- paste("Link", seq_along(tp)-1)
> adjmat
Link 0 Link 1 Link 2 Link 3 Link 4 Link 5 Link 6 Link 7
Site 1 1 0 0 0 0 0 0 0
Site 2 1 1 0 0 0 0 0 0
Site 3 1 1 1 0 0 0 0 0
Site 4 1 1 1 1 0 0 0 0
Site 5 1 1 1 1 1 0 0 0
Site 6 1 1 1 1 1 1 0 0
Site 7 1 1 1 1 1 1 1 0
Site 8 1 1 1 1 1 1 1 1
Site 9 1 1 1 1 1 1 1 1
Site 10 1 1 1 1 1 1 1 1
Link 8 Link 9
Site 1 0 0
Site 2 0 0
Site 3 0 0
Site 4 0 0
Site 5 0 0
Site 6 0 0
Site 7 0 0
Site 8 0 0
Site 9 1 0
Site 10 1 1
SVDは、この行列をさまざまな時間スケールとして変動の固有関数に分解します。次の図は、抽出された関数を示しています(からSVD$u
)
> SVD <- svd(adjmat, nu = length(tp), nv = 0)
固有関数は、さまざまな時間スケールでの周期的なコンポーネントです。試してみるtp <- seq_len(25)
(または長くする)と、上記で示した短い例よりも優れていることがわかります。
この種の分析には統計上で適切な名前がありますか?特異スペクトル分析に似ていますが、それは埋め込まれた時系列(列が時系列の時間差バージョンである行列)の分解です。
背景: このアイデアは、既知の方向の空間プロセスを考慮した非対称固有ベクトルマップ(AEM)と呼ばれる空間生態学からのアイデアを修正し、サンプルが接続できる1を含むサンプルの空間配列間で隣接行列を形成することで思い付きましたリンクとそれができない0に、リンクは「ダウンストリーム」にしか接続できないという制約の下で-したがって、分析の非対称性。上記で説明したのは、AEMメソッドの1次元バージョンです。興味がある場合は、AEMメソッドの再版をここで見つけることができます。
フィギュアは以下で作成されました:
layout(matrix(1:12, ncol = 3, nrow = 4))
op <- par(mar = c(3,4,1,1))
apply(SVD$u, 2, function(x, t) plot(t, x, type = "l", xlab = "", ylab = ""),
t = tp)
par(op)
layout(1)