Tương quan giữa các ma trận trong R


9

Tôi có vấn đề trong việc sử dụng cor()và các cor.test()chức năng.

Tôi chỉ có hai ma trận (chỉ có các giá trị số và cùng số hàng và cột) và tôi muốn có số tương quan và giá trị p tương ứng.

Khi tôi sử dụng, cor(matrix1, matrix2)tôi nhận được các hệ số tương quan cho tất cả các ô. Tôi chỉ muốn một số duy nhất là kết quả của cor.

Trong additon khi tôi làm cor.test(matrix1, matrix2)tôi nhận được lỗi sau

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

Làm cách nào tôi có thể nhận giá trị p cho ma trận?

Bạn tìm thấy các bảng đơn giản tôi muốn tương quan ở đây:

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

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


4
Đó là một chút không rõ ràng những gì bạn muốn. Khi bạn nói rằng bạn chỉ muốn một kết quả cho cor (matrix1, matrix2), bạn có đang cố tương quan (tất cả các số trong ma trận1) với (tất cả các số trong ma trận 2) không? Trong trường hợp đó, bạn có thể thử cor (as.vector (matrix1), as.vector (matrix2))
Marius

Giá trị p dự kiến ​​sẽ hiển thị, chính xác là gì? (tức là bạn đang thử nghiệm giả thuyết nào?)
chl

Không, tôi chỉ muốn tương quan hai ma trận để biết chúng giống nhau đến mức nào. Tôi không muốn một tế bào so sánh theo tế bào. Tôi chỉ muốn kết quả là một số duy nhất từ ​​0 đến 1, giống như mọi tương quan quả lê sử dụng hai vectơ trong đầu vào. Bất cứ đề nghị nào? Giá trị p tôi mong đợi phải cho tôi biết tầm quan trọng của mối tương quan.
L_T

1
Bạn có nghĩa là như trong cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Câu trả lời:


12

Nếu bạn chỉ đơn giản muốn tính toán mối tương quan giữa hai bộ giá trị, bỏ qua cấu trúc ma trận, bạn có thể chuyển đổi ma trận thành vectơ bằng cách sử dụng c(). Sau đó, mối tương quan của bạn được tính bằng cor(c(matrix1), c(matrix2)).


Sử dụng chức năng của bạn, tôi nhận được lỗi này: "Lỗi trong cor (c (matrix1), c (matrix2)): 'x' phải là số". Nhưng nếu bạn có một cái nhìn nhanh vào các bảng của tôi, bạn sẽ thấy rằng chúng chỉ chứa các số ... Tôi không hiểu
L_T

3
Một vấn đề R này : read.csv, mà bạn có thể đã sử dụng, trả về một data.framecái không phải là a matrix. Vì vậy, bạn cần phải chuyển đổi nó để trở thành một matrixvới as.matrixtrước khi thực hiện nó một vector dài với c()và đưa ra các kết quả để cor. Đây là một dòng:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
liên hợp chiến

5

Bạn chưa nói gì về dữ liệu của bạn. Tuy nhiên...

Giả sử rằng ma trận của bạn có các cột biểu thị hai bộ biến (khác nhau) và (cùng số lượng) hàng đại diện cho các trường hợp.

Phân tích tương quan Canonical

Trong tình huống này, một phân tích tương quan có cấu trúc thú vị hơn là tìm ra các mối tương quan chính tắc . Điều này giả định rằng bạn muốn tóm tắt mối quan hệ giữa hai bộ biến về mặt tương quan giữa các tổ hợp tuyến tính của matrix1cột và kết hợp tuyến tính củamatrix2cột. Và bạn sẽ muốn làm điều đó nếu bạn nghi ngờ rằng có một không gian có kích thước nhỏ, thậm chí là 1, sẽ tiết lộ một cấu trúc tương quan cơ bản trong các trường hợp bị che khuất bởi nhận thức của chúng trong các hệ tọa độ xác định biến hiện tại. Do đó, giá trị của mối tương quan (chính tắc) này, theo một nghĩa nào đó, sẽ tóm tắt một mối quan hệ tuyến tính đa biến giữa hai ma trận. Thật vậy, trong khi CCA hoạt động cho ma trận với số lượng biến khác nhau, nó sẽ giảm tương quan Pearson khi mỗi "ma trận" chỉ là một cột duy nhất.

Thực hiện

Phân tích tương quan Canonical được mô tả trong hầu hết các văn bản phân tích đa biến, có lẽ hữu ích nhất nếu bạn hài lòng với đại số ma trận cho đến phân tích riêng. Nó được thực hiện như cancortrong cơ sở R và cả trong gói CCA được mô tả ở đây .


Xin chào cảm ơn. Dữ liệu của tôi là hai ma trận đơn giản chứa các biến giống nhau. Cấu trúc của hai ma trận giống hệt nhau. Các giá trị trong mỗi ô là kết quả của một thử nghiệm trong đó các biến đó được đánh giá theo thang đo Likert 9 điểm và tính trung bình trên các người tham gia. Chiến lược tốt nhất để tìm thấy trong đó có mối tương quan giữa hai ma trận? Bạn có thể làm một ví dụ trong R?
L_T

1
Với cơ sở R, nó chỉ là cancor(matrix1, matrix2).
liên hợp chiến

Nhưng có lẽ bạn có thể làm rõ một chút. Gọi . Vậy thì gì? Đây có phải là phản hồi của người thứ đối với mục Likert thứ không? Chắc chắn là không. Vì vậy, trung bình hơn người tham gia đến ở đâu? matrix1 AAijij
liên hợp chiến

Xin chào, có 10 người tham gia, họ phải thể hiện "mức độ gắn kết" giữa các kích thích của các cặp (lưu ý rằng đây không phải là một thử nghiệm đánh giá không giống nhau). Tôi đã làm 2 thí nghiệm. và tôi muốn so sánh kết quả theo 2 điều kiện đặc biệt. Mỗi ô là mức trung bình của các đánh giá của những người tham gia 1o cho mỗi cặp kích thích. Vậy thì tôi có nên sử dụng cancor không?
L_T

Tôi đã sử dụng cancor, nhưng tôi không nhận được một giá trị hệ số duy nhất biểu thị mối tương quan cũng như giá trị p thể hiện tầm quan trọng của nó. Hãy giúp tôi!
L_T

3

Nếu bạn hiểu một cách lỏng lẻo mối tương quan với ý nghĩa tương tự, bạn có thể sử dụng một định nghĩa dựa trên sản phẩm bên trong, chẳng hạn như:

cAB=A,BA||B trong đó vàA,Btr(ABT)x||x,x1/2

Với dữ liệu của bạn, sản lượng này mang lại 0,996672.

Cách khác, nếu cấu trúc ma trận không quan trọng, chỉ đơn giản là làm phẳng các ma trận thành các vectơ và sử dụng thước đo tương quan của sự lựa chọn của bạn. Vì tôi không biết phân phối dữ liệu của bạn, tôi đã sử dụng sản phẩm chấm, để có được 0.976.

Theo cách của Eithe3r, có vẻ như dữ liệu của bạn có mối tương quan cao.


Đây có vẻ là hệ số rv , đó là những gì OP yêu cầu: giá trị từ 0 đến 1 cho biết cả hai ma trận giống nhau như thế nào.
llrs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.