31 분 소요

1. 24챕터는 무엇을 하려는 장인가요?

24챕터는 23장에서 만든 STAR count 결과를 사용해 차등 발현 분석을 수행하는 장입니다. 차등 발현 분석은 두 조건 사이에서 발현량이 달라진 유전자를 찾는 분석입니다.

예를 들어 WT, 즉 정상형 샘플 3개와 atrx1 변이체 샘플 3개가 있다고 해봅시다. 어떤 유전자는 WT에서는 낮게 발현되는데 atrx1에서는 높게 발현될 수 있습니다. 반대로 어떤 유전자는 atrx1에서 낮아질 수 있습니다. 차등 발현 분석은 이런 유전자를 통계적으로 찾습니다.

24장은 VS Code의 Jupyter Notebook 환경에서 PyDESeq2를 사용합니다. PyDESeq2는 R의 유명한 DESeq2 방법을 Python에서 사용할 수 있게 만든 패키지입니다.

한 문장으로 요약하면 이렇습니다.

“유전자별 read count 표와 샘플 조건표를 입력해, 조건 간 발현량 차이가 유의한 유전자를 찾고 시각화하는 장입니다.”

차등 발현 분석의 큰 흐름


2. Jupyter Notebook은 왜 쓰나요?

Jupyter Notebook은 코드, 실행 결과, 표, 그림, 설명 글을 한 문서 안에 함께 담을 수 있는 환경입니다. 분석 과정에서는 매우 유용합니다. 왜냐하면 생명정보학 분석은 한 번에 완성된 프로그램을 실행하는 일이라기보다, 데이터를 확인하고, 조금 처리하고, 중간 결과를 보고, 그래프를 그려 해석하는 과정이 많기 때문입니다.

노트북에서는 한 셀에서 데이터를 읽고, 다음 셀에서 표를 확인하고, 다음 셀에서 필터링하고, 다음 셀에서 그래프를 그릴 수 있습니다. 중간중간 설명을 적어두면 나중에 자신이나 다른 사람이 분석 흐름을 이해하기 쉽습니다.

VS Code에서 Jupyter 확장을 설치하고 .ipynb 파일을 만들면 이런 노트북 환경을 사용할 수 있습니다. 중요한 것은 커널을 올바른 conda 환경, 여기서는 bioinfo 환경으로 선택하는 것입니다. 패키지를 bioinfo 환경에 설치했는데 노트북 커널이 다른 Python을 바라보면 ModuleNotFoundError가 날 수 있습니다.


3. 카운트 행렬이란 무엇인가요?

차등 발현 분석의 입력은 보통 count matrix, 즉 카운트 행렬입니다. 행렬이라고 해서 겁먹을 필요는 없습니다. 그냥 숫자 표입니다.

행은 유전자입니다. 열은 샘플입니다. 각 칸의 숫자는 해당 유전자에 매핑된 read 수입니다.

카운트 행렬은 유전자 × 샘플 표입니다

예를 들어 geneA의 WT1 count가 123이고 mut1 count가 300이라면, mut1 샘플에서 geneA에 해당하는 read가 더 많이 관찰되었다는 뜻입니다. 다만 read 수가 많다고 바로 “진짜 발현이 증가했다”고 말할 수는 없습니다. 샘플마다 전체 시퀀싱 양이 다를 수 있고, 유전자마다 변동성이 다르며, 생물학적 반복 사이의 차이도 고려해야 합니다.

그래서 DESeq2는 단순히 평균 count만 비교하지 않습니다. 라이브러리 크기를 보정하고, 유전자별 분산을 추정하고, 통계 검정을 수행합니다.


4. ReadsPerGene.out.tab 파일들을 어떻게 count matrix로 바꾸나요?

23장에서 STAR는 샘플마다 ReadsPerGene.out.tab 파일을 만들었습니다. 24장에서는 여러 샘플의 이 파일들을 읽어서 하나의 count matrix로 합칩니다.

원문 코드의 핵심은 다음과 같습니다.

