¿cómo analizar los datos crudos de microarrays?

99
1 ¿Cómo analizar los datos crudos de microarrays? Análisis Exploratorio y Confirmatorio de Datos de Experimentos de Microarrays Primer Cuatrimestre 2006 Instituto de Cálculo y Departamento de Matemática. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Juan Pablo Fededa y Carlos Rocco ¿Cómo analizar los datos crudos de microarrays? ía práctica de análisis de datos de microarr

Upload: palmer

Post on 14-Jan-2016

64 views

Category:

Documents


0 download

DESCRIPTION

¿Cómo analizar los datos crudos de microarrays?. ¿Cómo analizar los datos crudos de microarrays?. Guía práctica de análisis de datos de microarrays. Juan Pablo Fededa y Carlos Rocco. Análisis Exploratorio y Confirmatorio de Datos de Experimentos de Microarrays Primer Cuatrimestre 2006 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ¿Cómo analizar los datos crudos de microarrays?

1

¿Cómo analizar los datos crudos de microarrays?

Análisis Exploratorio y Confirmatorio de Datos de Experimentos de MicroarraysPrimer Cuatrimestre 2006 Instituto de Cálculo y Departamento de Matemática.Facultad de Ciencias Exactas y NaturalesUniversidad de Buenos Aires

Juan Pablo Fededa y Carlos Rocco

¿Cómo analizar los datos crudos de microarrays?

Guía práctica de análisis de datos de microarrays

Page 2: ¿Cómo analizar los datos crudos de microarrays?

2

IMPORTANTE: Esta es una guía acerca de cómo analizar los datos que se obtienen del scanneado de un microarray de dos colores. No contiene información acerca de cómo construir, ensayar, diseñar un experimento de y/ó scannear microarrays. El objetivo final es ayudar a un biólogo a que, a partir del dato original de scanneado de un microarray, obtenga una lista de genes diferencialmente expresados en las dos condiciones confrontadas. Tampoco se hablará de data mining y generación de patrones de comportamiento génico.El análisis de datos que promueve esta guía involucra el uso de R, un software libre de estadística sobre el cuál se fueron construyendo múltiples herramientas para analizar microarrays.Se asume que el lector tiene un background matemático básico y que entiende los conceptos fundamentales de la tecnología de microarrays.

Page 3: ¿Cómo analizar los datos crudos de microarrays?

3

Fabricación de un microarray

Diseño del experimento

Preparación de la muestra - hibridación

Scanning

Análisis de datos - lista genes diferencialmente expresados

Data mining – clustering

FLU

JO D

E T

RA

BA

JO

u$s

Microarrays……………

Page 4: ¿Cómo analizar los datos crudos de microarrays?

4

Fabricación de un microarray

Diseño del experimento

Preparación de la muestra - hibridación

Scanning

Análisis de datos - lista genes diferencialmente expresados

Data mining – clustering (……..2007!!!!)

FLU

JO D

E T

RA

BA

JO

Microarrays……………

Page 5: ¿Cómo analizar los datos crudos de microarrays?

5

Gráficos de estado del microarray – toma de decisión ( sigo con el análisis o dejo? )

Normalizaciónes

Gráficos de normalización – toma de decisión ( sigo con el análisis, realizo otras normalizaciones, dejo? )

Identificación de genes diferencialmente expresados

FLU

JO D

E T

RA

BA

JO

Gráficos y tablas de genes diferencialmente expresados

Análisis de Datos de Microarrays

Obtención de los datos crudos – Ingreso de los datos al R – carga de paquetes de análisis

Page 6: ¿Cómo analizar los datos crudos de microarrays?

6

Gráficos de estado del microarray – toma de decisión ( sigo con el análisis o dejo? )

Normalizaciónes

Gráficos de normalización – toma de decisión ( sigo con el análisis, realizo otras normalizaciones, dejo? )

Identificación de genes diferencialmente expresados

FLU

JO D

E T

RA

BA

JO

Gráficos y tablas de genes diferencialmente expresados

Análisis de Datos de Microarrays

Obtención de los datos crudos – Ingreso de los datos al R – carga de paquetes de análisis

R

Page 7: ¿Cómo analizar los datos crudos de microarrays?

7

Obtención de R y paquetes de análisis

Carga de paquetes de análisis

Obtención de los datos crudos

Ingreso de los datos al R

Page 8: ¿Cómo analizar los datos crudos de microarrays?

8

-1: Obtener el software R !!!! de http://cran.r-project.org/

Page 9: ¿Cómo analizar los datos crudos de microarrays?

9

-1: Obtener el software R !!!! de http://cran.r-project.org/

Page 10: ¿Cómo analizar los datos crudos de microarrays?

10

-1: Obtener el software R !!!! de http://cran.r-project.org/

Page 11: ¿Cómo analizar los datos crudos de microarrays?

11

0: Obtener ( bajar) los siguientes paquetes de trabajo de R en http://www.bioconductor.org/packages/bioc/1.8/index.html :

Affyaffyio, arrayQuality, Biobase, colorspace, convert, gridBase, hexbin, limma, marray, RColorBrewer, vsn

Page 12: ¿Cómo analizar los datos crudos de microarrays?

12

Una vez hecho esto instalar el R y dentro de la consola del R instalar los paquetes bajados en archivos zip :

NOTA: Se pueden actualizar e instalar desde R (en otra de las opciones de package).

Page 13: ¿Cómo analizar los datos crudos de microarrays?

13

Una vez hecho esto instalar el R y dentro de la consola del R instalar los paquetes bajados en archivos zip :

Page 14: ¿Cómo analizar los datos crudos de microarrays?

14

Una vez hecho esto instalar el R y dentro de la consola del R instalar los paquetes bajados en archivos zip :

Page 15: ¿Cómo analizar los datos crudos de microarrays?

15

