¿Por qué es necesaria esta sección?
En M01 establecimos que el ADN es una cadena de caracteres finita de cuatro letras. En M03 tratamos la distancia de Hamming, que mide la diferencia entre dos secuencias. En esta sección, daremos un paso atrás para observar que la distribución misma de las cuatro letras dentro de una secuencia contiene información.
El resumen más útil es el contenido GC (GC content), es decir, la proporción de G y C en la secuencia. Sorprendentemente, solo con este número ya se puede distinguir considerablemente entre especies. Hoy en día sigue siendo la primera pista para la identificación de especies en microbiomas, metagenómica y secuencias sin identificar.
Definición — En una sola línea
En Python se expresa de la siguiente manera:
def gc_content(dna: str) -> float: dna = dna.upper() gc = sum(1 for c in dna if c in "GC") total = sum(1 for c in dna if c in "ACGT") # Excluir los caracteres N return 100.0 * gc / total if total else 0.0
# Ejemploprint(gc_content("AGCTATAG")) # 37.5Con esto queda construido el núcleo de la solución al problema GC de Rosalind. El ejercicio consiste en encontrar, entre varias secuencias, la que presenta la mayor proporción de GC.
¿Por qué el porcentaje de GC varía entre especies?
Aquí aparece una observación sorprendente: la proporción de GC de las especies se distribuye en un intervalo muy amplio, del 20% al 75%. Veamos algunos ejemplos.
| Especie | Proporción GC | Características del hábitat |
|---|---|---|
| Plasmodium falciparum (parásito de la malaria) | 19% | Tropical |
| Mycobacterium leprae (bacilo de la lepra) | 58% | Interior de células humanas |
| Escherichia coli (bacteria intestinal) | 51% | Templado y diverso |
| Ser humano (promedio del genoma completo) | 41% | Templado |
| Streptomyces coelicolor (microorganismo del suelo) | 72% | Diversos tipos de estrés |
| Deinococcus radiodurans (bacteria resistente a la radiación) | 67% | Extremo (radiación) |
Esta distribución obedece a varios factores interrelacionados.
Razón 1: Estabilidad física
Un par G-C forma tres enlaces de hidrógeno, mientras que un par A-T forma dos. Por ello, cuanto mayor es la cantidad de G-C, más estable térmicamente resulta la doble hélice de ADN. Esto explica en parte la tendencia de los microorganismos hipertermófilos que viven a altas temperaturas a presentar una proporción GC elevada. No obstante, se trata de una correlación, no de una regla perfecta: existen muchas excepciones.
Razón 2: Sesgo en el uso de codones
La elección entre los distintos codones que codifican un mismo aminoácido varía según la especie. Las especies con alta proporción GC prefieren codones con abundancia de G/C en la tercera posición (wobble position). Este fenómeno se relaciona con el repertorio de tRNA, la carga ribosomal y la velocidad de traducción. También explica por qué humanos y E. coli expresan un mismo gen con sesgos de codones diferentes.
Razón 3: Sesgo en la reparación del ADN
Durante la reparación de daños en el ADN, las probabilidades de convertir A-T en G-C y de efectuar la conversión inversa no son simétricas. A largo plazo, las características del sistema de reparación de cada especie desplazan su proporción GC en una u otra dirección. Esta teoría se consolidó durante los últimos veinte años.
Resolvamos Rosalind GC
Este es el problema GC de Rosalind.
Se proporcionan varias secuencias de ADN en formato FASTA. Muestre el identificador y la proporción GC de la secuencia que tenga el valor más alto.
Esta es nuestra primera aparición del formato FASTA. Su aspecto es el siguiente:
>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGCEsta es la solución completa que incluye el análisis del archivo.
def parse_fasta(text: str) -> dict[str, str]: """Convierte una cadena FASTA en un diccionario {id: secuencia}.""" records = {} current_id = None for line in text.strip().splitlines(): if line.startswith(">"): current_id = line[1:].strip() records[current_id] = "" elif current_id: records[current_id] += line.strip() return records
def solve_rosalind_gc(fasta_text: str) -> tuple[str, float]: records = parse_fasta(fasta_text) best_id, best_gc = max( records.items(), key=lambda kv: gc_content(kv[1]) )[0], max(gc_content(seq) for seq in records.values()) return best_id, best_gc
# Usowith open("rosalind_gc.txt") as f: id_, gc = solve_rosalind_gc(f.read())print(f"{id_}\n{gc:.6f}")Una vez que creamos un analizador FASTA, lo reutilizamos en los ejercicios prácticos posteriores para mayor comodidad. Aunque Biopython ofrece SeqIO.parse, un analizador más sofisticado, escribiremos uno manualmente en esta entrega para comprender el principio subyacente.
Aplicación real: proporción GC en metagenómica
La metagenómica se ocupa de ADN mezclado de múltiples especies extraído de muestras ambientales (suelo, agua, microbiota intestinal, etc.). Aquí, la proporción GC es el primer indicador para determinar la composición de las especies.
- Al graficar un histograma de la proporción GC por contig, generalmente se observan varios picos.
- Cada pico corresponde al genoma de una especie microbiana (o linaje) específica.
- Herramientas como Kraken2 y MetaPhlAn (detalladas en la entrega S24) combinan este principio con el mapeo de k-mers para identificar especies.
Por cierto, el barcoding de ADN (DNA barcoding) es una extensión de esta misma lógica. Identifica especies microbianas mediante la proporción GC y los patrones de secuencia de genes cortos específicos de la especie (por ejemplo, 16S rRNA).
Trampas comunes en la práctica profesional
- Ignorar regiones de baja complejidad: Las secuencias repetitivas (como
GCGCGCGC…) distorsionan la proporción GC. Consideremos el enmascaramiento de baja complejidad (RepeatMasker · dustmasker) antes del cálculo. - Manejo de caracteres N: El código anterior excluye las N. También es posible aplicar otra política (calcular cada N como 0.25). Especifiquemos esto en la documentación del pipeline.
- Tamaño de la ventana: La proporción GC promedio de todo el genoma es completamente diferente a la proporción GC de una ventana deslizante de 100 pb. La proporción GC de la ventana es crucial en la cobertura de secuenciación, la predicción de genes y la detección de islas CpG.
- Sesgo GC de Illumina: Las lecturas cortas de secuenciación tienen una cobertura reducida en regiones con GC extremo (menos del 20 % o más del 80 %). Se puede verificar mediante CollectGcBiasMetrics de GATK (tema de la entrega S07).
Mapeo a ciencias de la computación
- Vector de características de frecuencia de caracteres: La proporción GC es una versión reducida del vector de características del alfabeto de cuatro letras. Es un concepto similar al uso de TF (frecuencia de términos) para la clasificación de documentos en el procesamiento del lenguaje natural.
- Clasificador Naive Bayes para identificación de especies: En la práctica, construir un clasificador Naive Bayes con vectores de frecuencia de k-mers (subsecuencias continuas de longitud k) aumenta significativamente la precisión de la identificación de especies. Esta es la base de las entregas posteriores (árbol de sufijos M13 · Kraken2 S24).
- Entropía e información: La desviación GC de una secuencia no se resume simplemente con su proporción GC. Al medir la información mediante la entropía de Shannon , se obtiene una especificidad de especie más precisa. Este es el primer punto de entrada de la teoría de la información en la bioinformática.
Ramas hacia la siguiente entrega
- Siguiente entrega (M05): Secuencia complementaria inversa — Por qué la proporción de GC es idéntica en la cadena opuesta (simetría).
- Dos entregas después (M06): Needleman-Wunsch — Alineamiento de dos secuencias. La proporción de GC influye en el ajuste de parámetros para la puntuación del alineamiento.
- Ocho entregas después (M13): Árbol de sufijos · Array — Estructura de datos para la indexación de k-mers.
- Veinticuatro entregas después (S24): Kraken2 · MetaPhlAn — Clasificación taxonómica basada en k-mers que extiende el concepto de proporción de GC.
Para profundizar más
El texto principal es una narrativa reconstruida por BPD. Para profundizar, consulte lo siguiente:
- Harvard STAT115 — La Semana 2: Composición de nucleótidos y sesgo de codones del profesor Xiaole Shirley Liu (subtítulos completos, excelente traducción automática). Aborda en detalle la relación entre el sesgo de codones y la proporción de GC.
- Libro web gratuito de referencia: NCBI Bookshelf — Contenido de GC y evolución del genoma. Se lee con comodidad a nivel introductorio.
- Artículo original: Bernardi, G. (2000), Isochores and the evolutionary genomics of vertebrates, Gene 241, 3–17. La obra canónica sobre el concepto de isochores en genómica de vertebrados.
- Herramienta de referencia: Biopython (
Bio.SeqUtils.GC) — En la práctica, basta con una sola línea de código para calcular GC. Ahora mismo se ha implementado manualmente para comprender los principios subyacentes. - Formación de EMBL-EBI — Metagenomics: Understanding Microbial Community (excelente traducción automática de subtítulos). Sirve como puente hacia la entrega S24.
Resuelva secuencialmente los ejercicios GC, REVC y PROT en Rosalind. Además, descargue los genomas de dos especies microbianas de interés desde NCBI, calcule su proporción de GC y trace un histograma (ventana deslizante de 100 pb). Comprendiendo naturalmente por qué la secuencia complementaria inversa de la entrega M05 presenta una proporción de GC simétricamente idéntica.