Haruskah seseorang menghapus variabel yang sangat berkorelasi sebelum melakukan PCA?

111

Saya membaca makalah di mana penulis membuang beberapa variabel karena tingginya korelasi dengan variabel lain sebelum melakukan PCA. Jumlah variabel adalah sekitar 20.

Apakah ini memberikan manfaat? Sepertinya overhead bagi saya karena PCA harus menangani ini secara otomatis.

type2
sumber
26
Hanya sebuah petunjuk. Pikirkan, dengan cara apa hasil PCA akan berubah jika menambah lebih banyak salinan (atau salinan dekat) dari salah satu variabel.
ttnphns
@ type2 dapatkah Anda memberi nama kertas yang Anda baca?
Amatya

Jawaban:

123

Ini menguraikan petunjuk mendalam yang disediakan dalam komentar oleh @ttnphns.

Mendekatkan variabel yang hampir berkorelasi meningkatkan kontribusi faktor yang mendasari umum mereka untuk PCA. Kita bisa melihatnya secara geometris. Pertimbangkan data ini di bidang XY, ditampilkan sebagai awan titik:

Scatterplot

Ada sedikit korelasi, kira-kira sama kovarians, dan data terpusat: PCA (tidak peduli bagaimana dilakukan) akan melaporkan dua komponen yang kira-kira sama.

Sekarang mari kita melempar variabel ketiga sama dengan ditambah sejumlah kecil kesalahan acak. Matriks korelasi menunjukkan ini dengan koefisien off-diagonal kecil kecuali antara baris dan kolom kedua dan ketiga ( dan ):Y ( X , Y , Z ) Y ZZY(X,Y,Z)YZ

(1.0.03440180.0460760.03440181.0.9418290.0460760.9418291.)

Secara geometris, kami telah memindahkan semua titik asli hampir secara vertikal, mengangkat gambar sebelumnya langsung dari bidang halaman. Cloud titik pseudo 3D ini berupaya mengilustrasikan pengangkatan dengan tampilan perspektif samping (berdasarkan kumpulan data yang berbeda, meskipun dihasilkan dengan cara yang sama seperti sebelumnya):

Plot 3D

Titik awalnya terletak di bidang biru dan diangkat ke titik merah. Sumbu asli menunjuk ke kanan. Kemiringan yang dihasilkan juga merentangkan poin di sepanjang arah YZ, sehingga menggandakan kontribusinya pada varian. Akibatnya, PCA dari data baru ini masih akan mengidentifikasi dua komponen utama utama, tetapi sekarang salah satu dari mereka akan memiliki dua kali varian yang lain.Y

Ekspektasi geometris ini didukung oleh beberapa simulasi di R. Untuk ini saya ulangi prosedur "mengangkat" dengan membuat salinan hampir-collinear dari variabel kedua waktu kedua, ketiga, keempat, dan kelima, menamai mereka hingga . Berikut adalah matriks sebar yang menunjukkan bagaimana keempat variabel terakhir berkorelasi dengan baik:X 5X2X5

Matriks Scatterplot

PCA dilakukan dengan menggunakan korelasi (meskipun tidak terlalu penting untuk data ini), menggunakan dua variabel pertama, lalu tiga, ..., dan akhirnya lima. Saya menunjukkan hasilnya menggunakan plot kontribusi komponen utama terhadap total varians.

Hasil PCA

Awalnya, dengan dua variabel yang hampir tidak berkorelasi, kontribusi hampir sama (sudut kiri atas). Setelah menambahkan satu variabel yang berkorelasi dengan yang kedua - persis seperti pada ilustrasi geometris - masih ada hanya dua komponen utama, satu sekarang dua kali ukuran yang lain. (Komponen ketiga mencerminkan kurangnya korelasi sempurna; ini mengukur "ketebalan" awan seperti pancake di 3D scatterplot.) Setelah menambahkan variabel berkorelasi lain ( ), komponen pertama sekarang sekitar tiga perempat dari total ; setelah ditambahkan seperlima, komponen pertama hampir empat perlima dari total. Dalam keempat kasus komponen setelah yang kedua kemungkinan akan dianggap tidak penting oleh sebagian besar prosedur diagnostik PCA; dalam kasus terakhir itu 'X4satu komponen utama yang patut dipertimbangkan.

