Trabajo Fin de Máster - Universidad de Granada

Anuncio
Universidad de Granada
Máster Oficial en Estadística Aplicada
Trabajo Fin de Máster
Análisis de datos en Bioinformática: Asociación entre
mutaciones puntuales y patrones de expresión génica
Autor: Daniel Parras Burgos
Tutora UGR: Yolanda Román Montoya
Tutor Genyo: Pedro Carmona Sáez
Septiembre 2014
A Charlene,
Por su paciencia y apoyo incondicional
Índice
1. Introducción ............................................................................................................1
1.1 La Bioinformática...................................................................................................... 1
1.2 El material genético y los genes ................................................................................ 2
1.3 Expresión génica: El dogma central de la biología molecular .................................. 6
1.4 Alteraciones en el material genético: Polimorfismos de nucleótido simple
(SNPs) y variaciones del número de copias (CNV) .................................................. 8
1.5 El genotipo .............................................................................................................. 10
1.6 La tecnología de PCR para medir expresión génica y genotipado .......................... 11
2. Objetivos ................................................................................................................17
3. Resultados esperados ............................................................................................17
4. Materiales y métodos .............................................................................................19
4.1 Flujo de trabajo del análisis de expresión diferencial: Método
................... 19
4.2 Selección de los genes endógenos más estables: Método „geNorm‟ ....................... 27
4.3 Asociación entre SNP/CNV y patrones de expresión génica .................................. 28
5. Resultados ...............................................................................................................31
5.1 Implementación de funciones en R para procesado y análisis de datos de qPCR .. 32
5.1.1 Carga de datos ......................................................................................... 32
5.1.2 Preparación de los datos .......................................................................... 37
5.1.3 Selección de los genes endógenos más estables ...................................... 42
5.1.4 Normalización: Cálculo de
5.1.5 Cálculo de
.............................................................. 46
...................................................................................... 47
5.1.6 El problema de los Undetermined ........................................................... 51
5.2 Estudio de la asociación entre SNP/CNV y patrones de expresión génica ............. 53
5.2.1 Función para el estudio de la asociación ................................................. 53
5.2.2 Análisis de asociación entre número de copias y expresión en cáncer
de próstata ............................................................................................... 56
i
6. Conclusiones ...........................................................................................................62
7. Apéndices ................................................................................................................64
7.1 R y Bioconductor..................................................................................................... 64
7.1.1 Libro „ReadqPCR‟ ................................................................................... 65
7.1.2 Libro „NormqPCR‟ .................................................................................. 66
7.1.3 Libro „limma‟ .......................................................................................... 67
7.2 Funciones y código .................................................................................................. 68
7.2.1 Anexo 1 ................................................................................................... 68
7.2.2 Anexo 2 ................................................................................................... 77
7.2.3 Anexo 3 ................................................................................................... 82
8. Bibliografía y webgrafía .......................................................................................84
ii
iii
Análisis de datos en Bioinformática
Daniel Parras Burgos
1. Introducción
Durante los últimos años la investigación biomédica ha sufrido una enorme revolución gracias
al desarrollo de metodologías analíticas de alto rendimiento. Estas nuevas técnicas están
generando cantidades ingentes de datos que están permitiendo caracterizar y analizar los
mecanismos moleculares asociados a distintas patologías.
No obstante, la gran cantidad de datos generados hace necesario el desarrollo de metodologías
eficientes para su almacenaje, análisis e interpretación. Esto ha conllevado a un desarrollo
enorme del campo de la Bioinformática.
Siendo éste el marco donde se plantea el presente trabajo, se tratará de desarrollar una solución
analítica para el tratamiento y análisis de datos procedentes de experimentos de qPCR, en
concreto, estudios de asociación entre expresión y genotipado. Este tipo de datos a menudo
supone la manipulación de cientos e incluso miles de genes en muestras que pueden estar
formadas por cientos de pacientes. Es por ello que el análisis e integración de estas grandes
cantidades de datos sería en la práctica imposible sin las adecuadas herramientas informáticas y
estadísticas.
Por consiguiente, se desarrollarán una serie de funciones que efectuarán la carga apropiada de
dichos datos así como llevarán a cabo la manipulación y extracción de información relevante de
los mismos. La realización de estas tareas de la forma más automatizada posible facilitará que,
en un futuro próximo, dichas funciones acaben siendo integradas en un paquete de software que
está siendo desarrollado en el Centro Pfizer-Universidad de Granada-Junta de Andalucía de
Genómica e Investigación Oncológica (GENYO) y que facilitará la labor científica de sus
investigadores.
1.1 La Bioinformática
Hasta fechas recientes, la investigación en Biología Molecular venía llevándose a cabo
principalmente en laboratorios experimentales donde el estudio de los datos generados, relativos
a unos pocos genes o proteínas, podía abordarse sin problemas por el propio investigador. Sin
embargo, ante el crecimiento desmesurado en la generación de datos, se hizo necesario
desarrollar una serie de herramientas computacionales que permitiesen la gestión y extracción
1
Análisis de datos en Bioinformática
Daniel Parras Burgos
de la información contenida en los mismos. Fue en este punto donde la Bioinformática comenzó
a dar sus primeros pasos.
La Bioinformática es, por tanto, la disciplina científica que engloba biología, computación y
tecnologías de la información. Según la definición del Centro Nacional para la Información
Biotecnológica (NCBI): “El fin último de este campo es facilitar el descubrimiento de nuevas
ideas biológicas así como crear perspectivas globales a partir de las cuales se puedan discernir
principios unificadores en Biología”.
Entre las principales áreas de las que consta la Bioinformática, cabría destacar la del desarrollo
de herramientas para el manejo de diversos tipos de información biológica, así como la del
desarrollo de nuevos algoritmos y soluciones estadísticas para el análisis de grandes conjuntos
de datos.
El desarrollo de esta disciplina ha dado lugar, entre otros logros, al avance en la detección
precoz y tratamiento de numerosas enfermedades mediante el estudio de la secuencia del ADN
y las mutaciones que en ella suceden a partir de la información obtenida de bases de datos de
secuencias genéticas, proteínas, mutaciones, etc. y del análisis y búsqueda de patrones en las
mismas. Fue así como, por ejemplo, se descubrió que en el cromosoma 17 se encuentra el gen
BRCA1, y que un cambio en uno de sus nucleótidos puede provocar cáncer de mama y de
ovario.
1.2 El material genético y los genes
El material genético
El ácido desoxirribonucleico o ADN es la molécula que contiene la información genética
utilizada por una célula para la síntesis de proteínas. Éste está constituido por una secuencia
formada por la combinación de cuatro bases nitrogenadas diferentes: la adenina (A), la citosina
(C), la guanina (G) y la timina (T).
El ADN se estructura como una doble hélice con dos cadenas antiparalelas donde hay una
complementariedad entre las bases que forman ambas cadenas, de forma que una adenina (A)
sólo queda enfrentada con una timina (T) mientras que una citosina (C) sólo queda enfrentada
con una guanina (G). Las uniones entre estas dos cadenas se mantienen por los enlaces
moleculares que se establecen entre cada par de bases.
2
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 1: Diagrama de una cadena de ADN
El ácido ribonucleico o ARN es un ácido nucleico de cadena sencilla compuesto por los
nucleótidos adenina (A), citosina (C), guanina (G) y uracilo (U).
Los 3 tipos principales de ARN son:

mRNA: El ARN mensajero es el que transporta la información genética presente en los
genes hasta los ribosomas, en el citoplasma, donde se realiza la traducción de esa
información a una proteína. Constituye el molde para la síntesis de proteínas, siendo su
secuencia de nucleótidos complementaria al mensaje genético de un segmento de ADN.

tRNA: El ARN de transferencia transporta los aminoácidos en forma activa al ribosoma
para la formación de enlaces peptídicos a partir de la secuencia codificada por el mRNA
molde.

rRNA: El ARN ribosómico o ribosomal es el componente principal de los ribosomas.
Desempeña un papel tanto catalítico como estructural en la síntesis de proteínas.
3
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 2: Célula eucariota
Las principales diferencias entre el ADN y el ARN son:
Característica
ADN
ARN
Forma
Doble hélice
Hélice
Nucleótidos
Adenina (A), Citosina (C),
Adenina (A), Citosina (C),
Guanina (G) y Timina (T)
Guanina (G) y Uracilo (U)
Azúcar
Desoxirribosa
Ribosa
Función
Síntesis de proteínas y
Asiste al ADN en todas sus
replicación
funciones
4
Análisis de datos en Bioinformática
Daniel Parras Burgos
Los genes
Los genes son fragmentos del ADN formados por una secuencia de A, C, G y Ts que codifican
una molécula (proteína, ARN, etc.) con actividad biológica.
Las dos funciones principales de los genes son:

Contener la información genética, la cual se va transmitiendo de generación en
generación

Contener la información responsable de la formación de un organismo y su
funcionalidad
Una única cadena de ADN contiene miles de genes, cada uno de los cuales sintetiza una
proteína concreta. Los seres humanos tienen alrededor de 20.000 genes. Algunos son pequeños,
de una longitud de 300 bases mientras que otros pueden tener una longitud de millones. La
longitud y secuencia de un gen determina el tamaño y la forma de la proteína que sintetiza, lo
que a su vez determina la función que la proteína tendrá dentro del organismo.
Figura 3: Diagrama de la síntesis de proteínas
Es sabido que alteraciones en la secuencia que codifica los genes puede suponer que la molécula
que codifica no funcione bien, pudiendo dar lugar al desarrollo de patologías. Será el estudio de
estas alteraciones en forma de polimorfismos de nucleótido simple (SNPs) y variación del
número de copias (CNV) las que constituirán el eje de este trabajo.
5
Análisis de datos en Bioinformática
Daniel Parras Burgos
1.3 Expresión génica: El dogma central de la biología molecular
Francis Crick y James D. Watson descubrieron en 1953 la estructura molecular del ADN. A
partir de entonces, Crick comenzó a preguntarse cómo podía el ADN ser portador del código
genético y a la vez expresarlo mediante la síntesis de proteínas, teniendo en cuenta que dicho
ADN se encontraba dentro del núcleo de la célula mientras que las proteínas eran sintetizadas
fuera del mismo.
ADN
¿?
Proteínas
Fue entonces cuando el ARN surgió como el mejor candidato, el cual presentaba una estructura
muy similar al ADN y era capaz de desplazarse desde el interior del núcleo al exterior.
Por tanto, Crick postuló que el ADN generaba una copia similar de sí mismo, la cual era
transportada hacia el citoplasma, donde tenía lugar la síntesis de proteínas.
El proceso consiste en tres etapas:

Replicación: En primer lugar, el ADN es replicado siguiendo el proceso habitual.

Transcripción: Posteriormente, esta hebra es separada para que el ARN polimerasa
pueda actuar y sintetizar una hebra complementaria, cambiando la timina por uracilo.
Esto da lugar al ARN mensajero, el cual es llevado al citoplasma mientras que la hélice
de ADN es cerrada de nuevo.

Traducción: Una vez en el citoplasma el ARN se une al ribosoma, el cual lee la
secuencia de nucleótidos y une aminoácidos para dar lugar a proteínas. Cada tres
nucleótidos de la cadena de ARN forman una unidad funcional denominada codón.
Existen 64 codones diferentes, de los que 61 acabarán traduciéndose a un aminoácido
determinado mientras que los otros 3 son una señal de que la traducción a proteína ha
concluido. Cada uno de estos 61 codones codifican uno de los 20 aminoácidos que
componen las proteínas (diferentes codones pueden codificar el mismo aminoácido). El
proceso de traducción se da lugar en los ribosomas, los cuales recibirán la molécula de
ARN mensajero y leerán de tres en tres los nucleótidos que lo componen, colocando
para cada triplete el aminoácido correspondiente. Así, el conjunto de todos los
6
Análisis de datos en Bioinformática
Daniel Parras Burgos
aminoácidos de una molécula de ARN mensajero traducida derivará en una proteína
determinada.
Figura 4: Dogma central de la biología molecular (1970)
Sin embargo, Howard Temin descubrió años más tarde la transcriptasa inversa, una enzima de
tipo ADN-polimerasa cuya función es sintetizar ADN de doble cadena utilizando como molde
una molécula de ARN, lo que supuso la modificación del dogma central de la biología
molecular. La encima transcriptasa inversa se encuentra presente en los retrovirus.
Figura 5: Dogma central de la biología molecular modificado
Así, la expresión génica es el medio por el que los organismos transforman la información
codificada por los nucleótidos en las proteínas necesarias para su desarrollo y funcionamiento.
A excepción de los genes constitutivos, que se expresan en todas las células del organismo y
sintetizan proteínas que son indispensables para su funcionamiento general, la expresión de los
demás genes depende de la función de la célula en un tejido concreto. Por ejemplo, genes que
codifican proteínas responsables del transporte de oxígeno en los músculos se expresan en el
tejido muscular pero no en linfocitos, donde se expresan genes responsables de la respuesta
inmune. También puede suceder que los diferentes genes que constituyen una célula funcionen
o dejen de hacerlo en diferentes momentos de la vida del organismo.
7
Análisis de datos en Bioinformática
Daniel Parras Burgos
La medición de la expresión génica generalmente se lleva a cabo cuantificando los niveles del
producto del gen, que es con frecuencia una proteína. Dicha expresión también puede ser
deducida a partir del nivel de ARN mensajero presente en la muestra. Es sabido que variaciones
en la expresión génica pueden estar asociadas a ciertas enfermedades, de ahí la importancia de
una medición precisa de la misma.
Una técnica muy utilizada de medición de la expresión génica que utiliza el ARN mensajero
para dicha cuantificación es la denominada transcripción inversa, seguida de la reacción en
cadena cuantitativa de la polimerasa (qPCR), que será la empleada en este trabajo y se explicará
con detalle más adelante.
1.4 Alteraciones en el material genético: Polimorfismos de nucleótido
simple (SNPs) y variación del número de copias (CNV)
Polimorfismos de nucleótido simple (SNPs)
Un polimorfismo de nucleótido simple o SNP es una variación de un solo nucleótido en el
material genético. Al conjunto de 23 cromosomas humanos se le denomina genoma, que a su
vez está compuesto por 3000 millones de pares de bases. El cambio de una única base con
respecto a la secuencia estándar se llama SNP.
Figura 6: Polimorfismo de nucleótido simple
8
Análisis de datos en Bioinformática
Daniel Parras Burgos
Cuando el cuerpo humano produce nuevas células, generalmente no comete muchos errores,
pero en ocasiones, cuando un fragmento del genoma se copia para crear una célula nueva, un
par de bases cambia. Ésta es la menor alteración que puede sufrir la secuencia de ADN de un
individuo, originándose por el intercambio recíproco de los nucleótidos: adenina, citosina,
guanina y timina, lo cual sucede aproximadamente cada 100 a 1000 bases, en cantidad variable
y distribución aleatoria a lo largo del genoma humano [1]. Para que una de estas variaciones sea
considerada un SNP debe ocurrir en al menos el 1% de la población. Por otro lado, el 90% de la
diversidad fenotípica humana, esto es, las características o rasgos observables de un individuo,
proviene de las variaciones heredadas en un solo SNP.
Es importante tener en cuenta que sólo algunos SNPs están localizados en zonas que codifican
proteínas (SNPs codificantes o cSNPs) mientras que la mayoría no. De hecho, sólo del 3 al 5%
del ADN humano corresponde a secuencias que codifican, pero constituyen un indicador de
suma utilidad para detectar potenciales anomalías génicas. Por tanto, aunque muchos SNPs no
tienen efecto sobre la función de la célula, una minoría podría influir en la predisposición a
determinadas enfermedades, en la respuesta a bacterias, virus o toxinas e incluso en la respuesta
a diferentes drogas y tratamientos. La estabilidad de los SNPs a lo largo de las generaciones los
convierte en óptimos para hacer estudios de poblaciones.
Por tanto, puesto que los SNPs son mutaciones que pueden afectar al funcionamiento de las
moléculas codificadas por los genes en los que se hallan presentes, éstos tienen una relación
directa con el desarrollo de ciertas enfermedades, de ahí la importancia de determinar qué SNPs
están asociados a las mismas y la necesidad de desarrollar herramientas que permitan el
establecimiento de dichas asociaciones.
Variación del número de copias (CNV)
La variación del número de copias (o CNV por las siglas en inglés de Copy Number
Variation) se da cuando el número de copias de un gen en particular cambia de un individuo a
otro en determinados segmentos de ADN iguales o mayores a 1 kb de bases.
A raíz de las evidencias obtenidas tras la finalización del Proyecto Genoma Humano, se llegó a
la conclusión de que el genoma experimenta ganancias y pérdidas de material. También se
observó que algunos cánceres están asociados con un número elevado de copias de ciertos genes
9
Análisis de datos en Bioinformática
Daniel Parras Burgos
y que esta variación del número de copias contribuye al padecimiento de ciertas enfermedades.
En el presente trabajo se considerará un número de copias de 2, 1 o ninguna copia.
Es importante destacar que tanto la presencia de SNPs como la variación del número de copias
puede variar la expresión génica, lo que, como se dijo en el apartado anterior, puede a su vez
asociarse al padecimiento de ciertas enfermedades, de ahí la importancia de estudiar la relación
existente entre SNP/CNV y patrones de expresión génica.
1.5 El genotipo
El genotipo es el conjunto de genes que contiene un organismo heredado de sus progenitores.
En humanos, la mitad de los genes se heredan del padre y la otra mitad de la madre.
Los genes encargados de la transmisión de los caracteres de la herencia siempre permanecen en
el núcleo de la célula, desde donde controlan la síntesis de proteínas. Por tanto, en el núcleo de
cada célula se dispone de dos cadenas entrelazadas de ADN, cada una con la información
procedente de cada uno de los progenitores. Para obtener el genotipo de una determinada
fracción de dichas cadenas, en el lugar de un SNP, por ejemplo, se ha de observar qué
nucleótido aporta cada una de ellas en esa posición y en la mitad de la cadena involucrada en la
síntesis del ARN mensajero.
Figura 7: Ejemplo de genotipo
10
Análisis de datos en Bioinformática
Daniel Parras Burgos
1.6 La tecnología de PCR para medir expresión génica y genotipado
Introducción
En 1983, Kary B. Mullis desarrolló una nueva técnica que hizo posible la síntesis de grandes
cantidades de un fragmento de ADN. A esta técnica se le dio el nombre de reacción en cadena
de la polimerasa, aunque es más conocida como PCR por sus siglas en inglés.
La PCR es un método que permite la amplificación de un fragmento particular de ADN de
forma exponencial a través de una repetición de ciclos con fases de diferente duración y a
diferentes temperaturas de incubación utilizando una enzima ADN polimerasa termoestable
[3,4]. De este modo, se consigue duplicar el material de partida tras cada ciclo, llegando a copiar
millones de veces un fragmento de ADN predeterminado por el investigador en un reducido
periodo de tiempo.
Una de sus principales características es su sensibilidad, pues en principio basta una única
molécula para iniciar el proceso de replicación. Además, es muy robusta pues permite emplear
productos biológicos diversos, como pueden ser tejidos conservados en parafina, raíces de
cabellos, mucosas, sangre, etc.
Esta técnica es fundamental para el análisis de datos de expresión génica y genotipado, pues
para la obtención de los mismos se requiere una cantidad suficientemente grande de producto
biológico que no siempre es de fácil obtención, haciéndose necesario disponer de una técnica
que permita su replicación de un modo controlado, robusto y eficiente.
¿Cómo funciona la PCR?
La reacción consta generalmente de 35-40 ciclos, cada uno de los cuales se divide en 3 pasos
(véase figura 8):

