데이터 과학

UPGMA 계통수 본문

생명정보학 & 화학정보학/바이오파이썬

UPGMA 계통수

티에스윤 2023. 5. 28. 17:40

UPGMA는 "Unweighted Pair Group Method with Arithmetic Mean"의 약자로, 계통 분석에서 사용되는 클러스터링 알고리즘입니다. UPGMA는 분자 생물학, 계통학, 유전학 등 다양한 분야에서 종간의 유사성을 분석하고 계통수를 구성하는 데에 활용됩니다.

UPGMA 알고리즘은 다음과 같은 절차로 계통수를 생성합니다:

1. 입력 데이터 준비: 유사성 행렬을 사용하여 종 또는 개체 간의 유사성을 표현합니다. 일반적으로 거리 행렬이 사용되며, 거리는 종 또는 개체 간의 유사성을 측정하는 방법에 따라 계산됩니다.

2. 초기 클러스터 생성: 각 종 또는 개체는 개별적인 클러스터로 간주됩니다.

3. 클러스터 간 거리 계산: 모든 클러스터 쌍 간의 거리를 계산합니다. 일반적으로 클러스터 간 거리는 유사성 행렬에서 얻은 종 또는 개체 간 거리의 평균으로 정의됩니다.

4. 가장 가까운 클러스터 병합: 가장 가까운 두 클러스터를 선택하고, 이를 하나의 클러스터로 병합합니다. 새로운 클러스터의 거리는 병합된 클러스터 간의 거리로 설정됩니다.

5. 클러스터 갱신: 클러스터 간 거리 행렬을 업데이트하여 새로운 클러스터를 포함하고, 이전 클러스터 간의 거리를 조정합니다.

6. 클러스터가 하나의 종 또는 개체로 축소될 때까지 3~5 단계를 반복합니다.

UPGMA 알고리즘은 클러스터 간 거리의 평균을 사용하기 때문에, 클러스터 크기가 커질수록 오차가 누적되는 경향이 있습니다. 따라서 UPGMA는 대체로 상대적으로 작은 데이터셋이나 균일한 변화율을 가지는 데이터셋에서 더 잘 작동합니다. 큰 규모의 데이터셋이나 불균형한 변화율을 가지는 데이터셋의 경우에는 다른 계통 추정 방법을 사용하는 것이 더 적절할 수 있습니다.

 

다음은 UPGMA 계통수를 생성하기 위한 간단한 바이오 파이썬 코드입니다. 이 코드는 거리 행렬과 관련된 작업에 대한 입력이 있다고 가정합니다. 거리 행렬은 NumPy 배열로 표현되며, 계통수는 트리 구조로 반환됩니다.

import numpy as np
from scipy.cluster import hierarchy

def upgma(dist_matrix):
    # 거리 행렬을 복사하여 계산에 사용
    dist_array = dist_matrix.copy()

    # 계통수 계산
    linkage_matrix = hierarchy.upgma(dist_array)

    # linkage_matrix를 계통수로 변환하여 반환
    tree = hierarchy.to_tree(linkage_matrix, rd=False)

    return tree


이 코드에서 dist_matrix는 NumPy 배열로 표현된 거리 행렬입니다. 거리 행렬은 종 또는 개체 간의 거리를 나타내는 대칭 행렬이어야 합니다. hierarchy.upgma 함수는 UPGMA 알고리즘을 사용하여 linkage matrix를 생성합니다. 그리고 hierarchy.to_tree 함수는 linkage matrix를 계통수로 변환하여 반환합니다.

이 코드는 scipy 패키지의 cluster.hierarchy 모듈을 사용합니다. 따라서 해당 모듈이 설치되어 있어야 합니다. scipy 패키지가 설치되어 있지 않은 경우, pip install scipy 명령을 사용하여 설치할 수 있습니다.

이 코드를 사용하여 UPGMA 계통수를 생성할 때는 거리 행렬을 적절하게 준비해야 합니다. 거리 행렬을 만드는 방법은 데이터의 유사성을 측정하는 방법에 따라 다를 수 있습니다. 거리 행렬을 생성하는 방법은 분석하려는 데이터와 연구 목적에 따라 결정되어야 합니다.

이 코드는 간단한 예시를 위한 것이며, 더 복잡한 데이터나 다른 요구 사항에 따라 코드를 수정해야 할 수 있습니다.


'생명정보학 & 화학정보학 > 바이오파이썬' 카테고리의 다른 글

Kaggle에서 서열 정렬과 계통수  (0) 2022.11.01
Kaggle에서 바이오파이썬  (1) 2022.09.20
KEGG  (0) 2022.08.10
바이오파이썬 서열정렬 예제  (0) 2022.08.03
phylip 계통수  (0) 2022.04.29