counts_dict = {}
for sample in samples:
    filepath = f"star_output/{sample}/ReadsPerGene.out.tab"
    df = pd.read_csv(filepath, sep="\t", header=None, skiprows=4,
                     names=["gene_id", "unstranded", "forward", "reverse"])
    counts_dict[sample] = df.set_index("gene_id")["unstranded"]

counts_df = pd.DataFrame(counts_dict)

이 코드는 샘플마다 count 파일을 읽고, gene_id를 기준으로 unstranded count를 뽑아 counts_dict에 저장합니다. 그리고 마지막에 pd.DataFrame(counts_dict)로 유전자 × 샘플 표를 만듭니다.

여기서 skiprows=4가 중요한 이유는 ReadsPerGene.out.tab의 처음 4줄이 유전자 count가 아니라 통계 요약 줄이기 때문입니다. 이 줄들을 건너뛰어야 실제 유전자별 count만 표로 읽을 수 있습니다.

df.set_index("gene_id")는 gene_id 열을 행 이름으로 쓰겠다는 뜻입니다. 이렇게 해야 gene_id를 기준으로 여러 샘플의 count를 잘 맞출 수 있습니다.


5. 메타데이터는 샘플의 설명표입니다

count matrix만으로는 차등 발현 분석을 할 수 없습니다. 각 샘플이 어떤 조건에 속하는지 알아야 합니다. 이 정보를 담은 표가 metadata입니다.

예를 들어 다음 코드를 봅시다.

metadata = pd.DataFrame({
    "sample": samples,
    "condition": ["WT", "WT", "WT", "atrx1", "atrx1", "atrx1"]
})
metadata = metadata.set_index("sample")

이 표는 각 샘플이 WT인지 atrx1인지 알려줍니다. PyDESeq2는 count matrix와 metadata를 함께 보고, 조건 간 차이를 분석합니다.

메타데이터와 design의 역할

여기서 중요한 점은 count matrix의 샘플 이름과 metadata의 index가 정확히 맞아야 한다는 것입니다. count matrix에는 SRR4420293이라는 열이 있는데 metadata에는 그 샘플 이름이 없으면 분석이 제대로 되지 않습니다.

초보자는 metadata를 “샘플 명찰표”라고 생각하면 됩니다. count matrix가 숫자만 담은 표라면, metadata는 그 숫자들이 어떤 실험 조건에서 나왔는지 알려주는 표입니다.


6. 낮은 count 유전자를 왜 필터링하나요?

원문에서는 모든 샘플에서 총 count가 10 이상인 유전자만 남깁니다.

genes_to_keep = counts_df.sum(axis=1) >= min_counts
counts_filtered = counts_df[genes_to_keep]

발현량이 너무 낮은 유전자는 통계적으로 안정적인 판단이 어렵습니다. 예를 들어 어떤 유전자의 count가 모든 샘플에서 0, 1, 0, 2 정도라면 조건 간 차이를 말하기 어렵습니다. 아주 작은 숫자는 우연한 잡음에 크게 흔들릴 수 있습니다.

필터링은 분석을 속이려는 과정이 아니라, 의미 있는 검정을 위해 너무 정보가 부족한 항목을 제외하는 과정입니다. 물론 필터링 기준은 분석 목적에 따라 달라질 수 있습니다. 입문 단계에서는 “count가 거의 없는 유전자는 분석 신뢰도를 떨어뜨릴 수 있어서 먼저 제외한다”고 이해하면 됩니다.


7. design="~condition"은 무슨 뜻인가요?

PyDESeq2에서 DeseqDataSet을 만들 때 다음과 같은 코드가 나옵니다.

dds = DeseqDataSet(
    counts=counts_filtered.T,
    metadata=metadata,
    design="~condition"
)

여기서 design="~condition"은 condition이라는 변수에 따라 발현량 차이를 분석하겠다는 뜻입니다. condition은 metadata에 있는 열 이름입니다. 이 예제에서는 WT와 atrx1이라는 조건이 들어 있습니다.

