2016-07-28 5 views
2

에서 rcorr()을 사용하는 두 행렬이이 게시물이 중복되지는 않겠지 만 검색에 많은 시간을 할애하여 답변을 찾을 수 없었습니다.페어 와이즈 비교 만 비교 R

저는 두 개의 행렬을 가지고 있습니다.

Matrix 1 
     gene1  gene2  gene3 
ID1 12  32  43 
ID2 94  34  95 
ID3 90  54  23 
ID4 43  76  65 

Matrix2 
     TE1  TE2  TE3  
ID1 94  90  82 
ID2 23  46  94 
ID3 23  49  39 
ID4 39  34  46 

나는 페어의 방법으로 만 행렬 사이의 비교를 만드는 기본 기능 코르()를 사용하여 R^2 개 값의 테이블을 얻을 수 있어요. 결과는 다음과 같습니다.

 gene1  gene2  gene3 
TE1 0.98   0.48   0.45 
TE2 0.77   0.46   0.76 
TE3 0.45   0.56   0.76 

어느 것이 좋습니다. 그러나 문제는 p 값도 필요하기 때문에, 행렬을 특정 컷오프보다 작은 값을 갖는 행렬로 줄일 수 있습니다. (실제 행렬은 [30,800]이고 [30,1000]이므로 데이터를 이해할 수있는 것으로 축소).

rcorr() 패키지는 상관 관계의 행렬 r, p 값의 행렬 P 및 관측 수의 벡터를 생성하므로이 때 rcorr() 패키지가 훌륭합니다. 그러나 BETWEEN 행렬 만 비교하는 방법을 찾아 내지 못했습니다. 행렬 WITHIN을 비교합니다. 결과는 다음과 같습니다.

 gene1 gene2 gene3 TE1 TE2 TE3 
gene1 1.0  0.5  0.5  0.5 0.3 0.9 
gene2   1.0  0.4  0.7 0.7 0.5 
gene3     1.0  0.8 0.8 0.5 
TE1       1.0 0.8 0.2 
TE2         1.0 0.7 
TE3          1.0 

이것은 데이터로 구성되어 있지만 요점을 보여줍니다. 이렇게하면 실제로 필요한 데이터가 두 배가되고 계산이 느려지고 시각적으로 엉뚱한 상관 그래프가 생성됩니다.

그럼 내 질문은 다음과 같습니다. Hcisc 패키지 함수 rcorr()을 사용하여 행렬 내에서가 아닌 두 행간을 비교하는 방법이 있습니까?

나는 또한 행렬의 목록에 cor.test 시도했다 :

cor.test(c(matrix1),c(matrix2), method="pearson") 

을하지만 오류 'x' and 'y' must have the same length 것을 얻는다.

다음으로 높은 상관 관계와 낮은 p 값을 가진 매트릭스를 기반으로 실제로 행렬을 부분 집합하는 방법을 알아야하지만 여기에서 유용한 조사가 있으므로 자세히 조사해야합니다.

답변

0

은 아마 그것을 할 수있는 쉬운 방법이 있지만, 하나의 옵션은 모든 열 쌍에 대해

tmp <- with(expand.grid(seq(ncol(matrix1)), seq(ncol(matrix2))), 
      mapply(function(i, j) cor.test(matrix1[, i], matrix2[, j]), 
        Var1, Var2)) 

cor.test을하고 다음 테스트가

matrix(unlist(tmp['estimate', ]), nrow=ncol(matrix1), 
     dimnames=list(colnames(matrix1), colnames(matrix2))) 
#    TE1  TE2   TE3 
#gene1 -0.8757869 -0.4755768 -0.008312574 
#gene2 -0.3567850 -0.7585136 -0.834883959 
#gene3 -0.2723512 -0.3764091 0.546779587 

matrix(unlist(tmp['p.value', ]), nrow=ncol(matrix1), 
     dimnames=list(colnames(matrix1), colnames(matrix2))) 
#    TE1  TE2  TE3 
#gene1 0.05156122 0.4181472 0.98941622 
#gene2 0.55555798 0.1371765 0.07851595 
#gene3 0.65756758 0.5323119 0.34025894 

객체에서 요소를 추출하는 것입니다 당신 cor(matrix1, matrix2)의 출력을 추정 행렬과 비교하여 행렬이 동일해야 함을 점검 할 수 있습니다.

+0

그래서이 대답은 작동하기 때문에 받아 들일 것입니다. 앞으로 사용할 수도 있습니다. 고맙습니다! 하지만 rcorr()을 사용하여 결국이 블로그 게시물의 기능을 사용하여 동일한 작업을 수행했습니다. [링크] (http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start - 가이드 - 투 - 분석 - 형식 - 및 - 시각화 - 상관 - 매트릭스 - 사용 - 소프트웨어 -). 'flatten'함수를 사용하여 각 pairwise 비교에 대한 pvalues ​​및 correlation 값을 추출한 다음 이름에서 문자열 특성을 사용하여 원하는 모든 쌍을 제외하고 'dcast()'를 사용하여 행렬을 만들었습니다. – lmrta