Mengapa vektor eigen pertama di PCA menyerupai turunan dari tren yang mendasarinya?


8

Saya menggunakan PCA untuk menganalisis beberapa deret waktu terkait spasial, dan tampaknya vektor eigen pertama sesuai dengan turunan dari tren rata-rata deret tersebut (contoh diilustrasikan di bawah). Saya ingin tahu mengapa vektor eigen pertama berhubungan dengan turunan dari tren yang bertentangan dengan tren itu sendiri?

Data disusun dalam matriks di mana baris adalah deret waktu untuk setiap entitas spasial dan kolom (dan pada gilirannya dimensi dalam PCA) adalah tahun (yaitu dalam contoh di bawah, 10 deret waktu masing-masing 7 tahun). Data juga berpusat pada rata-rata sebelum PCA.

Stanimirovic et al., 2007 sampai pada kesimpulan yang sama, tetapi penjelasan mereka sedikit di luar jangkauan aljabar linier saya.

Contoh

[Perbarui] - menambahkan data seperti yang disarankan.

[Update2] - JAWABAN. Saya menemukan kode saya salah menggunakan transpos matriks vektor eigen ketika merencanakan hasil ( excel_walkthrough ) (terima kasih @amoeba). Sepertinya itu hanya kebetulan bahwa hubungan transpose-eigenvector / turunan ada untuk pengaturan khusus ini. Seperti yang dijelaskan secara matematis dan intuitif dalam posting ini, vektor eigen pertama memang berhubungan dengan tren yang mendasarinya dan bukan turunannya .


Ketika Anda mengatakan "mean-centered", apakah maksud Anda bahwa rata-rata kolom dikurangi, rata-rata baris, atau keduanya?
amoeba

Tolong jelaskan apa yang Anda maksud dengan "turunan tren," mengingat bahwa vektor eigen adalah angka sedangkan grafik menyarankan Anda memahami turunan sebagai fungsi .
whuber

@amoeba - rata-rata kolom dikurangi (untuk setiap tahun, keluarkan rata-rata melintasi angkasa)
paul j

@whuber - "turunan dari tren" hanya disebut turunan / perbedaan pertama dari tren yang mendasarinya. Dalam contoh di atas, garis hitam putus-putus dalam grafik pertama adalah "tren yang mendasarinya" (pergerakan rata-rata). Perbedaan pertama dari garis ini adalah garis hitam solid pada grafik kedua, yang kira-kira sama dengan vektor eigen pertama yang disimpulkan dari PCA (keduanya pada skala yang dinormalisasi).
paul j

Saya masih bingung: garis hitam pekat itu bervariasi antara -1,4 dan +1,4. Dalam arti apa "kira-kira sama" itu apa?
whuber

Jawaban:


6

Mari kita abaikan pemusatan keji untuk sesaat. Salah satu cara untuk memahami data adalah dengan melihat setiap rangkaian waktu sebagai kira-kira kelipatan tetap dari "tren" keseluruhan, yang dengan sendirinya merupakan rangkaian waktux=(x1,x2,,xp) (dengan p=7jumlah periode waktu). Saya akan merujuk ini di bawah ini sebagai "memiliki tren yang sama."

Penulisan ϕ=(ϕ1,ϕ2,,ϕn) untuk kelipatan tersebut (dengan n=10 jumlah deret waktu), matriks data kira-kira

X=ϕx.

Nilai eigen PCA (tanpa pemusatan rata-rata) adalah nilai eigen dari

XX=(xϕ)(ϕx)=x(ϕϕ)x=(ϕϕ)xx,

karena ϕϕhanya angka. Menurut definisi, untuk nilai eigen apa punλ dan vektor eigen terkait β,

(1)λβ=XXβ=(ϕϕ)xxβ=((ϕϕ)(xβ))x,

dimana sekali lagi angkanya xβ dapat diringankan dengan vektor x. Membiarkanλ menjadi nilai eigen terbesar, jadi (kecuali semua deret waktu sama dengan nol di setiap waktu) λ>0.

Karena sisi kanan (1) adalah kelipatan dari xdan sisi kiri adalah kelipatan bukan nol dariβ, vektor eigen β harus merupakan kelipatan dari xjuga.

Dengan kata lain, ketika satu set deret waktu sesuai dengan ideal ini (bahwa semua adalah kelipatan dari deret waktu umum), maka

  1. Ada nilai eigen positif unik di PCA.

  2. Ada eigenspace yang sesuai unik yang direntang oleh seri waktu umum x.

Bahasa sehari-hari, (2) mengatakan "vektor eigen pertama sebanding dengan tren."

"Mean centering" di PCA berarti kolom berada di tengah. Karena kolom sesuai dengan waktu pengamatan dari rangkaian waktu, ini sama dengan menghapus tren waktu rata-rata dengan secara terpisah mengatur rata-rata semuan seri waktu ke nol di masing - masing pwaktu. Jadi, setiap deret waktuϕix diganti dengan residu (ϕiϕ¯)xdimana ϕ¯ adalah rata - rata dari ϕi. Tetapi ini adalah situasi yang sama seperti sebelumnya, hanya menggantiϕ oleh penyimpangan mereka dari nilai rata-rata mereka.

