23 de julio de 2021

Alphafold2: estructuras de proteínas para todos los públicos

Hola,

el jueves pasado escribía aquí sobre RoseTTAFold, que ponía al alcance de los programadores una potente herramienta para predecir la estructura de cualquier proteína que tenga suficientes secuencias parecidas en los archivos. Unas horas más tarde me enteré de que su principal competidor, AlphaFold2, del que hemos escrito aquí, aquí y aquí , había hecho también sus deberes y publicaba sus modelos neuronales para predecir el plegamiento de secuencias de aminoácidos. Hay muchos hilos en Twitter, como éstos: 1 y 2 .

En un artículo en Nature repasan sus resultados en CASP14, como su notable precisión de 1.5 Å de RMSD para todos los átomos modelados, y muestran que esos resultados excelentes se sostienen en gran medida en un conjunto de 3144 estructuras recientemente publicadas en el Protein Data Bank tras descartar las estructuras conocidas con % identidad de secuencia > 40. El siguiente vídeo resume el proceso de predicción de una secuencia con múltiples dominios y 863 aminoácidos. Recuerdo que la única información de partida es la secuencia de aminoácidos y un alineamiento múltiple de esa secuencia con otras secuencias no redundantes de proteínas homólogas:

 

Fuente: https://www.nature.com/articles/s41586-021-03819-2

Alphafold2 no es perfecto, ya que en la validación contra el PDB hay un en torno a un 25% de predicciones con valores de RMSD elevados, pero en la mayor parte de los casos es excelente:

Una de las fortalezas del método es que es capaz de estimar bien la calidad los modelos que genera (ver Figura 2b de https://www.nature.com/articles/s41586-021-03828-1). Entre las limitaciones reseñadas por los autores del trabajo, destacan:

1) La calidad de las predicciones cae de manera significativa si el alineamiento múltiple de secuencias homólogas a la de interés tiene una profundidad < 30 (leer más aquí). 

2) Las estructuas de Alphafold son de menor calidad para dominios poco compactos, con pocos contactos, como los dominios puente. Esto contrasta con las buenas prestaciones observadas (3) para predecir estructuras cuaternarias de homómeros.

Para los que queráis probarlo hay varias opciones:

i) El contenedor Docker descrito en https://github.com/deepmind/alphafold que ojo, requiere 2.2TB de espacio si instalas todas las bases de datos. 

ii) Un cuaderno Colab con un predictor simplificado en https://colab.research.google.com/github/deepmind/alphafold/blob/main/notebooks/AlphaFold.ipynb

