Volver a la lista

Distancia de Hamming y mutaciones puntuales: las matemáticas de la distancia evolutiva comienzan aquí

La respuesta más sencilla para medir la diferencia entre dos secuencias. Se parte de la distancia de Hamming y se explica por qué esta no es adecuada para medir correctamente la distancia evolutiva, así como la necesidad de aplicar la corrección de Jukes-Cantor.

Principiante
|
15min
|
Verificado (2026-07-19)
hamming distanceSNPpoint mutationJukes-Cantor
Progreso0/120 (0%)

¿Por qué es necesaria esta entrega?

¿Cuánto difieren dos secuencias? Esta pregunta atraviesa toda la bioinformática. La detección de variantes consiste en contar las diferencias entre lecturas y una referencia, los árboles filogenéticos reconstruyen relaciones evolutivas a partir de las diferencias de secuencia entre especies, y la vigilancia de resistencia a fármacos rastrea las diferencias entre secuencias ordenadas cronológicamente. La respuesta depende, en última instancia, de cómo definamos "¿cuánto difieren?".

La respuesta más sencilla es la distancia de Hamming. En esta entrega definiremos la distancia de Hamming, la implementaremos con una sola línea de Python y trataremos de usarla para estimar distancias evolutivas reales. También descubriremos naturalmente por qué esto solo no es suficiente —por qué se necesitan modelos probabilísticos como el de Jukes-Cantor—.

Definición — caracteres diferentes en la misma posición

Cuando las dos cadenas x y y tienen la misma longitud, la distancia de Hamming se define como:

dH(x,y)={i:xiyi}d_H(x, y) = |\{i : x_i \neq y_i\}|

Es decir, comparamos posición por posición y contamos cuántas posiciones difieren. Si las dos secuencias tienen longitudes diferentes, la distancia de Hamming no está definida (en ese caso se requieren distancias de edición · alineación, que se tratan en la entrega M06).

Aquí hay un ejemplo.

text
x: GAGCCTACTAACGGGAT
y: CATCGTAATGACGGCCT
   * *   * ** *   *

Las posiciones marcadas con * son distintas. Hay siete: d_H(x, y) = 7.

Este es exactamente el formato del problema HAMM de Rosalind: se proporcionan dos cadenas de ADN y solo hay que devolver su distancia de Hamming.

Implementación en una sola línea de Python

python
def hamming_distance(x: str, y: str) -> int:
assert len(x) == len(y), "La distancia de Hamming solo se define para longitudes iguales."
return sum(a != b for a, b in zip(x, y))
# Ejemplo de HAMM de Rosalind
x = "GAGCCTACTAACGGGAT"
y = "CATCGTAATGACGGCCT"
print(hamming_distance(x, y)) # 7

Es una sola línea. ¿Por qué es tan corta? Porque zip empareja las posiciones de las dos cadenas y True/False cuenta cuántas veces difieren las expresiones del generador. Dado que True se considera 1, sum es simplemente el número de diferencias.

Pero, ¿esta cifra realmente representa bien la "diferencia"?

Hagamos una pausa aquí. Si comparamos las secuencias del genoma humano y del chimpancé, aproximadamente el 1,2% de las posiciones son diferentes. Es decir, la distancia de Hamming / longitud de la secuencia ≈ 0,012. El ser humano y el ratón difieren en aproximadamente un 15%. El ser humano y la mosca de la fruta difieren en aproximadamente un 40%. El ser humano y la E. coli... a partir de cierto punto, deja de tener sentido.

¿Por qué deja de tener sentido? Porque puede haber múltiples mutaciones en una misma posición. Por ejemplo, si A muta a G y luego vuelve a mutar a A, a nuestros ojos parece que no ha cambiado. Sin embargo, desde el punto de vista evolutivo, se han acumulado dos mutaciones. A medida que pasa el tiempo, estas "mutaciones ocultas" se acumulan, y la relación entre la distancia de Hamming y la distancia evolutiva se vuelve no lineal. La diferencia real en la secuencia se acerca a la saturación.

Corrección de Jukes-Cantor: la primera aparición de un modelo probabilístico

El primer modelo probabilístico, propuesto por Thomas Jukes y Charles Cantor en 1969, comienza así.

Hipótesis: Cada posición muta de forma independiente, y todas las transformaciones entre las cuatro letras tienen la misma probabilidad.

Bajo esta hipótesis, si ha transcurrido un tiempo t entre dos secuencias, existe la siguiente relación entre el número real de mutaciones que se han producido (la distancia evolutiva d) y la proporción de posiciones diferentes observadas p:

text
d = -\frac{3}{4} \ln \left( 1 - \frac{4}{3} p \right)
$$

Cuando `p` es pequeño, $d \approx p$ (al expandir el logaritmo en serie de Taylor). Sin embargo, cuando `p` se aproxima a 3/4, `d` diverge. Esta es precisamente la propiedad buscada: aunque la diferencia observada no pueda superar 3/4 —el límite de una distribución aleatoria de cuatro letras—, la distancia evolutiva real debe poder crecer sin límite.

En Python se expresa así:
$$python
import math

def jukes_cantor_distance(hamming_frac: float) -> float:
    """Estima la distancia evolutiva (d) a partir de la proporción de Hamming observada (p)."""
    if hamming_frac >= 3/4:
        return math.inf
    return -0.75 * math.log(1 - (4/3) * hamming_frac)

# Ejemplo humano-ratón: p ≈ 0.15
p = 0.15
d = jukes_cantor_distance(p)
print(f"p observada = {p:.3f}, distancia evolutiva estimada d = {d:.3f}")
# p observada = 0.150, distancia evolutiva estimada d = 0.168