Desnaturalización: En primer lugar se comienza con la desnaturalización del ADN, que
consiste en la ruptura de los puentes de hidrógeno que une las dos cadenas, sometiendo
para ello a la muestra a una temperatura de unos 94ºC durante un minuto.
11
Análisis de datos en Bioinformática

Daniel Parras Burgos
Alineación del cebador: Seguidamente, se procede a la alineación de las cadenas
desnaturalizadas del ADN con los denominados cebadores o primers, que son ADN
sintético de hebra sencilla. Este proceso se lleva a cabo a una temperatura de unos 54ºC
durante 45 segundos, permitiendo de este modo el apareamiento de dichos primers con
las bases nitrogenadas (nucleótidos) complementarias de las cadenas de ADN ya
separadas.

Extensión del cebador: Por último, el tercer paso se efectúa a 72ºC, que es la
temperatura a la que la polimerasa extiende la longitud de los primers, añadiendo los
diferentes nucleótidos libres en el orden que le va dictando la secuencia de nucleótidos
de la cadena que actúa como molde [5]. El tiempo de extensión depende del tamaño de
la amplificación, debiendo tenerse en cuenta que para alargar 1000 nucleótidos se
requiere 1 minuto aproximadamente.
Figura 8: Esquema de la reacción en cadena de la polimerasa
Comportamiento exponencial de la amplificación
Una vez concluido el primer ciclo, el proceso se repite de nuevo, pero esta vez partiendo con un
número de cadenas de ADN que es el doble de las que se disponían al inicio. De este modo, se
va doblando el número de cadenas tras cada ciclo consiguiéndose un crecimiento exponencial.
12
Análisis de datos en Bioinformática
Daniel Parras Burgos
Teóricamente, tras 20 ciclos se obtendrían aproximadamente un millón de copias del fragmento
de ADN inicial; tras 30 ciclos, se obtendrían algo más de mil millones. Sin embargo, en la
práctica no se consigue este índice de crecimiento exponencial, quedando supeditada la cantidad
final de producto conseguido al número de cadenas de las que se partieron así como al número
de ciclos efectuados.
Podría pensarse que mediante este método sería posible obtener una cantidad ilimitada de
producto tan sólo efectuando de forma indefinida un ciclo tras otro. Sin embargo, al llegar a un
número de ciclos alto, puede darse lugar a la amplificación de productos no deseados originados
por alineaciones inespecíficas, por lo que es importante evitar que dicho número sea
excesivamente elevado. Por regla general, el umbral utilizado es de 35-40 ciclos.
Tras los primeros ciclos, la tasa de acumulación de producto se atenúa llegando a una fase
meseta, pasándose de un índice de crecimiento exponencial a un índice aritmético hasta que, a
partir del ciclo 35-40, se llega a una fase estacionaria. Si bien es cierto que, por lo general,
cuando se llega a dicha fase estacionaria, la cantidad de ADN sintetizado es suficiente para su
posterior utilización.
PCR en tiempo real o qPCR
La técnica de la PCR en tiempo real, PCR cuantitativa o simplemente qPCR permite cuantificar
la cantidad de ADN generado en tiempo real mediante la utilización de una señal fluorescente
que emite la propia sustancia sometida a replicación.
Las principales diferencias entre la PCR tradicional y la PCR cuantitativa se muestran en la
siguiente tabla:
PCR tradicional
PCR cuantitativa
Medida
Al final del proceso
En tiempo real
Resultado
Cualitativo
Cuantitativo
Sensibilidad
Baja
Alta
La PCR cuantitativa permite detectar en tiempo real la amplificación del fragmento de ADN de
interés. Para llevar a cabo dicha detección se recurre a otro fragmento de ADN, denominado
13
Análisis de datos en Bioinformática
Daniel Parras Burgos
sonda, el cual lleva adherido dos moléculas, una que emite fluorescencia (reporter) y otra que la
inhibe (quencher).
Figuras 9 y 10: Sonda antes y después de emitir fluorescencia
De este modo, la polimerasa irá avanzando completando con nucleótidos libres la cadena de
hebra simple hasta alcanzar la sonda. En este momento, la polimerasa romperá dicha sonda
sustituyendo los nucleótidos con los que ésta se había unido a la cadena y liberando así la
molécula que emite fluorescencia, que quedará fuera del influjo de la molécula que la inhibía.
Con cada ciclo, un número cada vez mayor de reporters quedarán libres de modo que, al ser
estimulados con la luz de un láser, éstos acabarán emitiendo suficiente fluorescencia como para
ser detectada por el fluorómetro del termociclador mientras la reacción de la PCR se está
llevando a cabo. El termociclador es la máquina que realiza todo el proceso de la PCR (figura
11).
Figura 11: Termociclador de qPCR 7300
De esta manera, si se empieza con una muestra clínica que tenía sólo una copia de ADN, podría
tomar 40 ciclos o más antes de que haya suficiente cantidad de replicaciones como para ser
detectadas por el fluorómetro. Si la muestra original contenía 32 veces más copias del ADN en
14
Análisis de datos en Bioinformática
Daniel Parras Burgos
cuestión, entonces la detección ocurriría en 5 ciclos menos de PCR. Del mismo modo, si en la
muestra original hubiera 1024 secuencias más de ADN, entonces la señal fluorescente sería
detectada 10 ciclos antes. Así, la cantidad de ADN en la muestra clínica es determinada en
referencia al ciclo de PCR en la que la curva de fluorescencia cruza el umbral de detección.
Por tanto, tras cada ciclo, la fluorescencia emitida crecerá de forma exponencial mientras el
termociclador hace lecturas en tiempo real de la misma, suministrando dicha información a la
computadora a la que se encuentra conectado. Como se mencionó con anterioridad, tales
lecturas se efectúan mediante un láser que estimula los reporters que han quedado libres tras
cada replicación, de modo que cuando la fluorescencia emitida es suficientemente intensa, ésta
será detectada y registrada.
Aplicaciones de la qPCR
La PCR en tiempo real es muy utilizada para cuantificar la carga viral en la sangre de pacientes
con el VIH, hepatitis B y otros virus. Pero el VIH es un virus de ARN, no tiene ADN, por lo que
en estos casos el proceso de replicación sería algo diferente. El ARN del virus se puede
cuantificar después de que haya sido copiado y convertido en ADN de doble cadena.
Para ello, en primer lugar, el ARN viral es liberado y una cadena de ADN complementario se
sintetiza a partir del mismo usando transcriptasa reversa purificada, tal como lo hace en la
replicación natural. Después, el ARN inicial es degradado mediante una enzima, dejando
únicamente la cadena de hebra simple recién sintetizada. El siguiente paso se produce cuando
una polimerasa y un primer generan una cadena de ADN complementario, tal como en la
reacción de PCR. Al final de este proceso, el ARN viral de una sola cadena se ha convertido en
ADN de doble cadena, que tiene la misma secuencia de bases de nucleótidos, por lo que ahora
se podría proceder a la reacción de PCR tal y como se describió en el apartado correspondiente.
Entre otras de las aplicaciones que la PCR en tiempo real tiene en medicina cabe destacar:

Cuantificación de expresión génica

Control de eficacia de fármacos

Detección de patógenos

Diagnóstico de tumores

Discriminación alélica (polimorfismos)
15
Análisis de datos en Bioinformática
Daniel Parras Burgos
De las cuales, la cuantificación de expresión génica y los polimorfismos ya fueron tratados
anteriormente.
16
Análisis de datos en Bioinformática
Daniel Parras Burgos
2. Objetivos
El principal objetivo de este trabajo es, por una parte, el de la implantación de un flujo de
trabajo para el tratamiento y análisis de datos procedentes de qPCR, y por otra el del desarrollo
de unas funciones de análisis que sean capaces de integrar datos de genotipado/número de
copias y de expresión generados con dicha tecnología. Los objetivos desglosados quedarían
como sigue:

Estudio de los fundamentos del procesamiento de datos de expresión y
genotipado/número de copias obtenidos con la tecnología de qPCR

Utilización de libros de R específicos para el análisis de datos de qPCR

Desarrollo de una funcionalidad analítica en el entorno estadístico de R para evaluar la
asociación de polimorfismos/número de copias y patrones de expresión usando el test
Anova

Prueba de esta metodología con datos de diferentes proyectos generados en la Unidad
de Genómica del Centro Pfizer-Universidad de Granada-Junta de Andalucía de
Genómica e Investigación Oncológica (GENYO)
3. Resultados esperados
Los resultados esperados tras la realización de este trabajo será el de un flujo de análisis usando
diferentes libros de R para el procesamiento de datos de qPCR en el contexto del análisis
integrado de datos de genotipado/número de copias y de expresión. Es de esperar llevar a cabo
esta implementación a partir de varias funciones de R que permitan el análisis automático de los
mismos.
La funcionalidad se restringirá al análisis de los datos obtenidos directamente de la máquina de
qPCR, procediendo posteriormente a la implementación de la función para la integración y
aplicación del test Anova o t-test a los datos de genotipado/número de copias y de expresión así
como a la generación de boxplots que permitan visualizar las asociaciones obtenidas.
17
Análisis de datos en Bioinformática
Daniel Parras Burgos
Esta funcionalidad tendrá una destacada importancia en un paquete de software que se está
implementando en la Unidad de Bioinformática de GENYO para análisis de experimentos de
qPCR, que incluirá la lectura, preparación de los datos, selección de los genes endógenos más
estables para normalizar, normalización y cálculo de
, entre otros, y que podrá gestionar la
mayoría de formatos de datos de qPCR, además del considerado en el presente trabajo.
18
Análisis de datos en Bioinformática
Daniel Parras Burgos
4. Materiales y métodos
4.1 Flujo de trabajo del análisis de expresión diferencial: Método
El flujo de trabajo del análisis de expresión diferencial comienza con la obtención de los datos
de expresión mediante la tecnología qPCR, que son proporcionados a través de un fichero de
texto plano que genera la propia máquina de qPCR. A continuación, ha de crearse el archivo
„phenodata‟, en el que se debe especificar qué muestras constituyen casos y qué otras
constituyen controles. Seguidamente, se procede a cargar los datos en R mediante una función
de lectura específica del libro „ReadqPCR‟ (véase apéndice 7.1.1), la cual creará un objeto de
tipo qPCRBatch.
Una vez se tienen los datos en el formato adecuado, se obtendrán los genes endógenos más
estables mediante el método „geNorm‟, del que hay una función implementada en el libro
„NormqPCR‟ (véase apéndice 7.1.2). Esta función proporcionará, además, los gráficos
necesarios para decidir el número de genes endógenos que deberán utilizarse en la
normalización.
Se procederá entonces a la normalización propiamente dicha mediante otra función del libro
„NormqPCR‟, que devolverá una matriz con los datos de expresión normalizados de todos los
genes para todas las muestras.
Para finalizar, se utilizará la función correspondiente del libro „limma‟ (véase apéndice 7.1.3)
para obtener los
así como los p-valores asociados, y se presentarán los resultados de una
forma adecuada.
19
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 12: Flujo de trabajo del análisis de expresión diferencial
El método
Los dos métodos más utilizados para analizar datos procedentes de la qPCR son la
cuantificación absoluta y la cuantificación relativa.
La cuantificación absoluta determina el número de copias de entrada, normalmente relacionando
la señal PCR con una curva estándar. Ésta debería utilizarse en situaciones en las que fuera
necesario determinar el número total de copias obtenidas. Si bien es cierto, en algunas
situaciones puede no ser necesaria la obtención de este número total de copias, siendo suficiente
determinar el cambio relativo en la expresión del gen. Por ejemplo, puede ser más relevante
determinar que la expresión de un determinado gen es 3,2 veces mayor al aplicar cierto
tratamiento que obtener que, para dicho tratamiento, la expresión de ese mismo gen se
incrementó de 1000 copias a 3200 copias.
Por otro lado, la cuantificación de los cambios relativos en la expresión génica utilizando datos
procedentes de la qPCR requiere ciertas ecuaciones, consideraciones y la comprobación de estas
consideraciones para analizar los datos adecuadamente. De este modo, el método
será
descrito y posteriormente utilizado para calcular los cambios relativos en la expresión génica a
partir de experimentos basados en la qPCR.
20
Análisis de datos en Bioinformática
Daniel Parras Burgos
Desarrollo del método
¿Qué es el
?
En el apartado de la PCR se explicó que las muestras de ADN eran sometidas a una serie de
ciclos que constaban de 3 fases de longitud y temperatura variables. Con ello se conseguía
doblar la cantidad de producto (cadenas de ADN) tras cada uno de dichos ciclos.
Es tarea del investigador establecer el umbral a partir del cual se considera que las muestras
emiten suficiente fluorescencia, de modo que un determinado gen se expresará más o menos
dependiendo del ciclo en que se alcance dicho umbral. Por ejemplo, en la figura 13 se observa
que el gen correspondiente a la curva violeta ha alcanzado el umbral en el ciclo 29, mientras que
el correspondiente a la curva roja lo ha hecho en el ciclo 31,5. Esto implica que, en principio, el
primero se expresa más que el segundo pues ha alcanzado el umbral de fluorescencia en un ciclo
inferior.
El
es, por tanto, el ciclo en que se alcanza el umbral de fluorescencia establecido por el
investigador.
Por regla general, si un determinado gen no supera dicho umbral al cabo de 35-40 ciclos (a
criterio del investigador), al
asociado se le asigna el valor “Undetermined”, o bien el valor
del ciclo máximo, por ejemplo, 40, lo que implicará que el gen en cuestión se ha expresado muy
poco o no se ha expresado en absoluto.
21
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 13: Curvas de la qPCR
Derivación
En primer lugar se definirán algunos conceptos a modo de glosario para facilitar la comprensión
de lo que sigue.

