Korelasi antara matriks dalam R

9

Saya memiliki masalah dalam menggunakan cor()dan cor.test()fungsi.

Saya hanya memiliki dua matriks (hanya nilai numerik, dan jumlah baris dan kolom yang sama) dan saya ingin memiliki nomor korelasi dan nilai p yang sesuai.

Ketika saya menggunakan cor(matrix1, matrix2)saya mendapatkan koefisien korelasi untuk semua sel. Saya hanya ingin satu nomor sebagai hasil dari cor.

Selain itu ketika saya melakukannya cor.test(matrix1, matrix2)saya mendapatkan kesalahan berikut

Error in cor.test.default(matrix1, matrix2) : 'x' must be a numeric vector

Bagaimana saya bisa mendapatkan nilai-p untuk matriks?

Anda menemukan tabel sederhana yang ingin saya korelasikan di sini:

http://dl.dropbox.com/u/3288659/table_exp1_offline_MEANS.csv

http://dl.dropbox.com/u/3288659/table_exp2_offline_MEANS.csv

L_T
sumber
4
Agak tidak jelas apa yang Anda inginkan. Ketika Anda mengatakan Anda hanya ingin satu hasil untuk cor (matrix1, matrix2), apakah Anda mencoba untuk berkorelasi (semua angka dalam matrix1) dengan (semua angka dalam matrix2)? Jika demikian, Anda dapat mencoba cor (as.vector (matrix1), as.vector (matrix2))
Marius
Apa nilai p yang diharapkan untuk ditampilkan, tepatnya? (yaitu, hipotesis apa yang Anda uji?)
chl
Tidak, saya hanya ingin mengkorelasikan dua matriks untuk mengetahui seberapa mirip mereka. Saya tidak ingin perbandingan sel dengan sel. Saya hanya ingin sebagai hasilnya satu angka dari 0 hingga 1, seperti setiap korelasi pearson menggunakan dua vektor dalam input. Ada saran? Nilai-p yang saya harapkan harus memberi tahu saya pentingnya korelasi.
L_T
1
Apakah maksud Anda seperti di dalam cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Jawaban:

12

Jika Anda hanya ingin menghitung korelasi antara dua set nilai, mengabaikan struktur matriks, Anda dapat mengubah matriks menjadi vektor menggunakan c(). Kemudian korelasi Anda dihitung oleh cor(c(matrix1), c(matrix2)).

Martin O'Leary
sumber
Menggunakan fungsi Anda, saya mendapatkan kesalahan ini: "Kesalahan dalam cor (c (matrix1), c (matrix2)): 'x' harus berupa angka". Tetapi jika Anda melihat sekilas tabel saya, Anda perhatikan bahwa itu hanya berisi angka ... Saya tidak mengerti
L_T
3
Masalah R yang satu ini:, read.csvyang mungkin Anda gunakan, mengembalikan data.frameyang bukan matrix. Jadi, Anda perlu mengonversinya menjadi matrixdengan as.matrixsebelum membuatnya menjadi satu vektor panjang dengan c()dan memberikan hasilnya cor. Ini dia dalam satu baris:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
conjugateprior
5

Anda belum mengatakan apa pun tentang apa sebenarnya data Anda. Namun...

Misalkan matriks Anda memiliki kolom yang mewakili dua set variabel (berbeda) dan (jumlah yang sama) baris yang mewakili kasus.

Analisis Korelasi Canonical

Dalam situasi ini, satu analisis korelasi yang lebih terstruktur yang berpotensi menarik adalah menemukan korelasi kanonik . Ini mengasumsikan bahwa Anda ingin meringkas hubungan antara dua set variabel dalam hal korelasi (s) antara kombinasi linear dari matrix1kolom dan kombinasi linear darimatrix2kolom. Dan Anda akan ingin melakukan itu jika Anda mencurigai ada ruang dimensi kecil, bahkan mungkin 1, yang akan mengungkapkan struktur korelasi yang mendasari seluruh kasus yang dikaburkan oleh realisasinya dalam sistem koordinat yang ditentukan variabel saat ini. Akibatnya nilai korelasi (kanonik) ini akan, dalam arti tertentu, meringkas hubungan linear multivariat antara kedua matriks. Memang, sementara CCA bekerja untuk matriks dengan jumlah variabel yang berbeda itu mengurangi ke korelasi Pearson ketika masing-masing 'matriks' hanya satu kolom.

Penerapan

Analisis korelasi kanonik dijelaskan dalam kebanyakan teks analisis multivariat, yang mungkin paling membantu jika Anda senang dengan aljabar matriks hingga analisis eigen. Ini diimplementasikan seperti cancorpada basis R dan juga dalam paket CCA yang dijelaskan di sini .

conjugateprior
sumber
Hai terima kasih. Data saya adalah dua matriks sederhana yang berisi variabel yang sama. Struktur kedua matriks itu identik. Nilai-nilai di setiap sel adalah hasil percobaan di mana variabel-variabel tersebut dievaluasi pada skala Likert 9 poin dan dirata-rata di seluruh peserta. Strategi manakah yang terbaik untuk ditemukan di mana ada korelasi antara kedua matriks? Bisakah Anda membuat contoh di R?
L_T
1
Dengan basis R itu saja cancor(matrix1, matrix2).
conjugateprior
Tapi mungkin Anda bisa mengklarifikasi sedikit. Panggil . Lalu apa ? Apakah itu respon orang -th terhadap -th barang Likert? Tentunya tidak. Jadi, di mana rata-rata peserta datang? matrix1 A i j i jAAijij
conjugateprior
Hai ada 10 peserta, mereka harus menyatakan "derajat koherensi" antara rangsangan pasangan (perhatikan itu bukan percobaan peringkat ketidaksamaan). Saya melakukan 2 percobaan. dan saya ingin membandingkan hasilnya di bawah 2 kondisi percobaan. Setiap sel adalah rata-rata evaluasi dari 1o peserta untuk setiap pasangan rangsangan. Lalu apakah saya harus tetap menggunakan cancor?
L_T
Saya menggunakan cancor, tetapi saya tidak mendapatkan nilai koefisien tunggal yang menyatakan korelasi atau nilai-p yang menyatakan signifikansinya. Tolong bantu!
L_T
3

Jika Anda longgar menafsirkan korelasi dengan kesamaan berarti, Anda dapat menggunakan definisi berdasarkan pada produk dalam, seperti:

cAB=A,BA||B mana danA,Btr(ABT)x||x,x1/2

Dengan data Anda ini menghasilkan 0,996672.

Alternatifnya, jika struktur matriks tidak penting, adalah hanya meratakan matriks menjadi vektor dan menggunakan ukuran korelasi pilihan Anda. Karena saya tidak tahu distribusi data Anda, saya menggunakan produk titik, untuk mendapatkan 0,976.

Cara Eithe3r, sepertinya data Anda sangat berkorelasi.

Emre
sumber
Ini tampaknya koefisien rv , yang diminta OP: nilai antara 0 dan 1 yang menunjukkan betapa miripnya kedua matriks.
llrs