Kita dapat melihat sekarang bahwa mungkin ada manfaat dalam membuang variabel yang dianggap mengukur aspek yang mendasari (tapi "laten") yang sama dari kumpulan variabel , karena termasuk variabel yang hampir berlebihan dapat menyebabkan PCA terlalu menekankan kontribusi mereka. Secara matematis tidak ada yang benar (atau salah) tentang prosedur semacam itu; itu panggilan penilaian berdasarkan pada tujuan analitis dan pengetahuan data. Tetapi harus sangat jelas bahwa mengesampingkan variabel yang diketahui sangat berkorelasi dengan orang lain dapat memiliki efek besar pada hasil PCA.


Ini Rkodenya.

n.cases <- 240               # Number of points.
n.vars <- 4                  # Number of mutually correlated variables.
set.seed(26)                 # Make these results reproducible.
eps <- rnorm(n.vars, 0, 1/4) # Make "1/4" smaller to *increase* the correlations.
x <- matrix(rnorm(n.cases * (n.vars+2)), nrow=n.cases)
beta <- rbind(c(1,rep(0, n.vars)), c(0,rep(1, n.vars)), cbind(rep(0,n.vars), diag(eps)))
y <- x%*%beta                # The variables.
cor(y)                       # Verify their correlations are as intended.
plot(data.frame(y))          # Show the scatterplot matrix.

# Perform PCA on the first 2, 3, 4, ..., n.vars+1 variables.
p <- lapply(2:dim(beta)[2], function(k) prcomp(y[, 1:k], scale=TRUE))

# Print summaries and display plots.
tmp <- lapply(p, summary)
par(mfrow=c(2,2))
tmp <- lapply(p, plot)
whuber
sumber
5
+1, tokoh cantik. Apa yang Anda gunakan untuk 2 teratas? Yang ke-1 sepertinya digambar tangan.
gung
14
@ung saya menggunakan varian kode di Mathematica.stackexchange.com/questions/11350/xkcd-style-graphs untuk gambar pertama. Sudah lama diketahui bahwa menambahkan sedikit jittering acak ke teks atau gambar dapat membuatnya terlihat lebih hangat dan lebih mudah diakses. ( sendiri awalnya dibangun di atas Metafont , yang dirancang Donald Knuth setelah studi mendalam tentang tipografi; ia memasukkan variasi bawaan seperti itu.) Untuk beberapa grafik, seperti sebar 3D scatterplot pada gambar kedua, teknik jittering menambahkan sedikit atau mengganggu, jadi saya tidak menggunakannya di sana. TEX
whuber
2
Itu sangat mencerahkan, whuber. Saya belajar sesuatu yang baru.
Spacey
7
@whuber seperti ahli statistik paling keren - menggunakan plot XKCD seperti pro.
Cam.Davidson.Pilon
2
@logan Dengan kata lain, tidak. Izinkan saya untuk mengarahkan perhatian Anda pada kalimat di bagian akhir posting ini: "Tidak ada yang benar secara matematis (atau salah) tentang prosedur seperti itu; ini adalah panggilan penilaian berdasarkan tujuan analitis dan pengetahuan data."
whuber
43

Saya lebih jauh akan menggambarkan proses dan ide yang sama seperti @whuber lakukan, tetapi dengan memuat plot, - karena memuat adalah esensi dari hasil PCA.

Berikut adalah 3 analisis. Yang pertama, kami memiliki dua variabel, dan (dalam contoh ini, mereka tidak berkorelasi). Pada yang kedua, kami menambahkan yang hampir merupakan salinan dan oleh karena itu berkorelasi kuat dengannya. Yang ketiga, kami masih menambahkan 2 "salinan" yang sama: dan .X 2 X 3 X 2 X 4 X 5X1X2X3X2X4X5