Sebaliknya, ketika ada nilai eigen unik yang sangat besar di PCA, kami dapat mempertahankan satu komponen utama dan mendekati matriks data asli X. Dengan demikian, analisis ini berisi mekanisme untuk memeriksa validitasnya:

Semua seri waktu memiliki tren yang sama jika dan hanya jika ada satu komponen utama yang mendominasi yang lainnya.

Kesimpulan ini berlaku untuk PCA pada data mentah dan PCA pada (kolom) data terpusat rata-rata.


Izinkan saya memberi ilustrasi. Pada akhir posting ini adalah Rkode untuk menghasilkan data acak sesuai dengan model yang digunakan di sini dan menganalisis PC pertama mereka. Nilai-nilaix dan ϕsecara kualitatif kemungkinan yang ditunjukkan dalam pertanyaan. Kode ini menghasilkan dua baris grafik: "scree plot" yang menunjukkan nilai eigen yang diurutkan dan plot data yang digunakan. Ini adalah satu set hasil.

Tokoh

Data mentah muncul di kanan atas. Plot scree di kiri atas mengkonfirmasi nilai eigen terbesar mendominasi yang lainnya. Di atas data saya telah merencanakan vektor eigen pertama (komponen utama pertama) sebagai garis hitam tebal dan tren keseluruhan (rata-rata berdasarkan waktu) sebagai garis merah putus-putus. Mereka praktis bertepatan.

Data terpusat muncul di kanan bawah. Anda sekarang "tren" dalam data adalah tren dalam variabilitas daripada level. Meskipun plot scree jauh dari baik - nilai eigen terbesar tidak lagi mendominasi - namun vektor eigen pertama melakukan pekerjaan yang baik untuk melacak tren ini.

#
# 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"
}

Ini masuk akal mengapa "vektor eigen pertama sebanding dengan kecenderungan", dan itulah yang saya harapkan sebelum hasil analisis. Namun, apa yang Stanimivroc dan saya lihat adalah bahwa vektor eigen pertama sebanding dengan DERIVATIF (atau perbedaan pertama) dari tren ... dan bukan kecenderungan itu sendiri.
paul j

Ya - dan menurut Anda apa yang Anda lihat setelah Anda melakukan pemusatan keji?
whuber

Hanya data dasar yang terpusat sekitar 0 ... di sini adalah contoh 2-Dimensi . Dalam kasus saya, ini 7-Dimensi (sumbu) bukan dua. Bentuk / tren data tidak berubah melalui pemusatan rata-rata ... hanya dipusatkan untuk membantu memastikan PCA memberikan hasil yang bermakna.
paul j

2
@paulj Terima kasih telah memposting data. Saya tidak dapat mereproduksi sosok Anda. Ketika saya melakukan centering mean dan kemudian PCA (SVD), saya mendapatkan PC1 dengan tanda konstan (dan secara kasar meningkat, mirip dengan "tren" Anda dan ke whuber'sx), seperti yang kuharapkan.
amoeba

1
@amoeba - terima kasih ... kamu benar. Saya menemukan kode saya salah menggunakan transpos matriks vektor eigen ketika merencanakan hasil ( excel_walkthrough ). Sepertinya itu hanya kebetulan bahwa hubungan transposif / turunan pertama ada. Terima kasih lagi.
paul j

0

Derivatif data (~ perbedaan pertama) menghilangkan ketergantungan pointwise dalam data yang disebabkan oleh nonstasioneritas (lih. ARIMA). Yang kemudian Anda pulihkan adalah kira-kira sinyal diam yang stabil, yang saya kira SVD sudah pulih.


1
Saya tidak melihat bagaimana ini menjawab pertanyaan tentang kemiripan PC1 dan turunan dari mean.
amoeba

Terima kasih atas balasan Anda. Saya juga setuju dengan @amoeba ... Saya mengerti bahwa turunan (atau perbedaan pertama seperti yang Anda katakan) membantu membuat data stasioner, tetapi mengapa perbedaan pertama ini pada dasarnya menyamakan dengan komponen utama pertama dalam pengaturan ini?
paul j

Saya juga tidak memiliki intuisi yang kuat tentang mengapa hal ini mungkin terjadi. Mungkin layak menjalankan beberapa simulasi untuk melihat apakah ini kasusnya secara empiris, tapi saya tidak yakin apakah ini transparan secara analitis.
LE Rogerson

1
Terima kasih @ Logogerson ... ya, saya telah menjalankan beberapa simulasi, dan hasilnya sepertinya bertahan. The kertas Stanimirovic saya diposting di atas memiliki dan temuan yang sama menawarkan aljabar linear penjelasan yang kompleks, tapi itu hanya sedikit yang di luar jangkauan saya / tidak sangat intuitif.
paul j

@ Paulj Sejujurnya, saya tidak begitu mengerti contoh yang diberikan dalam posting Anda. Jika saya melihat Gambar 1 Anda dan bayangkan apa yang terjadi setelah pemusatan rata-rata, garis putus-putus hitam harus pada nol konstan dan sebagian besar deret waktu harus seluruhnya di atas atau seluruhnya di bawah nol. Ini menunjukkan kepada saya bahwa PC1 harus dari tanda konstan, tetapi PC1 Anda yang ditunjukkan pada Gambar 2 berubah beberapa kali. Ini aneh. Apakah Anda mungkin ingin menambahkan data Anda ke pertanyaan Anda?
amoeba
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.