Saya memiliki matriks korelasi pengembalian keamanan yang determinannya nol. (Ini agak mengejutkan karena matriks korelasi sampel dan matriks kovarian yang sesuai secara teoritis pasti positif.)
Hipotesis saya adalah bahwa setidaknya satu sekuritas secara linear tergantung pada sekuritas lainnya. Apakah ada fungsi dalam R yang secara berurutan menguji setiap kolom sebuah matriks untuk ketergantungan linier?
Misalnya, satu pendekatan akan membangun matriks korelasi satu keamanan pada suatu waktu dan menghitung determinan pada setiap langkah. Ketika determinan = 0 maka berhenti ketika Anda telah mengidentifikasi keamanan yang merupakan kombinasi linear dari sekuritas lain.
Setiap teknik lain untuk mengidentifikasi ketergantungan linear dalam matriks semacam itu dihargai.
sumber
Jawaban:
Anda tampaknya mengajukan pertanyaan yang benar-benar memancing: bagaimana mendeteksi, diberikan korelasi singular (atau kovarians, atau jumlah-dari-kuadrat-dan-lintas-produk) matriks, kolom mana yang secara linear bergantung pada mana. Tentunya saya kira operasi pembersihan dapat membantu. Berikut ini adalah probe saya di SPSS (bukan R) untuk diilustrasikan.
Mari kita menghasilkan beberapa data:
Mari kita buat beberapa ketergantungan linear antara V2, V4 dan V5:
Jadi, kami memodifikasi kolom V4 kami.
Cetakan M dalam 5 iterasi:
Perhatikan bahwa pada akhirnya kolom 5 penuh dengan nol. Ini berarti (seperti yang saya mengerti) bahwa V5 diikat secara linear dengan beberapa kolom sebelumnya . Kolom mana? Lihatlah iterasi di mana kolom 5 terakhir tidak penuh dengan nol - iterasi 4. Kita melihat di sana bahwa V5 diikat dengan V2 dan V4 dengan koefisien -3,333 dan 0,8333: V5 = -3333 * V2 + .8333 * V4, yang sesuai untuk apa yang telah kami lakukan dengan data: V4 = .4 * V2 + 1.2 * V5.
Begitulah cara kami mengetahui kolom mana yang terikat secara linear dengan kolom lainnya. Saya tidak memeriksa seberapa bermanfaat pendekatan di atas dalam kasus yang lebih umum dengan banyak kelompok saling ketergantungan dalam data. Namun, dalam contoh di atas tampaknya bermanfaat.
sumber
Berikut ini pendekatan langsung: hitung pangkat matriks yang dihasilkan dari menghapus setiap kolom. Kolom yang, ketika dihilangkan, menghasilkan peringkat tertinggi adalah yang bergantung secara linier (karena menghapusnya tidak menurunkan peringkat, sementara menghapus kolom yang bebas linear tidak).
Dalam R:
sumber
system is exactly singular: U[5,5] = 0
, yang sekarang saya tahu berarti kolom 5 adalah masalah (tampaknya jelas dengan melihat ke belakang karena kolom nol!)your.matrix = matrix(1:4, 2)
?Pertanyaannya adalah tentang "mengidentifikasi hubungan [linear] yang mendasari" di antara variabel.
Cara cepat dan mudah untuk mendeteksi hubungan adalah dengan regresi variabel lainnya (gunakan konstanta, bahkan) terhadap variabel-variabel tersebut menggunakan perangkat lunak favorit Anda: setiap prosedur regresi yang baik akan mendeteksi dan mendiagnosis kolinearitas. (Anda bahkan tidak akan repot untuk melihat hasil regresi: kami hanya mengandalkan efek samping yang berguna dari pengaturan dan analisis matriks regresi.)
Dengan asumsi collinearity terdeteksi, selanjutnya apa? Principal Components Analysis (PCA) adalah persis apa yang dibutuhkan: komponen terkecilnya berhubungan dengan hubungan linier-dekat. Relasi ini dapat dibaca langsung dari "loadings," yang merupakan kombinasi linear dari variabel asli. Muatan kecil (yaitu, yang terkait dengan nilai eigen kecil) sesuai dengan kolinearitas dekat. Nilai eigen akan sesuai dengan hubungan linear sempurna. Nilai eigen yang sedikit lebih besar yang masih jauh lebih kecil daripada yang terbesar akan sesuai dengan perkiraan hubungan linear.0
(Ada seni dan cukup banyak literatur yang terkait dengan mengidentifikasi apa itu "kecil" loading. Untuk memodelkan variabel dependen, saya akan menyarankan memasukkannya dalam variabel independen di PCA untuk mengidentifikasi komponen - terlepas dari ukurannya - di mana variabel dependen memainkan peran penting. Dari sudut pandang ini, "kecil" berarti jauh lebih kecil daripada komponen semacam itu.)
Mari kita lihat beberapa contoh. (Ini digunakan
R
untuk perhitungan dan merencanakan). Mulailah dengan fungsi untuk melakukan PCA, cari komponen kecil, plot mereka, dan kembalikan hubungan linier di antara mereka.Mari kita terapkan ini pada beberapa data acak. Ini dibangun di atas empat variabel ( dan E dari pertanyaan). Berikut adalah sedikit fungsi untuk menghitung A sebagai kombinasi linear yang diberikan dari yang lain. Itu kemudian menambahkan iid nilai-nilai yang didistribusikan secara normal ke semua lima variabel (untuk melihat seberapa baik prosedur melakukan ketika multikolinieritas hanya perkiraan dan tidak tepat).B,C,D, E A
Kita siap untuk pergi: tetap hanya untuk menghasilkan dan menerapkan prosedur ini. Saya menggunakan dua skenario yang dijelaskan dalam pertanyaan: A = B + C + D + E (ditambah beberapa kesalahan di masing-masing) dan A = B + ( CB,…,E A=B+C+D+E (ditambah beberapa kesalahan di masing-masing). Pertama, bagaimanapun, perhatikan bahwa PCA hampir selalu diterapkanpadadataterpusat, jadi data simulasi ini dipusatkan (tetapi tidak sebaliknya diubah) menggunakan.A=B+(C+D)/2+E
sweep
Di sini kita pergi dengan dua skenario dan tiga tingkat kesalahan yang diterapkan untuk masing-masing. Variabel asliB,…,E A
Output yang terkait dengan panel kiri atas adalah
Output untuk panel tengah atas adalah
Dalam praktiknya, seringkali bukan kasus bahwa satu variabel dipilih sebagai kombinasi yang jelas dari yang lain: semua koefisien mungkin dari ukuran yang sebanding dan dari berbagai tanda. Selain itu, ketika ada lebih dari satu dimensi hubungan, tidak ada cara unik untuk menentukannya: analisis lebih lanjut (seperti pengurangan baris) diperlukan untuk mengidentifikasi dasar yang berguna untuk hubungan tersebut. Bahwa ini cara kerja dunia: semua yang Anda bisa katakan adalah bahwa ini kombinasi tertentu yang output dengan PCA sesuai dengan hampir tidak ada variasi dalam data. Untuk mengatasinya, beberapa orang menggunakan komponen terbesar ("pokok") secara langsung sebagai variabel independen dalam regresi atau analisis selanjutnya, dalam bentuk apa pun. Jika Anda melakukan ini, jangan lupa terlebih dahulu untuk menghapus variabel dependen dari set variabel dan ulangi PCA!
Berikut adalah kode untuk mereproduksi gambar ini:
(Saya harus mengutak-atik ambang dalam kasus kesalahan besar untuk menampilkan hanya satu komponen: itulah alasan untuk memasok nilai ini sebagai parameter
process
.)Pengguna ttnphns telah mengarahkan perhatian kami ke utas terkait erat. Salah satu jawabannya (oleh JM) menyarankan pendekatan yang dijelaskan di sini.
sumber
"loadings," which are linear combinations of the original variables
Pernyataan ini terlihat tidak tepat. Muatan adalah koefisien kombinasi linear komponen dalam variabel prediksi . Jadi, maksud Anda A - 1princomp
sumber
Saya mengalami masalah ini kira-kira dua minggu yang lalu dan memutuskan bahwa saya perlu mengunjunginya kembali karena ketika berhadapan dengan set data besar, tidak mungkin untuk melakukan hal-hal ini secara manual.
Saya membuat for () loop yang menghitung pangkat matriks satu kolom pada suatu waktu. Jadi untuk iterasi pertama, peringkatnya adalah 1. Yang kedua, 2. Ini terjadi sampai peringkatnya menjadi KURANG dari jumlah kolom yang Anda gunakan.
Sangat mudah:
untuk () kerusakan loop
Saya yakin Anda dapat menambahkan pernyataan if, saya belum membutuhkannya karena saya hanya berurusan dengan kolom 50ish.
Semoga ini membantu!
sumber
Rangking, r dari sebuah matriks = jumlah kolom (atau baris) yang bebas linear dari suatu matriks. Untuk n oleh n matriks A , peringkat (A) = n => semua kolom (atau baris) adalah bebas linear.
sumber
Bukan berarti jawaban @Whuber memberi benar-benar perlu diperluas tapi saya pikir saya akan memberikan deskripsi singkat tentang matematika.
Kutipan
Montgomery, D. (2012). Pengantar Analisis Regresi Linier, Edisi ke-5. John Wiley & Sons Inc.
sumber