iii) Las predicciones ya disponibles en UniProt para un total de 21 especies (https://alphafold.ebi.ac.uk/download), incluyendo 4 plantas (Arabidopsis thaliana, soja, arroz y maíz). Puedes leer más en 4, 5 y 6 y 7.

Hasta pronto,

Bruno

16 de julio de 2021

RoseTTAFold: modelado Open Source de proteínas por aprendizaje profundo

Hola,

a finales del año pasado comentaba aquí que el algoritmo propietario AlphaFold suponía un antes y un después en la predicción estructural de proteínas, a la vista de sus resultados en el experimento colectivo CASP14. Muy brevemente, AlphaFold supone un paso de gigante para predecir con moderada resolución la estructura de proteínas que no se parecen en secuencia a otras ya conocidas, es decir, con identidades a nivel de aminoácidos < 20%. Su mayor pega, que a día de hoy no  podemos probar AlphaFold con nuestras secuencias. Es posible que Google termine publicando el código y los pesos de sus redes neuronales, pero eso todavía no ha ocurrido.

Unos meses después estamos en una situación mucho mejor, ya que ayer se publicó en Science el método RoseTTAFold, desarrollado por el grupo de David Baker, uno de los contendientes más sólidos en CASP desde hace ya muchos años. 

 

Arquitectura de RoseTTAFold y rendimiento en CASP14 y CAMEO. Figura tomada de https://science.sciencemag.org/content/early/2021/07/14/science.abj8754

En la figura se puede ver que RoseTTAFold se compone de varias redes neuronales interconectadas que se alimentan de datos en 1, 2 y 3 dimensiones y que están interconectadas. Los diagramas B y C resumen el rendimiento del nuevo algoritmo medido como el TM-score entre la predicción y la estructura experimental en dos conjuntos de datos, CASP14 y CAMEO (69 secuencias).

Aunque RoseTTAFold parece todavía inferior a AlphaFold, si supone un paso adelante enorme para todos aquellos investigadores (académicos, eso sí) que quieran modelar sus propias secuencias, ya que el código, los pesos de los modelos entrenados y las instrucciones de uso están disponibles en https://github.com/RosettaCommons/RoseTTAFold .

 

Un saludo,

Bruno


 

22 de junio de 2021

leer datos desde GitHub en R

Hola, esta es una entrada muy breve, donde describo cómo leer datos desde un fichero alojado en un repositorio GitHub en la Web. El problema tiene dos partes. 

Primero, nos aseguramos de acceder al formato original de los datos. Por ejemplo, para leer el fichero https://github.com/eead-csic-compbio/bioinformatics/blob/main/test_data/Ensembl_repeats.tsv , en formato TSV (texto separado por tabuladores), podemos obtener la ruta o path al fichero crudo haciendo click en el botón "Raw" a la derecha en la figura, que en este caso es https://raw.githubusercontent.com/eead-csic-compbio/bioinformatics/main/test_data/Ensembl_repeats.tsv :


 

Segundo, leemos el fichero directamente pasando su URL a la función read.csv de R indicando que las columnas están separadas por tabuladores y que la primera línea del fichero son los nombres de las columnas:

datos <- read.csv(
url("https://raw.githubusercontent.com/eead-csic-compbio/bioinformatics/main/test_data/Ensembl_repeats.tsv"),
sep="\t",
header=TRUE) 

 

Hasta pronto,

Bruno


15 de junio de 2021

entornos Python con pyenv

Hola,

si programas en Python o usas software escrito en este lenguaje es posible que te hayas enfrentado a la necesidad de usar una versión concreta que no tienes instalada en tu sistema, por ejemplo la versión 3.7.9. En esta entrada explico una manera de resolver este problema en Linux con ayuda de pyenv, que de hecho te permite tener múltiples versiones en paralelo, cada una con su propio espacio de dependencias. Espero que aquí quede más claro que en esta otra entrada.

Lo primero que necesitas es una partición en tu disco para pyenv:  

export PYENV_ROOT="/mi/particion/.pyenv"

curl https://pyenv.run | bash
  
# install python 3.7.9 (EOF June 2023)
pyenv install 3.7.9


Si todo va bien ahora debes añadir las siguientes líneas al final de tu fichero .bashrc:

if [[ -d "/mi/particion/.pyenv" ]]; then
    export PYENV_ROOT="/mi/particion/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init --path)"
    eval "$(pyenv virtualenv-init -)"
fi

 

Ahora ya puedes crear un entorno virtual sobre esta versión de Python, por ejemplo 'proyectox', e instalar dependencias específicas de ese proyecto:

pyenv virtualenv 3.7.9 proyectox
pyenv local proyectox
pip install --upgrade pip
 
# dependencias, tras clonar https://github.com/proyextox (ejemplo, no existe)
pip install -r proyectox/requirements.txt


Finalmente, ya puedes trabajar dentro de ese entorno:

pyenv local proyectox



Hasta pronto,

Bruno

9 de junio de 2021

comprueba si dos genomas FASTA son iguales

Hola, 

hoy mi colega Najla Ksouri y yo teníamos que comprobar si dos versiones del mismo genoma, una de Phytozome y otra de Ensembl Plants, eran iguales en secuencia. Para eso usamos este one-liner Perl que hace una digestión MD5 de las secuencias desde un fichero en formato FASTA, donde cada secuencia va precedida de una cabecera o header, capturada en la variable $h:

cat Prunus_persica.Prunus_persica_NCBIv2.dna.toplevel.fa |
    perl -MDigest::MD5=md5_hex -lne 'if(/^(>\S+)/){ $h=$1 } else { $fa{$h} .= $_ }
    END{ foreach $h (keys(%fa)){ print "$h\t".md5_hex(uc($fa{$h})) }}'
 

Éstas son las primeras líneas que imprime:

>scaffold_284	390b26eb24b1926aca0cbd2be8174139
>scaffold_112	9ed6d212a00a8018572c06d6c21fc78d
>scaffold_12	4d99812ab949deb933d84a5a9ebc5787
... 

Como se puede ver, la primera columna es la primera palabra de cada cabecera, y la segunda es la digestión MD5 de esa secuencia, que sería idéntica para dos secuencias iguales. Finalmente, veréis que llama al módulo core Digest::MD5, por tanto ya instalado, y que usa la función uc para convertir las secuencias a mayúsculas antes de digerirlas.

Hasta pronto,

Bruno