Tinbergen y el código genético

En un post anterior hablé sobre los modelos de optimalidad en biología. En general, se considera que lo que estos modelos explican es la presencia de rasgos en organismos (como ser, la disposición a cazar presas de ciertos tamaños), apelando a que esos están óptimamente diseñados para hacer algo (i.e. son óptimos según algún criterio de optimización). La idea de este post es precisar un poco más en qué sentido explican la presencia de rasgos.

En 1963, el etólogo Niko Tinbergen propuso que una distinción entre cuatro maneras distintas de explicar la presencia de un rasgo en un organismo —según algunos, se habría inspirado en las cuatro causas aristotélicas. Los modos pueden verse en la siguiente tabla:

En principio (probablemente por sus intereses disciplinares), Tinbergen introdujo esta distinción como cuatro formas de explicar el comportamiento animal. Su interés radicaba en sostener que las explicaciones que dan los neurofisiólogos y las que dan los etólogos sobre el comportamiento animal no son rivales entre sí, sino complementarias. Sin embargo, puede ampliársela para considerar rasgos en general, no sólo rasgos comportamentales. Así, utilizando como ejemplo el color de alas de las polillas moteadas, podemos ilustrarlas de la siguiente manera:

  1. Explicación causal/mecánicista: Las alas de la polilla son oscuras porque las células presentes en este órgano producen cierto tipo de pigmento.
  2. Explicación ontogenética/del desarrollo: Durante la fase de pupa, las estructuras anatómico / fisiológicas de la larva cambian, haciendo, entre otras cosas, que las células presentes en lo que luego serán las alas comiencen a producir ese tipo de pigmento.
  3. Explicación funcional: Las alas de la polilla son claras (y moteadas), porque ello les permite camuflarse ante los ojos de sus predadores (pájaros), en un ambiente en donde los líquenes crecen en las cortezas de los árboles, sobre los cuales las polillas descansan durante el día.
  4. Explicación evolutiva: La población de polillas adquirió el rasgo «color de alas claro» por medio de un proceso selectivo histórico. Las que tenían colores de alas más claros, sobrevivían más y tenían un mayor éxito reproductivo diferencial que las de alas con colores más oscuros. Con el correr de las generaciones, la proporción entre polillas oscuras y polillas claras cambió en favor de estas últimas.

Las cuatro explicaciones no son totalmente independientes entre sí. En particular, existen interesantes y complejas interrelaciones entre la explicación funcional y la explicación evolutiva (sobre las que quizás escriba en otro momento).

Por el momento, la pregunta es: si los modelos de optimalidad pretenden explicar la presencia de rasgos, ¿cuál de estos tipos de explicaciones es la que dan? (si es que alguna). En principio parece claro que no dan ni el primero, ni el segundo tipos. Quizás por motivos semejantes a los expuestos en el post anterior, algunos creen que estos modelos dan el cuarto tipo de explicación. Por ejemplo, la filósofa Angela Potochnik sostiene que:

«In order to succeed (…), an optimality model must accurately represent the selection dynamics involved in producing the target evolutionary outcome«

Si bien la práctica de modelado tipo-optimalidad es variada, y para algunos modelos de optimalidad esto puede ser plausible (p.e. los provenientes de la teoría de juegos evolutiva), parece que no en todos los casos dan este tipo de explicación. En lo que queda del post se ejemplifica este punto, con un modelo de optimalidad para el código genético (que de paso, permite ilustrar, en contraste con el post anterior, la variedad de campos en los que este enfoque ha sido aplicado).

El código genético y la redundancia

Para mis propósitos aquí, puede pensarse a una hebra de ADN o ARN como una secuencia de símbolos, o un mensaje, escrito con 4 letras (U, C, A y G) —para una explicación sencilla de por qué puede pensarselo así, véase este video. Por ejemplo, una porción del ARN podría verse así:

… A  C  U  A  G  A  G  G  G  U  C A  G  U  U ….

El código es lo que nos dice cómo nuestras células leen o interpretan ese mensaje. Los genes (subporciones del ADN del cromosoma) codifican proteínas —al menos en ciertos casos, la historia completa es más compleja— y el código es lo que especifica qué proteína codifica cada gen, especificando la secuencia de los aminoácidos que la conforman. Sabemos hoy que en el código, las unidades mínimas de sentido (análogas a las palabras que conformarán el mensaje, si se quiere), llamadas codones, contienen 3 caracteres. Cada triplo de caracteres es traducido o leído como un aminoácido, según la siguiente tabla:

Hay sólo un par de excepciones: el codón AUG determina el inicio de un mensaje particular (el inicio de un gen, punto a partir del cual se construirá una proteína), mientras que los codones UAA, UAG y UGA determinan el final del mensaje. Así, por ejemplo, la secuencia:

A  U  G  A  U  U  G  C  U  U  A  A  A  U  G  G  G  U  U  G  U  U  A  G

simbolizaría lo siguiente:

El modo como efectivamente ocurre este proceso de traducción involucra complejizaciones infinitas, pero para mis propósitos esta imagen será suficiente. La pregunta es entonces por qué el código es como es, es decir por qué la tabla de arriba es como es, por qué indica que el «mensaje» genético debe ser leído de esa manera y no de otra. La estrategia consiste en mostrar que es así porque de esta manera es óptimo (o muy cercano al óptimo), según ciertos criterios a determinar.

Antes de pasar a ello, pueden notarse ciertas características del código. Por ejemplo, una vez establecido que serán tres los caracteres los que conforman codón, y dado que hay cuatro letras distintas, queda también establecido que hay 4 × 4 × 4 = 64 codones posibles. Pero puesto que hay sólo 19 aminoácidos distintos para codificar (más la instrucción de start y la de stop, o sea 21 «palabras» distintas en total), ocurrirá o bien que algunos codones no codificarán nada, o bien que habrá redundancia en el código (que más de un codón distinto codificará al mismo aminoácido). Si se observa la tabla de arriba, lo segundo es el caso. La mayor parte de los aminoácidos son codificados por más de un codón.

Además, otro hecho sorprendente es el modo como esto ocurre. En primer lugar, obsérvese que distintos aminoácidos son codificados por distintos números de codones. Por ejemplo, la Fenilananina es codificada por 2 codones, mientras que la Leucina y la Serina lo son por 6. En total, las clases de redundancia son las siguientes:

Si tomamos esa distribución de clases de redundancia como un dato dado, hay aun otro hecho más que resulta sorprendente. Por ejemplo, los codones que codifican a un aminoácido suelen ser bastante similares entre sí (estar a una letra de distancia), y lo que es más, en casi todos los casos la variación parece estar la tercera posición. Esto puede verse claramente si se grafica al código actual como un cubo en lugar de una tabla:

¿Por qué esto es así? ¿Por qué no tener a los codones distribuidos azarosamente en aminoácidos? ¿Por qué variar siempre la misma letra? Esto es lo que estudiaron, en un paper de 1984, Laboygues y Figureau, en un modelo expuesto en la sección siguiente.

Optimalidad

El modo como razonaron Labouygues y Figureau fue el siguiente: los codones para un mismo aminoácido son codificados por códigos cercanos, que varían (en general) en la misma posición, porque, de ese modo, se minimiza el efecto de las mutaciones puntuales (las que originan un cambio en una letra). Es decir, hicieron un estudio de optimalidad en donde el rasgo tipo es el código (compararon el presente código con otros códigos posibles), el criterio de optimización es la resistencia al error, y en el cual las constricciones son las mencionadas arriba (hay 4 letras, los codones tienen 3 caracteres, hay 19+2 aminoácidos a codificar, los grupos de redundancia son los mencionados, etc.) y algunas otras no mencionadas hasta aquí (p.e. todas las mutaciones puntuales son equiprobables).

El modo como determinaron un óptimo teórico es como sigue. Para un aminoácido arbitrario de cada una de las clases de redundancia (es decir para los aminoácidos codificados por t codones, con 1 ≤ t ≤ 6), determinaron primero la cantidad de códigos distintos posibles que podrían codificarlo (haciendo abstracción del modo como están codificados los demás aminoácidos). Por ejemplo, un aminoácido codificado por un codón, puede estar codificado por 64 codones distintos. Uno codificado por dos codones, puede estar codificado por (64 × 63) / 2 = 2016 pares de codones distintos (la división por 2 es porque no queremos contar a <UUU, AAA> y <AAA, UUU> como códigos distintos para ese aminoácido). Para aminoácidos codificados por 6 codones, el número de códigos distintos posibles asciende a 74 millones.

Por supuesto, no todos esos códigos van a ser igualmente resistentes a una mutación puntual. Por ejemplo, para un aminoácido codificado por 4 codones, los códigos {ACU, ACC, ACA, ACG} y {ACU, UUC, CGA, GAG} son desigualmente resistentes (utilizo aquí «código» para referime al código para ese aminoácido, no al código completo). Esto puede verse fácilmente de la siguiente manera. Supóngase que en una célula cualquiera del cuerpo hay un codón ACU en un gen que codifica —según el código— a un aminoácido X. Puede ocurrir que haya una mutación, y ese codón cambie. Dicho cambio puede originar (según el modo como esté armado el código) que el codón siga codificando al mismo aminoácido X, o bien que el aminoácido siendo codificado cambie.