La distancia evolutiva real, 16.8%, es ligeramente mayor que el valor observado del 15%. La diferencia es pequeña entre especies relativamente cercanas, como humano y ratón, pero aumenta bruscamente entre especies distantes cuya proporción observada alcanza el 50%.

El modelo probabilístico no termina aquí

Jukes-Cantor es solo el comienzo. En artículos posteriores aparecen los modelos siguientes.

  • Kimura de dos parámetros (K2P): distingue las probabilidades de transición (purina ↔ purina o pirimidina ↔ pirimidina) y transversión (purina ↔ pirimidina). En la realidad, las transiciones ocurren varias veces más que las transversiones.
  • HKY85, GTR: incorporan además frecuencias estacionarias distintas para cada una de las cuatro letras. La mayoría de las herramientas filogenéticas modernas utilizan GTR.
  • Modelos de aminoácidos y codones: describen la evolución a nivel proteico. Las probabilidades de sustitución entre los 20 aminoácidos se observan mediante matrices BLOSUM y PAM, derivadas en M09.

Esta es la raíz exacta de BLOSUM y PAM en M09: frecuencia de sustitución observada → modelo probabilístico → puntuación de alineamiento.

Ejercicio práctico: Rosalind HAMM

Entre en HAMM de Rosalind, descargue el conjunto de datos y resuélvalo con la función hamming_distance anterior. Puede superar la evaluación en cinco minutos.

Después, descargue de NCBI dos secuencias de interés —por ejemplo, BRCA1 humano y BRCA1 de chimpancé— y calcule su distancia de Hamming real y la corrección de Jukes-Cantor. También resulta instructivo observar qué posiciones han cambiado de forma significativa.

Trampas comunes en la práctica

  • Forzar la distancia de Hamming sobre secuencias de distinta longitud: un solo hueco desplaza todas las posiciones posteriores. Si las longitudes difieren, hay que calcular la distancia de edición después del alineamiento (a partir de M06).
  • Tratamiento del carácter N: debe definirse si una N de baja confianza cuenta como diferencia o se ignora. Por convención se ignora mediante eliminación por pares (pairwise deletion).
  • Aplicar Jukes-Cantor sin cautela a especies distantes: las especies muy alejadas requieren modelos más detallados, como K2P o GTR. Jukes-Cantor es una primera aproximación.
  • Regiones de baja complejidad: las secuencias repetitivas y las regiones de baja complejidad distorsionan la distancia de Hamming. En filogenética se filtran primero, por ejemplo con RepeatMasker.

Mapeo CS

  • Distancia de Hamming: Es la distancia de Hamming que proviene de los códigos de corrección de errores (Reed-Solomon, BCH). La distancia mínima entre palabras de código determina el límite superior de errores corregibles. Richard Hamming (1950) la introdujo en Bell Labs para controlar errores en calculadoras nucleares.
  • Distancia de edición (Levenshtein): Es una generalización que permite inserciones, eliminaciones y sustituciones. Se extiende al problema del alineamiento en M06.
  • Teoría de la información y modelos probabilísticos: La corrección logarítmica de Jukes-Cantor es el primer ejemplo de estimación de máxima verosimilitud (MLE). Es una herramienta para estimar parámetros de probabilidad reales a partir de probabilidades observadas, que luego se extiende hasta las herramientas GATK y DESeq2, y la ML filogenética.

Ramas hacia el siguiente capítulo

  • Siguiente capítulo (M04): Proporción GC y discriminación de especies — ¿En qué medida las frecuencias en estado estacionario de las cuatro letras del alfabeto distinguen a las especies.
  • Dos capítulos después (M05): Secuencia inversa complementaria — Por qué es necesario calcular la secuencia de la cadena opuesta.
  • Tres capítulos después (M06): Needleman-Wunsch — Cómo alinear secuencias de longitudes diferentes.
  • Seis capítulos después (M09): BLOSUM/PAM — Derivar puntuaciones de alineamiento a partir de frecuencias de sustitución observadas. La versión para aminoácidos de Jukes-Cantor.
  • Veintiséis capítulos después (M28): Árbol filogenético de máxima verosimilitud — El modelo probabilístico de este capítulo se extiende a la reconstrucción de árboles filogenéticos.

Para profundizar más

El texto principal es una narración reconstruida por BPD. Para profundizar, consulte lo siguiente:

  • Harvard STAT115 — Semana 2 de la profesora Xiaole Shirley Liu: Bases de comparación de secuencias (subtítulos completos, traducción automática excelente). Explica suavemente la transición desde la distancia de Hamming hasta la distancia de edición.
  • Artículo original: Jukes, T. H. & Cantor, C. R. (1969), Evolution of Protein Molecules, en Mammalian Protein Metabolism. El artículo fundacional de los modelos de evolución probabilística.
  • Artículo original: Hamming, R. W. (1950), Error detecting and error correcting codes, Bell System Technical Journal 29, 147–160. La fuente de la informática.
  • Libro web gratuito de referencia: Felsenstein, J. Inferring Phylogenies Capítulo 11. El texto clásico sobre modelos probabilísticos evolutivos.
  • StatQuestDistancia de Hamming y Comparación de Secuencias (traducción automática de subtítulos excelente). Permite adquirir intuición visual.

Continúa resolviendo HAMM, GC y REVC en Rosalind. Además, calcula la distancia de Hamming utilizando las secuencias reales de dos genes que conozcas y observa el valor corregido por Jukes-Cantor. Esto lleva naturalmente a la siguiente lección M04, donde se explica por qué la proporción GC ayuda a distinguir entre especies.

💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...