Plot pembebanan dari 2 komponen utama pertama kemudian pergi. Paku merah pada plot menunjukkan korelasi antara variabel, sehingga sekelompok beberapa paku adalah tempat sekelompok variabel berkorelasi erat ditemukan. Komponennya adalah garis abu-abu; "kekuatan" relatif suatu komponen (besarnya nilai eigen relatifnya) diberikan oleh bobot garis.

masukkan deskripsi gambar di sini

Dua efek menambahkan "salinan" dapat diamati:

  1. Komponen 1 menjadi lebih kuat dan lebih kuat, dan Komponen 2 semakin lemah.
  2. Orientasi perubahan komponen: pada awalnya, Komponen 1 berada di tengah antara dan ; ketika kami menambahkan ke Komponen 1 segera kembali berorientasi sendiri untuk mengikuti banyak variabel yang muncul; dan Anda mungkin yakin bahwa setelah kami menambahkan dua variabel lebih ke dalam kelompok lampiran dari Komponen 1 ke sekelompok variabel yang berkorelasi erat menjadi lebih tidak terbantahkan.X 2 X 3 X 2X1X2X3X2

Saya tidak akan melanjutkan moral karena @whuber sudah melakukannya.


Selain itu . Di bawah ini adalah beberapa gambar untuk menanggapi komentar @ whuber. Ini adalah tentang perbedaan antara "ruang variabel" dan "ruang subjek" dan bagaimana komponen mengorientasikan diri mereka di sana-sini. Tiga PCA bivariat disajikan: analisis baris pertama , analisis baris kedua , dan baris ketiga . Kolom kiri adalah sebar plot (dari data terstandarisasi) dan kolom kanan memuat plot.r = 0,62 r = 0,77r=0r=0.62r=0.77

Pada sebar , korelasi antara dan diterjemahkan sebagai lonjakan awan. Sudut (kosinusnya) antara garis komponen dan garis variabel adalah elemen vektor eigen yang sesuai . Vektor eigen identik dalam ketiga analisis (sehingga sudut pada ketiga grafik adalah sama). [Tapi, memang benar, bahwa dengan tepat , vektor eigen (dan karenanya sudut) secara teoritis arbitrer; karena cloud sempurna "bulat" setiap pasangan garis ortogonal yang datang melalui asal dapat berfungsi sebagai dua komponen, - bahkan danX 2 r = 0 X 1 X 2X1X2r=0 X1X2garis itu sendiri dapat dipilih sebagai komponen.] Koordinat titik data (200 subjek) ke komponen adalah skor komponen, dan jumlah kuadratnya yang dibagi 200-1 adalah nilai eigen komponen .

Pada plot pemuatan, titik (vektor) adalah variabel; mereka menyebar ruang yang 2-dimensi (karena kita memiliki 2 titik + asal) tetapi sebenarnya adalah 200-dimensi (jumlah subjek) yang berkurang "ruang subjek". Di sini sudut (cosinus) antara vektor merah adalah . Vektor sama, panjang unit, karena data telah distandarisasi. Komponen pertama adalah sumbu dimensi di ruang ini yang bergerak menuju akumulasi titik secara keseluruhan; dalam kasus hanya 2 variabel itu selalu merupakan garis-bagi antara danX 1 X 2rX1X2(tapi menambahkan variabel ke-3 bisa menangkisnya). Sudut (cosinus) antara vektor variabel dan garis komponen adalah korelasi di antara mereka, dan karena vektor adalah satuan panjang dan komponennya ortogonal, ini tidak lain adalah koordinat, pembebanan . Jumlah beban kuadrat ke komponen adalah nilai eigennya (komponen hanya mengarahkan dirinya sendiri dalam ruang subjek ini untuk memaksimalkannya)

masukkan deskripsi gambar di sini


Tambahan2. Dalam Penambahan di atas saya berbicara tentang "ruang variabel" dan "ruang subjek" seolah-olah mereka tidak kompatibel bersama seperti air dan minyak. Saya harus mempertimbangkannya kembali dan mungkin mengatakan bahwa - setidaknya ketika kita berbicara tentang PCA - kedua ruang tersebut isomorfis pada akhirnya, dan berdasarkan hal itu kita dapat dengan benar menampilkan semua detail PCA - titik data, sumbu variabel, sumbu komponen, variabel sebagai poin, - pada biplot tunggal yang tidak terdistorsi.