Genes target: Son los genes procedentes tanto de tejidos sanos como de tejidos
afectados por la enfermedad bajo estudio

Genes endógenos, controles endógenos o housekeeping genes: Son los genes
procedentes tanto de tejidos afectados como de tejidos sanos que, por su estabilidad a la
hora de expresarse, se emplearán en la normalización de los genes target, haciendo
comparables las muestras target y las muestras control

Muestras target: Son las muestras procedentes de tejido afectado por la enfermedad
bajo estudio

Calibradores o muestras control: Son las muestras procedentes de tejido sano. Las
muestras target serán comparadas con las muestras control para determinar cuánto más
se expresan las primeras con respecto a las segundas
22
Análisis de datos en Bioinformática
Daniel Parras Burgos
La ecuación que describe la amplificación exponencial de la PCR es
,
donde
es el número de cadenas de ADN alcanzado en el ciclo
número de cadenas de ADN inicial,
ciclos. El ciclo umbral (
de la reacción,
es la eficiencia de la amplificación y
es el
es el número de
) indica el ciclo y la fracción de ciclo en el que la cantidad de
producto ha alcanzado el umbral fijado. Así
donde
y
es el número de cadenas de ADN umbral,
es el ciclo umbral de la amplificación
es una constante. Por otro lado, se tiene una ecuación similar para la reacción de los genes
endógenos (aquellos que se utilizarán para la normalización)
donde
es el número de cadenas de ADN umbral para dichos genes endógenos,
número inicial de cadenas de ADN,
umbral de la amplificación y
Al dividir
entre
es la eficiencia de la amplificación,
es el
es el ciclo
es una constante.
se obtiene la expresión
Utilizando sondas TaqMan (véanse figuras 9 y 10) para la amplificación en tiempo real, los
valores exactos de
y
dependen de varios factores, como pueden ser el tinte utilizado para
el reporter, las propiedades de fluorescencia de la sonda, la eficiencia de escisión de la sonda, la
pureza de la misma así como el establecimiento del umbral de fluorescencia. Por tanto, la
constante
no tiene por qué ser igual a 1. Asumiendo que las eficiencias para los genes target y
para los genes endógenos son las mismas, se tiene
23
Análisis de datos en Bioinformática
donde
Daniel Parras Burgos
es igual a la cantidad normalizada de los genes target (
)y
diferencia en los ciclos umbrales entre los genes target y los genes control (
Despejando
es igual a la
).
, se obtiene
El paso final consiste en dividir
de cualquier muestra
por el
de la muestra control o
calibrador (cb):
Nótese que
.
Por tanto, el fold-change (o veces que más se expresa) de un gen target normalizado utilizando
genes endógenos con respecto a un calibrador viene dado por la expresión
Selección de controles endógenos y calibrador
Un control endógeno es un gen cuya expresión se mantiene relativamente constante en las
condiciones del experimento (entre diferentes tejidos, durante el tratamiento o estimulación, etc)
y que está presente en todos los tipos celulares. Sirve para corregir diferencias de expresión
relacionadas con diferencias en la cantidad de ARN total de las muestras.
No existe un control endógeno idóneo para todos los tipos de experimentos. Es, por tanto, tarea
del investigador decidir qué gen o genes endógenos varían lo menos posible en unas
condiciones experimentales determinadas. Es posible que para el mismo tejido pero diferentes
condiciones experimentales, el gen endógeno a utilizar deba ser diferente.
Entre los controles endógenos más utilizados, se encuentran
24
Análisis de datos en Bioinformática

Beta-actina

GAPDH

Beta-2-microglobulina

TATA box binding protein (TBP)

Ciclofilina (varios tipos, mejor la ciclofilina B)

18S rRNAs

Receptor de transferrina

HPRT

Ribosomal protein, large PO

Phosphoglycerate kinase 2 (PGK2)

Factor de elongación 1 alpha

β-glucuronidasa
Daniel Parras Burgos
Al proceso de eliminación de estas variaciones debidas a las condiciones experimentales
mediante el uso de genes endógenos se le llama normalización. Una vez normalizada una
muestra target y una muestra control (calibrador), estas son comparables entre sí, siendo posible
determinar el fold-change asociado.
Para la normalización puede disponerse de un único gen endógeno para todas las muestras o de
un conjunto de ellos, de los que habría que calcular su expresión media. En este trabajo se va a
hacer uso de una tercera opción, la cual consiste en, de entre una lista de genes endógenos,
seleccionar aquéllos más estables, procediendo posteriormente a obtener su expresión media.
En cuanto al calibrador, éste depende del tipo de experimento de expresión génica a llevar a
cabo. El diseño más simple consiste en utilizar un control no tratado (si se están comparando,
25
Análisis de datos en Bioinformática
Daniel Parras Burgos
por ejemplo, tejidos de pacientes que han sido tratados o no con un determinado fármaco), o
bien, un control de tejido sano (si se están comparando tejidos de pacientes con alguna
enfermedad con tejidos de pacientes sanos). Será éste último el calibrador a utilizar en el
presente trabajo.
Utilizando el método
, los datos son presentados, por tanto, como el fold-change en la
expresión génica normalizada con uno o varios controles endógenos y relativo a un calibrador o
muestra control.
Para la muestra control,
será igual a cero y por tanto
será igual a uno, por lo que el
fold-change en la expresión génica relativa a la muestra control es igual a uno, por definición.
Para la muestra target, la evaluación de
indicará el fold-change en la expresión génica
relativa a la muestra control.
En el ejemplo mostrado en la figura 14, se tiene que la muestra control está constituida por
tejido humano procedente del cerebro mientras que la muestra target procede del riñón.
La columna c-myc
se corresponde con los
(número de ciclos de la qPCR hasta que
alcanzaron el umbral de fluorescencia establecido) del gen target y la columna GADPH
corresponde con los
se
del control endógeno.
Figura 14: Aplicación del método
a muestras procedentes de cerebro y riñón
Como se observa, en la tercera columna se obtiene el
, que resulta de la diferencia entre la
primera y la segunda columna. Los valores así obtenidos son los datos normalizados.
26
Análisis de datos en Bioinformática
Daniel Parras Burgos
A continuación se calcula la media de las 6 muestras de cada tipo de tejido obteniendo un valor
de 6,93 para la muestra control así como un valor de 4,47 para la muestra target. Seguidamente
se procede a calcular el
, que viene a ser la diferencia entre los dos valores anteriores
(−2,47).
Por último, se calcula
, es decir,
, obteniendo de este modo el fold-change
asociado. Por tanto, se concluiría que el gen c-myc se expresa 5,5 veces más en el tejido
procedente del riñón que en el tejido procedente del cerebro.
4.2 Selección de los genes endógenos más estables: Método ‘geNorm’
El libro „NormqPCR‟ consta de una función que realiza la selección de los genes endógenos más
estables. Esta función tiene implementado un método que lleva a cabo esta selección,
denominado „geNorm‟.
Es práctica común entre los investigadores utilizar un único gen endógeno para la
normalización, sin embargo, la expresión de dichos genes endógenos puede variar
considerablemente llevando a errores relativamente grandes en una proporción significativa de
muestras [7]. Para solventar este problema, se calcula la media geométrica de un número
determinado de genes endógenos, los cuales han de presentar la mayor estabilidad de entre
todos los genes endógenos disponibles.
Para precisar qué genes son los que presentan una mayor estabilidad, Vandesompele et al.
desarrollaron una medida basada en el principio de que el ratio de expresión de dos controles
endógenos ideales es idéntico en todas las muestras, al margen de las condiciones
experimentales o el tipo de células. De este modo, en la práctica, la variación en los ratios de
expresión de dos genes endógenos refleja el hecho de que uno (o ambos) de dichos genes no se
expresa de forma constante, por lo que un incremento en la variación del ratio se corresponde
con un decrecimiento en la estabilidad de la expresión.
Para llevar a cabo este proceso, se determina la variación (ratio) entre cada par de genes
endógenos con todos los demás genes endógenos, calculando a continuación los logaritmos en
base 2 de dichos ratios de expresión (1). Seguidamente, se obtiene la desviación estándar de
cada
(2), para finalmente llegar a la medida M de la estabilidad del control endógeno, que se
27
Análisis de datos en Bioinformática
Daniel Parras Burgos
define como la media de la variación entre cada par de genes endógenos de un gen endógeno en
particular con todos los demás (3).
(1)
dadas m muestras, para los niveles de expresión
de n controles endógenos.
(2)
(3)
Asumiendo que los controles endógenos son no co-regulados, se lleva a cabo un procedimiento
iterativo en el que, tras cada iteración, se excluye aquel gen con el mayor valor de M, iniciando
una y otra vez el proceso sin considerar los genes excluidos hasta que sólo quedan los dos genes
endógenos con un menor valor de M, es decir, con una mayor estabilidad. Posteriormente, se
establece un ranking con los genes endógenos ordenados de mayor a menor estabilidad.
4.3 Asociación entre SNP/CNV y patrones de expresión génica
Introducción
La expresión de un gen puede verse afectada por la presencia de SNPs en su secuencia o por el
número de copias del mismo, lo que puede constituir una de las causas por las que se dé lugar al
desarrollo de patologías o factores que predispongan a ellas.
Siendo la disponibilidad de funciones o software específico para este tipo de análisis muy
limitado, el objetivo que se pretende alcanzar en este apartado será el de suplir en parte esta
carencia mediante la implementación de una función que lleve a cabo el estudio de dicha
asociación.
28
Análisis de datos en Bioinformática
Daniel Parras Burgos
Metodología
Para llevar a cabo un estudio de asociación SNP/CNV y patrones de expresión génica, se
consideran dos matrices, una de datos de expresión génica de cierto número de genes, así como
una segunda matriz en la que se presentan o bien los polimorfismos de dichos genes con sus
genotipos correspondientes (SNPs) o bien los genes con su número de copias (CNV). De esta
manera, se lleva a cabo la comparación entre las dos matrices mediante contrastes de hipótesis
para evaluar las diferencias significativas entre patrones de expresión en base a genotipos o en
base al número de copias.
Como ejemplo práctico del procedimiento a llevar a cabo, considérese la figura 15. Los datos de
genotipado de cada SNP pueden constar de 3 pares de bases diferentes (SNP 1), 2 pares de
bases diferentes (SNP 2), o sólo 1 par. Para el gen 1 y SNP 1, se habrían de agrupar los datos de
expresión de cada genotipo según la correspondencia gen y muestra. Es decir:

AT: 2,55 , 4,2 , 4,55 y 4,69

AA: 3,56 , 1,8 , 2,11 y 1,1

TT: 4,9 , 1,42 , 0,3 y 2,89
Seguidamente, se procedería a realizar un ANOVA sobre esos grupos para comprobar si existen
diferencias significativas entre sus medias, proporcionando el p-valor correspondiente.
Para el gen 1 y SNP 2 se procedería de forma análoga, sólo que en esta ocasión habría
únicamente dos grupos a comparar, por lo que habría que utilizar un t-test.
También pueden darse situaciones en las que sólo hay un genotipo, en cuyo caso no se
efectuaría ningún análisis.
29
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 15: Ejemplo de datos de genotipado y de expresión
Como se ha visto, puede haber tres categorías como máximo (AA, AT y TT en el SNP 1 del
ejemplo) en el caso de los SNPs, al igual que sucede en el caso del número de copias (0, 1 o 2
copias). Es por ello que la función desarrollada en el apartado 5.2.1 puede ser utilizada
indistintamente tanto para SNPs como para CNV.
30
Análisis de datos en Bioinformática
Daniel Parras Burgos
5. Resultados
Dentro de la categoría de resultados, el presente trabajo se divide en dos apartados principales,
el relativo al procesado y análisis de datos de qPCR y un segundo apartado relativo al estudio de
la asociación entre SNP/CNV y patrones de expresión génica.
Si bien la línea de trabajo es la correspondiente a la asociación entre SNP/CNV y patrones de
expresión génica, se hace necesario realizar un estudio detallado del análisis de expresión
diferencial como paso previo, pues los datos de expresión serán utilizados en el estudio de dicha
asociación y habrán de ser tratados con anterioridad.
Es por ello que, en primer lugar, se llevará a cabo la carga de los datos de expresión en R,
sometiéndolos a un control de calidad para tratar los missing values, para, posteriormente,
proceder a su normalización. Los datos resultantes de este proceso constituirán una parte de los
datos de entrada requeridos en el estudio de la asociación entre SNP/CNV y patrones de
expresión génica.
Además, para concluir el análisis de expresión diferencial, se obtendrán los resultados a partir
de los datos normalizados. Estos resultados constituirán un elemento clave para los
investigadores a la hora de decidir qué genes pueden tener una mayor implicación en el
desarrollo de determinadas patologías.
31
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 16: Diagrama simplificado del flujo de trabajo
5.1 Implementación de funciones en R para procesado y análisis de datos
de qPCR
5.1.1 Carga de datos
Como ya se mencionó en el flujo de trabajo del análisis de expresión diferencial, los ficheros de
texto plano con los datos de expresión son proporcionados por la máquina que efectúa la qPCR.
En este caso concreto, han sido proporcionados dos ficheros de texto plano de longitud idéntica
(figuras 17 y 18), cada uno de los cuales contiene 12 muestras. Se dispone de muestras target,
con la cadena “CIRUGÍA” en su identificador, y de muestras control, con la cadena
“CONTROL” en su identificador. Cada una de las muestras contiene los datos de expresión de
224 genes (target y endógenos).
Las columnas relevantes en el análisis a realizar son:
32
Análisis de datos en Bioinformática

