Monday, December 29, 2008

I'm not a scientist, I'm a number!

plos comput. perspective :http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1000247

Ten simple rules series를 쓰던 Phillip bourne이
Perspective article을 하나 썼다. 이 글 제목이
바로 그 글의 제목인데,

이 글에선 일종의 과학자 '평가' 시스템을
openID 를 통해 기존의 논문에 국한하지
않고 전 'web' 활동 범위로 확대하자는
idea를 설명하고 있다.

과학자 impact factor =
H factor ( 기존의 paper based impact factor)
+ ( #{Grant/Review editor}/20 )
+ ( #{Annotation/software/Dataset}/5 )
+ ( # Web factor /50 )

과 같은 수식을 사용하여 블로그 글에 달린
답글이 50이 넘을 때 마다 1씩 researcher factor
를 주고, 논문 에디터도 20번 이상이면 1씩,
소프트웨어나 데이터셋 public 에 공개 등도
5회 이상이면 1씩 이 팩터를 증가시키는
방식으로 과학자의 전방위 활동에 대한
scoring을 할 수 있다는 것이다.

이런 식의 web-based author , paper,
software, dataset 등에 대한 파급효과
scoring은 필요에 따라 우리도 다양하게
시도해 볼 수 있는 것 같다.

최근에 나도 GEO에 있는 micorarray
dataset에 대한 impact size scoring
을 google scholar를 이용해 시도한
적이 있다. 데이터셋이 얼마나 커뮤니티에
파급효과가 있었는지를 그 데이터를
쓴 논문에 대한 citation, cite한 논문에
대한 citation, ... 로 citation의 propagation
을 쭉 따라가며 scoring을 할려고 했는데,

google scholar가 web scrapping robot
program에 대해 접근을 차단하는 정책을
써서 개발을 중단한 상태다.

이 문제를 해결할 수 있는 아이디어가 있는 분들의
답글 기대하면 좋겠는데,내 블로그를 구독하는

사람이 거의 없어서 ㅜㅜ

Remove nonword character

Lperl에서 non-word character를 regexp에서 지정하려면
\W 를 쓰면 된다.

parkinson's disease 라는 문자열에서 's를 제거한다면


$line='parkinson's disease';
$line=~s/\Ws//;


와 같이 쓸 수 있다.

그러나 윈도우 시스템에서 특수 문자로 지정된 " ' " 는 하나의
위의 정규식으로 처리되지 않는다.

대신

$line=~s/\W+s//;


를 써야 제대로 동작한다. 윈도우 특수 문자의 경우 non-word character가
리눅스 시스템에서 하나 이상의 character로 표현되는 경우가 많기 때문이다.

오늘 맞부닥친 특수 문자의 경우 3개의 문자로 구성되어 있었다.
이것 때문에 삽질을 장시간 ㅜㅜ

Tuesday, December 23, 2008

Mirroring files via FTP

대용량 데이터베이스를 다운 받고, Up-to-date 로 유지하기 위해서 Database mirroring이 필요하다.

이때, lftp를 쓰면 간편하게 작업을 수행할 수 있다.

예로, NCBI의 GEO DB 중 SeriesMatrix 폴더 하의 파일들을 mirroring하고 싶으면


>lftp ftp.ncbi.nlm.nih.gov/pub/geo/DATA/SeriesMatrix
>mirror

Thursday, December 18, 2008

Mapping Ensembl to external

Bio data들 간의 Cross-mapping 은 어떤 데이터를 다루든 맨처음 해결해야 하는 문제로, 때때로 골머리를 썩히곤 한다.
Ensembl의 경우 Ensembl 고유의 gene, protein 에 대한 ID를 extermal bio database 들과 mapping 시켜주는 서비스를
Biomart라는 툴을 통해 제공하고 있다.

Biomart at Ensembl : http://www.ensembl.org/biomart

사용법은 위의 url 에 연결된 biomart 홈페이지에 가서 원하는 ensembl genome data와 필요한 external database를
선택하고, 결과 파일을 다운 받으면 된다.

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시간이 걸리긴 한다만...

Tuesday, December 2, 2008

[CPAN] WWW::Search::PubMed, Affiliation 출력 기능 추가

WWW::Search::PubMed 는 기본적으로 Abstract, pmid, date, day, month, year
의 6개 분류에 대해 search result를 출력할 수 있게 구현되었다.

상황에 따라 author 나 저자의 affiliation 에 대한 정보가 필요한 경우가 있는데,
이를 위해선 WWW::Search::PubMed 모듈과 WWW::Search::PubMedResult 모듈에
몇 줄을 더 넣어 주면 간단하게 기능을 추가할 수 있다.

Affiliation 결과 출력 기능 추가는 아래와 같다

WWW::Search::PubMed 모듈

..
my $abstract = $self ... // 이 라인 근처에 아래 라인을 넣으면 된다
my $affiliation = $self->get_text_node($article,'Affiliation');

..
$hit->.. // $hit 으로 시작되는 라인들이 모여 있는 곳에 아래 라인을 추가한다.
$hit->affiliation($affiliation);
..



WWW::Search::PubMed::Result 모듈

..
sub affiliation { return shift->_elem('affiliation',@_); } // Affiliation 정보를 얻는 함수
..



** Search result 개수 제한 문제
WWW::Search 모듈에서는 maximum_to_retrieve 옵션으로 result개수를 지정할 수 있다. default는 500개.
WWW::Search를 베이스로 하고 있는 Pubmed 모듈도 이를 사용할 수 있는데, 여기서 500개 이상을 지정할 수 없게 되어 있다. 이는 pubmed 모듈 안의 search 옵션이 default로 500으로 지정되어 있고, 이는 maximum_to_retrieve로 선택할 수 있는 변수가 아니기 때문에 발생하는 문제다. 이 문제 해결을 위해서는 이 값을 적당히 큰 값으로 바꾸면 된다.


my constant QUERY_ARTICLE_LIST_URI => 'http://eutils.ncbi.nlm.nih. .. .fcgi?db=pubmed&retmax=500'; // 500을 적당히 큰 수로 바꾼다

Tuesday, November 25, 2008

Gene expression related papers of interests

Gene expression 과 관련한 각 토픽들에 대한 reading list 를 정리하는 포스팅이다.
향후 논문 writing 때 필요한 reference paper로 이용할 목적도 있고, 전반적으로
gene expression과 관련한 연구에 대한 overview를 그려보기 위한 목적도 물론 포함된다.
List는 꾸준히 업데이트 될 예정이다.


Gene expression and protein expression


Gene expression and evolution



Co-expression and protein-protein interaction

Expression profile based classifier

Wednesday, November 19, 2008

Efficient calculation of Correlation coefficient

Pearson's correlation coefficient 를 구하는 공식은 아래와 같이 표현된다.





이 때, 아래와 같이 x, 와 y의 element 각각에 대한 Z-score로 변환하면,




Correlation coeffient 구하는 수식은 새로운 벡터 X와 Y의 곱으로 간단하게 아래와 같이 표현될 수 있다.






Reference : Genome Research, 12, 37

Monday, November 17, 2008

Axis lableling in R

R을 이용해 plotting 하다보면 x,y 축의 label을 default 조건이 아닌,
자신이 원하는 label로 바꾸어 plotting 해야할 때가 생긴다.



>a=1:5
>b=c(1,5,10,50,100)
>plot(a~b,type='l')



위의 plot은 x 축을 b로 하여 대응되는 a의 값을 y축에 나타낸 것이고,
하등의 문제가 없지만, 경우에 따라서는 x축의 단위를 b의 데이터 단위와
일치하게 출력해야할 때가 있다.

다시 말해 b의 데이터 포인트 1,5,10,50,100이 default 옵션에서는
0부터 100단위로 표시된 x 축 위에 5개의 포인트가 숫자 그대로의
스케일로 표현된다. 그러나 이 5개의 데이터 포인트 간의 거리가
표현되기 보다는 각각이 discret 하게 독립적으로 서로 비교가
될 수 있게 같은 거리 상에 표현할 필요가 있을 때가 있는 것.

이럴 때는 아래와 같이 plot의 axes 옵션 그리고 axis 함수를 사용하여
문제를 해결할 수 있다.


>plot(a,type='l',axes=F)
>axis(1,1:5,b)
>axis(2)
>box()

Monday, August 11, 2008

FDR 의 meta-analysis 에 있어서의 유의사항

Bioinformatics에 게제된 논문 에서 저자는FDR 의 무분별(? )하게 사용하면 안 된다는 경종을 울려준다.

특히나 최근 각광받는 Meta-analysis 에서 동일한 FDR을 서로 다른 experiment 에서 DEG를 뽑는데 사용하면 어떤 결과가 초래되는지를 예를 들어 잘 설명하고 있다.

간단하게 FDR = ( 잘못된 예측 횟수)/예측 횟수 의 수식으로 나타낼 수 있다.
T-test 를 통해 얻어진 p-value 0.01를 threshold 로 삼고 아래 예에 대해 FDR 를 계산해 계산해 보자.

Case 1
전체 100개 gene 중, 0.01 을 threshold로 삼았을 때, p-value 0.01 이하인 gene 개수 1개

Case 2
모든 것이 Case 1과 같고, p-value 0.01 이하인 gene 개수가 3개

1번은 FDR = 100*0.01 / 1 = 1 = 100%
2번은 FDR = 100*0.01 / 3 = 1/3 = 33.33%

즉, 같은 기준 ( 이 경우엔 p-value ) 으로 test를 하더라도, data set에 따라, 정확하게는 threshold 기준을 통과하는 gene의 개수에 따라 FDR 이 크게 변화하기 때문에, 서로 다른
experiment에서 수행된 gene expression data에 대해 같은 기준의 FDR threshold 를
적용하면 실제로 각각의 experiment에 대해 서로 다른 기준의 test를 한 것과 같은
결과를 얻을 수 있다는 얘기다.

Monday, August 4, 2008

[CPAN] Math::Counting, Math::Combinatorics

다양한 counting 기법이 implementation 되어 있어, counting 이용한 수식 등에 유용하게 사용할 수 있다.


Math::Counting

$f=factorial(5) # $f=5*4*3*2*1
$c=combination(3,2)
$c=choose(3,2) # $c= 3C2


Math::Combinatorics

@n=qw/a b c/
@p=permute(@n) # @p contains all possible set of permutation of @n
@c=combine(2, @n) # @c conatains all possible set of combination of 2 using @n

Thursday, July 31, 2008

[Regex] '/x' option

Mastering perl에서...




Regex에서 '/x' option은 regex 의 패턴 안의 모든 공백, new line을 무시한다.
즉, regular pattern / / 사이의 expression에 대해 '\S' 와 매치되지 않는 다른 모든 것들을 substitution 한 것과 같은 상태로 패턴을 찾는다.


$string='what is this';
$string=~/w h a t/x;


/x 옵션 없이는 위의 regex과 매치된느 것이 없지만, /x 옵션이 'w h a t' 사이의 공백을 무시하기 때문에 위의 regex은 'what' 과 매치된다.

이런 특성을 이용하면 regex이 길고 복잡한 경우 regex을 readable 한 형태로 깔끔하게 표현할 수 있다.

$string=~/(\s+)\s+\d{3,8}(\.\,)\d{2}\w+\W\n/; 와 같은 복잡하고 알아보기 힘든 정규식이 아래와 같이 읽기 용이한 ( 여전히 복잡해 보이기 하지만 ) 형태로 바뀌어질 수 있다.

$string=~/(\s+)\s+

\d{3,8}
(\.\,)
\d{2}
\w+\W
\n
/x;

Wednesday, July 23, 2008

Silhouette Coefficient

Silhouette coefficient : Clustering evalution 에 널리 사용되는 방법으로 개개의 element에 대한 clustering quality를 측정하는 척도가 된다.

Clustering 결과 각 element의 distance 분포가 아래 그림과 같다고 한다면,


붉은색 element ( ith element )에 대한 silhouette coefficient는 아래와 같은 순서로 구한다.
1. 같은 cluster 안의 모든 element와의 거리의 평균 A(i) 를 구한다.
2. ith element 를 포함하지 않은 다른 모든 cluster 안의 element에 대해, ith element와 가장 가까운 element와의 거리 B(i) 를 구한다.
3. Silhouette coefficient S(i)= (B(i)-A(i)) / max(A(i),B(i))

[CPAN] WWW::Mechanize

때때로 Web-page 의 입력 폼에 query를 던져 그에 대해 프로세싱 된 결과가 필요한 경우가 있다. 문제는 대량의 query에 대해 같은 작업을 반복해야 하는 경우인데, 대여섯번 정도의 반복 정도까지는 처리할 수 있겠지만, 수십 수백번 반복이 필요한 경우라면 자동화하지 않고는 곤란하다.

Large scale data processing이 일상화된 생물학 계열 연구자들은 이런 상황에 매우 빈번하게 노출된다. 예를 들면, 관련된 gene 이나 protein에 대한 BLAST 결과를 얻고자 하는 경우, 관련된 gene set에 대한 web-server의 결과를 얻고자 하는 상황이다. 주변의 연구자들 얘기를 들어보면 실제로 생물학 실험실에서는 이런 작업을 '수작업' 으로 몇일 밤을 세가면서 컨트롤+C, 컨트롤+v 키를 눌러제끼며 web-server의 결과를 정리하는 경우가 있다고 한다.

WWW::Mechanize는 이런 상황에 사용하기에 적합한 perl package다.

기본적인 사용 틀은 아래와 같다.

Use WWW::Mechanize;
my $mech->WWW::Mechanize->new();
my $url='http:// address of your interest';
$mech->get($url);

my $field={

'field1 id'='good',
'field2 id'='bad'

};
my $r=$mech->submit_form(

form_number=>1,
fields=>$field;

);
my $result=shift;
print $result->content;

Wednesday, April 2, 2008

List::Compare

Frequently I confront the situation that I need to compare two array or two hash keys. When I was in the way, I just compared each element of an array to another using 'for statement' .


@array1=qw / a b c d e /;
@array2=qw / a b d e f /;

for $i ( @array1 ){
for $j ( @array2 ){
push @common, $i if $i eq $j ;
}
}



The above conventional code could be reduced as below using List::Compare



$lc = List::Compare->new(\@array1, \@array2);

@intersection = $lc->get_intersection;
@union = $lc->get_union;



List::Compare find a set of common array element by using hash referencing one of array.
The same algorithm List::Compare used could be like below


my %hash_1;
my @common;
$hash_1{$_}++ for @array1;
@common=map{ $hash_1{$_}?$_:()} @array2;


According to my benchmark test, for comparing two arrays size of 10,000, List::Compare took 0.28 sec, hash reference took 0.04 sec and conventional double for statement took 26.93 sec.

Tuesday, March 25, 2008

Microsoft scripting games

I found an interesting thing related to Perl from aero's blog

Annually Microsoft open a competition for script programming
using three languages including Perl. The competition is divided
into two division, beginners and advanced. Of course, the winners
would get prized according to their ranking.

I think I could learn a lot if I participate the competition.
Of course, I can find out how good I am. Can't wait next year!

Monday, March 17, 2008

Planning, studying, working in the way of Agile

How long do you work in a day?
8 hours? 9 hours? 10 hours? or entire day except
6 hours of sleeping?

Then think about what proportion of your working
time you are actually working? efficient? productive?

It might be around 50% or less. If you can stay
entire working time in a efficient mode, you
actually don't need to work in the company now
you are working at because you might be the
guru in the field !!

What I experienced in the Agile training was
that I was so concentrated and efficient
if I controlled the working process.

Planning before actual working with concrete
goal and time limitation. Work with time limitation.
And retrospective thinking after each process.

Since there's time limitation, I was concentrated
on what I need to do without any other thought
taking my brain.

Since there's concrete goal, I, in any form, finally
have a result on it.

And for the retrospective process, I could know
what was problem , what was needed more and what
should be done in the next process.

I think it could change my routine entirely and so my life
if I apply this Agile process to my life.

The first step getting into Agile way,


1. I will plan a day with Agile
2. I will work according to the plan
3. I will retrospect for a day.

Thursday, March 13, 2008

Remove ^M character

When you edit text file created in Windows system,
you sometimes encounter '^M' character at the end of each line
and found you can't remove '^M' because you can't type '^M' character.

The reason why those files contain ^M character is that the new line
character in Windows system '\r\n' while it's '\n' in unix system.

^M can be removed in VIM with below command
( ^M could be typed by cntl+v+enter )


:%s/^M//g

[CPAN] Inline::Files

This module makes multiple virtual files at the end of the code possible.
For example, if it's needed to use __DATA__ and __DATA2__ ,
just include this module as below.


use Inline::Files

Tuesday, March 11, 2008

TDD in Perl

Pair programming in 'Agile software development training ' was stunning experience last week. There are lots of things I learned about Extreme programming. Among them, I thought I could apply TDD in my routine.

I learned it with my pair programmer under Python environment,
my favorite language is per and I think Perl can do what Python do
even through lots of people against it.

Today, I search the CPAN library for test environment of Perl.
Among the test modules for various purposes, I think below
2 modules are enough for me to follow what I learned in the
training course.

Test::Simple
Test::More


Exam code using Test::Simple

use Test::Simple tests=>1; # indicate how many tests in the code
$expect=1;
$result=1;
ok ( $expect eq $result, 'Test1');


Exam code using Test::More


use Test::More qw(no_plan); # Possible not to determine how many tests
$expect=1;
$result=1;
ok ( $expect eq $result, 'Test1')
or is ( $expect eq $result, 'Test1');

TODO: {
ok(foo(),'Todo1");
ok(foo() ,1, "Todo2");
}

sub foo {
return 1;

}

CPAN surfing

Even my favorite programming language is PERL,
I usually didn't search CPAN, a sea of PERL module,
for my work.

When I got back from the 'Agile Bio- and Chem- software
development training course', I changed my mind to
use those usuful modules as many as possible
to improve my daily life !

The first step to use CPAN module is , of course, to
access it. Perl community provides easy way of accessing
CPAN as a module, CPAN.pm

To run CPAN.pm in shell mode,

>perl -MCPAN -e shell

If it's the first time to use it, you need to answer lots of questions.
If you done it, then you can use it to download CPAN module of
your interest.

If you want to install WWW::Robot module, just type it as below

> install WWW::Robot

That's all you have to do to install the CPAN module. Very simple!

VIM Configuration

Recently , I installed Ubuntu on a computer in the lab.
It's been a long time to handle linux configuration files for me.
When I use VI, my favorite text editor, I encountered unusual
VI environment where I can't use cursor keys to move around
the editor. Moreover there's no auto highlighting on syntax
and no auto indentation.

Yes, I needed to configure VIM and I did !
Followings are what I did for make them work in VIM.

1. Make cursor keys work !
  • First, download vim-full !
  • Type ' set nocp ' in command mode of VIM for temporal or in vimrc ( .vimrc for users ) file for permanent setting
2. Auto indentation
  • Insert ' set autoindent ' line in vimrc file

3. Auto highlighting
  • Insert ' syntax on ' line in vimrc file

4. Etc.
  • Rather than what I described above, there are more configuration you can change in configuration file (vimrc file ).
  • Each user can define own configuration file with .vimrc at the home directory

Thursday, January 10, 2008

ID Mapping between Genbank and SwissProt

서로 다른 source의 data를 통합, 분석하기 위해서는
각 DB의 ID 를 mapping하는 작업이 필요하다.
이를 위한 mapping DB를 소개한다.


UniProtPDB 간의 mapping
: http://www.bioinf.org.uk/pdbsws/

UniProt, PDBEC 의 mapping
: http://www.bioinf.org.uk/pdbsprotec/

UniProt, PDB, NCBI 간의 mapping
: http://www.pir.uniprot.org/search/idmapping.shtml

IPI protein cross reference (UniProt-Ensenble-Refseq-GI )
: http://www.ebi.ac.uk/IPI/xrefs.html

NCBI Gene mapping
: NCBI ftp 접속 후, gene/DATA 디렉토리 하의
gene2accession.gz, gene2refseq.gz, gene_refseq_uniprot_collob.gz 등
일련의 파일을 통해 NCBI에 등록된 gene의

-rma accession, gene accession, protein accession 과 이들의 gi
-protein accession 과 uniprot id

등의 관계를 mapping.

하나의 gene은 NCBI에서 rma, gene, protein 으로 나누어 accession id를
가지게 되고, 이들 각각의 고유한 gi 값도 가지게 되는데, 외부의
cross-mapping DATA는 주로 이들 중 하나의 accession id와의 mapping
정보만을 담고 있어, 원하는 DB cross-mapping 을 할 수 없을 때가 많다.

Affymextrix gene chip의 각 probe 와 protein 을 mapping하고자 하는 경우,
affymetrix chip description file과 R의 annaffy 패키지를 통해 제공하는 정보는
NCBI의 'NM_xxxxx' 형태의 NCBI RMA accession ID 인데, Protein DB가 제공하는
mapping 정보는 NP_xxxxx 형태의 NCBI protein accession ID 다.

이를 위해서는 NCBI에서 제공되는 위의 파일들을 다운 받아, RMA와 protein 의
NCBI accession ID를 mapping 하는 작업이 선행되어야 한다.

Wednesday, January 9, 2008

Integrating gene expression data with other biological data

Microarray data 를 이용한 연구가 많이 이뤄져왔고, 이루어지고 있지만, 기술적인 한계 or 생물학적 시스템의 불안정성으로 인해 각 데이터 간의 재연성이 높지 않고, 따라서 신뢰도가 떨어지는 실정이다. 생물학 시스템이 정확히 하나의 expression pattern 그대로 있는 시간은 얼마나 될까? Microarray 실험을 하기 위한 sample을 얻는 시간을 컨트롤하여 정확하게 같은 expression pattern을 재연할 수 있을까?

똑같은 Pancreatic cancer cell에 대한 expression pattern도 cell을 둘러싼 환경에 따라, 시간에 따라 달라진다. 서로 다른 환자에게서 추출된 cancer cell 간의 pattern 이라면 영향을 끼치는 factor들은 더욱 많아지게 된다. Gene expression pattern의 재연성이 떨어지는 것은 이러한 정황을 고려해 볼 때 당연한 결과인지 모른다.

Expression pattern을 통해 목적하는 일 중 대부분이 Biomarker selection 이다. Lung cancer를 일으키는 gene은? Diabetis를 일으키는 gene은? 이런 식으로 찾아낸 gene을 가지고 drug target을 삼고, drug discovery에 돌입하는 traditional research paradigm 이 궁극적인 목적이 된다.

그러나 아이러니하게 gene expression data는 오히려 이런 old paradigm 보다는, 전체적인 expression 양상, 단일한 gene이 아닌 전체적인 gene들의 발현 양상이 서로 어떻게 연관되어 있는지를 연구할 수 있는 new paradigm에 적합하다.

Protein interaction, gene interaction, coexpression analysis 등과의 접목을 통해 expression data를 1차원에서 2차원, 3차원으로 높여 분석할 때, 이런 Global, Local gene expression pattern 뒤에 감춰진 의미를 더욱 잘 이해할 수 있을 것이다.

Thursday, January 3, 2008

은행 적금 금리와 펀드의 수익률

똑같은 이자율이라 하더라도 은행 적금과 펀드의 이자율은
액면 그대로 받아들일 수 없는 간극이 있다.

7%의 이자율로 은행 정기 적금을 들면 월 20만원 납입시
1년 후 붙는 이자는 78,000원이다. (200,000*0.07*13/2)

반면 20만원씩 적립식 펀드에 가입하고 1년 후 누적 수익률이
7%인 경우에 붙은 이자는 168,000원이다. ( 240*0.07 )

그러나, 대개 펀드의 1년 수익률을 얘기할 때의 수익률은
누적 수익률이 아니라, 말 그대로 1년 전의 불입금에 해당하는
수익률이다. 2006년 1월 20만원에 대해 2007년 1월 14,000원의
수익이 발생한 경우 이 펀드의 1년 수익률이 7%라고 얘기한다.

이 기간 동안 펀드의 수익률이 오르락 내리락 했을 경우, 매달
불입한 20만원에 대한 수익률은 각기 다르고, 전체 불입금에
대한 누적 수익률은 7%가 한참 못 미칠 수도 있고, 한참
위일 수도 있다.