counts=counts_filtered.T에서 .T는 표를 전치한다는 뜻입니다. 원래 counts_filtered는 유전자가 행, 샘플이 열입니다. 하지만 PyDESeq2는 샘플이 행, 유전자가 열인 형태를 요구합니다. 그래서 행과 열을 바꾸는 것입니다.

이 부분은 초보자가 자주 헷갈립니다. 간단히 기억하면 됩니다.

  • 사람이 보기 편한 count matrix: 유전자 × 샘플
  • PyDESeq2가 원하는 입력: 샘플 × 유전자
  • 그래서 .T로 뒤집습니다.

8. DESeq2는 내부에서 무엇을 하나요?

원문에서는 다음 한 줄로 핵심 분석이 실행됩니다.

dds.fit()

이 한 줄 안에서 여러 통계 과정이 일어납니다. 초보자가 수식을 모두 알 필요는 없지만, 무엇을 하려는지는 이해하는 것이 좋습니다.

첫째, size factor를 계산합니다. 샘플마다 전체 read 수가 다를 수 있습니다. 어떤 샘플은 시퀀싱이 많이 되어 전체 count가 크고, 어떤 샘플은 적게 되어 전체 count가 작을 수 있습니다. 이 차이를 보정해야 유전자 발현량 비교가 공정해집니다.

둘째, 분산을 추정합니다. 같은 조건의 생물학적 반복 샘플들도 완전히 같지는 않습니다. 유전자마다 변동성도 다릅니다. DESeq2는 유전자별 count가 얼마나 흔들리는지 추정합니다.

셋째, 음이항 분포 기반 모델을 사용해 조건 간 차이를 검정합니다. RNA-seq count는 단순한 연속값이 아니라 read 개수입니다. 그래서 일반적인 평균 비교보다 count 데이터에 맞는 모델이 필요합니다.

여기서 중요한 감각은 이것입니다.

DESeq2는 단순히 WT 평균과 mutant 평균을 빼는 것이 아니라, 샘플별 시퀀싱 양과 유전자별 변동성을 고려해 차이를 판단합니다.


9. contrast는 비교 방향을 정하는 옵션입니다

통계 검정을 수행할 때 다음 코드가 나옵니다.

stat_res = DeseqStats(dds, contrast=["condition", "atrx1", "WT"])

이 contrast는 “condition 열에서 atrx1을 WT와 비교하라”는 뜻입니다. 이 방향은 log2FoldChange 해석에 중요합니다.

["condition", "atrx1", "WT"]라고 하면 보통 atrx1 대비 WT, 즉 atrx1이 WT에 비해 얼마나 높은지 또는 낮은지를 보는 방향입니다. 따라서 log2FoldChange가 양수이면 atrx1에서 더 높게 발현된 것으로 해석하고, 음수이면 atrx1에서 더 낮게 발현된 것으로 해석합니다.

분석 결과를 해석할 때 “어느 그룹을 기준으로 어느 그룹이 증가했는가?”를 반드시 확인해야 합니다. 방향을 반대로 지정하면 log2FoldChange 부호도 반대로 바뀝니다.


10. 결과표의 핵심 열 읽기

PyDESeq2 결과표에는 여러 열이 나옵니다. 입문 단계에서 특히 중요한 것은 baseMean, log2FoldChange, pvalue, padj입니다.

DESeq2 결과표 핵심 열

baseMean은 해당 유전자의 평균 발현량입니다. 정확히는 정규화된 count의 평균으로 이해하면 됩니다. 값이 너무 낮으면 해석이 불안정할 수 있습니다.

log2FoldChange는 두 조건 사이의 발현량 변화 크기입니다. log2라는 형태를 쓰기 때문에 해석이 처음에는 어색할 수 있습니다. log2FoldChange = 1이면 대략 2배 증가입니다. log2FoldChange = -1이면 대략 절반으로 감소입니다. log2FoldChange = 2이면 4배 증가입니다. log2FoldChange = -2이면 4분의 1 수준으로 감소입니다.