Di bawah ini adalah sebar (ruang variabel) dan plot pemuatan (ruang komponen, yang merupakan ruang subjek berdasarkan asal genetiknya). Segala sesuatu yang dapat ditampilkan pada satu, juga dapat ditampilkan pada yang lain. Gambar - gambar itu identik , hanya diputar 45 derajat (dan dipantulkan, dalam kasus khusus ini) relatif satu sama lain. Itu adalah PCA dari variabel v1 dan v2 (standar, jadi itu r yang dianalisis). Garis hitam pada gambar adalah variabel sebagai sumbu; garis hijau / kuning adalah komponen sebagai sumbu; titik biru adalah awan data (subjek); titik merah adalah variabel yang ditampilkan sebagai titik (vektor).

masukkan deskripsi gambar di sini

ttnphns
sumber
1
+1 ilustrasi menarik. BTW, pengamatan kedua Anda adalah artefak dari data: orientasi berubah karena dalam kasus pertama korelasinya sempurna, memberikan ruang eigens dua dimensi. (Ini sangat jarang terjadi pada data real, itu biasanya berarti kesalahan database yang dibuat dan satu variabel adalah linier re-ekspresi lain.) Perangkat lunak bebas untuk memilih setiap basis ortogonal untuk ruang itu, sewenang-wenang. Jumlah korelasi terkecil saja akan menghilangkan degenerasi ini. Karena itu saya pikir Anda terlalu menafsirkan fenomena reorientasi ini.
whuber
@whuber, Mungkin aku tidak mengerti kamu. Apa korelasi "sempurna"? r bw X1 dan X2 adalah 0,003; dan itu bisa berupa apa saja, misalnya .503. Itu akan menjadi cos sudut dengan dua vektor merah pada plot. Apa pun r , PC ke-1 selalu menjadi garis-bagi sementara hanya 2 variabel yang dianalisis. Saya kira catatan Anda The software was free to choose any orthogonal basis for that space, arbitrarilyberlaku untuk cloud bulat dalam ruang variabel (yaitu data sebar, seperti gambar 1 dalam jawaban Anda), tetapi memuat plot adalah ruang subjek di mana variabel, bukan kasus, adalah titik (vektor).
ttnphns
1
Maaf; Maksud saya kurangnya korelasi. Dalam analisis Anda, apakah Anda menggunakan kovarian atau korelasi atau membakukan baris atau kolom data? (Mungkin saya salah paham, tetapi saya tidak menemukan perbedaan Anda antara ruang "subjek" dan "variabel" yang bermakna dalam konteks ini: baik vektor basis asli dan data adalah elemen dari, katakanlah, ; the " memuat plot "adalah proyeksi ke subruang yang dihasilkan oleh dua PC pertama. Saya percaya kebanyakan orang akan mengambil ruang" subjek "untuk memiliki 240 dimensi dalam simulasi saya: Saya tidak menggambarkan bahwa dengan sebar!)R5
whuber
Saya menggunakan korelasi (perhatikan matriks dan fakta bahwa vektor merah pada dasarnya sama panjang). Ya, ruang subjek adalah scatterplot tupsy-torvey dengan n sumbu (subjek) dan poin p (variabel). Tentu saja, semua dimensi np redundan dan set variabel p apa pun dapat diplot dalam ruang subjek p-dimensi, tetapi ini tidak mengubahnya menjadi ruang variabel! Saya hanya akan menambahkan gambar ke jawaban saya.
ttnphns
5
+1, terima kasih atas kontribusi tambahannya, @ttnphns. Ini berbalik dari apa yang awalnya saya pikir adalah pertanyaan yang cukup sederhana menjadi utas yang sangat informatif.
gung
4

Tanpa rincian dari makalah Anda, saya akan menduga bahwa membuang variabel yang sangat berkorelasi ini dilakukan hanya untuk menghemat daya komputasi atau beban kerja. Saya tidak dapat melihat alasan mengapa PCA akan 'pecah' untuk variabel yang sangat berkorelasi. Memproyeksikan kembali data ke pangkalan yang ditemukan oleh PCA memiliki efek memutihkan data, (atau mendelegorasikannya). Itulah inti di balik PCA.