Sample Name: Relativa a las muestras (cirugía o control)

Target Name: Relativa a los genes bajo estudio

Type: Relativa al tipo de genes (target o endógenos)

Ct: Relativa a la expresión génica (ciclo umbral)
Daniel Parras Burgos
Figura 17: Principio del fichero NLY26v2
33
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 18: Final del fichero NMV13v2
Reordenando los datos de ambos ficheros, la configuración de los mismos sería:

Fichero NLY26v2
Gen 1
3d_CONTROL_1_t3
Gen 2
…
Gen 223
Gen 224
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
12d_CONTROL_1_t3 Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
3d_CONTROL_2_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
12d_CONTROL_2_t3 Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
3d_CONTROL_3_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
12d_CONTROL_3_t3 Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
3d_CIRUGIA_1_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
12d_CIRUGIA_1_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
3d_CIRUGIA_2_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
12d_CIRUGIA_2_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
3d_CIRUGIA_3_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
12d_CIRUGIA_3_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
34
Análisis de datos en Bioinformática

Daniel Parras Burgos
Fichero NMV13v2
Gen 1
Gen 2
…
Gen 223
Gen 224
1d_CONTROL_1_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
7d_CONTROL_1_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
1d_CONTROL_2_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
7d_CONTROL_2_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
1d_CONTROL_3_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
7d_CONTROL_3_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
1d_CIRUGIA_1_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
7d_CIRUGIA_1_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
1d_CIRUGIA_2_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
7d_CIRUGIA_2_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
1d_CIRUGIA_3_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
7d_CIRUGIA_3_t3
Rn00562020_m1 Rn00564115_m1 … Rn00821155_g1 Rn00821325_g1
Donde unos genes son tipo target y otros son tipo control o endógenos, todos ellos con su
correspondiente
.
Como paso previo a la entrada de datos en R, se habrían de eliminar manualmente las primeras
filas (de la 1 a la 19) así como las últimas (de la 3093 a la 3097) de ambos archivos, pues se
trata de información relativa al experimento proporcionada por la máquina de qPCR que carece
de utilidad aquí.
Nótese que las referencias seguidas del símbolo # hacen alusión al código integrado en cinco
funciones que pueden ser consultadas en el anexo 1.
En primer lugar se procede a la carga de datos en R. Se ha contemplado la posibilidad de que
sea proporcionado un único fichero de datos de expresión. También se han unido los datos de
los dos ficheros en un solo data.frame tras seleccionar las cuatro columnas de interés, que
posteriormente han sido renombradas, tres de ellas de acuerdo al criterio de lectura de datos del
libro „ReadqPCR‟ (Sample, Detector y Cq).
#Lectura de datos del fichero NLY26v2.txt
#Selección de columnas del fichero NLY26v2.txt
#Lectura de datos del fichero NMV13v2.txt
35
Análisis de datos en Bioinformática
Daniel Parras Burgos
#Selección de columnas del fichero NMV13v2.txt
#Unión de los dos ficheros
#Renombrado de columnas
Los datos cargados quedan, por tanto, como sigue:
Sample
…
Detector
…
Type
…
Cq
…
6096 7d_CIRUGIA_3_t3 Rn01525670_m1
Target Undetermined
6097 7d_CIRUGIA_3_t3 Rn01483978_m1
Target Undetermined
6098 7d_CIRUGIA_3_t3 Rn00573260_m1
Target
22.607
6099 7d_CIRUGIA_3_t3 Rn00563499_m1
Target
26.295
6100 7d_CIRUGIA_3_t3
Target
25.662
6101 7d_CIRUGIA_3_t3 Rn00560865_m1 Endogenous Control
19.501
6102 7d_CIRUGIA_3_t3 Rn00572482_m1
Target
27.264
6103 7d_CIRUGIA_3_t3
Target
23.466
6104 7d_CIRUGIA_3_t3 Rn00667869_m1 Endogenous Control
19.493
…
Rn00570857_s1
Rn00585470_s1
…
…
…
Como ya se mencionó, es necesario crear un archivo denominado „phenoData‟ (figura 19) en el
que se especifique qué muestras constituyen casos (codificación 1) y qué muestras constituyen
controles (codificación 0). Además, se ha de proporcionar un identificador para cada muestra
(columna Class).
Figura 19: Archivo „phenoData‟
36
Análisis de datos en Bioinformática
Daniel Parras Burgos
Para la entrada de estos datos en R, se utiliza la misma función que con los datos de expresión.
#Lectura y ordenación del archivo ‘phenoData’
Sample
Class Type
X12d_CIRUGIA_1_t3
X12d_CIRUGIA_1_t3
12d_CIRUGIA
1
X12d_CIRUGIA_2_t3
X12d_CIRUGIA_2_t3
12d_CIRUGIA
1
X12d_CIRUGIA_3_t3
X12d_CIRUGIA_3_t3
12d_CIRUGIA
1
X12d_CONTROL_1_t3 X12d_CONTROL_1_t3 12d_CONTROL
0
X12d_CONTROL_2_t3 X12d_CONTROL_2_t3 12d_CONTROL
0
X12d_CONTROL_3_t3 X12d_CONTROL_3_t3 12d_CONTROL
0
X1d_CIRUGIA_1_t3
X1d_CIRUGIA_1_t3
1d_CIRUGIA
1
X1d_CIRUGIA_2_t3
X1d_CIRUGIA_2_t3
1d_CIRUGIA
1
X1d_CIRUGIA_3_t3
X1d_CIRUGIA_3_t3
1d_CIRUGIA
1
X1d_CONTROL_1_t3
X1d_CONTROL_1_t3
1d_CONTROL
0
X1d_CONTROL_2_t3
X1d_CONTROL_2_t3
1d_CONTROL
0
X1d_CONTROL_3_t3
X1d_CONTROL_3_t3
1d_CONTROL
0
X3d_CIRUGIA_1_t3
X3d_CIRUGIA_1_t3
3d_CIRUGIA
1
X3d_CIRUGIA_2_t3
X3d_CIRUGIA_2_t3
3d_CIRUGIA
1
X3d_CIRUGIA_3_t3
X3d_CIRUGIA_3_t3
3d_CIRUGIA
1
X3d_CONTROL_1_t3
X3d_CONTROL_1_t3
3d_CONTROL
0
X3d_CONTROL_2_t3
X3d_CONTROL_2_t3
3d_CONTROL
0
X3d_CONTROL_3_t3
X3d_CONTROL_3_t3
3d_CONTROL
0
X7d_CIRUGIA_1_t3
X7d_CIRUGIA_1_t3
7d_CIRUGIA
1
X7d_CIRUGIA_2_t3
X7d_CIRUGIA_2_t3
7d_CIRUGIA
1
X7d_CIRUGIA_3_t3
X7d_CIRUGIA_3_t3
7d_CIRUGIA
1
X7d_CONTROL_1_t3
X7d_CONTROL_1_t3
7d_CONTROL
0
X7d_CONTROL_2_t3
X7d_CONTROL_2_t3
7d_CONTROL
0
X7d_CONTROL_3_t3
X7d_CONTROL_3_t3
7d_CONTROL
0
5.1.2 Preparación de los datos
Los ficheros de datos de expresión presentan algunas filas con el campo Detector (relativo a los
genes) en blanco (véase figura 18), situación que se presenta cuando las placas utilizadas para
realizar la qPCR se han dejado con algunos pocillos vacíos. Dichas filas han de ser eliminadas.
37
Análisis de datos en Bioinformática
Daniel Parras Burgos
Otro de los criterios de lectura de datos del libro „ReadqPCR‟ es la ausencia de espacios en sus
campos, por lo que éstos son eliminados de la única cadena en la que se hallan presentes:
Endogenous control.
Por último, se sustituyen los valores Undetermined, que como se recordará, corresponden a
genes que se han expresado muy poco o que no se han expresado en absoluto, por el valor NA,
para que puedan ser interpretados por la función correspondiente del libro „ReadqPCR‟.
#Eliminación de filas con campo vacío en genes
#Eliminación de espacio en ‘Endogenous Control’
#Cambio de ‘Undetermined’ por valor NA
Sample
…
Detector
…
Type
…
Cq
…
6096 7d_CIRUGIA_3_t3 Rn01525670_m1
Target
NA
6097 7d_CIRUGIA_3_t3 Rn01483978_m1
Target
NA
6098 7d_CIRUGIA_3_t3 Rn00573260_m1
Target
22.607
6099 7d_CIRUGIA_3_t3 Rn00563499_m1
Target
26.295
6100 7d_CIRUGIA_3_t3
Target
25.662
6101 7d_CIRUGIA_3_t3 Rn00560865_m1 EndogenousControl
19.501
6102 7d_CIRUGIA_3_t3 Rn00572482_m1
Target
27.264
6103 7d_CIRUGIA_3_t3
Target
23.466
6104 7d_CIRUGIA_3_t3 Rn00667869_m1 EndogenousControl
19.493
…
Rn00570857_s1
Rn00585470_s1
…
…
…
Creación de objetos de tipo ‘qPCRBatch’
Un objeto de tipo qPCRBatch pertenece a la clase S4 y ha sido diseñado para almacenar
información de valores
crudos relativos a la información génica procedente de diferentes
muestras, así como información fenotípica de las mismas.
La función de lectura read.qPCR del libro ReadqPCR permite crear un objeto de tipo
qPCRBatch. Para ello, el fichero de datos de entrada debe contener las columnas que se
muestran a continuación y una separación entre campos utilizando tabulación. Las dos primeras
columnas son opcionales, y deben ser proporcionadas juntas o no ser proporcionadas.
38
Análisis de datos en Bioinformática

Daniel Parras Burgos
Well: Relativa al pocillo, representa la posición del gen en la placa. Si esta información
es dada, será utilizada para comprobar que las placas son del mismo tamaño, así como
para hacer representaciones gráficas con el objeto de detectar efectos espaciales o
problemas de otro tipo.

Plate: Se trata de un identificador de la placa en la que el experimento o parte del
experimento ha sido llevado a cabo. La información del identificador de la placa y del
pocillo debe ser proporcionada junta con identificadores únicos, es decir, no puede
tenerse la información de una placa y de un determinado pocillo más de una vez (salvo
en el caso de replicados técnicos).

Sample: Es la muestra analizada. Cada muestra debe contener los mismos genes con el
objeto de combinar y comparar muestras de forma efectiva además de formar una
matriz válida de datos de expresión.

Detector: Es el identificador del gen bajo estudio. Los genes deben ser idénticos en cada
muestra.

Cq: Es el valor del ciclo umbral (
) de un determinado gen en una muestra concreta.
En referencia a las columnas opcionales well y plate, éstas no han podido ser incluidas, pues los
ficheros de datos proporcionados (véanse figuras 17 y 18) no contenían la columna plate.
Continuando con el flujo de trabajo, se crea un archivo con los datos de expresión preparados
para ser utilizado como uno de los argumentos de entrada de la función de lectura.
#Creación de nuevo fichero de datos para lectura desde libro ‘ReadqPCR’
Es en este momento cuando puede procederse a la creación del objeto de tipo qPCRBatch
utilizando como argumento el archivo recién creado qPCR.txt y el archivo phenoData.txt. Este
objeto contiene los datos en una estructura reconocible por las funciones del libro „NormqPCR‟
que se utilizarán un poco más adelante, de ahí su importancia.
#Lectura de datos desde libro ‘ReadqPCR’
39
Análisis de datos en Bioinformática
Daniel Parras Burgos
Se muestra a continuación un resumen de la información contenida en el objeto de tipo
qPCRBatch que acaba de crearse. Como se observa, se dispone de un total de 224 genes y 24
muestras.
qPCRBatch (storageMode: lockedEnvironment)
assayData: 224 features, 24 samples
element names: exprs
protocolData: none
phenoData
sampleNames: X12d_CIRUGIA_1_t3 X12d_CIRUGIA_2_t3 ... X7d_CONTROL_3_t3 (24 total)
varLabels: Sample Class Type
varMetadata: labelDescription
featureData: none
experimentData: use 'experimentData(object)'
Annotation:
También es posible acceder a dicha información mediante la orden correspondiente. Se muestra
un fragmento de los datos relativos a la expresión de los genes en las distintas muestras.
X12d_CIRUGIA_1_t3 X12d_CIRUGIA_2_t3 X12d_CIRUGIA_3_t3
Rn00432087_m1
28.030
27.674
27.864
Rn00432095_m1
30.374
30.449
NA
Rn00439932_m1
26.766
25.245
25.505
Rn00487426_g1
26.713
25.984
25.785
Rn00488400_m1
NA
NA
31.025
Rn00516184_m1
26.176
25.404
25.604
Rn00560714_m1
29.766
28.822
30.912
Rn00560865_m1
21.418
20.226
19.905
Rn00561129_m1
NA
28.983
NA
Rn00561138_m1
25.920
26.663
25.024
Rn00561423_m1
28.877
28.369
27.932
…
…
…
…
Como se observa, hay presentes algunos genes sin un valor en su expresión. El investigador
habrá de asignar a estos genes un valor (que generalmente oscilará entre 35-40), indicando de
40
Análisis de datos en Bioinformática
Daniel Parras Burgos
este modo que su expresión es muy baja ya que no llegaron al umbral de fluorescencia en un
número suficientemente bajo de ciclos. Para ello se utiliza la función replaceNAs.
Se ha contemplado también la existencia de replicados técnicos (varios datos de expresión para
un mismo gen y muestra) para los que existe una función, combineTechReps, que calcula la
media aritmética de sus valores, aunque no será necesaria su utilización con los datos en los que
se basa esta parte del trabajo.
Estas dos funciones, replaceNAs(qPCRBatch, ...) y combineTechReps(qPCRBatch, ...),
pertenecen al libro „NormqPCR‟ (véase apéndice correspondiente).
#Cambio de NAs a un valor numérico en qPCRBatch
#Combinación de replicados técnicos mediante media aritmética
Por otro lado, es necesario crear otro objeto de tipo qPCRBatch relativo únicamente a los genes
endógenos. Éste será necesario para la selección de los genes endógenos más estables mediante
la función correspondiente del libro ‘NormqPCR’. Desafortunadamente, el libro ‘ReadqPCR’ no
proporciona ninguna función que realice este paso de forma automática, por lo que se hará a
partir de unas órdenes específicas que, a partir de los datos cargados en R ya preparados,
obtienen un subconjunto de todos los genes endógenos mediante la selección de aquellas filas
con la cadena EndogenousControl en la columa Type.
#Selección de genes endógenos para creación de objeto qPCRBatch
Por último, se crea un data.frame con las columnas requeridas para la creación del objeto de
tipo qPCRBatch (Sample, Detector y Cq) a partir de los datos seleccionados anteriormente. Al
igual que antes, se crea un archivo con los datos de expresión preparados y se procede a la
creación del nuevo objeto. En esta ocasión no es necesario utilizar un archivo „phenoData‟.
#Creación de data.frame con los datos de genes endógenos
#Creación de nuevo fichero de datos de controles endógenos para lectura desde libro ‘ReadqPCR’
#Lectura de datos desde libro ‘ReadqPCR’
Los datos así cargados tienen el siguiente aspecto:
41
Análisis de datos en Bioinformática
…
…
…
Daniel Parras Burgos
…
…
…
Muestra_14 Muestra_15 Muestra_16 Muestra_17 Muestra_18
Rn00560865_m1 24.139
23.874
21.493
20.404
21.552
Rn00584431_g1 25.043
25.508
23.471
22.440
23.756
Rn00590475_m1 24.922
26.484
24.095
23.314
24.095
Rn00667869_m1 21.836
22.503
20.689
19.753
21.384
Rn00820751_g1 40.000
22.678
22.025
22.159
22.364
Rn00835638_m1 26.851
27.806
26.077
25.799
25.718
Rn01418995_g1 24.414
24.579
24.391
23.576
24.282
Rn01455646_m1 27.908
30.164
27.793
25.755
27.530
Rn01474008_gH 25.990
25.802
25.021
25.867
26.225
Rn01474701_m1 40.000
40.000
31.521
28.168
29.749
Rn01511686_g1 24.765
25.072
23.212
21.784
22.786
Rn01527840_m1 24.585
24.479
23.383
23.467
23.894
Rn01775763_g1 18.628
18.913
18.812
19.458
19.804
…
…
…
…
…
…
Por tanto, una vez finalizado este proceso, se dispone de dos objetos de tipo qPCRBatch, uno
para todos los datos de expresión y otro únicamente para los datos de expresión de genes
endógenos.
5.1.3 Selección de los genes endógenos más estables
Se lleva a cabo a continuación lo expuesto en el apartado 4.2 de Materiales y métodos. Para ello,
se emplea la función selectHKs(qPCRBatch, ...) del libro „NormqPCR‟ para obtener los genes
endógenos más estables a partir del método „geNorm‟. La salida de esta función se emplea para
crear un listado en formato data.frame ordenado por estabilidad de los 13 genes endógenos
presentes en los datos.
#Elección de genes más estables para normalización (geNorm)
rank
Muestra
1
1 Rn00835638_m1
2
1 Rn01527840_m1
3
2 Rn01418995_g1
42
Análisis de datos en Bioinformática
4
3 Rn00590475_m1
5
4 Rn01455646_m1
6
5 Rn01474008_gH
7
6 Rn00560865_m1
8
7 Rn01775763_g1
9
8 Rn00584431_g1
10
9 Rn01474701_m1
Daniel Parras Burgos
11 10 Rn00820751_g1
12 11 Rn00667869_m1
13 12 Rn01511686_g1
Ahora que se dispone de los genes endógenos ordenados por estabilidad, se ha de proceder a
determinar el número de ellos que es necesario utilizar para calcular la media que finalmente se
utilizará en la normalización. Para ello, se recurre a dos gráficas. La primera muestra la media
de la estabilidad en la expresión (M) de los controles endógenos tras cada eliminación sucesiva
del gen endógeno más inestable.
#Gráfico "Estabilidad en la expresión (M)"
Como se puede ver en la figura 20, tras la eliminación de los 6 o 7 primeros controles
endógenos más inestables, el valor de M se estabiliza. Esta gráfica es útil para observar cómo
afectan los controles endógenos más inestables a la estabilidad en conjunto de todos ellos
cuando están presentes.
43
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 20: Estabilidad en la expresión (M)
Sin embargo, se necesita un criterio más objetivo a la hora de determinar cuántos de los
controles endógenos más estables son necesarios para la normalización. Para ello, se obtiene
una segunda gráfica (figura 21) que muestra la variación de los controles endógenos (V) para un
número diferente de los controles endógenos más estables.
#Gráfico "Variación de los controles endógenos (V)"
Ésta ha de interpretarse de derecha a izquierda. Como se observa, con los 4/5 o 5/6 primeros
controles endógenos más estables se obtiene la menor variación posible en la estabilidad. Sin
embargo, los autores de este método (Vandesompele et al.) establecen un valor límite de 0,15
por debajo del cual la inclusión de un control endógeno adicional para la normalización no es
necesaria. Por tanto, en este caso sería suficiente con utilizar los 2 o 3 controles endógenos más
estables para normalizar, ya que su variación asociada (la columna más a la derecha) se
encuentra por debajo de dicho valor límite de 0,15.
44
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 21: Variación de los controles endógenos (V)
45
Análisis de datos en Bioinformática
Daniel Parras Burgos
5.1.4 Normalización: Cálculo de
Tras la aplicación del método „geNorm‟, se ha obtenido que es suficiente con utilizar los 2/3
genes endógenos más estables. Estos se corresponden con los identificadores:

Rn00835638_m1

Rn01527840_m1

Rn01418995_g1
Ahora, es posible proceder a la normalización de todos los genes mediante una función a la que
hay que proporcionar el objeto de tipo qPCRBatch con todos los genes, una lista con los
controles endógenos previamente seleccionados y el tipo de media que se aplicará a los mismos.
De este modo, se obtendrá un pseudo-control endógeno en cada muestra que se sustraerá a los
valores de expresión de todos los genes de la muestra. Este proceso se llevará a cabo en las 24
muestras, completando así la normalización.
#Función para normalización
Por comodidad, se ofrece la posibilidad de indicar un número entero para que se seleccionen
automáticamente los n primeros controles endógenos más estables del ranking en lugar de tener
que introducir manualmente sus identificadores.
#Normalización utilizando los n primeros genes de ranks o los genes indicados
Finalmente, se obtiene un objeto de tipo qPCRBatch, a cuya matriz con todos los genes
normalizados se accede mediante la orden exprs. Se muestra a continuación un fragmento de
dicha matriz, con los 6 primeros genes normalizados (
X12d_CIRUGIA_1_t3 X12d_CIRUGIA_2_t3
) de las 6 primeras muestras.
X12d_CIRUGIA_3_t3
Rn00432087_m1
2.888603
2.9839834
3.766936
Rn00432095_m1
5.232603
5.7589834
15.902936
Rn00439932_m1
1.624603
0.5549834
1.407936
46
Análisis de datos en Bioinformática
Daniel Parras Burgos
Rn00487426_g1
1.571603
1.2939834
1.687936
Rn00488400_m1
14.858603
15.3099834
6.927936
Rn00516184_m1
1.034603
0.7139834
1.506936
X12d_CONTROL_1_t3 X12d_CONTROL_2_t3
X12d_CONTROL_3_t3
Rn00432087_m1
3.3893824
3.4328887
2.9316995
Rn00432095_m1
14.5103824
15.3668887
4.7076995
Rn00439932_m1
0.5693824
0.4518887
0.7736995
Rn00487426_g1
1.2763824
0.8418887
0.7386995
Rn00488400_m1
14.5103824
6.0928887
5.6726995
Rn00516184_m1
0.8353824
1.4158887
1.1826995
…
…
…
…
5.1.5 Cálculo de
El primer paso consiste en crear una matriz de contraste donde se especifique qué muestras
representan casos y qué muestras controles. Esta matriz se obtiene a partir del archivo
„phenoData‟, donde está contenida dicha información.
#Creación de la matriz de contraste
CONTROL CASO
X12d_CIRUGIA_1_t3
0
1
X12d_CIRUGIA_2_t3
0
1
X12d_CIRUGIA_3_t3
0
1
X12d_CONTROL_1_t3
1
0
X12d_CONTROL_2_t3
1
0
X12d_CONTROL_3_t3
1
0
X1d_CIRUGIA_1_t3
0
1
X1d_CIRUGIA_2_t3
0
1
X1d_CIRUGIA_3_t3
0
1
X1d_CONTROL_1_t3
1
0
X1d_CONTROL_2_t3
1
0
X1d_CONTROL_3_t3
1
0
X3d_CIRUGIA_1_t3
0
1
X3d_CIRUGIA_2_t3
0
1
X3d_CIRUGIA_3_t3
0
1
47
Análisis de datos en Bioinformática
X3d_CONTROL_1_t3
1
0
X3d_CONTROL_2_t3
1
0
X3d_CONTROL_3_t3
1
0
X7d_CIRUGIA_1_t3
0
1
X7d_CIRUGIA_2_t3
0
1
X7d_CIRUGIA_3_t3
0
1
X7d_CONTROL_1_t3
1
0
X7d_CONTROL_2_t3
1
0
X7d_CONTROL_3_t3
1
0
Daniel Parras Burgos
Seguidamente, se utilizan las cinco funciones del libro „limma‟ descritas en el apéndice 7.1.3
para crear un archivo con los coeficientes (
) que se utilizarán para obtener el fold-change
de cada gen, así como con los resultados de los test estadísticos efectuados para comprobar la
significación de los mismos.
#Obtención de los ddCt y los p-values asociados
Para la obtención de los coeficientes, la función constrasts.fit resta internamente la media de los
valores de expresión normalizados de los genes de las muestras control a la de las muestras
target.
Como ejemplo, se obtendrá el coeficiente
del primero de los 224 genes del estudio
(„Rn00432087_m1‟). Para ello, se dispone de todos los valores de expresión normalizados para
este gen. La media de los valores de expresión en las muestras target (en morado) es 2,4194,
mientras que la media de los valores de expresión en las muestras control (en naranja) es
4,0538. Al calcular la diferencia entre el primero y el segundo resulta el valor final del
, −1,6344.
coeficiente
X12d_CIRUGIA_1_t3 X12d_CIRUGIA_2_t3 X12d_ CIRUGIA_3_t3
Rn00432087_m1
2.888603
2.9839834
3.766936
X12d_CONTROL_1_t3 X12d_CONTROL_2_t3 X12d_CONTROL_3_t3
Rn00432087_m1
3.3893824
3.4328887
2.9316995
X1d_CIRUGIA_1_t3
X1d_CIRUGIA_2_t3
X1d_CIRUGIA_3_t3
2.4175078
1.879207
X1d_CONTROL_1_t3 X1d_CONTROL_2_t3
X1d_CONTROL_3_t3
Rn00432087_m1
Rn00432087_m1
1.8528733
3.008944
14.424029
2.817641
48
Análisis de datos en Bioinformática
X3d_CIRUGIA_1_t3
Rn00432087_m1
Daniel Parras Burgos
X3d_CIRUGIA_2_t3
X3d_CIRUGIA_3_t3
1.8004297
2.4640726
1.393864
X3d_CONTROL_1_t3 X3d_CONTROL_2_t3 X3d_CONTROL_3_t3
Rn00432087_m1
1.44562
3.4791614
1.549276
X7d_CIRUGIA_1_t3
X7d_CIRUGIA_2_t3
X7d_CIRUGIA_3_t3
1.9880263
3.2601177
X7d_CONTROL_1_t3 X7d_CONTROL_2_t3
X7d_CONTROL_3_t3
Rn00432087_m1
Rn00432087_m1
2.3376187
5.2575898
3.312888
3.596014
Efectivamente, se comprueba en la tabla mostrada a continuación que el valor obtenido coincide
con el proporcionado por las funciones del libro „limma‟. Esta tabla muestra la siguiente
información para cada uno de los genes del estudio:

A: Media de todos los valores de expresión del gen en cuestión

Coef: Coeficiente

t: Estadístico t-Student

p.value: p-valor asociado al estadístico t-Student

p.value.adj: p-valor asociado al método “BH” de Benjamini y Hochberg, más
conservador que el anterior

F: Estadístico F de Snedecor