pvalue는 관찰된 차이가 우연히 나왔을 가능성과 관련된 값입니다. 작을수록 우연으로 보기 어렵다는 뜻입니다.

padj는 adjusted p-value, 즉 보정된 p값입니다. RNA-seq에서는 수천 개, 수만 개 유전자를 동시에 검정합니다. 이렇게 많은 검정을 하면 우연히 유의해 보이는 유전자가 생길 수 있습니다. 그래서 다중검정 보정을 한 값인 padj를 주로 봅니다.


11. padj < 0.05|log2FC| > 1은 어떤 기준인가요?

원문에서는 유의한 차등 발현 유전자를 다음 조건으로 고릅니다.

significant = results_df[
    (results_df["padj"] < 0.05) &
    (abs(results_df["log2FoldChange"]) > 1)
]

padj < 0.05는 통계적으로 유의한 차이를 보겠다는 기준입니다. 보정된 p값이 0.05보다 작으면, 여러 유전자를 동시에 검정했다는 점을 고려해도 의미 있는 차이일 가능성이 높다고 보는 것입니다.

abs(log2FoldChange) > 1은 변화 크기가 충분히 큰 유전자를 보겠다는 기준입니다. 절댓값을 쓰는 이유는 증가와 감소를 모두 포함하기 위해서입니다. log2FC > 1이면 2배 넘게 증가한 유전자, log2FC < -1이면 2배 넘게 감소한 유전자입니다.

즉 이 조건은 다음 두 기준을 동시에 만족하는 유전자를 고르는 것입니다.

  1. 통계적으로 믿을 만한가요?
  2. 변화 크기도 충분히 큰가요?

통계적으로 유의하지만 변화 크기가 아주 작은 유전자도 있을 수 있고, 변화 크기는 커 보이지만 샘플 변동이 커서 통계적으로 불안정한 유전자도 있을 수 있습니다. 그래서 두 기준을 함께 사용합니다.


12. Volcano plot은 어떻게 읽나요?

Volcano plot은 차등 발현 분석 결과를 한눈에 보여주는 대표적인 그림입니다. 각 점은 유전자 하나입니다. x축은 log2FoldChange, y축은 -log10(padj)입니다.

Volcano plot의 읽는 법

오른쪽으로 갈수록 비교 대상 조건에서 더 많이 발현된 유전자입니다. 왼쪽으로 갈수록 더 적게 발현된 유전자입니다. 위로 갈수록 통계적으로 더 유의한 유전자입니다.

그래서 오른쪽 위에 있는 점들은 유의하게 상향 조절된 유전자 후보입니다. 왼쪽 위에 있는 점들은 유의하게 하향 조절된 유전자 후보입니다. 가운데 아래쪽에 모여 있는 점들은 변화가 작거나 통계적으로 유의하지 않은 유전자들입니다.

Volcano라는 이름은 점들이 화산 모양처럼 양쪽 위로 퍼지는 형태를 보이기 때문에 붙었습니다.


13. MA plot은 무엇을 보여주나요?

MA plot은 평균 발현량과 변화량의 관계를 보여줍니다. x축은 평균 발현량, y축은 log2FoldChange입니다.

MA plot은 평균 발현량과 변화량을 함께 봅니다

MA plot에서 중요한 것은 발현량이 낮은 유전자의 변화량이 더 흔들릴 수 있다는 점입니다. count가 매우 적으면 작은 차이도 log2FoldChange로는 크게 보일 수 있습니다. 반대로 평균 발현량이 높은 유전자는 변화량 추정이 비교적 안정적인 경우가 많습니다.

이 그림은 “유전자들이 전체적으로 한쪽으로 치우쳐 있지는 않은지”, “낮은 발현량 영역에서 변화량이 과하게 튀는지”, “특정 발현량 구간에서 이상한 패턴이 있는지”를 확인하는 데 도움이 됩니다.


14. 히트맵은 무엇을 보여주나요?

히트맵은 여러 유전자와 여러 샘플의 발현 패턴을 색으로 보여주는 그림입니다. 행은 유전자, 열은 샘플입니다. 색은 상대적으로 발현이 높은지 낮은지를 나타냅니다.

