¿Cómo cambia la puntuación el alineamiento?
La puntuación de un alineamiento depende de tres números que elige quien analiza: lo que vale una coincidencia, una discrepancia y un hueco. Cambiar esos números cambia qué alineamiento sale como el mejor.
Además hay dos formas de alinear: global, de un extremo a otro, y local, que busca solo el mejor trozo en común.
Al final de esta lección
Nota
Puedo cambiar la puntuación de un alineamiento y decir cuándo conviene el alineamiento local.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Penalización de hueco | los puntos que resta cada hueco | -2 |
| Alineamiento global | alinea las dos secuencias enteras | |
| Alineamiento local | busca solo el mejor trozo en común | |
| Trozo común | una parte parecida en las dos secuencias | |
| Umbral | la puntuación mínima para decir que se parecen |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La penalización de hueco cambia el mejor alineamiento
Si un hueco cuesta poco, el alineamiento usa huecos con facilidad. Si cuesta mucho, los evita y acepta discrepancias.
No hay un valor correcto para siempre. Se elige según lo que se busca, y se dice cuál se usó para que otra persona repita el resultado.
Ejemplo resuelto: GATC contra G-TC con tres huecos
| Penalización de hueco | Coincidencias | Hueco | Puntuación total |
|---|---|---|---|
| -1 | 3 x (+1) = 3 | -1 | 2 |
| -2 | 3 x (+1) = 3 | -2 | 1 |
| -4 | 3 x (+1) = 3 | -4 | -1 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Puntúa el mismo alineamiento con tres huecos
docker exec jupyter python3 -c "a='GATC'; b='G-TC'; print([sum(g if '-' in (x, y) else (1 if x == y else -1) for x, y in zip(a, b)) for g in (-1, -2, -4)])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El alineamiento local busca solo el mejor trozo
A veces solo una parte de dos secuencias se parece, y el resto no. El alineamiento global paga las discrepancias de los extremos y la puntuación baja.
El alineamiento local ignora los extremos. La tabla nunca baja de 0. La primera fila y la primera columna valen 0. La respuesta es la celda más alta de toda la tabla.
Puntúa dos secuencias columna a columna
docker exec jupyter python3 -c "a='TTGACGTT'; b='CCGACGCC'; print(sum(1 if x == y else -1 for x, y in zip(a, b)))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Mira el trozo del medio
docker exec jupyter python3 -c "a='TTGACGTT'; b='CCGACGCC'; print(a[2:6], b[2:6], a[2:6] == b[2:6])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Calcula la puntuación global y la local
def best_score(a, b, match, mismatch, gap, local):
# En el local la tabla nunca baja de 0 y se guarda la celda más alta
table = []
for i in range(len(a) + 1):
table.append([0] * (len(b) + 1))
if not local:
for i in range(1, len(a) + 1):
table[i][0] = i * gap
for j in range(1, len(b) + 1):
table[0][j] = j * gap
best = 0
for i in range(1, len(a) + 1):
for j in range(1, len(b) + 1):
if a[i - 1] == b[j - 1]:
diagonal = table[i - 1][j - 1] + match
else:
diagonal = table[i - 1][j - 1] + mismatch
value = max(diagonal, table[i - 1][j] + gap, table[i][j - 1] + gap)
if local and value < 0:
value = 0
table[i][j] = value
if value > best:
best = value
if local:
return best
return table[len(a)][len(b)]
print(best_score("TTGACGTT", "CCGACGCC", 1, -1, -2, True))
print(best_score("TTGACGTT", "CCGACGCC", 1, -1, -2, False))
Ejemplo resuelto: TTGACGTT contra CCGACGCC
| Tipo | Qué cuenta | Puntuación |
|---|---|---|
| Global | Las dos secuencias enteras, con las discrepancias de los extremos | 0 |
| Local | Solo el trozo GACG, que coincide en las dos | 4 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error muy común
Advertencia
Mucha gente cree que la puntuación local está siempre en la esquina de abajo a la derecha, como la global. No: el mejor trozo puede estar en cualquier parte. Hay que buscar la celda más alta de toda la tabla, y esa celda nunca es negativa.
Se elige global o local según la pregunta
Usa el alineamiento global cuando las dos secuencias tienen un tamaño parecido y quieres compararlas enteras.
Usa el local cuando una secuencia es larga y buscas en ella un trozo parecido a otra más corta. Después se compara la puntuación con un umbral para decidir si el parecido importa.
Para ir más lejos: tres umbrales
Con tu función local, prueba la pareja GGGATTTCCC y AAATTTAAA. Su puntuación local es 4, el trozo ATTT. ¿Con qué umbral dirías que se parecen? Prueba 3, 4 y 5 y escribe qué decides en cada caso.