Ahora bien, las mutaciones pueden ocurrir en cualquiera de los tres caracteres del codón, y pueden ir hacia cualquiera de las otras tres letras. Es decir, la primera A puede cambiar por U, por C o por G. En total, hay 9 mutaciones posibles para ese codón (cada carácter puede cambiar a tres letras distintas). Si el código es como en el segundo caso, las 9 mutaciones harán que el codón pase a codificar a otro aminoácido; en cambio, en el primer caso, 3 de esas 9 mutaciones mantienen al codón codificando al mismo aminoácido, mientras que sólo 6 lo cambian.

Y lo mismo ocurre con los otros cuatro codones presentes en ese código. Es decir, {ACU, ACC, ACA, ACG} es más resistente a las mutaciones puntuales que {ACU, ACA, UCU, AGU}; si bien en ambos casos ACU cambia de aminoácido al mutar en sólo 6 casos, en el segundo código los otros codones cambian en más casos (8), mientras que en el primero en la misma cantidad (6). Considerando a los códigos en su totalidad, hay 9 × 4 = 36 mutaciones posibles en cada uno, siendo que el primero resiste a 12 de ellas, y el segundo sólo a 6.

Para t = 4, sólo los códigos que varíen en una sola letra serán óptimos en términos de su resistencia al error. Es decir, habrá una sola clase de «códigos isomórficos óptimos». ¿Cuántos códigos en concreto hay que instancien esa estructura isomórfica? Bien, puede dividírselos en 3 clases, los que varían en la primera, en la segunda y en la tercera letras —es decir, habrá 3 clases de «códigos óptimos estructuralmente similares». A su vez, cada código perteneciente a una clase de similaridad estructural (que varía en una de las tres posiciones) tiene a las otras dos letras fijas, las cuales pueden ser de 4 tipos distintos cada una en los distintos códigos. Habrá entonces 4 × 4 = 16 códigos particulares por cada clase de similaridad estructural (por ejemplo, si se varía en la primera letra, estarán los códigos _AA, _AT, _AG, _AU, y lo mismo con cada una de las otras letras en la segunda posición). En total, habrá 1 × 3 × 4 × 4 = 48 códigos óptimos con 4 codones.

El mismo cálculo puede hacerse para aminoácidos codificados por los distintos números de codones, obteniendo la siguiente tabla:

Ahora bien, lo que Laboygues y Figureau notan es que los códigos para todos los aminoácidos se encuentran en una clase de isomorfismo óptima, salvo el de la Serina que puede ser visto como la unión entre un código óptimo de t = 4 y uno de t = 2 (sugiriendo quizás que ocurrió algún reagrupamiento), y el codón de stop (que ellos no mencionan). Es decir, bajo este criterio, el código genético actual tiene un grado de optimalidad muy alto. Para ver esto de manera más clara: los 5 códigos para los aminoácidos codificados por 4 letras están en un subgrupo de 48 códigos óptimos, de entre más de 630 mil códigos posibles, un hecho realmente asombroso.

 Conclusión

 ¿Qué tipo de explicación se da, entonces, en este modelo de optimalidad? En primer lugar, cabe señalar que lo que explica es sólo uno de los aspectos o características del código (que los codones para un aminoácido varían, en general, en la misma letra). Otros aspectos del código pueden ser estudiados independientemente, quizás por otros modelos de optimalidad (lo cual es de hecho el caso). Por ejemplo, ¿por qué distintos aminoácidos son codificados por números desiguales de codones?, o ¿por qué la distribución de los aminoácidos en la tabla (o mejor, en el cubo) es como es (porque unos se encuentran más cerca o más lejos de otros)?.

Haciendo estas salvedades, parece claro que el tipo de explicación que se da en este moelo no es la cuarta (la evolutiva). De hecho no sabemos (o al menos en la época en la que este se formuló no se sabía) prácticamente nada sobre la evolución del código. Parece en cambio que el tipo de explicación que da es más semejante a la tercera. Es decir, se está explicando la presencia de ciertas características en el código, apelando a lo que esas características hacen, o la función que cumplen (minimizar los efectos del «ruido»), y a que lo hacen mejor que posibles características alternativas. Por lo tanto, al menos uno de los tipos de vinculaciones propuestos entre selección natural y modelos de optimalidad no es adecuado, al no reflejar (al menos no en todos los casos) la práctica y la teorización efectivas en biología.

Deja un comentario