Correlação entre matrizes em R

9

Tenho problemas ao usar as funções cor()e cor.test().

Eu só tenho duas matrizes (apenas valores numéricos e o mesmo número de linhas e colunas) e quero ter o número de correlação e o valor p correspondente.

Quando uso cor(matrix1, matrix2), obtenho os coeficientes de correlação para todas as células. Eu só quero um número único como resultado de cor.

Além disso, quando cor.test(matrix1, matrix2)eu recebo o seguinte erro

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

Como posso obter valores p para matrizes?

Você encontra as tabelas simples que quero correlacionar aqui:

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

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

L_T
fonte
4
É um pouco claro o que você quer. Quando você diz que deseja apenas um resultado para cor (matriz1, matriz2), está tentando correlacionar (todos os números na matriz1) com (todos os números na matriz2)? Nesse caso, você pode tentar cor (as.vector (matrix1), as.vector (matrix2))
Marius
Qual é o valor p esperado para mostrar exatamente? (ie, o que hipótese que você está testando?)
chl
Não, eu só quero correlacionar as duas matrizes para saber o quanto elas são semelhantes. Eu não quero uma comparação célula por célula. Eu só quero, como resultado, um único número de 0 a 1, como toda correlação de Pearson usa dois vetores na entrada. Alguma sugestão? O valor-p que eu espero tem que me dizer o significado da correlação.
L_T 21/03/12
11
Você quer dizer como em cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Respostas:

12

Se você simplesmente deseja calcular a correlação entre os dois conjuntos de valores, ignorando a estrutura da matriz, pode converter as matrizes em vetores usando c(). Então sua correlação é calculada por cor(c(matrix1), c(matrix2)).

Martin O'Leary
fonte
Usando sua função, recebo este erro: "Erro em cor (c (matriz1), c (matriz2)): 'x' deve ser numérico". Mas se você
der
3
Um problema R neste:, read.csvque você provavelmente usou, retorna a data.frameque não é a matrix. Portanto, você precisa convertê-lo em um matrixcom as.matrixantes de torná-lo um vetor longo c()e fornecer os resultados cor. Aqui está uma linha:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
conjugateprior
5

Você não disse nada sobre o que seus dados realmente são. Mesmo assim...

Suponha que suas matrizes tenham colunas representando dois conjuntos de variáveis ​​(diferentes) e (o mesmo número de) linhas representando casos.

Análise de correlação canônica

Nesta situação, uma análise de correlação mais estruturada potencialmente interessante é encontrar as correlações canônicas . Isso pressupõe que você deseja resumir o relacionamento entre os dois conjuntos de variáveis ​​em termos de correlação (ões) entre combinações lineares de matrix1colunas e combinações lineares dematrix2colunas. E você desejaria fazer isso se suspeitasse que havia um espaço de pequena dimensionalidade, talvez até 1, que revelasse uma estrutura de correlação subjacente entre os casos, obscurecida por sua realização nos atuais sistemas de coordenadas definidas por variáveis. Consequentemente, o valor dessa correlação (canônica) resumiria, em certo sentido, uma relação linear multivariada entre as duas matrizes. De fato, enquanto o CCA trabalha para matrizes com diferentes números de variáveis, ele se reduz à correlação de Pearson quando cada 'matriz' é apenas uma única coluna.

Implementação

A análise de correlação canônica é descrita na maioria dos textos de análise multivariada, o que talvez seja mais útil se você estiver satisfeito com a álgebra matricial até a análise própria. É implementado como cancorna base R e também no pacote CCA , que é descrito aqui .

conjugateprior
fonte
Oi obrigado Meus dados são simples duas matrizes contendo as mesmas variáveis. A estrutura das duas matrizes é idêntica. Os valores em cada célula são os resultados de um experimento em que essas variáveis ​​foram avaliadas em uma escala Likert de 9 pontos e a média entre os participantes. Qual é a melhor estratégia para encontrar uma correlação entre as duas matrizes? Você pode fazer um exemplo em R?
L_T 21/03
11
Com base R é apenas cancor(matrix1, matrix2).
conjugateprior
matrix1 AAijij
Olá, foram 10 participantes, eles tiveram que expressar o "grau de coerência" entre os estímulos dos pares (observe que não é um experimento de classificação de diferenças). Eu fiz 2 experimentos. e eu quero comparar os resultados nas 2 condições expdrimentais. Cada célula é a média das avaliações dos 10 participantes para cada par de estímulos. Então ainda devo usar o câncer?
L_T 21/03
Usei câncer, mas não recebo um único valor de coeficiente que expresse a correlação nem um valor-p que expresse sua significância. Por favor ajude!
L_T 21/03/12
3

Se você interpretar livremente a correlação para significar similaridade, poderá usar uma definição baseada no produto interno, como:

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

Com seus dados, isso rende 0,996672.

A alternativa, se a estrutura da matriz não for importante, é simplesmente achatar as matrizes em vetores e usar a medida de correlação de sua escolha. Como não conheço a distribuição dos seus dados, usei o produto escalar, para obter 0,976.

De qualquer maneira, parece que seus dados estão altamente correlacionados.

Emre
fonte
Esse parece o coeficiente rv , que é o que o OP solicitou: um valor entre 0 e 1 que informa como as duas matrizes são semelhantes.
1131