La búsqueda global no está activada.
Salta al contenido principal
Foro

Foro de debate módulo 2

¿Cómo Influyen los Parámetros en el Análisis de RNA-Seq? / How Do Parameters Influence RNA-Seq Analysis?

Re: ¿Cómo Influyen los Parámetros en el Análisis de RNA-Seq? / How Do Parameters Influence RNA-Seq Analysis?

de Coral del Val Muñoz - Número de respuestas: 0
Hola Pablo,
No me extiendo en los primeros porque estan explicados arriba pero intento hacerte una comparación entre las diferencias de unos y otros y darte un par de pinceladas de como hacerlo en R con uno de los paquetes. La cuestion es que unos son unidades de expresión y los otros son métodos de normalización.

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.

En resumen:
  • 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.

Ahora unos ejemplos aproximados de como hacerlo en R

A. CPM, RPKM, TPM en edgeR

library(edgeR)

# 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

B. TMM, Upper Quartile y Quantile

library(edgeR)
# 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)