Antes que nada: vamos a trabajar escribiendo nuestras ordenes en un script, para lo cuál primero hay que abrir un script:

Page 16: ¿Cómo analizar los datos crudos de microarrays?

16

Es más fácil trabajar con las ventanas de la consola y del script (Editor) en paralelo ( tile):

Page 17: ¿Cómo analizar los datos crudos de microarrays?

17

Entonces…..esto funciona escribiendo la orden en el script y luego se utiliza el botón run line para correrla en la consola:

SCRIPT

CONSOLA

NOTA: run line se puede hacer con F5.

Page 18: ¿Cómo analizar los datos crudos de microarrays?

18

La orden se corre en la consola:

Page 19: ¿Cómo analizar los datos crudos de microarrays?

19

Cargamos el paquete marray para empezar a trabajar (al cargar marray se carga automaticamente limma )

Page 20: ¿Cómo analizar los datos crudos de microarrays?

20

Obtención de R y paquetes de análisis

Carga de paquetes de análisis

Obtención de los datos crudos

Ingreso de los datos al R

Page 21: ¿Cómo analizar los datos crudos de microarrays?

21

OK; los microarrays sobre los cuáles vamos a trabajar como ejemplo corresponden al siguiente paper:

Page 22: ¿Cómo analizar los datos crudos de microarrays?

22

A los datos originales los bajamos de la base de datos de microarrays de stanford: http://genome-www5.stanford.edu/

Page 23: ¿Cómo analizar los datos crudos de microarrays?

23

Vamos a la carpeta SMD, en donde están los datos crudos:

Page 24: ¿Cómo analizar los datos crudos de microarrays?

24

Particularmente vamos a analizar los datos de los microarrays correspondientes a los experimentos de inmunoprecipitación de PUMILIO en moscas adultas:

Page 25: ¿Cómo analizar los datos crudos de microarrays?

25

Vamos a utilizar los datos originales del scanner (ORI DATA), en este caso son 4 experimentos de hibridación: exptID 52987, 53530, 54253 y 54596

Page 26: ¿Cómo analizar los datos crudos de microarrays?

26

Utilizamos (bajamos) los archivos .gpr (genepix):

Page 27: ¿Cómo analizar los datos crudos de microarrays?

27

NOTA: Diferentes scanners generan diferentes tipos de archivos con diferentes extensiones; los paquetes de análisis de datos que utilizaremos leen la mayoría de estas extensiones.

Agilent genepix.custom QuantarrayArrayvision genepix.median ScanarrayexpressBluefuse Imagene smd.oldGenepix Smd Spotspot.close.open

El procedimiento para ingresar estas files en R es el mismo que el que veremos a continuación.

Page 28: ¿Cómo analizar los datos crudos de microarrays?

28

Obtención de R y paquetes de análisis

Carga de paquetes de análisis

Obtención de los datos crudos

Ingreso de los datos al R

Page 29: ¿Cómo analizar los datos crudos de microarrays?

29

Volviendo a R, cambiamos de directorio en el cuál están nuestros archivos originales salidos del scanner (ej.: .gpr para genepix):

Page 30: ¿Cómo analizar los datos crudos de microarrays?

30

Cambiamos de directorio en el cuál están nuestros archivos originales salidos del scanner (ej.: .gpr para genepix):

Page 31: ¿Cómo analizar los datos crudos de microarrays?

31

Cambiamos de directorio en el cuál están nuestros archivos originales salidos del scanner (ej.: .gpr para genepix):

Page 32: ¿Cómo analizar los datos crudos de microarrays?

32

dirección.experimentospumilio <-"D://juan//análisis exploratorio y confirmatorio de experimentos de microarrays//curso microarrays//pumilio//Experiment Sets Name Organism Type Created By Options“Esta es la otra opción para indicar la carpeta en donde están nuestros datos (Por defecto lee en la carpeta de trabajo).

setwd(dirección.experimentospumilio) R va a leer los datos desde esta dirección seteada.

archivosexperimentospumilio <- c("52987.gpr", "53530.gpr", "54253.gpr", "54596.gpr")Generamos un objeto marrayRaw con los archivos de los arrays que vamos a analizar.

crudosexperimentospumilio<-read.GenePix(archivosexperimentospumilio)Generamos un objeto que NO ignore las estimaciones de las intensidades del background para los canales verde ( G ) y rojo ( R ).

crudosexperimentospumilio2<-read.GenePix(archivosexperimentospumilio, name.Gb= NULL, name.Rb= NULL)Generamos un objeto que ignore las estimaciones de las intensidades del background para los canales verde ( G ) y rojo ( R ) fijando el valor NULL para los argumentos name.Gb y name.Rb.

Empezamos a trabajar en R:

Page 33: ¿Cómo analizar los datos crudos de microarrays?

33

Page 34: ¿Cómo analizar los datos crudos de microarrays?

34

Estructura de los datos que estamos analizando en el paquete marray:

microarreglosge

nes

Rf (foreground Cy5)

Gf (foreground Cy3)

Rb (background Cy5)

Gb (background Cy3)

etceteras

slots

Page 35: ¿Cómo analizar los datos crudos de microarrays?

35

summary(crudosexperimentospumilio)Nos muestra un resumen de las características del objeto crudosexperimentospumilio que generamos:

Son datos sin normalizar, es clase marray, contiene los datos de los 4 microarrays

17664 spots organizados en 8 filas x 4 columnas de subconjuntos ( grids ), cada grid contiene 23 filas x 24 columnas de spots

Page 36: ¿Cómo analizar los datos crudos de microarrays?

36

slotNames (crudosexperimentospumilio)Nos muestra la estructura de slots del objeto crudosexperimentopumilio.

slotNames (crudosexperimentospumilio2)Nos muestra la estructura de slots del objeto crudosexperimentopumilio2.