F.p.value: p-valor asociado al estadístico F de Snedecor
A
Coef
t
p.value p.value.adj
F F.p.value
1 3.24 -1.634 -1.67 0.10757
0.156322 2.80
0.10757
2 10.21 -2.734 -1.47 0.15465
0.202783 2.16
0.15465
3 1.53 -0.018 -0.04 0.96744
0.967444 0.00
0.96744
4 1.28 -1.178 -3.03 0.00580
0.030370 9.20
0.00580
5 11.05 -1.381 -0.74 0.46732
0.526024 0.55
0.46732
6 1.21 -0.670 -2.59 0.01606
0.047956 6.73
0.01606
49
Análisis de datos en Bioinformática
Daniel Parras Burgos
De estos datos, serán de interés únicamente los relativos al coeficiente
, al p-valor
asociado al estadístico t-Student y al p-valor asociado al método “BH” de Benjamini y
Hochberg.
Para finalizar, se recoge la información de interés en una única tabla en la que cada gen aparece
acompañado de su
(fold-change), p-valor asociado al estadístico t-Student y p-valor
asociado al método “BH”.
Siguiendo con el ejemplo del primer gen, su fold-change se calcula simplemente con la
operación
,
lo
que
implica
que
dicho
gen
se
expresa
aproximadamente 3 veces más en las muestras target que en las muestras control. En relación a
los p-valores asociados, estos indican que los contrastes han resultado no significativos, por lo
que este gen no será, en principio, considerado por el investigador.
#Obtención de la tabla de resultados con los 2^-ddCt y los p-values
Gene_ID Fold_Change
p-value p-value_adj.
1 Rn00432087_m1
3.103723 0.10757
0.156322
2 Rn00432095_m1
6.652977 0.15465
0.202783
3 Rn00439932_m1
1.012555 0.96744
0.967444
4 Rn00487426_g1
2.262629 0.00580
0.030370
5 Rn00488400_m1
2.604488 0.46732
0.526024
6 Rn00516184_m1
1.591073 0.01606
0.047956
Por último, para facilitar la búsqueda de los genes que más se expresan, se reordena la tabla
anterior de mayor a menor fold-change.
#Reordenación de la tabla de resultados
Gene_ID Fold_Change
p-value p-value_adj.
68 Rn00578115_m1 76.74495448 0.00022
0.017730
92 Rn00585310_m1 56.57136199 0.01282
0.043504
50 Rn00569848_m1 33.66085693 0.00194
0.020900
133 Rn01410330_m1 30.48441594 0.00759
0.034743
183 Rn01507680_g1 28.68053439 0.00357
0.023660
…
102 Rn00596271_s1
…
…
…
0.37814200
0.06975
0.121263
50
Análisis de datos en Bioinformática
Daniel Parras Burgos
224 Rn03993554_g1
0.32737136
0.02105
0.056631
128 Rn01286286_g1
0.15636614
0.13780
0.186141
26 Rn00563924_m1
0.11195571
0.09711
0.148997
162 Rn01470643_m1
0.07100183
0.01188
0.042240
5.1.6 El problema de los Undetermined
Como ya se ha comentado anteriormente, cuando un gen se expresa muy poco o bien no se
expresa, se le asigna el valor Undetermined a su expresión. Sin embargo, un valor
Undetermined también puede significar que la máquina de qPCR no ha podido medir dicha
expresión. Aunque una de las pautas de actuación es sustituir dichos valores por uno numérico a
elección del investigador (que ha sido la táctica aquí empleada), esta forma de actuar puede
suponer un problema y llevar a conclusiones inexactas en determinadas situaciones.
Para ilustrarlo, considérese el caso hipotético en que los siguientes valores correspondiesen a los
valores de expresión sin normalizar del primer gen. Considérese también que a los valores
Undetermined se les asignase un valor de 40 y que tras la normalización, los valores de
expresión de todas las muestras experimentasen el mismo grado de variación.
En este escenario, la media obtenida para las muestras target sería considerablemente más baja
que la obtenida para las muestras control, lo que implicaría que dicho gen se estaría expresando
mucho más en las primeras con respecto a las segundas (fold-change muy alto). Si dichos
valores Undetermined se deben a que no fue posible medir su expresión, entonces se estaría
proporcionando un resultado que probablemente no se corresponde con la realidad.
X12d_CIRUGIA_1_t3
Rn00432087_m1
28.030
X12d_CIRUGIA_2_t3 X12d_CIRUGIA_3_t3
27.674
27.864
X12d_CONTROL_1_t3 X12d_CONTROL_2_t3 X12d_CONTROL_3_t3
Rn00432087_m1 Undetermined
Undetermined
Undetermined
X1d_CIRUGIA_1_t3
X1d_CIRUGIA_2_t3
X1d_CIRUGIA_3_t3
27.528
26.122
Rn00432087_m1
26.276
X1d_CONTROL_1_t3
Rn00432087_m1
X1d_CONTROL_2_t3 X1d_CONTROL_3_t3
29.625
Undetermined
27.075
X3d_CIRUGIA_1_t3
X3d_CIRUGIA_2_t3
X3d_CIRUGIA_3_t3
26.732
27.834
X3d_CONTROL_1_t3 X3d_CONTROL_2_t3
X3d_CONTROL_3_t3
Rn00432087_m1
24.762
51
Análisis de datos en Bioinformática
Daniel Parras Burgos
Rn00432087_m1 Undetermined
Undetermined
26.566
X7d_CIRUGIA_1_t3
X7d_CIRUGIA_2_t3
X7d_CIRUGIA_3_t3
25.504
27.753
Rn00432087_m1
27.451
X7d_CONTROL_1_t3
X7d_CONTROL_2_t3 X7d_CONTROL_3_t3
Rn00432087_m1 Undetermined
Undetermined
Undetermined
Desafortunadamente, éste es un problema de difícil solución, pues no es posible determinar el
motivo por el que al valor de expresión de un gen se le asignó la etiqueta Undetermined. Sin
embargo, es posible proporcionar al investigador, para cada gen, el porcentaje de muestras que
presentan este valor, de modo que, si dicho porcentaje es lo suficientemente alto, el gen en
cuestión pueda ser descartado como de interés, aunque se haya obtenido para él un fold-change
alto y un p-valor inferior a 0,05.
En esta línea y para comodidad del investigador a la hora de evaluar los resultados, se ha
decidido que sea éste quien introduzca un valor en forma de tanto por ciento de modo que, si el
porcentaje de Undetermined de las muestras target o de las muestras control lo superan, se
marcará al gen en cuestión con un flag. Así, de un solo vistazo, será posible determinar qué
genes cumplen con el requisito impuesto por el investigador.
#Flags cuando se alcanza un porcentaje mínimo de NAs
Se trata de un procedimiento sencillo en el que, para cada gen, se realiza un conteo de
Undetermined (tras haber sido convertidos a NA), diferenciando entre muestras target y
muestras control. Posteriormente, se comprueba si el porcentaje de Undetermined de alguno de
de esos grupos supera el valor establecido por el investigador, almacenando los flags en un
vector que se añadirá a los resultados de expresión diferencial.
Por tanto, para un porcentaje máximo del, por ejemplo, 50% de Undetermined en muestras
target o en muestras control, la presentación final de resultados quedaría como sigue:
Gene_ID Fold_Change
p-value p-value_adj. +NAs
68 Rn00578115_m1 76.74495448 0.00022
0.017730
92 Rn00585310_m1 56.57136199 0.01282
0.043504
X
50 Rn00569848_m1 33.66085693 0.00194
0.020900
X
133 Rn01410330_m1 30.48441594 0.00759
0.034743
X
183 Rn01507680_g1 28.68053439 0.00357
0.023660
52
Análisis de datos en Bioinformática
…
Daniel Parras Burgos
…
…
…
102 Rn00596271_s1
0.37814200
0.06975
0.121263
224 Rn03993554_g1
0.32737136
0.02105
0.056631
128 Rn01286286_g1
0.15636614
0.13780
0.186141
26 Rn00563924_m1
0.11195571
0.09711
0.148997
162 Rn01470643_m1
0.07100183
0.01188
0.042240
X
Así, de entre los 5 genes que más se expresan, el primero y el quinto serían considerados de
interés y sujetos, a criterio del investigador, a un estudio más exhaustivo, pues éstos se están
expresando unas 76 y 28 veces más, respectivamente, en las muestras target con respecto a las
muestras control, ambos con un p-valor inferior a 0,05 y un porcentaje de Undetermined menor
o igual al 50%.
5.2 Estudio de la asociación entre SNP/CNV y patrones de expresión
génica
5.2.1 Función para el estudio de la asociación
Para la creación de la función ExprPolymCNV para el estudio de la asociación entre SNP/CNV
y patrones de expresión génica, fueron proporcionados dos formatos estándar de archivos de
datos, tanto de genotipado como de expresión. En el archivo de la figura 22, se proporcionan los
datos de expresión ya normalizados para un número arbitrario de muestras y genes. En este
archivo no puede haber datos faltantes.
Figura 22: Formato estándar de datos de expresión
53
Análisis de datos en Bioinformática
Daniel Parras Burgos
En el archivo de la figura 23, se proporcionan los datos de genotipado para un número también
arbitrario de muestras y genes, cada uno de los cuales con los identificadores de los
polimorfismos asociados bajo estudio. Como se observa, aquí sí puede haber datos faltantes en
forma de espacios en blanco o Undetermined.
Figura 23: Formato estándar de datos de genotipado
Las referencias seguidas del símbolo # a partir de este punto hacen alusión al código integrado
en la función ExprPolymCNV que puede ser consultada en el anexo 2.
En primer lugar, tras la lectura en R de los dos archivos, se procede a ordenar las columnas de
ambos para facilitar su manipulación posterior. Seguidamente, se realiza una selección de los
genes que están presentes en ambos ficheros, eliminando el resto. Se actúa del mismo modo con
las muestras, dejando únicamente aquéllas que son comunes a los dos ficheros.
Con este filtro, son eliminados aquellos datos a los que no es posible efectuar el análisis, pues
para cada genotipo de cada polimorfismo de cada gen de cada muestra del archivo de SNPs se
ha de tener la expresión correspondiente a ese mismo gen en esa muestra en el archivo de datos
de expresión.
#Lectura de datos del fichero de datos expresión
#Lectura de datos del fichero de polimorfismos/CNV
#Ordenación de columnas
#Eliminación de genes que no están en ambos ficheros
#Eliminación de muestras que no están en ambos ficheros
54
Análisis de datos en Bioinformática
Daniel Parras Burgos
Posteriormente, se procede a agrupar los datos de expresión de acuerdo a como se explicó en el
apartado 4.3 de Materiales y métodos. También se lleva a cabo un conteo de las veces que
aparece cada genotipo en cada uno de los polimorfismos, esto es, el tamaño de cada uno de los
grupos sobre los que se efectuará el ANOVA o el t-test, de manera que aparezca en la
presentación de resultados, a modo informativo, junto al p-valor asociado a cada polimorfismo.
Esto se hace con el objeto de alertar al investigador en caso de que el tamaño de alguno de los
grupos sea excesivamente pequeño.
Se genera además un archivo en formato pdf con los boxplots calculados a partir de los grupos
formados para cada polimorfismo.
#Selección de dCt por grupos
#Creación de pdf para guardar boxplots
#Obtención de niveles
Una vez se han agrupado correctamente los datos de expresión de cada genotipo según la
correspondencia gen y muestra, se procede a crear el gráfico de boxplots y a efectuar el
ANOVA o el t-test. El campo „p-valor‟ de aquellos polimorfismos que consten de un único
genotipo se marcará con una „X‟.
#ANOVA o t-test
#Boxplots
#Caso en que sólo hay 1 nivel (no hay grupos que comparar)
Para finalizar, se crea una tabla de resultados que muestra los genes del estudio, sus
polimorfismos, el p-valor asociado a cada uno de ellos y las veces que se repite cada genotipo.
#Creación de la tabla de resultados
#Obtención del número de cada genotipo para cada snp
genes
snps
p.values
genotipos_CNV
1 RNASEL
RS486907
0.495601
CC = 6 CT = 10 TT = 3
2 RNASEL RS56250729
X
TT = 20
RS627928
0.466315
AA = 4 AC = 11 CC = 5
4 ELAC2 RS11545302
0.812333
CC = 4 CT = 9 TT = 7
5 ELAC2 RS17552022
0.35192
CT = 6 TT = 13
3 RNASEL
55
Análisis de datos en Bioinformática
Daniel Parras Burgos
6 ELAC2
RS5030739
0.405653
CC = 15 CT = 3
7 ELAC2
RS4792311
0.467912
AA = 4 AG = 8 GG = 8
8 MSR1
RS3747531
0.009349
CC = 1 CG = 1 GG = 18
Figura 24: boxplots asociados a los polimorfismos
RS486907 y RS627928 del gen RNASEL
5.2.2 Análisis de asociación entre número de copias y expresión en
cáncer de próstata
Se recolectaron una serie de muestras de sangre y biopsia prostática de un grupo de pacientes en
el Área de Urología del Hospital Universitario Virgen de las Nieves, Granada. Con ellas y
mediante la tecnología qPCR, se obtuvieron los valores de expresión de las mismas así como el
número de copias correspondiente, ambos datos relativos al gen de interés „GSTM1‟.
Se proporcionaron, por tanto, dos ficheros: el primero conteniendo los datos del número de
copias (figura 25) y el segundo los datos de expresión de dicho gen de interés, así como del gen
endógeno „GADPH‟ (figura 26).
56
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 25: Datos del número de copias del gen „GSTM1‟
Figura 26: Datos de expresión de los genes „GSTM1‟ y „GADPH‟
Normalización y creación de los archivos de entrada de la función
ExprPolymCNV
Puesto que los datos de expresión no se hallan normalizados, éste será el primer paso a dar.
57
Análisis de datos en Bioinformática
Daniel Parras Burgos
De tratarse del mismo formato que el empleado en el apartado 5.1 de procesado y análisis de
datos de qPCR, el cual era más complejo, habría de utilizarse las siguientes funciones en el
proceso de normalización (consúltese anexo 1):

qPCR.read: Para la creación del objeto de tipo qPCRBatch de datos de expresión

qPCR.hks: Para la obtención de los genes endógenos más estables para la
normalización

qPCR.norm: Para la obtención de los datos de expresión normalizados
Sin embargo, en este caso se dispone de un formato que requiere un proceso de normalización
diferente, aunque más sencillo. Para ello se utilizarán una serie de órdenes auxiliares (consúltese
anexo 3) para llevarlo a cabo. Para explicarlo, se tomará como ejemplo la primera muestra de
los datos de expresión proporcionados.
EXB01_12
GSTM1 27,88736916
EXB01_12
GSTM1 27,84934425
EXB01_12
GSTM1 Undetermined
EXB01_12
GADPH Undetermined
EXB01_12
GADPH 29,8006897
EXB01_12
GADPH 29,93411255
Con este formato, sólo se dispone de un gen endógeno para normalizar („GADPH‟) y por tanto
no es necesario hacer una selección de los genes endógenos más estables. Además, cada muestra
dispone de datos de expresión para „GSTM1‟ y para „GADPH‟, de manera que se normalizará
del siguiente modo:

Se tomarán los valores de expresión de las tres réplicas del gen endógeno „GADPH‟ y
se calculará la media. A petición del investigador, los Undetermined serán eliminados,
por lo que si sólo se dispusiera de dos valores, también se calcularía la media; si sólo se
dispusiera de un valor, se tomaría éste directamente; y si no se dispusiera de ninguno, es
decir, si las tres réplicas fueran Undetermined, se desecharía la muestra.
58
Análisis de datos en Bioinformática
Por
tanto,
en
este
Daniel Parras Burgos
caso
se
obtendría
un
valor
para
normalizar
de
(29,8006897+29,93411255)/2 = 29,867401125.

A continuación, se restaría esta cantidad a los valores de expresión del gen target
„GSTM1‟, resultando los valores:
−1,980031965
−2.018056875

Para terminar, se calcularía la media de estos valores, obteniéndose (−1,980031965
−2.018056875)/2 = −1,99904442. Éste sería, por tanto, el valor de expresión
normalizado del gen target „GSTM1‟ para la muestra „EXB01_12‟.
Una vez se ha normalizado el gen target en todas las muestras, se crea un archivo en el formato
estándar de datos de expresión (figura 27).
Figura 27: Archivo en formato estándar de datos de expresión normalizados
En cuanto al archivo que contiene los datos de número de copias, tan solo hay que adaptarlo al
formato estándar mediante otra serie de órdenes auxiliares (anexo 3). El archivo resultante se
muestra en la figura 28.
59
Análisis de datos en Bioinformática
Daniel Parras Burgos
Figura 28: Archivo en formato estándar de datos de número de copias
Ahora que se dispone de los archivos de datos de expresión normalizados y de número de
copias, ambos en formato estándar, puede procederse a la ejecución de la función
ExprPolymCNV para la obtención de los resultados de asociación.
Resultados
Para la obtención de resultados, basta con ejecutar la función ExprPolymCNV con los
identificadores de los ficheros de texto plano que contienen los datos de expresión normalizados
y de número de copias.

ExprPolymCNV (file_expr = "geneExpression.txt", file2 = "CNV.txt")
Obteniéndose la siguiente salida. Como se observa, en esta ocasión los resultados se refieren a
un único gen, aunque la función está diseñada para tratar un número ilimitado de ellos.
> ExprPolymCNV(file_expr = "geneExpression.txt", file2 = "CNV.txt")
genes
snps
p.values
genotipos_CNV
1 GSTM1
GSTM1
0.00654
0 = 93 1 = 80 2 = 15
El archivo en formato pdf generado proporciona los boxplots asociados.
60
Análisis de datos en Bioinformática
Daniel Parras Burgos
61
Análisis de datos en Bioinformática
Daniel Parras Burgos
6. Conclusiones
En primer lugar se explicó el funcionamiento y las tareas a desarrollar de cinco funciones, las
cuales estaban a su vez basadas en funcionalidad específica proporcionada por los libros de
análisis de expresión diferencial „ReadqPCR‟, „NormqPCR‟ y „limma‟. Las cabeceras de tales
funciones, que pueden ser consultadas en su totalidad en el anexo 1, son:

qPCR.read (file1, file2 = NA, phenofile, replicates = FALSE, valuesNAs = NA, flagNAs)

qPCR.read_endo (file1, file2 = NA, valuesNAs = NA)

qPCR.hks (file1, file2 = NA, valuesNAs = NA, showgraphs = TRUE)

qPCR.norm (qPCRBatch, hkgs, calc)

qPCR.ddCq (..., rankgenes = 0, file1, file2 = NA, phenofile, replicates = FALSE, valuesNAs = NA,
flagNAs)
Con ellas se pretendía automatizar en la medida de lo posible un análisis de expresión
diferencial completo, desde la lectura de los datos de expresión en R (funciones 1 y 2), pasando
por la obtención de los genes más estables para normalizar (función 3) y la normalización
propiamente dicha (función 4), hasta la obtención de los resultados del análisis (función 5).
De esta manera, se proporciona también una herramienta para llevar a cabo únicamente el
proceso de normalización, cuando lo que se pretende es realizar un estudio de la asociación
entre SNP/CNV y patrones de expresión génica, en los casos en los que el formato de los datos
proporcionados coincide con el considerado en la misma.
Si el formato de los datos es distinto, es posible recurrir a una serie de órdenes auxiliares, como
las que se muestran en el anexo 3, para llevar a cabo dicho proceso de normalización, sólo en
aquellos casos en que los datos de expresión proporcionados no estén ya normalizados.
Así, con los archivos de datos de expresión y de genotipado/número de copias en formato
estándar, se ofrece otra herramienta que automatiza este análisis SNP/CNV-Expresión, cuya
función puede ser también consultada en el anexo 2 y presenta la siguiente cabecera:
62
Análisis de datos en Bioinformática

