Tuesday, December 16, 2008

Pairwise gene-gene co-expression 계산 시간 단축

몇일전 Affymetrix chip 의 모든 probeset vs. probeset correlation coefficient 계산을 CPAN 모듈을 이용해서 수행했다. 계산량이 45001*45000/2 , 10억 번이 넘는 어마어마한 양이라 지레 짐작으로 꾀나 걸리겠구나 하고 그냥 두었는데 하루가 지나서 보니 2.2GB 용량에 기껏 몇천만개 정도만 계산이 된 상태. 썅.

부랴부랴 계산 시간을 점검해 봤더니 하나당 0.003초 정도.
전체 계산 횟수 45001*45000/2 곱하기 0.003 초. 이걸 다시 3600초로 나눠 몇시간이나 드는가를 계산해 보면 843.7687 시간, 35일은 더 돌려야 하는 엄청난 계산 시간!

CPAN 모듈을 쓴 경우 probeset pair에 대한 correlation 계산이 각각에 대한 standard deviation을 매번 계산하기 때문에, 중복된 계산이 어마어마하다. 그래서 먼저 각 probeset 의 expression data를 z-score로 transform 했다. z-score transform 된 경우 두 probeset의 z-score transformed expression vector를 곱해서 더해주기면 하면 correlation coefficient가 되기 때문에 계산량이 대폭 줄어든다. (포스팅 참조)



## Correlation function 이용한 경우

correlation(\@pair1,\@pair2 );

sub correlation{
my $i=shift;
my $j=shift;
my $sd1=standardize($i);
my $sd2=standardize($j);
my $cor;
$cor+=$sd1->[$_]*$sd2->[$_] for 0..$#$sd1;
$cor/=$#$sd1;
return $cor;
}

## 먼저 z-score transform 한 경우

$cor+=$pair1[$_]*$pair2[$_] for 0..$#pair1;
$cor/=$#pair1;





이렇게 한 결과 하나당 계산 시간이 0.0001초로, 약 30배로 계산 속도가 빨라졌다.
이렇게 해도 전체 셋에 대한 계산은 44시간이 걸리긴 한다만...