Ambos objetos (crudosexperimentospumilio, crudosexperimentospumilio2 ) tienen la misma estructura de slots. Los primeros 5 ("maRf" "maGf" "maRb" "maGb" "maW“) son las matrices que contienen la información cuantitativa básica extraída de los archivos .gpr. Los demás están asociados con los archivos de la estructura de los arreglos (layout) y las anotaciones.

Page 37: ¿Cómo analizar los datos crudos de microarrays?

37

crudosexperimentospumilio@maRf Objeto con las intensidades del foreground para el canal rojo.

crudosexperimentospumilio@maRb Objeto con las intensidades del background para el canal rojo.

crudosexperimentospumilio@maGf Objeto con las intensidades del foreground para el canal verde.

crudosexperimentospumilio@maGb Objeto con las intensidades del background para el canal verde.

crudosexperimentospumilio@maLayout Objeto con la estructura o geometría del arreglo.

crudosexperimentospumilio@maGnames Objeto con los nombres de los genes.

crudosexperimentospumilio@maTargets Objeto con información acerca de que muestras fueron hibridadas en cada arreglo.

Page 38: ¿Cómo analizar los datos crudos de microarrays?

38

crudosexperimentospumilio@maGf[1:5,] Generamos un objeto con las intensidades del foreground para el canal verde para las 5 primeras filas (genes) para todos los microarrays

[1:5, 1 ]

microarrays

gene

s

Recuerden la estructura de datos de marray!!!

En este caso el microarray de la columna 1 es 52987

Page 39: ¿Cómo analizar los datos crudos de microarrays?

39

Existen métodos específicos para objetos de la clase marrayRaw (como crudosexperimentospumilio), que luego se utilizaran para tomar decisiones acerca de los datos analizados:

maA : matriz de log2 de intensidades (con corrección por background) maM : matriz de log2 de cocientes (con corrección por background) maLR : matriz de log2 de ( intensidades - background) para el canal rojo maLG: matriz de log2 de ( intensidades - background) para el canal verde

LR = log2 ( Rf -Rb )

LG =log2 ( Gf - Gb )

A = 0.5 x ( LR + LG )

M= LR - LG

Page 40: ¿Cómo analizar los datos crudos de microarrays?

40

Los datos se transforman aplicando log2 para que las intensidades se distribuyan en forma aproximadamente simétrica. Esto mejora la visualización gráfica de los datos. También se intenta que se reduzca la relación entre la intensidad y la varianza que aparece cuando se realizan experimentos con replicaciones. La mayoría de los paquetes de análisis de microarrays utilizan log2 .

Page 41: ¿Cómo analizar los datos crudos de microarrays?

41

Gráficos espaciales del estado del microarray

Page 42: ¿Cómo analizar los datos crudos de microarrays?

42

image(crudosexperimentospumilio[,1], xvar="maM“)Generamos un gráfico de los valores de M del primer microarray ( [ ,1 ] ) de crudosexperimentospumilio:

valores altos de M (cy5 > cy3)

valores bajos de M (cy5 < cy3)

Page 43: ¿Cómo analizar los datos crudos de microarrays?

43

image(crudosexperimentospumilio[,1], xvar="maRb“)Generamos un gráfico de los valores del background para el canal rojo del primer microarray ( [ ,1 ] ) de crudosexperimentospumilio:

valores altos de background en el canal rojo

valores bajos de background en el canal rojo

Page 44: ¿Cómo analizar los datos crudos de microarrays?

44

par(mfrow=c(2,2)) Generamos un espacio gráfico de 2 x 2 gráficos.

image (crudosexperimentospumilio[,1], xvar="maSpotCol", bar=FALSE) Generamos un gráfico del vector columna para cada spot en el primer microarray ( [ ,1 ] ) de crudosexperimentospumilio ( bar=FALSE : para que no dibuje la barra de colores).

image (crudosexperimentospumilio[,1], xvar="maPrintTip", bar=FALSE) Generamos un gráfico del vector print-tip para cada spot en el primer microarray ( [ ,1 ] ) de crudosexperimentospumilio

image (crudosexperimentospumilio[,1], xvar="maControls", col=heat.colors(10), bar=FALSE) Generamos un gráfico espacial que indica en donde se encuentran los spots control en el primer array de ( [ ,1 ] ) de crudosexperimentospumilio, indicados en rojo

image (crudosexperimentospumilio[,1], xvar="maPlate", bar=FALSE) Generamos un gráfico de los valores de M del primer microarray ( [ ,1 ] ) de crudosexperimentospumilio

Page 45: ¿Cómo analizar los datos crudos de microarrays?

45

Page 46: ¿Cómo analizar los datos crudos de microarrays?

46

boxplot(crudosexperimentospumilio[,1], xvar = "maPrintTip", yvar = "maM",main="arreglo 52987.gpr")Podemos generar un gráfico boxplot que nos muestre cómo varía M en función del print-tip para el primer microarray ( [ ,1 ] ) de crudosexperimentospumilio:

Page 47: ¿Cómo analizar los datos crudos de microarrays?

47

boxplot(crudosexperimentospumilio,yvar="maM")Podemos generar un gráfico boxplot que nos muestre cómo varía M en función del array para crudosexperimentospumilio:

Page 48: ¿Cómo analizar los datos crudos de microarrays?

48

library (arrayQuality)Cargamos el paquete arrayQuality .maQualityPlots(crudosexperimentospumilio [,1])Generamos un gráfico maQualityPlots para evaluar a priori la calidad delmicroarray:

Page 49: ¿Cómo analizar los datos crudos de microarrays?

49

1. MA-plot de los datos crudos sin sustracción de background. Cada línea coloreada representa la curva loess para cada grupo de print-tip. Estas curvas representan que cantidad de normalización se deberá realizar a cada grupo de datos. Mientras más separadas las curvas de la línea 0 de M, mayor normalización será necesaria. Mientras mayor la normalización necesaria, menor la calidad del experimento.

Page 50: ¿Cómo analizar los datos crudos de microarrays?

50

2. MA-plot usando el paquete hexbin que destaca la densidad de puntos, de los datos normalizados; amarillo = alta densidad de puntos, azul = baja densidad. Este diagrama nos indica como quedó la normalización por grupo de print-tip (default).

Page 51: ¿Cómo analizar los datos crudos de microarrays?

51

3.Gráfico espacial de los valores de M crudos sin sustracción del fondo. Amarillo = valores bajos de M, azul = valores altos de M, blanco = valores faltantes . Esto nos permite visualizar una hibridación despareja.

Page 52: ¿Cómo analizar los datos crudos de microarrays?

52

4. Gráfico espacial de los rangos de los valores de M normalizados. Por defecto, se utiliza la normalización loess por print-tip-group. Además, los puntos marcados (flagged) son señalados por medio de un recuadro negro. Este tipo de representación gráfica permite verificar que la normalización ha quitado efectos espaciales.

Page 53: ¿Cómo analizar los datos crudos de microarrays?

53

5. Gráfico espacial de los valores de A crudos sin sustracción del fondo. El color representa la intensidad de la señal.

Page 54: ¿Cómo analizar los datos crudos de microarrays?

54

6. Histogramas del cociente señal ruido (signal-to-noise ratio) (S2N) para cada canal Cy5 y Cy3. S2N = log2(intensidad del spot / intensidad del fondo) En la parte superior de cada histograma se imprimen la media y varianza de la señal. Además, se superponen curvas de densidad de SNR estratificado por diversos tipos de control (estado). Los esquemas de color de las curvas de densidad están dados la tabla 1. El SNR es un buen indicador para los problemas del tinte. Las líneas de densidad de controles negativos (por ej. secuencias artificiales que han sido diseñadas para no presentar homología con ningún genoma) y vacíos deben estar cercanas, casi superpuestas.

Page 55: ¿Cómo analizar los datos crudos de microarrays?

55

7. Diagrama de punto de los valores M normalizados para los controles. Los controles con más de 3 réplicas se representan en el eje Y, el esquema de colores se representa en la tabla 1. Los valores de los controles M deben estar concentrados y cerca de 0.

Page 56: ¿Cómo analizar los datos crudos de microarrays?

56

8. Diagrama del punto de A, sin la sustracción del fondo. Los controles con más de 3 réplicas se representan en el eje Y, el esquema de colores se representa en la tabla 1. La intensidad de los controles positivos debe estar en la región de alta intensidad, los controles negativos y vacíos deben estar en la región de intensidad más baja. Los rangos de los controles positivos y los negativos/vacíos deben estar separados.

Page 57: ¿Cómo analizar los datos crudos de microarrays?

57

Normalizaciónes

Gráficos de normalización

Page 58: ¿Cómo analizar los datos crudos de microarrays?

58

Normalizaciones de datos : ¿ POR QUE NORMALIZAMOS?

Para analizar los datos es necesario reducir el error sistemático. Como suponemos que sólo una pequeña cantidad de genes se expresa diferencialmente, las distribuciones de intensidades deben ser uniformes espacialmente dentro del arreglo y entre arreglos.

Entonces… normalizaremos primero dentro de un microarray utilizando la función maNorm y luego, si fuese necesario, entre arreglos con la función maNormScale.

¿Cómo nos damos cuenta si es necesario?

Luego de la normalización dentro de cada microarray, vamos a realizar diferentes gráficos que nos van a indicar si la escala de los datos entre microarrays es diferente o no. Si es muy diferente, tendremos que normalizar por escala.Recuerden que por cada paso de normalización estamos perdiendo información.

Page 59: ¿Cómo analizar los datos crudos de microarrays?

59

experimentospumilionorm <- maNorm(crudosexperimentospumilio, norm= "p")Generamos un objeto que contiene los datos normalizados por grupo de print-tip ( norm = “p” : normaliza por intensidad DENTRO de cada aguja ) de crudosexperimentospumilio.

summary (experimentospumilionorm)Nos muestra un resumen de las características del objeto experimentospumilionorm que generamos.

summary (crudosexperimentospumilio)Nos muestra nuevamente un resumen de las características del objeto crudosexperimentospumilio.

Normalización dentro de cada microarray:

Page 60: ¿Cómo analizar los datos crudos de microarrays?

60

Podemos comparar la parte estadística de crudosexperimentospumilio (sin normalizar) con la misma de experimentospumilionorm ( mismos datos normalizados por print-tip group):

antes

después

Normalización dentro de cada microarray:

Las medias y las medianas quedaron cerca de cero en todos los arrays del experimento!!!!

Page 61: ¿Cómo analizar los datos crudos de microarrays?

61

Normalización dentro de cada microarray: veámoslo en gráficos

par(mfrow=c(2,1))Generamos un espacio gráfico de 2 gráficos independientes.

boxplot(crudosexperimentospumilio[,1], xvar = "maPrintTip", yvar = "maM",main="crudosexperimentospumilio")Generamos un gráfico boxplot MA ( yvar = "maM" ) de los datos sin normalizar de crudosexperimentospumilio, divididos por grupo de print-tip ( xvar = "maPrintTip“ ) del primer microarray ( [ ,1 ] ).

boxplot(experimentospumilionorm[,1], xvar = "maPrintTip", yvar = "maM",main="experimentospumilionorm")Generamos un gráfico boxplot MA ( yvar = "maM" ) de los datos normalizados por print-tip de experimentospumilionorm, divididos por grupo de print-tip ( xvar = "maPrintTip“ ) del primer microarray ( [ ,1 ] ).

Page 62: ¿Cómo analizar los datos crudos de microarrays?

62

Normalización dentro de cada microarray: veámoslo en gráficos

Hay variaciones entre las medias o medianas, en los spots spoteados por diferentes print-tips.La mayoría de los valores está debajo de cero

Transformamos los datos de manera que las medias o medianas de cada print tip son iguales ( 0) !!!!

Luego de normalizar por Print-tip

Antes de normalizar por Print-tip

Page 63: ¿Cómo analizar los datos crudos de microarrays?

63

Normalización dentro de cada microarray: veámoslo en gráficos

par(mfrow=c(2,1))Generamos un espacio gráfico de 2 gráficos independientes.

boxplot(crudosexperimentospumilio, yvar = "maM", main = "pre normalización")Generamos un gráfico boxplot MA ( yvar = "maM" ) de los datos sin normalizar de crudosexperimentospumilio, dividos por microarray.

boxplot(experimentospumilionorm, yvar = "maM", main = "post normalización")Generamos un gráfico boxplot MA ( yvar = "maM" ) de los datos normalizados de experimentospumilionorm, divididos por microarray.

Page 64: ¿Cómo analizar los datos crudos de microarrays?

64

Normalización dentro de cada microarray: veámoslo en gráficos

Hay variaciones entre las medias o medianas en los datos de los diferentes microarrays.La mayoría de los valores está debajo de cero

Transformamos los datos de manera que las medias o medianas de todos los microarrays son similares ( 0) !!!!

Luego de normalizar

Antes de normalizar

Page 65: ¿Cómo analizar los datos crudos de microarrays?

65

Normalización dentro de cada microarray: veámoslo en gráficos ( MA plot )

par(mfrow=c(2,1))Generamos un espacio de 2 gráficos.

maPlot(crudosexperimentospumilio, legend.func = "NULL")Generamos un gráfico Generamos un gráfico MA plot de los datos sin normalizar de crudosexperimentospumilio; las líneas de colores representan las curvas loess para cada print tip group.

maPlot(experimentospumilionorm, legend.func = "NULL")Generamos un gráfico MA plot de los datos normalizados de experimentospumilionorm; las líneas de colores representan las curvas loess para cada print tip group.

Page 66: ¿Cómo analizar los datos crudos de microarrays?

66

Normalización dentro de cada microarray: veámoslo en gráficos ( MA plot )

Luego de normalizar

Antes de normalizar

Page 67: ¿Cómo analizar los datos crudos de microarrays?

67

Normalización entre microarrays ( por escala ) :

experimentospumilionormescala <- maNormScale(experimentospumilionorm)Generamos un objeto que contiene los datos normalizados por escala ( función maNormScale ) a partir de objeto de datos prenormalizados por print-tip group experimentospumilionorm.

par(mfrow=c(2,1))Generamos un espacio gráfico de 2 gráficos.

boxplot(experimentospumilionorm, yvar = "maM", main = "pre normalización")Generamos un gráfico boxplot de M ( yvar = "maM" ) de los datos sin normalizar por escala de experimentospumilionorm, dividos por microarray.

boxplot(experimentospumilionormescala, yvar = "maM", main = "post normalización")Generamos un gráfico boxplot de M ( yvar = "maM" ) de los datos normalizados por escala de experimentospumilionormescala, divididos por microarray.

Page 68: ¿Cómo analizar los datos crudos de microarrays?

68

Normalización entre microarrays ( por escala ): veámoslo en gráficos

Hay variaciones entre las distribuciones de los datos de los diferentes microarrays

Luego de normalizar por escala, las cajas de los box-plots tienen anchos casi idénticos!!!!

Luego de normalizar por escala

Antes de normalizar por escala

Page 69: ¿Cómo analizar los datos crudos de microarrays?

69

Normalización entre microarrays ( por cuantiles ) :

library(convert)Necesitamos cargar el paquete convert para transformar los objetos que obtuvimos en el paquete marray ( crudosexperimentospumilio, experimentospumilionorm ) a objetos legibles en el paquete limma, sobre el cuál realizaremos las normalizaciones por cuantiles.crudosexperimentospumilio.limma <- as(crudosexperimentospumilio,"RGList")Creamos un objeto crudosexperimentospumilio.limma que contiene los datos del objeto crudosexperimentospumilio de marray.experimentospumilionorm.limma <- as(experimentospumilionorm,"MAList")Creamos un objeto experimentospumilionorm.limma que contiene los datos del objeto experimentospumilionorm de marray.experimentospumilionormescala.limma <-as(experimentospumilionormescala,"MAList")Creamos un objeto experimentospumilionormescala.limma que contiene los datos del objeto experimentospumilionormescala de marray.experimentospumilionormporquantiles.limma <- normalizeBetweenArrays(experimentospumilionorm.limma,method="quantile")Creamos un objeto experimentospumilionormporquantiles.limma que contiene los datos de la normalización por cuantiles de los datos ya normalizados por print-tip group.

Page 70: ¿Cómo analizar los datos crudos de microarrays?

70

par(mfrow=c(2,1))Generamos un espacio gráfico de 2 gráficos independientes.

boxplot(experimentospumilionormescala.limma$M~col(experimentospumilionormescala.limma$M), names=colnames(experimentospumilionormescala.limma$M), main="norm. por escala", col="red")Generamos un gráfico boxplot de M de los datos normalizados por escala experimentospumilionormescala.limma, dividos por microarray.

boxplot(experimentospumilionormporquantiles.limma$M~col(experimentospumilionormporquantiles.limma$M),names=colnames(experimentospumilionormporquantiles.limma$M), main="norm. por quantiles", col="red")Generamos un gráfico boxplot de M de los datos normalizados por escala experimentospumilionormporquantiles.limma, dividos por microarray.

Normalización entre microarrays ( por cuantiles ): veámoslo en gráficos

Page 71: ¿Cómo analizar los datos crudos de microarrays?

71

Normalización entre microarrays ( por cuantiles ): veámoslo en gráficos

Hay variaciones entre las distribuciones de los datos de intensidad de los diferentes microarrays

Las diferencias entre las distribuciones se reducen!!!!

Luego de normalizar por cuantiles

Antes de normalizar por cuantiles

Page 72: ¿Cómo analizar los datos crudos de microarrays?

72

SlideNumber FileName Cy3 Cy5 Date075-dm0603B2 52987.gpr RNA total RNA IP 2004/06/11079-dm0603B2 53530.gpr RNA total RNA IP 2004/07/06085-dm0603B2 54253.gpr RNA total RNA IP 2004/07/27097-dm0603B2 54596.gpr RNA total RNA IP 2004/08/09

Podemos también normalizar enteramente en el paquete limma:

Para ello generaremos un archivo .txt con información acerca de los experimentos que estamos analizando, que tenga la siguiente estructura de datos:

Llamaremos a este archivo PumilioSample.txt , más tarde nos servirá para poder trabajar con los datos.

Page 73: ¿Cómo analizar los datos crudos de microarrays?

73

library(limma)Cargamos el paquete limma para trabajar sobre el mismo.

targetspumilio<-readTargets("PumilioSample.txt")Generamos un objeto targetspumilio que es un dataframe, generado por la función readTargets, con los datos de PumilioSample.txt.

f <- function(x) as.numeric(x$Flags > -99) Generamos una función f que se utilizará para fijar un filtro de manera que cualquier spot marcado con ( flag de) -99 o menos tenga peso cero.

RGpumilio <- read.maimages(targetspumilio$FileName, source="genepix", wt.fun=f)

Los nombres de los archivos guardados en targetspumilio permiten identificar la información de intensidades contenida en los archivos de salida del procesamiento de imágenes, en este caso son archivos con extensión .gpr

Normalización entre microarrays ( en limma ):

Page 74: ¿Cómo analizar los datos crudos de microarrays?

74

experimentospumiliocorregidosporRMA <- backgroundCorrect(RGpumilio, method="rma") Generamos un objeto experimentospumiliocorregidosporRMA que contiene los datos de la corrección por “rma”, que es la recomendada por la guía de usuarios de limma para los datos de GenePix.experimentospumilionormalizadosporprinttip <- normalizeWithinArrays(experimentospumiliocorregidosporRMA) # por defecto es print tip loessGeneramos un objeto experimentospumilionormalizadosporprinttip que contiene los datos de la normalización por grupo de print-tip de los datos previamente corregidos por rma (experimentospumiliocorregidosporRMA ). experimentospumilionormalizadosporprinttipycuantiles<-normalizeBetweenArrays(experimentospumilionormalizadosporprinttip,RG$printer,method="quantile")Generamos un objeto experimentospumilionormalizadosporprinttipycuantiles que contiene los datos de la normalización por cuantiles de los datos experimentospumilionormalizadosporprinttip.experimentospumilionormalizadosporvsn<-normalizeBetweenArrays(experimentospumiliocorregidosporRMA,RG$printer,method="vsn")Generamos un objeto experimentospumilionormalizadosporprinttipyvsn que contiene los datos de la normalización por cuantiles de los datos experimentospumilionormalizadosporprinttip.

Page 75: ¿Cómo analizar los datos crudos de microarrays?

75

par(mfrow=c(2,2))Generamos espacio de 2 x 2 gráficos.

plotDensities(experimentospumiliocorregidosporRMA)text(15,0.8,"RMA")Generamos un gráfico de las densidades en función de la intensidad de experimentospumiliocorregidosporRMA.

plotDensities(experimentospumilionormalizadosporprinttip)text(15,0.45,"print tip")Generamos un gráfico de las densidades en función de la intensidad de experimentospumilionormalizadosporprinttip.

plotDensities(experimentospumilionormalizadosporprinttipycuantiles)text(15,0.25,"cuantiles")Generamos un gráfico de las densidades en función de la intensidad de experimentospumilionormalizadosporprinttipycuantiles.

plotDensities(experimentospumilionormalizadosporvsn)text(15,0.12,"vsn")Generamos un gráfico de las densidades en función de la intensidad de experimentospumilionormalizadosporprinttipyvsn.

Normalización entre microarrays ( en limma ): veámoslo en gráficos

Page 76: ¿Cómo analizar los datos crudos de microarrays?

76

0 5 10 15

0.0

0.4

0.8

1.2

RG densities

Intensity

Den

sity RMA

5 10 15

0.0

0.2

0.4

0.6

RG densities

Intensity

Den

sity

print tip

4 6 8 10 14

0.00

0.10

0.20

0.30

RG densities

Intensity

Den

sity

cuantiles

0 5 10 15 20

0.00

0.05

0.10

0.15

RG densities

Intensity

Den

sity

vsn

Nos quedamos con esta normalización:

Print-tip + cuantiles

Page 77: ¿Cómo analizar los datos crudos de microarrays?

77

Identificación de genes diferencialmente expresados

Gráficos y tablas de genes diferencialmente expresados

Page 78: ¿Cómo analizar los datos crudos de microarrays?

78

OK, ahora que ya tenemos los datos normalizados, necesitamos saber en que canales ( Cy3 – Cy5 ) está hibridada cuál de las dos muestras ( RNA total – RNA inmunoprecipitado con pumilio ) en cada uno de los microarrays que analizamos, clickeamos el botón view de la página de Stanford de la cuál bajamos nuestros datos:

Page 79: ¿Cómo analizar los datos crudos de microarrays?

79

RNA total Cy3 = canal 1RNA IP Cy5 = canal 2

Page 80: ¿Cómo analizar los datos crudos de microarrays?

80

Exp ID Cy3 Cy5

52987 RNA total RNA IP

53530 RNA total RNA IP

54253 RNA total RNA IP

54596 RNA total RNA IP

Aquí observamos un gran error que hicieron nuestros amigos de Stanford en cuanto al diseño experimental: NO hicieron dye swapping en este experimento,

RECUERDEN REALIZAR DYE SWAPPING EN SUS EXPERIMENTOS!!!!!

Page 81: ¿Cómo analizar los datos crudos de microarrays?

81

Podemos adoptar el siguiente modelo lineal para nuestro experimento:

ME

Cy

CyE

IPRNA

totalRNAE

3

5log

_

_log 22

o, equivalentemente:

ME

Cy

CyE

5

3log2 para un dye-swap:

Cy3 Cy5matriz de

diseño

RNA IP RNA total 1

RNA total RNA IP -1

La matriz de diseño para un experimento con dye-swap sería:

Page 82: ¿Cómo analizar los datos crudos de microarrays?

82

Si asignamos β = E(log2 RNA totalCy5/RNA IPCy3) nos queda una grilla de este tipo:

Con estos datos creamos una matriz de diseño del experimento que será la siguiente : design = c(-1,-1,-1,-1) para estimar la relación RNA_total/RNA_IP (el inverso de M, ya que aquí marcamos con Cy5 a RNA IP).

Exp ID

52987

53530

54253

54596

Cy3/Cy5

-1

-1

-1

-1

Cy5/Cy3

1

1

1

1

-M M

Page 83: ¿Cómo analizar los datos crudos de microarrays?

83

pumiliofit1 <-lmFit(experimentospumilionormalizadosporprinttipycuantiles, design=c(-1,-1,-1,-1))Generamos un objeto pumiliofit1 que contiene los datos de M ajustados de cada gen (previamente normalizados) con la función lmFit. Ésta, por defecto realiza un ajuste por cuadrados mínimos ordinario. Tiene opciones para incluir una estructura de covarianzas de los errores y un ajuste robusto. La matriz design indica cuáles arreglos son dye-swaps.

pumiliofit <- eBayes(pumiliofit1)La función eBayes calcula el estadístico t moderado (Lönnstedt and Speed 2001) y un p-valor, para cada gen.

summary(pumiliofit) Nos muestra las características de pumiliofit.

Page 84: ¿Cómo analizar los datos crudos de microarrays?

84

tablatop10Bpumilio <-topTable(pumiliofit,coef=1,number=10,genelist=pumiliofit$genes, adjust.method="BH",sort.by="B",resort.by=NULL)Generamos un objeto que contiene una tabla con los diez primeros genes con score mayor para el valor estadístico B

tablatop10BpumilioVisualizamos tablatop10Bpumilio.

tablatop10tpumilio <- topTable(pumiliofit,coef=1,number=10,genelist=pumiliofit$genes, adjust.method="BH",sort.by="t",resort.by=NULL)Generamos un objeto que contiene una tabla con los diez primeros genes con score mayor para el valor estadístico t (t de student).

tablatop10Mpumilio <- topTable(pumiliofit,coef=1,number=10,genelist=pumiliofit$genes, adjust.method="BH",sort.by="M",resort.by=NULL)Generamos un objeto que contiene una tabla con los diez primeros genes con score mayor para el valor de M.

Tablas de genes diferencialmente expresados:

Page 85: ¿Cómo analizar los datos crudos de microarrays?

85

Page 86: ¿Cómo analizar los datos crudos de microarrays?

86

tablatop17000Bpumilio <-topTable(pumiliofit,coef=1,number=17000,genelist=pumiliofit$genes, adjust.method="BH",sort.by="B",resort.by=NULL)Generamos un objeto que contiene una tabla con los 17000 primeros genes con score mayor para el valor estadístico B (Bonferroni).

pumiliomenoresa00000001<-subset(tablatop17000Bpumilio,P.Value<0.0000001,c(ID, Name,M,A,t,P.Value,B))Generamos un objeto que contiene una tabla con todos los genes con un estadístico p menor a 0.0000001.

dim(pumiliomenoresap00000001)Nos dice las dimensiones de ese objeto ( cuantos genes contiene ).

Pumiliomenoresap00000001Visualizamos pumiliomenoresap00000001.

Page 87: ¿Cómo analizar los datos crudos de microarrays?

87

Page 88: ¿Cómo analizar los datos crudos de microarrays?

88

M<-pumiliofit$coefficientsGeneramos un objeto M que contenga los datos del espacio coefficients ( valores M ) de pumiliofit.

A<-pumiliofit$AmeanGeneramos un objeto A que contenga los datos del espacio Amean ( valores A ) de pumiliofit.

plot(A,M,pch=".",col="lightblue",cex=3,main="Valores de M ")Generamos un gráfico de M vs. A .

points(tablatop10Bpumilio$A[1],tablatop10Bpumilio$M[1],pch=“?",col="blue",cex=2);text(12.27,4.738,"CG2229")Generamos un punto en el gráfico anterior, que representa al gen con mejor score de tablatop10Bpumilio, ubicándolo espacialmente por su A ( 12.27 ) y M ( 4.738 ).

points(tablatop10Mpumilio$A[1],tablatop10Mpumilio$M[1],pch=“?",col="blue",cex=2);text(9.206855,-6.772648,"CG7979")Generamos un punto en el gráfico anterior, que representa al gen con mejor score de tablatop10Mpumilio, ubicándolo espacialmente por su A (9.206855 ) y M (-6.772648 ).

Puedo ver en un gráfico MA cuáles son los genes top score de expresión diferencial, con respecto a diferentes criterios de selección ( M, t o B):

Page 89: ¿Cómo analizar los datos crudos de microarrays?

89

Page 90: ¿Cómo analizar los datos crudos de microarrays?

90

genquemeinteresa<-subset(tablatop17000Bpumilio,ID=="CT4618.a",c(ID,Name,M,A,t,P.Value,B))Genero un objeto genquemeinteresa que contenga los datos y estadísticos siguientes: ID,Name,M,A,t,P.Value,B del gen con ID CT4618.a .

genquemeinteresaVisualizo los datos del objeto genquemeinteresa.

También puedo buscar que datos estadísticos de expresión diferencial presenta un gen x del cuál conozco su nombre o ID:

Page 91: ¿Cómo analizar los datos crudos de microarrays?

91

ordinary.t <- pumiliofit$coef / pumiliofit$stdev.unscaled / pumiliofit$sigmaGeneramos un objeto que contiene los datos de coef, stdev.unscaled y sigma de pumiliofit.ordM <- order(abs(pumiliofit$coefficients),decreasing=TRUE)Generamos un objeto que contiene los datos ordenados de M (coefficients) en orden decreciente (valores absolutos).ordB <- order(pumiliofit$lods,decreasing=TRUE)Generamos un objeto que contiene los datos ordenados de B (lods) en orden decreciente.ordt <- order(abs(ordinary.t),decreasing=TRUE)Generamos un objeto que contiene los datos ordenados de t (ordinary.t) en orden decreciente (valores absolutos).vector <- rep(0,17664)Generamos un vector de tantos valores como spots tengael array ( 0 a 17664 en éste caso).top100M <- ordM[1:100]Generamos un objeto que contenga los 100 primeros valores de ordM.top100B <- ordB[1:100]Generamos un objeto que contenga los 100 primeros valores de ordB.top100t <- ordt[1:100]Generamos un objeto que contenga los 100 primeros valores de ordt.

También podemos intersectar los 100 genes con mayores valores de M, B y t, los cuáles van a ser los mayores candidatos a estar diferencialmente expresados:

Page 92: ¿Cómo analizar los datos crudos de microarrays?

92

M <- vectorAsigno a M el objeto vector.B <- vectorAsigno a B el objeto vector.t <- vectorAsigno a t el objeto vector.B[top100B]<-1A los elementos de top100B que estén en el vector B, les asigno un valor de 1.t[top100t]<-1A los elementos de top100t que estén en el vector t, les asigno un valor de 1.M[top100M]<-1A los elementos de top100M que estén en el vector M, les asigno un valor de 1.interseccion <- (B*t*M)/(B*t*M)Genero un objeto interseccion que contiene los datos resultantes de dicha operación entre vectores.interseccionVisualizamos intersección.

Page 93: ¿Cómo analizar los datos crudos de microarrays?

93

gen 10020

gen 10328

Page 94: ¿Cómo analizar los datos crudos de microarrays?

94

Names<-pumiliofit$genes$NameGeneramos un objeto Names que contiene los datos de nombres de genes de pumiliofit.

diferencial10020<-Names[10020]Generamos un objeto que contenga el nombre del gen 10020.

diferencial10020Visualizamos a diferencial10020.

¿Cómo se qué gen es el 10020?

Page 95: ¿Cómo analizar los datos crudos de microarrays?

95

pumiliointerseccion2 <- data.frame (interseccion, Names)Generamos un objeto pumiliointerseccion2 que contiene dos columnas de datos, en la primera interseccion y en la segunda names.

subset (pumiliointerseccion2 , interseccion = =1)Visualizamos los elementos de pumiliointerseccion2 que tienen un valor de la columna correspondiente a interseccion = 1 ( recordar que los elementos de intersección entre t, B y M tienen valor =1).

¿Cuáles son los genes de la intersección entre t, B y M?:

Page 96: ¿Cómo analizar los datos crudos de microarrays?

96

subset (pumiliointerseccion2, Names==“Vha16”)Exploramos los elementos de pumiliointerseccion2 que contienen datos acerca del gen de nombre “Vha16”.

Existen varios spots del gen Vha16, uno de los cuáles está en la intersección de los estadísticos t, B y M.

Page 97: ¿Cómo analizar los datos crudos de microarrays?

97

M1 <- pumiliofit$coefficientsGeneramos un objeto M1 que contenga los datos de M (coefficients) de pumiliofit.A <- pumiliofit$AmeanGeneramos un objeto A que contenga los datos de A (Amean) de pumiliofit.par(mfrow=c(1,2))Generamos un espacio de 2 gráficos.plot(A,M1,pch='.', col="green")Generamos un gráfico de MA con los objetos M1 y A.points(A*interseccion,M1*interseccion, pch="*")Generamos puntos * en los datos correspondientes a la intersección.points(tablatop10Mpumilio$A[1],tablatop10Mpumilio$M[1],pch="*",col="blue",cex=2);text(9.206855,-6.772648,"CG7979“)Generamos un punto * azul en el dato correspondiente al primer gen de tablatop10Mpumilio.plot(A, ordinary.t, ylab="t",pch=".",col="green")Generamos un gráfico de tA.points(A*interseccion,ordinary.t*interseccion , pch="*")Generamos puntos * en los datos correspondientes a la intersección.

Graficamos los genes de la intersección sobre MA y tA:

Page 98: ¿Cómo analizar los datos crudos de microarrays?

98

points(tablatop10tpumilio$A[1],tablatop10tpumilio$ordinary.t[1],pch="*",col="blue",cex=2);text(12.267057,4.738344,"CG2229")Generamos un punto * azul en el dato correspondiente al primer gen de tablatop10tpumilio.

Page 99: ¿Cómo analizar los datos crudos de microarrays?

99

Gracias por venir!!!!!!!!!!!!!!!!!!

Está claro que ahora no van a tener más dudas……jajaja……….pero en caso de que las tengan…………….

http://www.dm.uba.ar/materias/analisis_expl_y_conf_de_datos_de_exp_de_marrays_Mae/2006/1/Página de la materia Análisis Exploratorio y Confirmatorio de Datos de Experimentos de Microarrays dictada por la Dra. Diana Kelmansky.