히트맵은 발현 패턴을 색으로 압축해 보여줍니다

히트맵을 볼 때는 개별 숫자보다 패턴을 봅니다. WT 샘플끼리 비슷한 색 패턴을 보이고, atrx1 샘플끼리 다른 색 패턴을 보인다면 조건별 발현 차이가 있다고 볼 수 있습니다.

원문에서는 상위 50개의 유의한 유전자를 골라 log2 변환 후 Z-score 정규화를 합니다. Z-score 정규화는 각 유전자별로 샘플 간 상대적 높고 낮음을 보기 쉽게 만드는 과정입니다. 즉 절대 count 크기보다 “이 유전자가 어떤 샘플에서 상대적으로 높고 낮은가?”를 보려는 것입니다.


15. 결과 저장은 왜 중요한가요?

분석 결과를 화면에서 보는 것만으로는 충분하지 않습니다. 원문에서는 전체 결과와 유의한 유전자 결과를 CSV 파일로 저장합니다.

results_df.to_csv("deseq2_results_all.csv")
significant.to_csv("deseq2_results_significant.csv")

이렇게 저장해야 나중에 다시 확인하거나, 보고서에 사용하거나, 후속 분석에 넘길 수 있습니다. 예를 들어 유의한 상향 조절 유전자 목록과 하향 조절 유전자 목록을 따로 저장하면 GO 분석, KEGG pathway 분석, GSEA 같은 후속 분석에 사용할 수 있습니다.

생명정보학 분석에서 “파일로 남기는 습관”은 매우 중요합니다. 노트북 화면에만 결과가 있으면 나중에 재현하거나 공유하기 어렵습니다.


16. 작은 숫자로 차등 발현 결과를 읽는 연습

24챕터에서는 결과표의 숫자를 읽는 힘이 중요합니다. 복잡한 통계 계산을 직접 유도할 필요는 없지만, 다음 정도는 손으로 판단할 수 있어야 합니다.

첫째, log2FoldChange는 “2를 몇 번 곱했는가”로 읽습니다.

log2FoldChange 직관적 해석
1 약 2배 증가
2 약 4배 증가
-1 약 절반으로 감소
-2 약 1/4로 감소

둘째, padj는 여러 유전자를 동시에 검사했을 때 생기는 우연한 발견을 보정한 값입니다. 정확히는 “차이가 우연히 생겼을 확률 그 자체”라고 말하면 위험합니다. 초보자 단계에서는 padj가 작을수록 우연만으로 보기 어려운 신호라고 이해하면 됩니다.

셋째, 기준은 보통 하나만 보지 않습니다. 예를 들어 padj < 0.05이면서 |log2FC| > 1이라는 기준은 “통계적으로도 어느 정도 믿을 만하고, 변화 크기도 충분한 유전자”를 고르려는 필터입니다.

예를 들어 다음 결과가 있다고 합시다.

GeneA: padj=0.03, log2FC=1.2
GeneB: padj=0.10, log2FC=2.5
GeneC: padj=0.01, log2FC=0.4

padj < 0.05|log2FC| > 1을 동시에 만족하는 것은 GeneA뿐입니다. GeneB는 변화 크기는 크지만 보정 p-value 기준을 통과하지 못했고, GeneC는 통계적으로는 유의하지만 변화 크기가 작습니다.

넷째, count matrix의 방향도 중요합니다. 유전자 100개 × 샘플 6개 표를 .T로 전치하면 샘플 6개 × 유전자 100개 표가 됩니다. PyDESeq2처럼 특정 방향을 요구하는 도구에서는 이 전치가 매우 중요합니다.

17. 24챕터 들어가기 전 최소 체크리스트