Daniel Parras Burgos
ExprPolymCNV (file_expr, file2, pdfpath = "C:")
Por tanto, se consideran cumplidos los objetivos así como alcanzados los resultados esperados,
ambos presentados al inicio de este trabajo.
63
Análisis de datos en Bioinformática
Daniel Parras Burgos
7. Apéndices
7.1 R y Bioconductor
El lenguaje y entorno de programación R
R es un lenguaje y entorno de programación para análisis estadístico y gráfico, desarrollado por
Robert Gentleman y Ross Ihaka en la Universidad de Auckland en 1993. Se trata de un proyecto
GNU de software libre derivado del lenguaje de programación S.
Desde su creación, R ha sufrido un constante crecimiento gracias a los trabajos de
investigadores provenientes de multitud de ramas del conocimiento. Las aportaciones continuas
y desinteresadas de funciones y paquetes de propósito general o específico perfilan a R como un
entorno dinámico formado por una comunidad activa y adherida a la filosofía del software libre
[8].
Este programa es ampliamente utilizado en investigación por la comunidad estadística, siendo
también muy popular en otros ámbitos, como la Bioinformática, la investigación biomédica y
las matemáticas financieras.
Entre las principales características de R cabe destacar:

Una amplia variedad de herramientas estadísticas y gráficas de gran calidad de diseño

Un manejo efectivo de datos así como un fácil almacenamiento de los mismos

Un lenguaje de programación orientado a objetos, completo y bien diseñado que incluye
estructuras de control condicionales, bucles, funciones recursivas y una gran facilidad
para la entrada y salida de datos

Un amplio repositorio de funciones y libros para el análisis estadístico de datos

Una gran sencillez en la utilización de las funciones ya implementadas así como un
manejo intuitivo de las herramientas disponibles para la implementación de nuevas
funciones
64
Análisis de datos en Bioinformática

Daniel Parras Burgos
Extensiones específicas a nuevas áreas, como la Bioinformática, la geoestadística,
modelos gráficos, etc.
Bioconductor
Bioconductor es un proyecto de código abierto basado en el lenguaje de programación R para el
análisis de datos en genómica. Fue creado en el año 2001 con el propósito de desarrollar e
integrar software para el análisis estadístico de datos de laboratorio en biología molecular.
Se trata de una iniciativa para la creación colaborativa de software extensible a los ámbitos de la
biología computacional y la Bioinformática. Entre las metas que persigue, cabe mencionar:

Fomentar el desarrollo colaborativo y el uso extendido de software innovador

Reducir las barreras de acceso a la investigación científica interdisciplinar

Promover la reproducibilidad remota de los resultados en la investigación [9]
En el presente trabajo se utilizarán diversos libros de R genéricos, así como 3 libros específicos
para el análisis de expresión diferencial, disponibles en el repositorio de Bioconductor:

ReadqPCR: Para la entrada de datos de expresión en R

NormqPCR: Para la normalización de los datos de expresión

limma: Para la realización de contrastes y la obtención de resultados
7.1.1 Libro ‘ReadqPCR’
El libro „ReadqPCR‟ puede ser descargado e instalado en R a través de los siguientes comandos:
source("http://bioconductor.org/biocLite.R")
65
Análisis de datos en Bioinformática
Daniel Parras Burgos
biocLite("ReadqPCR")
Este libro, creado por James Perkins, Matthias Kohl y Nor Izayu Abdul Rahman, proporciona
diversas funciones para leer datos crudos de experimentos de qPCR procedentes de diferentes
plataformas. El objetivo es convertir dichos datos en un objeto de tipo qPCRBatch, que será uno
de los soportados por las funciones a utilizar en la selección de los genes endógenos más
estables y en la normalización, pertenecientes al libro „NormqPCR‟. La función de lectura
utilizada de este libro es:

read.qPCR (filename, phenoData, …)
7.1.2 Libro ‘NormqPCR’
El libro „NormqPCR‟ puede ser descargado e instalado en R a través de los siguientes comandos:
source("http://bioconductor.org/biocLite.R")
biocLite("NormqPCR")
Este libro, también creado por James Perkins, Matthias Kohl y Nor Izayu Abdul Rahman,
proporciona varias funciones, de entre las cuales son utilizadas:

replaceNAs (qPCRBatch, ...): Para reemplazar los valores NA por un valor numérico
determinado

combineTechReps (qPCRBatch, ...): Para calcular la media de los valores de expresión
de los replicados técnicos

selectHKs (qPCRBatch, ...): Para la selección de los genes endógenos más estables

deltaCt (qPCRBatch, hkgs, ...): Para la normalización, utilizando para ello un número
determinado de genes endógenos seleccionados (housekeeping genes)
66
Análisis de datos en Bioinformática
Daniel Parras Burgos
7.1.3 Libro ‘limma’
El libro „limma‟ puede ser descargado e instalado en R a través de los siguientes comandos:
source("http://bioconductor.org/biocLite.R")
biocLite("limma")
Este libro fue concebido para el análisis de la expresión génica y está dotado con multitud de
funciones, de entre las cuales son utilizadas:

lmFit (object, design, …): Para ajustar un modelo lineal a cada gen dada una matriz de
datos de expresión normalizados

makeContrasts (..., levels): Construye la matriz de contraste correspondiente a los
contrastes especificados

contrasts.fit (fit, contrasts, …): Dado un modelo lineal ajustado de datos de expresión,
calcula una estimación de los coeficientes y los errores estándar asociados para un
conjunto dado de contrastes

ebayes (fit, …): Obtiene varios test estadísticos en base a la salida de la función anterior

