Hola Pablo,
Unidades de expresión
-
CPM (Counts Per Million) es una unidad que normaliza las cuentas por el tamaño de la biblioteca de cada muestra, pero no tiene en cuenta la longitud del gen. Se utiliza principalmente para comparar la expresión de un mismo gen entre diferentes muestras, pero no es adecuado para comparar la expresión entre genes dentro de la misma muestra.
-
RPKM (Reads Per Kilobase Million) o FPKM (Fragments Per Kilobase Million, en el caso de datos de paired-end) normaliza tanto por el tamaño de la biblioteca como por la longitud del gen. Esto permite comparar tanto entre muestras como entre genes dentro de una muestra, aunque tiene limitaciones en experimentos complejos.
-
TPM (Transcripts Per Million) también normaliza por tamaño de biblioteca y por longitud del gen, pero el orden de los pasos es diferente respecto a RPKM. En TPM, primero se normaliza por la longitud del gen y luego por el total de genes de la muestra, asegurando que la suma total de TPM en cada muestra sea un millón. Esto hace que la comparación entre genes y entre muestras sea más directa y confiable que con RPKM.
Métodos de normalización
-
Quantile normalization es un método que iguala la distribución de expresión de todos los genes en todas las muestras, de modo que todas tengan la misma distribución estadística. Es muy usado en microarrays, pero en RNA-seq puede eliminar diferencias biológicas reales si no se usa con precaución.
-
TMM (Trimmed Mean of M-values) es un método robusto que corrige las diferencias de composición entre las bibliotecas. Lo hace excluyendo genes extremos (muy altamente o muy poco expresados) y calculando un factor de normalización sobre los genes intermedios. Es el método por defecto en edgeR y muy recomendado para RNA-seq.
-
Upper Quartile normalization es una normalización parcial que divide las cuentas de cada gen por el cuartil superior de las cuentas de la muestra correspondiente. Esto ayuda a reducir el impacto de unos pocos genes altamente expresados en la normalización.
-
CPM solo normaliza por biblioteca y sirve para comparar entre muestras.
-
RPKM y TPM también consideran la longitud del gen, pero TPM es más fiable para comparar entre genes y muestras.
-
De los métodos de normalización, TMM es el más robusto para corregir sesgos de composición en RNA-seq, Quantile iguala distribuciones (pero puede borrar diferencias biológicas), y Upper Quartile ayuda a reducir el efecto de genes muy expresados.
# counts: matriz de conteo (genes x muestras)
dge <- DGEList(counts=counts)
# CPM
cpm_matrix <- cpm(dge)
# RPKM (requiere vector con longitudes de los genes en bases)
gene_lengths <- c(1000, 2000, 1500, ...) # En bases (ejemplo)
rpkm_matrix <- rpkm(dge, gene.length=gene_lengths)
# TPM (edgeR no tiene función directa, pero se puede calcular así):
# 1. Divide counts por la longitud del gen en kilobases
rate <- counts / (gene_lengths / 1000)
# 2. Suma total para cada muestra
norm_factor <- colSums(rate)
# 3. Calcula TPM
tpm <- t(t(rate) / norm_factor) * 1e6
# TMM normalization (por defecto)
dge <- calcNormFactors(dge, method="TMM")
# Upper Quartile normalization
dge_uq <- calcNormFactors(dge, method="upperquartile")
# Quantile normalization
library(preprocessCore)
# Requiere matriz de expresión (log transformada idealmente)
log_cpm <- cpm(dge, log=TRUE)
log_cpm_quantile <- normalize.quantiles(as.matrix(log_cpm))
colnames(log_cpm_quantile) <- colnames(log_cpm)
rownames(log_cpm_quantile) <- rownames(log_cpm)