24장을 읽기 전에 다음 질문에 답할 수 있으면 좋습니다.

  • Jupyter Notebook은 왜 분석 과정에 유용한가요?
  • count matrix는 어떤 모양의 표인가요?
  • ReadsPerGene.out.tab의 처음 4줄을 왜 건너뛰나요?
  • metadata는 무엇이며 왜 필요한가요?
  • count matrix의 샘플 이름과 metadata의 샘플 이름이 맞아야 하는 이유는 무엇인가요?
  • 낮은 count 유전자를 필터링하는 이유는 무엇인가요?
  • design="~condition"은 무엇을 기준으로 분석하겠다는 뜻인가요?
  • contrast=["condition", "atrx1", "WT"]에서 비교 방향은 왜 중요한가요?
  • baseMean, log2FoldChange, pvalue, padj는 각각 무엇인가요?
  • padj < 0.05|log2FC| > 1을 함께 쓰는 이유는 무엇인가요?
  • Volcano plot, MA plot, heatmap은 각각 무엇을 보여주나요?

이 질문들이 이해된다면 24장의 코드는 단순한 Python 문법이 아니라, RNA-seq count 데이터를 생물학적 해석으로 바꾸는 분석 흐름으로 보일 것입니다.


문제 풀이

주피터 노트북 기반 차등 발현 분석

0 / 32
Gemini AI 채점

주관식 답안은 Gemini API로 채점합니다. API 키는 이 브라우저에만 저장됩니다.

