플랫폼별 권장 파이프라인으로 정규화와 품질검사(QC)를 수행하고, 분석에 사용할 표현행렬을 저장합니다.
처음 한 번만 설치하세요.
if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager")
BiocManager::install(c(
"oligo", # Affymetrix CEL → RMA
"affy", # (구형 Affy용) 선택
"limma", # Agilent / Illumina / DEG / QC
"illuminaio", # Illumina IDAT/요약
"arrayQualityMetrics", # 종합 QC 리포트(선택)
"annotate"
))
FileName\tSample\tGroup
GSM0001.txt\tS1\tControl
GSM0002.txt\tS2\tControl
GSM0003.txt\tS3\tCase
GSM0004.txt\tS4\tCase
열 이름은 자유롭게 쓰되, 코드에서 동일 이름을 참조하세요.
FileName\tCy3\tCy5
array1.txt\tControl\tCase
array2.txt\tControl\tCase
배경보정 + quantile 정규화 + probeset 요약을 한 번에 수행합니다. 출력은 log2 스케일.
library(oligo); library(limma)
setwd("/path/to/CEL_dir")
raw <- read.celfiles(list.celfiles(full.names=TRUE)) # CEL 읽기
eset <- rma(raw) # RMA
expr <- exprs(eset) # (probeset × sample) log2
# 간단 QC
boxplot(expr, las=2, main="Affy RMA boxplot")
plotDensities(expr, main="Affy RMA density")
# 저장
write.csv(expr, file="affy_rma_log2.csv")
saveRDS(expr, file="affy_rma_log2.rds")
권장: normexp 배경보정 → normalizeBetweenArrays(method="quantile").
library(limma)
setwd("/path/to/agilent_onecolor")
targets <- read.delim("targets.txt", check.names=FALSE)
RG <- read.maimages(targets$FileName, source="agilent", green.only=TRUE)
RGb <- backgroundCorrect(RG, method="normexp", offset=50)
E <- normalizeBetweenArrays(RGb, method="quantile") # log2
expr <- E$E
# QC
boxplot(expr, las=2, main="Agilent one-color (quantile)")
plotDensities(expr, main="Agilent one-color density")
# 저장
write.csv(expr, file="agilent_onecolor_log2.csv")
saveRDS(expr, file="agilent_onecolor_log2.rds")
two-color는 M = log2(R/G) 값이 분석의 주 대상입니다(표현값이 아닌 비교값).
library(limma)
setwd("/path/to/agilent_twocolor")
targets <- read.delim("targets_2color.txt", check.names=FALSE)
RG <- read.maimages(targets$FileName, source="agilent")
RGb <- backgroundCorrect(RG, method="normexp", offset=50)
MA <- normalizeWithinArrays(RGb, method="loess") # within-array
MA <- normalizeBetweenArrays(MA, method="Aquantile") # between-array
M <- MA$M # 분석용
A <- MA$A # 평균 강도
# QC
maPlot(MA, array=1, main="MA-plot (array1)") # 한 어레이 예시
boxplot(M, las=2, main="Agilent two-color (M values)")
# 저장
write.csv(M, file="agilent_twocolor_M.csv")
saveRDS(M, file="agilent_twocolor_M.rds")
neqc는 control probe를 이용한 normexp+quantile+log2 절차를 자동으로 수행합니다.
제공되는 detection p-value로 저신뢰 probe를 필터링하세요.
library(limma); library(illuminaio)
setwd("/path/to/illumina_summary")
y <- read.ilmn(files="summary.txt", expr="AVG_Signal",
other.columns="Detection") # 제조사 요약 TXT 형식
y2 <- neqc(y) # 정규화 + log2
expr <- y2$E
detP <- y$other$Detection
# 필터링: 절반 이상 시료에서 검출 p < 0.01
keep <- rowMeans(detP < 0.01) > 0.5
expr <- expr[keep, ]
# QC
boxplot(expr, las=2, main="Illumina neqc (filtered)")
plotDensities(expr, main="Illumina density")
# 저장
write.csv(expr, file="illumina_neqc_log2.csv")
saveRDS(expr, file="illumina_neqc_log2.rds")
여러 지표(거리 행렬, outlier 검출 등)를 한 번에 HTML로 생성합니다.
# expr_mat: 정규화 완료된 (features × samples) log2 행렬
library(arrayQualityMetrics)
expr_eset <- Biobase::ExpressionSet(assayData = as.matrix(expr_mat))
arrayQualityMetrics(expressionset = expr_eset, outdir = "AQM_report", force = TRUE)
expr 사용