[RNA-seq]

# log2 fold change

" " 2023. 11. 17. 19:42

이번에 전사체 데이터 분석을 진행해보면서 개인적으로 공부했던 부분들, 분석 과정 등을 하나씩 올려보려고 합니다. 원래 자주 하던 분석이 아니라 중간중간 틀린 부분이 있을 수 있는데 댓글로 수정해주시면 바로 반영하겠습니다.

 

아직 소개하지 않았지만 reference genome 에 시퀀싱 결과 얻은 reads 를 mapping 하면, 각 유전자를 정량할 수 있습니다.

 

각 유전자를 정량하여 샘플 간에 결과를 수행할 수 있는데 일반적으로 DEG 분석 (differentially expressed gene) 을 진행하게 됩니다. 그러면 RNA-seq 분석에서 주로 만날 수 있는 volcano plot 을 그릴 수 있는데요, 아래의 그림을 보시면 특별히 색깔로 표시된 점 (유전자) 들이 있습니다. 

 

그것은 엄청나게 많은 전사체 데이터 중에서, 통계적인 기준선을 설정하여 유의하다고 판단되는 것들만 표시한 것 입니다. 일반적으로 y 축은 FDR p-value <= 0.05 에 대한 값에 로그를 씌워서 보기 좋은 수로 나타냅니다. FDR p-value 에 대한 글은 포스팅한 적이 있으니 알고 있다고 가정하고 x 축의 log2 fold change 에 대해 알아보겠습니다.

 

 

https://scienceparkstudygroup.github.io/rna-seq-lesson/06-differential-analysis/index.html

 

 

1. fold change

 

fold change (FC) 란, FC = condition1 / condition2 의 공식으로 계산됩니다.

 

    1)

 

간단하면서 괜찮은 방법인 것 처럼 보이지만, 가장 큰 문제점은 condition2 에 0 이 들어갈 때 입니다. 분모에 0 이 들어간다는 것은 그 값을 계산하는데 있어서 상당히 큰 걸림돌이며, 더 큰 문제는 0 값을 갖는 데이터가 상당히 많다는 것입니다.

 

RNA-seq 결과 우리가 보게 되는 데이터에는 (어떤 대상에서 추출하였는지에 따라 다르지만) 일반적으로 수만개의 유전자가 포함되어 있으며 그 중에서 실험군에서 잡히지만 대조군에서 잡히지 않는 유전자들에는 모두 0 이 들어가게 됩니다.

 

사실, 마이크로바이옴 데이터에서도 이와 같은 문제가 나타납니다. 유전자 만큼 많다고 할수는 없지만 feature level 까지 내려가면 적어도 몇 백개의 feature 가 확인되고, 그 중 많은 것들이 특정 샘플에서 0을 나타내기 때문입니다.

 

해결 방법은 여러가지겠지만, 아주 작은 수를 더함으로써 0 이 분모로 위치하는 것을 막기도 합니다. 

 

    2)

 

또한, 위의 그림을 보면 0을 기준으로 대칭을 이루는 방식이 상당히 안정적이라는 것을 알 수 있습니다. 그런데 기존 FC 계산에 따르면 "두 그룹에 차이가 없다" 를 뜻하는 값은 0 이 아니라 1이 됩니다.

 

이는 이후 데이터를 정리하거나 시각화하는데 있어서 상당히 불편한 부분이 될 수 있습니다.

 


 

2) log2 fold change

 

사실 log2 fold change 로 변환하여도 위에서 분모의 0이 들어갔을때의 문제는 해결할 수 없습니다. 그럼에도 log2 fold change 를 사용하는 이유는 그것이 실용적이기 때문입니다. log2 fold change 는 아래와 같이 정의됩니다.

 

Log2FC = log2(condition1/condition2)  / Log2FC = log2(condition1) - log2(condition2)

 

    1)

 

위의 2) 에 있는 계산 값의 비대칭이 해결됩니다. log2(1) 은 0 이 되므로, "두 그룹 간에 차이가 없다" 라는 것을 0 으로 나타낼 수 있고 0을 기준으로 대칭되는 시각화는 직관적인 해석에 많은 도움이 됩니다.

 

 

    2)

 

그러면, 이런 질문을 할 수 있습니다. log2(1) 나 log10(1) 이나 모두 0 인데, 꼭 log2 를 사용하는 이유가 있을까요? 명확한 답이 있는 질문은 아니지만 제 생각에는 log2 가 적당하기 때문인 것 같습니다.

 

log2 를 사용하면 log2(2), log2(4), log2(1/2) 등 계산했을 때 1, 2, -1 등 딱 떨어지는 값으로 2^1 배, 2^2배, 2^-1 배 더 많고 적음을 직관적으로 알 수 있습니다. 분명 log10 을 사용하면 10^1, 10^2 등의 값을 얻을 수 있겠지만 이는 그 사이의 차이가 너무 광범위하기 때문에 비교를 위한 계산에서 비효율적일 수 있습니다.

 

이런 경험적인 사실들을 바탕으로 log2 를 사용하는 것이 가장 적당하다고 결론나지 않았을까 싶습니다만, 저도 정확한 이유를 찾지는 못했습니다.

 

 

Log2FC = log2(condition1/condition2)

 

그러면 직접 수식을 계산해보기 위해서 condition1 에 어떤 값이 들어가는지 알고 싶습니다. 대충 생각해봤을때는 전체 합으로 나누는 등의 정규화를 통해서 정량하지 않을까 싶은데요, 다음 포스팅에서 정규화하는 다양한 방법에 대해 알아보겠습니다.