API KEY 미등록
  1. 1. [쉬움] 객관식

    24챕터의 핵심 목표로 가장 적절한 것을 고르라.

    선택지
  2. 2. [쉬움] 객관식

    count matrix의 행과 열에 대한 설명으로 가장 적절한 것을 고르라.

    선택지
  3. 3. [쉬움] 객관식

    metadata 표의 역할로 가장 적절한 것을 고르라.

    선택지
  4. 4. [쉬움] 객관식

    낮은 count 유전자를 필터링하는 이유로 가장 적절한 것을 고르라.

    선택지
  5. 5. [쉬움] 객관식

    design="~condition"의 의미로 가장 적절한 것을 고르라.

    선택지
  6. 6. [쉬움] 객관식

    volcano plot이 주로 함께 보여주는 두 축으로 가장 적절한 것을 고르라.

    선택지
  7. 7. [보통] 객관식

    DESeq2가 raw count를 그대로 단순 비교하지 않는 이유로 가장 적절한 것을 고르라.

    선택지
  8. 8. [보통] 객관식

    contrast 설정에서 비교 방향을 명확히 해야 하는 이유로 가장 적절한 것을 고르라.

    선택지
  9. 9. [보통] 객관식

    다음 Python 코드의 목적에 가장 가까운 것을 고르라.

    counts_dict = {}
    for sample in samples:
        filepath = f"star_output/{sample}/ReadsPerGene.out.tab"
        df = pd.read_csv(filepath, sep="\t", header=None, skiprows=4,
                         names=["gene_id", "unstranded", "forward", "reverse"])
        counts_dict[sample] = df.set_index("gene_id")["unstranded"]
    
    counts_df = pd.DataFrame(counts_dict)
    
    선택지
  10. 10. [보통] 객관식

    다음 metadata 생성 코드의 의미로 가장 적절한 것을 고르라.

    metadata = pd.DataFrame({
        "sample": samples,
        "condition": ["WT", "WT", "WT", "atrx1", "atrx1", "atrx1"]
    })
    metadata = metadata.set_index("sample")
    
    선택지
  11. 11. [보통] 객관식

    다음 코드의 의도로 가장 적절한 것을 고르라.

    genes_to_keep = counts_df.sum(axis=1) >= min_counts
    counts_filtered = counts_df[genes_to_keep]
    
    선택지
  12. 12. [보통] 객관식

    다음 PyDESeq2 객체 생성 코드에서 metadata의 역할로 가장 적절한 것을 고르라.

    dds = DeseqDataSet(
        counts=counts_filtered.T,
        metadata=metadata,
        design="~condition"
    )
    
    선택지
  13. 13. [어려움] 객관식

    다음 PyDESeq2 contrast의 log2FoldChange 해석으로 가장 적절한 것을 고르라.

    stat_res = DeseqStats(dds, contrast=["condition", "atrx1", "WT"])
    
    선택지
  14. 14. [어려움] 객관식

    다음 결과표에서 가장 적절한 해석을 고르라.

    gene  log2FoldChange  pvalue   padj
    X     1.3             0.0001   0.02
    
    선택지
  15. 15. [어려움] 객관식

    다음 volcano plot 해석으로 가장 적절한 것을 고르라.

    오른쪽 위: log2FC 큼, padj 작음
    왼쪽 위: log2FC 음수로 큼, padj 작음
    
    선택지
  16. 16. [어려움] 객관식

    다음 MA plot에서 x축과 y축 해석으로 가장 적절한 것을 고르라.

    x축: 평균 발현 수준
    y축: log2 fold change
    
    선택지
  17. 17. [어려움] 객관식

    다음 히트맵 해석에서 가장 적절한 것을 고르라.

    상위 DEG들의 발현 패턴을 샘플별로 색상 표시했더니 같은 조건 샘플들이 서로 가깝게 묶였다.
    
    선택지
  18. 18. [어려움] 객관식

    다음 결과 저장 코드의 중요성으로 가장 적절한 것을 고르라.

    results_df.to_csv("deseq2_results_all.csv")
    significant.to_csv("deseq2_results_significant.csv")
    
    선택지
  19. 19. [어려움] 객관식

    다음 상황에서 가장 적절한 문제 인식을 고르라.

    metadata에는 treated/control이 있는데 count matrix 열 이름은 sample1, sample2뿐이고 어떤 샘플이 어느 조건인지 연결되지 않는다.
    
    선택지
  20. 20. [어려움] 객관식

    다음 기준 적용에서 가장 균형 잡힌 해석을 고르라.

    padj < 0.05 그리고 |log2FC| > 1
    
    선택지
  21. 21. [쉬움] 객관식

    log2FoldChange = 2의 직관적 해석으로 가장 적절한 것을 고르라.

    선택지
  22. 22. [쉬움] 객관식

    log2FoldChange = -1의 직관적 해석으로 가장 적절한 것을 고르라.

    선택지
  23. 23. [보통] 객관식

    다음 필터 기준을 적용할 때 남는 유전자를 고르라.

    기준: 총 count >= 10
    GeneA 총 count = 8
    GeneB 총 count = 12
    GeneC 총 count = 3
    
    선택지
  24. 24. [보통] 객관식

    다음 기준을 동시에 만족하는 유전자를 고르라.

    기준: padj < 0.05 그리고 |log2FC| > 1
    GeneA: padj=0.03, log2FC=1.2
    GeneB: padj=0.10, log2FC=2.5
    GeneC: padj=0.01, log2FC=0.4
    
    선택지
  25. 25. [보통] 객관식

    유전자 100개 × 샘플 6개 count matrix를 .T로 전치했다. 전치 후 shape로 가장 적절한 것을 고르라.

    선택지
  26. 26. [보통] 객관식

    Volcano plot에서 오른쪽 위에 있는 점의 일반적 의미로 가장 적절한 것을 고르라.

    선택지
  27. 27. [보통] 객관식

    padj에 대한 초보자용 설명으로 가장 안전한 것을 고르라.

    선택지
  28. 28. [어려움] 객관식

    다음 결과 해석으로 가장 적절한 것을 고르라.

    GeneX: padj=0.001, log2FC=-2
    
    선택지
  29. 주관식 1. [쉬움] 주관식 · Gemini 채점

    count matrix와 metadata가 차등 발현 분석에서 각각 어떤 역할을 하는지 설명하라.

  30. 주관식 2. [보통] 주관식 · Gemini 채점

    design=~condition과 contrast의 관계를 설명하라.

  31. 주관식 3. [보통] 주관식 · Gemini 채점

    padj와 log2FoldChange를 함께 보는 이유를 설명하라.

  32. 주관식 4. [어려움] 주관식 · Gemini 채점

    volcano plot, MA plot, heatmap이 차등 발현 결과 해석에서 각각 어떤 질문에 답하는지 설명하라.