write.fit (fit, file, adjust, …): Crea un archivo con los datos obtenidos de la función
anterior
67
Análisis de datos en Bioinformática
Daniel Parras Burgos
7.2 Funciones y código
7.2.1 Anexo 1
library(ReadqPCR)
library(NormqPCR)
library(limma)
library(plyr)
library(RColorBrewer)
qPCR.read <- function(file1, file2 = NA, phenofile, replicates = FALSE, valuesNAs = NA, flagNAs){
#Lectura de datos del fichero 1
datos1 <- read.table(file=file1, header = TRUE, sep = "\t", dec = ".", fill = TRUE)
#Selección de columnas del fichero 1
sample <- datos1[,colnames(datos1) == "Sample"]
target <- datos1[,colnames(datos1) == "Detector"]
type <- datos1[,colnames(datos1) == "Type"]
cq <- datos1[,colnames(datos1) == "Ct"]
datos1 <- data.frame(sample, target, type, cq)
#Lectura y ordenación del archivo phenoData
phenodata <- read.table(file = phenofile, header = TRUE, sep = "")
phenodata <- phenodata[order(as.vector(phenodata$Sample)),]
rownames(phenodata) <- phenodata[,1]
if(!is.na(file2)){
#Lectura de datos del fichero 2
datos2 <- read.table(file=file2, header = TRUE, sep = "\t", dec = ".", fill = TRUE)
#Selección de columnas del fichero 2
sample <- datos2[,colnames(datos2) == "Sample"]
target <- datos2[,colnames(datos2) == "Detector"]
68
Análisis de datos en Bioinformática
Daniel Parras Burgos
type <- datos2[,colnames(datos2) == "Type"]
cq <- datos2[,colnames(datos2) == "Ct"]
datos2 <- data.frame(sample, target, type, cq)
#Unión de los dos ficheros
datos <- NULL
datos <- rbind(datos1, datos2)
}else{
datos <- datos1
}
#Renombrado de columnas
colnames(datos) <- c("Sample","Detector","Type","Cq")
#Eliminación de filas con campo vacío en genes
datos <- datos[datos[,2] != "",]
# Eliminación de espacio en ‘Endogenous Control’
dat <- as.vector(datos[,3])
datos[,3] <- as.factor(gsub(" ", "", datos[,3]))
#Cambio de ‘Undetermined’ por valor NA
dat <- as.vector(datos[,4])
for(i in 1:length(datos[,4])){
if(dat[i] == "Undetermined") dat[i] <- NA
}
datos[,4] <- as.numeric(dat)
#Creación de nuevo fichero de datos para lectura desde libro 'ReadqPCR'
write.table(datos,"qPCR.txt",
quote=FALSE, sep="\t", row.names=FALSE)
69
Análisis de datos en Bioinformática
Daniel Parras Burgos
#Lectura de datos desde libro 'ReadqPCR'
qPCRBatch.qPCR <- read.qPCR("qPCR.txt", phenoData = AnnotatedDataFrame(phenodata))
#Cambio de NAs a un valor numérico en qPCRBatch
if(is.numeric(valuesNAs)) qPCRBatch.qPCR <- replaceNAs(qPCRBatch.qPCR, newNA = valuesNAs)
#Combinación de replicados técnicos mediante media aritmética
if(replicates) qPCRBatch.qPCR <- combineTechReps(qPCRBatch.qPCR)
#Flags cuando se alcanza un porcentaje mínimo de NAs
flagNAs <- flagNAs/100
flags <- NULL
for(i in 1:length(featureNames(qPCRBatch.qPCR))){
casosNAs <- 0
ncasos <- 0
controlesNAs <- 0
ncontroles <- 0
gen <- datos[datos$Detector == featureNames(qPCRBatch.qPCR)[i],]
gen <- gen[order(as.vector(gen$Sample)),]
gen[,5] <- phenodata[,colnames(phenodata) == "Type"]
for(j in 1:length(gen[,1])){
if(gen[j,5]==1){
ncasos <- ncasos + 1
if(is.na(gen[j,4])) casosNAs <- casosNAs + 1
}else{if(gen[j,5]==0){
ncontroles <- ncontroles + 1
if(is.na(gen[j,4])) controlesNAs <- controlesNAs + 1
}}
}
ifelse(casosNAs/ncasos > flagNAs || controlesNAs/ncontroles > flagNAs, flags[i] <- "X", flags[i] <- "")
70
Análisis de datos en Bioinformática
Daniel Parras Burgos
}
qPCRBatch <- list()
qPCRBatch[[1]] <- qPCRBatch.qPCR
qPCRBatch[[2]] <- flags
return(qPCRBatch)
}
qPCR.read_endo <- function(file1, file2 = NA, valuesNAs = NA){
#Lectura de datos del fichero 1
datos1 <- read.table(file=file1, header = TRUE, sep = "\t", dec = ".", fill = TRUE)
#Selección de columnas del fichero 1
sample <- datos1[,colnames(datos1) == "Sample"]
target <- datos1[,colnames(datos1) == "Detector"]
type <- datos1[,colnames(datos1) == "Type"]
cq <- datos1[,colnames(datos1) == "Ct"]
datos1 <- data.frame(sample, target, type, cq)
if(!is.na(file2)){
#Lectura de datos del fichero 2
datos2 <- read.table(file=file2, header = TRUE, sep = "\t", dec = ".", fill = TRUE)
#Selección de columnas del fichero 2
sample <- datos2[,colnames(datos2) == "Sample"]
target <- datos2[,colnames(datos2) == "Detector"]
type <- datos2[,colnames(datos2) == "Type"]
cq <- datos2[,colnames(datos2) == "Ct"]
datos2 <- data.frame(sample, target, type, cq)
71
Análisis de datos en Bioinformática
Daniel Parras Burgos
#Unión de los dos ficheros
datos <- NULL
datos <- rbind(datos1, datos2)
}else{
datos <- datos1
}
#Renombrado de columnas
colnames(datos) <- c("Sample","Detector","Type","Cq")
#Eliminación de filas con campo vacío en genes
datos <- datos[datos[,2] != "",]
#Eliminación de espacio en ‘Endogenous Control’
dat <- as.vector(datos[,3])
datos[,3] <- as.factor(gsub(" ", "", datos[,3]))
#Cambio de ‘Undetermined’ por valor NA
dat <- as.vector(datos[,4])
for(i in 1:length(datos[,4])){
if(dat[i] == "Undetermined") dat[i] <- NA
}
datos[,4] <- as.numeric(dat)
#Selección de genes endógenos para creación de objeto qPCRBatch
datos_endo <- datos[datos[,3]=="EndogenousControl",]
datos_endo <- datos_endo[order(datos_endo$Detector),]
#Cambio de NAs a un valor numérico en genes endógenos
dat <- as.vector(datos_endo[,4])
for(i in 1:length(datos_endo[,4])){
if(is.na(dat[i])) dat[i] <- valuesNAs
72
Análisis de datos en Bioinformática
Daniel Parras Burgos
}
datos_endo[,4] <- as.numeric(dat)
#Creación de data.frame con los datos de genes endógenos
rep <- count(datos_endo,"Detector")
genes_endo <- data.frame()
k <- 1
for(i in 1:length(rep[,1])){
for(j in 1:rep[i,2]){
genes_endo[k,1] <- paste(c("Muestra_",j), collapse="")
k <- k+1
}
}
genes_endo[1:length(datos_endo[,2]),2] <- datos_endo[1:length(datos_endo[,2]),2]
genes_endo[1:length(datos_endo[,2]),3] <- datos_endo[1:length(datos_endo[,2]),4]
colnames(genes_endo) <- c("Sample","Detector","Cq")
#Creación de nuevo fichero de datos de controles endógenos para lectura desde libro 'ReadqPCR'
write.table(genes_endo,"qPCR_endo.txt", quote=FALSE, sep="\t", row.names=FALSE)
#Lectura de datos desde libro 'ReadqPCR'
qPCRBatch.qPCR_endo <- read.qPCR("qPCR_endo.txt")
return(qPCRBatch.qPCR_endo)
}
qPCR.hks <- function(file1, file2 = NA, valuesNAs = NA, showgraphs = TRUE){
#Creación del objeto qPCRBatch de genes endógenos llamando a su función de lectura
qPCRBatch.qPCR_endo <- qPCR.read_endo(file1, file2, valuesNAs)
73
Análisis de datos en Bioinformática
Daniel Parras Burgos
#Elección de genes más estables para normalización (geNorm)
selecthks <- selectHKs(qPCRBatch.qPCR_endo, method = "geNorm", Symbols =
featureNames(qPCRBatch.qPCR_endo), minNrHK = 2, log = FALSE, trace = FALSE)
ranks <- data.frame(c(1, 1:(length(featureNames(qPCRBatch.qPCR_endo))-1)))
ranks[2] <- selecthks$ranking
names(ranks) <- c("rank", "Muestra")
if(showgraphs){
#Gráfico "Estabilidad en la expresión (M)"
#Valores máximo y mínimo en el eje y
ymax <- signif(max(selecthks$meanM), digits=3)
ymin <- signif(min(selecthks$meanM), digits=3)
par(mfrow=c(2,1))
matplot(selecthks$meanM, type = "b",
ylab = "Media de la estabilidad en la expresión (M)",
xlab = "Número restante de controles endógenos",
axes = FALSE, pch = 19, col = "blue",
ylim = c(ymin, ymax), lty = 1, lwd = 2,
main = "Estabilidad en la expresión (M)")
axis(1, at = 1:(length(featureNames(qPCRBatch.qPCR_endo))-1),
labels = as.character(length(featureNames(qPCRBatch.qPCR_endo)):2))
axis(2, at = seq(ymin, ymax, by = 0.01), labels = seq(ymin, ymax, by = 0.01))
box()
abline(h = seq(ymin, ymax, by = 0.01), lty = 2, lwd = 1, col = "grey")
legend("topright", legend = "Muestra", fill = "blue")
#Leyenda
leyenda <- NULL
for(i in length(featureNames(qPCRBatch.qPCR_endo)):3){
elem <- paste(c(i-1,"/",i), collapse="")
leyenda <- cbind(leyenda,elem)
74
Análisis de datos en Bioinformática
Daniel Parras Burgos
}
#Gráfico "Variación de los controles endógenos (V)"
mypalette <- heat.colors(length(featureNames(qPCRBatch.qPCR_endo)), alpha = 1)
barplot(selecthks$variation, beside = TRUE,
col = mypalette, space = c(0, 2),
names.arg = "Muestra",
ylab = "Variación (V)",
main = "Variación de los controles endógenos (V)")
legend("topright", legend = leyenda,fill = mypalette, ncol = 2)
abline(h = seq(0.05, 0.25, by = 0.05), lty = 2, col = "grey")
abline(h = 0.15, lty = 1, col = "black")
}
return(ranks)
}
#Función para normalización
qPCR.norm <- function(qPCRBatch, hkgs, calc){
return(deltaCq(qPCRBatch = qPCRBatch, hkgs = hkgs, calc = calc))
}
qPCR.ddCq <- function(..., rankgenes = 0, file1, file2 = NA, phenofile, replicates = FALSE, valuesNAs = NA,
flagNAs){
#Creación de los objetos qPCRBatch llamando a función de lectura
qPCRBatch <- qPCR.read(file1, file2, phenofile, replicates, valuesNAs, flagNAs)
qPCRBatch.qPCR <- qPCRBatch[[1]]
flags <- qPCRBatch[[2]]
75
Análisis de datos en Bioinformática
Daniel Parras Burgos
#Creación de la matriz de contraste
aux <- as.matrix(pData(qPCRBatch.qPCR)$Type)
design <- cbind(ifelse(aux == 1, 0, 1),aux)
colnames(design) <- c("CONTROL","CASO")
rownames(design) <- sampleNames(qPCRBatch.qPCR)
#Normalización utilizando los n primeros genes de ranks o los genes indicados
if(rankgenes>0){
ranks <- qPCR.hks(file1, file2, valuesNAs = valuesNAs, showgraphs = FALSE)
hkgs <- ranks[1:rankgenes,2]}
else{
hkgs <- as.character(list(...))
}
qPCRBatch.norm <- qPCR.norm(qPCRBatch = qPCRBatch.qPCR, hkgs = hkgs, calc="geom")
#Obtención de los ddCt y los p-values asociados
lmF <- lmFit(exprs(qPCRBatch.norm), design)
cont.matrix <- makeContrasts(CASO-CONTROL, levels=design)
cont.fit <- contrasts.fit(lmF, cont.matrix)
eBa <- eBayes(cont.fit)
write.fit(eBa, file="limma.txt", adjust="BH")
#Obtención de la tabla de resultados con los 2^-ddCt y los p-values
limma <- read.table(file="limma.txt", header = TRUE, sep = "\t", dec = ".")
ddCt <- data.frame(featureNames(qPCRBatch.qPCR),2^(-limma$Coef),limma$p.value,
limma$p.value.adj,flags)
colnames(ddCt) <- c("Gene_ID","Fold_Change","p-value","p-value_adj.","+NAs")
#Reordenación de la tabla de resultados
ddCt <- ddCt[order(ddCt$Fold_Change, decreasing=TRUE),]
return(ddCt)
}
76
Análisis de datos en Bioinformática
Daniel Parras Burgos
7.2.2 Anexo 2
ExprPolymCNV <- function(file_expr, file2, pdfpath = "C:"){
#Lectura de datos del fichero de datos expresión
datos1 <- read.table(file=file_expr, header = TRUE, sep = "\t", dec = ",", fill = TRUE)
#Lectura de datos del fichero de polimorfismos/CNV
datos2 <- read.table(file=file2, header = TRUE, sep = "\t", fill = TRUE)
#Ordenación de columnas
temp <- data.frame(datos1[,1:1])
names(temp) <- names(datos1)[1]
temp2 <- data.frame(datos1[,2:length(datos1[1,])])
temp2 <- temp2[,order(names(temp2))]
datos1 <- data.frame(temp,temp2)
temp <- data.frame(datos2[,1:2])
temp2 <- data.frame(datos2[,3:length(datos2[1,])])
temp2 <- temp2[,order(names(temp2))]
datos2 <- data.frame(temp,temp2)
#Eliminación de genes que no están en ambos ficheros
a <- levels(datos1[,1])
b <- levels(datos2[,1])
c <- setdiff(a,b)
d <- setdiff(b,a)
e <- union(c,d)
if(length(e) > 0){
for(i in 1:length(e)){
datos1 <- datos1[datos1[,1] != e[i],]
datos2 <- datos2[datos2[,1] != e[i],]
}
77
Análisis de datos en Bioinformática
Daniel Parras Burgos
}
#Eliminación de muestras que no están en ambos ficheros
a <- names(datos1)[2:length(names(datos1))]
b <- names(datos2)[3:length(names(datos2))]
c <- setdiff(a,b)
d <- setdiff(b,a)
e <- union(c,d)
if(length(e) > 0){
for(i in 1:length(e)){
datos1 <- datos1[,names(datos1) != e[i]]
datos2 <- datos2[,names(datos2) != e[i]]
}
}
#Selección de dCt por grupos
p.values <- genes <- snps <- genotipos_CNV <- NULL
#Creación de pdf para guardar boxplots
pdf(paste(pdfpath, "/boxplots.pdf", sep=""))
for(i in 1:length(datos2[,1])){
v1 <- v2 <- v3 <- NULL
level1 <- level2 <- level3 <- 0
#Obtención de niveles
fac <- NULL
for(m in 3:length(datos2[1,])){
if(datos2[i,m] != "" & datos2[i,m] != "Undetermined") fac <- rbind(fac, as.character(datos2[i,m]))
}
78
Análisis de datos en Bioinformática
Daniel Parras Burgos
fac <- as.factor(fac)
pos_datos1 <- which(datos1[,1]==as.character(datos2[i,1]))
if(length(levels(fac))>=1 & length(levels(fac))<=3){
for(j in 3:(length(datos2[1,]))){
if(length(levels(fac))==1){level1 <- level1 + 1
}else{if(datos2[i,j]==levels(fac)[1]){
v1 <- c(v1, datos1[pos_datos1,j-1])
level1 <- level1 + 1
}else{if(datos2[i,j]==levels(fac)[2]){
v2 <- c(v2, datos1[pos_datos1,j-1])
level2 <- level2 + 1
}else{if(length(levels(fac))==3 & datos2[i,j]==levels(fac)[3]){
v3 <- c(v3, datos1[pos_datos1,j-1])
level3 <- level3 + 1
}}}}
}
}
#ANOVA o t-test
if(length(levels(fac))==3){
lista <- list(v1,v2,v3)
names(lista) <- levels(fac)
muestras <- c(lista[[1]],lista[[2]],lista[[3]])
grupos <- as.factor(c(rep(1,length(lista[[1]])),rep(2,length(lista[[2]])),rep(3,length(lista[[3]]))))
79
Análisis de datos en Bioinformática
Daniel Parras Burgos
pAnova <- summary(aov(muestras~grupos))
p.value <- pAnova[[1]]$"Pr(>F)"
p.values <- c(p.values,round(p.value[!is.na(p.value)],6))
}else{if(length(levels(fac))==2){
lista <- list(v1,v2)
names(lista) <- levels(fac)
pT.test <- t.test(v1,v2)
p.value <- pT.test$p.value
p.values <- c(p.values,round(p.value[!is.na(p.value)],6))
}}
#Boxplots
if(length(levels(fac))==3 || length(levels(fac))==2){
boxplot(lista,col=c("cornsilk","cornsilk2","cornsilk3"),names=names(lista),
ylab="dCt",main=paste(datos2[i,1],"/",datos2[i,2]))
}
#Caso en que sólo hay 1 nivel (no hay grupos que comparar)
if(length(levels(fac))==1){p.values <- c(p.values,"X")}
#Creación de la tabla de resultados
genes <- c(genes,as.character(datos2[i,1]))
snps <- c(snps,as.character(datos2[i,2]))
#Obtención del número de cada genotipo para cada snp
if(length(levels(fac))==3){
genotipos_CNV [i] <- paste(levels(fac)[1],"=",level1," ",levels(fac)[2],"=",level2," ",
levels(fac)[3],"=",level3)}
if(length(levels(fac))==2){
genotipos_CNV [i] <- paste(levels(fac)[1],"=",level1," ",levels(fac)[2],"=",level2)}
80
Análisis de datos en Bioinformática
Daniel Parras Burgos
if(length(levels(fac))==1){
genotipos_CNV [i] <- paste(levels(fac)[1],"=",level1)}
}
dev.off()
results <- data.frame(genes,snps,p.values,genotipos_CNV)
return(results)
}
81
Análisis de datos en Bioinformática
Daniel Parras Burgos
7.2.3 Anexo 3
file1 <- "MJ_01_result.txt"
file2 <- "GSTM1.txt"
endogeno <- "GADPH"
target <- "GSTM1"
#Lectura de datos de expresión
datos1 <- read.table(file=file1, header = TRUE, sep = "\t", dec = ",", fill = TRUE)
#Eliminación de ‘Undetermined’ y cambio de comas por puntos
datos1 <- datos1[datos1$Ct!="Undetermined",]
dat <- as.vector(datos1$Ct)
dat <- gsub(",",".",dat)
datos1$Ct <- as.numeric(dat)
#Media de los endógenos de cada muestra // Normalización // Media de replicados
muestras <- unique(datos1$Sample)
media_endo <- NULL
media_muestra <- NULL
for(i in 1:length(muestras)){
media_endo[i] <- mean(datos1[datos1$Sample==muestras[i] & datos1$Detector==endogeno,grep("Ct",
colnames(datos1))])
media_muestra[i] <- mean(datos1[datos1$Sample==muestras[i] & datos1$Detector==target,grep("Ct",
colnames(datos1))]-media_endo[i])
}
muestras <- muestras[!is.na(media_muestra)]
media_muestra <- media_muestra[!is.na(media_muestra)]
82
Análisis de datos en Bioinformática
Daniel Parras Burgos
#Data.frame de datos de expresión
df <- NULL
df <- data.frame()
df <- rbind(df, media_muestra)
colnames(df) <- muestras
df <- cbind(target, df)
colnames(df)[1] <- "Gen"
#Lectura de datos de SNP/CNV
datos2 <- read.table(file=file2, header = TRUE, sep = "\t", dec = ",", fill = TRUE)
#Data.frame de datos de SNP/CNV
df2 <- NULL
df2 <- data.frame()
df2 <- rbind(df2, as.vector(datos2$CN.Predicted))
colnames(df2) <- datos2$Sample.Name
df2 <- cbind(target, df2)
df2 <- cbind(target, df2)
colnames(df2)[1] <- "Gen"
colnames(df2)[2] <- "Snp"
#Escritura de los data.frame
write.table(df,"geneExpression.txt", quote=FALSE, sep="\t", dec = ",", row.names=FALSE)
write.table(df2,"CNV.txt", quote=FALSE, sep="\t", row.names=FALSE)
83
Análisis de datos en Bioinformática
Daniel Parras Burgos
8. Bibliografía y webgrafía
[1] Wang DG, Fan JB, Siao CJ, et al. “Large-scale identification, mapping and
genotyping of single nucleotide polymorphisms in the human genome”. Science, 1998;
280:1077-82
[2] Rodríguez Sánchez IP, Barrera Saldaña HA. “La reacción en cadena de la
polimerasa a dos décadas de su invención” Ciencia Uanl. Julio-Septiembre 2004; Vol.
VII, No. 3: 323-335
[3] Mullis KB. “The unusual origin of the polymerase chain reaction”. Sci Am, 1990;
262 (4): 56-61, 64-5
[4] Templeton NS. “The polymerase chain reaction. History, methods, and applications”
Diagn Mol Pathol. 1992; 1 (1): 58-72
[5] Baumforth KR, Nelson PN, Digby JE, O‟Neil JD, Murray PG. “Demystified… the
polymerase chain reaction” Mol Pathol. 1999; 52 (1): 1-10
[6] Kenneth J. Livak y Thomas D. Schmittgen. “Analysis of Relative Gene Expression
Data Using Real-Time Quantitative PCR and the
Method”. Elsevier Science,
2001; 402-408
[7] Jo Vandesompele, Katleen De Preter, Filip Pattyn, Bruce Poppe, Nadine Van
Roy, Anne De Paepe y Frank Speleman. “Accurate normalization of real-time
quantitative RT-PCR data by geometric averaging of multiple internal control genes”.
Genome Biology, 2002
[8] Paula Elosua. “Introducción al entorno R”. Argitalpen Zerbitzua, 2011; 13
[9] Robert C Gentleman, Vincent J Carey, Douglas M Bates, Ben Bolstad, Marcel
Dettling, Sandrine Dudoit, Byron Ellis, Laurent Gautier, Yongchao Ge, Jeff Gentry,
Kurt Hornik, Torsten Hothorn, Wolfgang Huber, Stefano Iacus, Rafael Irizarry,
Friedrich Leisch, Cheng Li, Martin Maechler, Anthony J Rossini, Gunther Sawitzki,
Colin Smith, Gordon Smyth, Luke Tierney, Jean YH Yang y Jianhua Zhang.
“Bioconductor: open software development for computational biology and
bioinformatics”. Genome Biology, 2004; 5:R80
84
Análisis de datos en Bioinformática
Daniel Parras Burgos
[10] James Perkins y Matthias Kohl. “ReadqPCR: Functions to load RT-qPCR data into
R”. Manual de referencia, 2013
[11] James Perkins y Matthias Kohl. “NormqPCR: Functions for normalisation of RTqPCR data”. Manual de referencia, 2013
[12] Gordon Smyth, Matthew Ritchie, Jeremy Silver, James Wettenhall, Natalie
Thorne, Davis McCarthy, Di Wu, Yifang Hu, Wei Shi, Belinda Phipson, Alicia
Oshlack, Carolyn de Graaf, Mette Langaas, Egil Ferkingstad, Marcus Davy, Francois
Pepin y Dongseok Choi. “Linear Models for Microarray Data”. Manual de referencia,
2002
http://www.unav.es/genetica/bioinfo/concepto.html
http://www.brain-dynamics.es/es/actividad/desarrollo-software-y-hardware
http://es.wikipedia.org/wiki/R_(lenguaje_de_programaci%C3%B3n)
http://www.r-project.org/
http://www.cica.es/Software/r.html
http://medmol.es/glosario/47/
http://es.wikipedia.org/wiki/%C3%81cido_ribonucleico
http://www.slideshare.net/aeroscristh/dogma-central-de-la-biologa-molecular-21797001
http://biocelular.wikispaces.com/Dogma+central+de+la+biologia+molecular
http://reconceptualizandolaexperiencia.wordpress.com/2009/12/22/74/
http://es.wikipedia.org/wiki/Transcriptasa_inversa
http://medmol.es/glosario/66/
85
Análisis de datos en Bioinformática
Daniel Parras Burgos
http://www.ecured.cu/index.php/Genotipo
http://es.wikipedia.org/wiki/Variaci%C3%B3n_en_el_n%C3%BAmero_de_copias
http://www.genome.gov/GlossaryS/index.cfm?id=40
http://es.wikipedia.org/wiki/Expresi%C3%B3n_g%C3%A9nica
http://www.news-medical.net/health/Gene-Expression-Measurement-(Spanish).aspx
http://www.medic.ula.ve/idic/docs/clases/complementarioII_tema10.pdf
http://www.ikerkuntza.ehu.es/p083-8991/es/contenidos/informacion/expresion_genica/
es_genomica/adjuntos/PCR%20a%20tiempo%20Real.pdf
http://www.monografias.com/trabajos64/pcr-tiempo-real/pcr-tiempo-real2.shtml
http://www.uclm.es/profesorado/mdsalvador/58109/teoria/anova_un_factor-lectura.pdf
86
Descargar