Spacey
sumber
4
Apakah Anda membaca petunjuk oleh @ttnphns? PCA memperhatikan tidak hanya vektor eigen (yang Anda diskusikan) tetapi juga nilai eigen (yang Anda abaikan). Ini sangat penting, karena nilai eigen digunakan untuk menentukan komponen mana yang harus dipertahankan dan mana yang akan dibuang.
whuber
2
@whuber Ya ... ya saya rasa saya mengerti sekarang. Jadi pada dasarnya, variabel yang lebih berkorelasi akan terlalu menekankan vektor eigen tertentu, (arah), dan jika ada banyak variabel berkorelasi, maka akan ada begitu banyak arah 'palsu' yang terlalu ditekankan, yang menghilangkan vektor / arah 'asli' yang akan sebaliknya mudah dilihat. Apakah saya mengerti Anda?
Spacey
2
Itu cukup dekat, Mohammad. Kenyataannya adalah bahwa satu set variabel berkorelasi dapat "memuat" ke beberapa komponen utama (vektor eigen), jadi termasuk banyak variabel dari set tersebut akan secara berbeda menimbang beberapa vektor eigen - dan dengan demikian mengubah arah semua vektor eigen juga.
whuber
1

Dari pemahaman saya, variabel yang berkorelasi ok, karena PCA menghasilkan vektor yang ortogonal.

Banyak
sumber
5
Anda benar, tetapi bisakah Anda menjelaskan mengapa ortogonalitas berpengaruh pada apakah atau tidak membuang variabel terlebih dahulu?
whuber
-1

Yah, itu tergantung pada algoritma Anda. Variabel yang sangat berkorelasi dapat berarti matriks yang tidak terkondisikan. Jika Anda menggunakan algoritme yang sensitif terhadap hal itu mungkin masuk akal. Tapi saya berani mengatakan bahwa sebagian besar algoritma modern yang digunakan untuk cranking nilai eigen dan vektor eigen kuat untuk ini. Coba hapus variabel yang sangat berkorelasi. Apakah nilai eigen dan vektor eigen berubah banyak? Jika ya, maka pengondisian mungkin menjadi jawabannya. Karena variabel yang sangat berkorelasi tidak menambahkan informasi, dekomposisi PCA seharusnya tidak berubah

Juancentro
sumber
4
Sayangnya, PCA memang berubah: hampir dijamin.
whuber
1
@whuber Wow, sejumlah besar tanggapan, dan sangat informatif. Maaf atas komentar saya, itu benar-benar salah. Salahku. Jawaban yang sangat informatif BTW
Juancentro
4
Saya belajar paling banyak dari jawaban yang benar-benar salah, Juancentro - terutama jawaban saya sendiri, yang untungnya jarang keluar di depan umum :-). Saya punya pemikiran yang mirip dengan Anda sampai @ttnphns meninggalkan komentar.
Whuber
-1

Bergantung pada metode pemilihan komponen prinsip apa yang Anda gunakan, bukan?

Saya cenderung menggunakan komponen prinsip dengan nilai eigen> 1. Jadi tidak akan berpengaruh pada saya.

Dan dari contoh di atas bahkan metode plot scree biasanya akan memilih yang tepat. JIKA ANDA MENJAGA SEMUA SEBELUM SIKU. Namun jika Anda hanya memilih komponen prinsip dengan nilai eigen 'dominan' Anda akan tersesat. Tapi itu bukan cara yang tepat untuk menggunakan plot scree!

Chris Howden
sumber
5
Selamat datang di situs, Chris. Sayangnya, tidak satu pun dari prosedur ad-hoc ini yang dapat dipertahankan. Perhatikan bahwa pada kasus pertama Anda tidak dapat mengubah bentuk data sama sekali dan beralih dari memilih semuanya menjadi tidak memilih satu pun (hanya dengan mengalikan semuanya dengan konstanta).
kardinal