# 09. 한 샘플의 pathway 활성도 보기

> 한 샘플의 유전자 발현 순위를 ssGSEA로 계산해 특정 pathway 유전자들이 발현 상단에 함께 모이는지 해석한다.

유전자 하나가 튀는지만 보면 종양에서 **어떤 생물학적 프로그램이 함께 작동하는지** 놓칠 수 있습니다. 관련 유전자 여러 개의 발현 순위를 묶으면 한 샘플에서도 pathway 활성도를 비교할 수 있습니다.

> **이 수업의 질문**: 특정 pathway의 유전자들이 이 샘플에서 함께 높게 발현되는가?

검색 결과의 상위 문서에 특정 태그가 계속 나타나는지 검사하는 알고리즘과 닮았습니다. 유전자를 발현량으로 정렬한 뒤, 위에서부터 스캔하면서 대상 gene set의 멤버를 만나면 점수를 올립니다.

```python
ranked_genes = sort_by_expression(sample, descending=True)
running_score = 0

for gene in ranked_genes:
    running_score += hit_weight(gene) if gene in gene_set else miss_penalty
```

실제 ssGSEA는 순위와 가중치, 정규화 규칙을 더 사용하지만, **정렬 → 멤버십 검사 → 누적 점수**라는 제어 흐름은 이 코드로 잡을 수 있습니다.

## 1. 한 샘플로 할 수 있는 분석

발현량 행렬이 나오면, 한 샘플만으로도 [아웃라이어 탐색](/lessons/rna-seq-analysis/)을 넘어 유전자 여러 개가 함께 만드는 신호를 볼 수 있습니다.

- **ssGSEA**: 어떤 **생물학적 프로그램(pathway)** 이 이 샘플에서 활성화돼 있나?
- **차원축소(UMAP)**: 이 샘플은 **어떤 샘플들과 비슷한가?**

### ssGSEA: 개별 pathway가 얼마나 켜져 있나

**ssGSEA**(single-sample Gene Set Enrichment Analysis)는 **한 샘플 안에서** 특정 [pathway](/lessons/pathway/)와 관련된 유전자들이 얼마나 함께 높은지 점수로 매깁니다. 분석에서는 pathway를 **유전자 집합(gene set)** 으로 표현합니다(예: `HP_OSTEOSARCOMA` = CDKN2A·TP53·MDM2·RB1·RPL/RPS 계열 등).

입력과 출력의 shape도 바뀝니다.

> **유전자 × 샘플 발현량 행렬 + pathway별 유전자 집합 → pathway × 샘플 점수 행렬**

유전자 수만 개짜리 열 하나가 pathway 수백~수천 개의 점수로 요약됩니다. 따라서 어떤 유전자가 점수를 만들었는지 세부 정보가 압축되고, 서로 유전자를 공유하는 pathway의 점수는 독립적이지 않을 수 있습니다.

계산 원리는 **순위 기반 누적 점수**입니다.

1. 샘플 안 모든 유전자를 **발현량 높은 순**으로 정렬한다.
2. 위에서부터 하나씩 내려가며, 그 유전자가 대상 pathway에 **속하면 점수를 올리고**, 아니면 **내린다**.
3. 이 누적 점수가 가장 크게 벌어진 지점을 **enrichment score**로 쓴다.

즉 **pathway 유전자들이 발현 상위에 많이 몰려 있을수록 높은 점수**가 됩니다. R에서는 `GSVA` 패키지로 계산합니다.

ssGSEA와 달리 여러 샘플의 조건 차이를 보는 일반 GSEA는 [GSE251845 실습의 전체 유전자 순위 분석](/practice/colorectal-go-gsea-gse251845/#4-전체-유전자-순위로-gsea-실행하기)에서 실행합니다. 둘 다 순위를 따라 누적 점수를 계산하지만, 입력과 답하는 질문은 다릅니다.

```r
library(GSVA)
gsva_param <- ssgseaParam(
  exprData = combined_mat,   # 유전자 x 샘플 발현량 행렬
  geneSets = gene_sets,      # pathway별 gene set
  alpha = 0.25, normalize = TRUE
)
ssgsea_scores <- gsva(gsva_param)
```

여기에 GTEx(정상)·EBI/PCAWG(암) 같은 **레퍼런스 코호트**를 함께 넣고 비교하면, 내 샘플의 pathway 활성도가 **정상·다른 암 대비 어디쯤인지** 보입니다.

![골육종 gene set ssGSEA 점수: 내 샘플(Tempus·Boston)이 GTEx 정상·EBI 암 분포 대비 높게 위치](/images/lessons/sam-and-bulk-rna/ssgsea-osteosarcoma.png)

*`HP_OSTEOSARCOMA` 유전자 집합의 ssGSEA 점수 분포. GTEx 정상·근육·EBI 암 코호트의 상자그림 위로, 내 종양 샘플(My Tempus·My Boston, 삼각형)이 더 높게 찍혀 골육종 관련 프로그램이 상대적으로 더 활성화돼 있음을 보여준다.*

## 정리

ssGSEA는 한 샘플의 유전자를 발현량 순서로 세운 뒤, 특정 pathway의 유전자들이 위쪽에 함께 모이는지 점수로 나타냅니다.

> **유전자별 발현 순위 + pathway 유전자 집합 → 순위 누적 점수 → 샘플별 pathway 활성도**

점수는 절대적인 활성·비활성 판정이 아닙니다. 같은 방식으로 계산한 정상조직과 다른 암의 점수 분포에 놓고 상대적인 위치를 봅니다.

다음 [발현이 비슷한 샘플 찾기](/lessons/rna-sample-similarity/)에서는 유전자 전체 패턴이 어떤 암·조직 샘플과 가까운지 확인합니다.