Parte 1

1. Investiga, ¿Cuál fue la situación COVID-19 a nivel mundial, y el impacto que tuvo en tu país de origen, estado de origen y en tu municipio, alcaldía o colonia?

Panorama mundial:

Al 31 de diciembre de 2024, el Coronavirus Resource Center de la Johns Hopkins University & Medicine reportaba 676.6 millones de casos confirmados y 6.88 millones de defunciones acumuladas (Johns Hopkins University & Medicine, 2024).

Impacto en México:

Para la misma fecha, México registraba 7.70 millones de contagios y 334,958 muertes (Worldometers, 2025). Las olas más severas se dieron en invierno 2020-21 y verano 2021 (Delta); las subvariantes de Ómicron ocasionaron picos cortos y menos letales gracias a una cobertura de vacunación > 75% en 2023.

Impacto en Nuevo León:

El Reporte Diario de COVID-19 NL (Secretaría de Salud de Nuevo León, 2023) indicaba 660,244 casos y 16,778 defunciones; la ocupación hospitalaria se redujo a 1.3%, manteniendo semáforo verde durante 2023-24.

Impacto en Monterrey:

El Plan Municipal de Desarrollo 2021-2024 destaca que la crisis sanitaria profundizó la brecha social: cerca del 35% de los hogares dependen de la economía informal, haciéndolos más vulnerables a confinamientos y pérdida de empleo (Gobierno de Monterrey, 2022).

2. ¿Cuál fue la primera variante del virus que se propagó a todo el mundo?

El linaje con la mutación Spike D614G desplazó a la cepa de Wuhan y se volvió dominante a mediados de 2020, aumentando la transmisibilidad a 20% aproximadamente (Korber et al., 2020).

3. ¿Cuáles fueron las principales variantes del virus que se propagaron durante la pandemia?

Variante (VOC) Linaje Período de dominio Rasgo clave
Alpha B.1.1.7 dic 2020 – jun 2021 +50% transmisión, ligera ↑ gravedad
Beta B.1.351 feb – jun 2021 Evasión inmune moderada
Gamma P.1 mar – jul 2021 Reinfecciones en Manaos
Delta B.1.617.2 jul 2021 – dic 2021 +60% transmisión, ↑ hospitalizaciones
Omicron B.1.1.529+ dic 2021 – presente Alta evasión inmune, menor gravedad

4. Imagina que te encuentras en una situación similar a la de Li Wenliang, médico chino que intentó alertar sobre el brote de coronavirus en su país, pero fue detenido por las autoridades y obligado a retractarse. ¿Qué harías en su caso? Selecciona un inciso:

José Fernando Munguía Zertuche: > c) Guardo la información.
> Si yo me encontrara en una situación parecida, me retractaría tal como me lo indicaron las autoridades. A pesar de saber el riesgo que podría implicar el hecho de no alertar al mundo, no me gustaría entrar en problemas con la autoridad. Sé que esta forma de actuar probablemente podría ser considerada cobarde o algo por el estilo. Sin embargo, no me gustaría en absoluto tener problemas con las entidades federativas. He escuchado muchas veces, aunque tal vez sean solo rumores, que ha habido muchos científicos en la historia que fueron asesinados por haber descubierto algo que el gobierno no quería que se supiera. Reitero que mi decisión de actuar de esta manera se basa únicamente en esos rumores. Sinceramente, eso es lo que yo haría, a pesar de saber que esta forma de actuar se enfoca más en la seguridad personal que en la colectiva.

Javier Vazquez Soto: > a) Lo reportas al centro de investigación o la universidad
> En una situación similar a la de Li Wenliang, mi elección sería reportar la información al centro de investigación o a la universidad (opción a). La principal razón detrás de esta decisión es que, al hacerlo, podría reducir al mínimo los riesgos personales sin dejar de alertar a las autoridades pertinentes sobre una amenaza potencial.
> Reportar la información a una institución académica también tiene la ventaja de actuar como un canal menos vulnerable a la censura directa por parte del gobierno, que puede estar más inclinado a controlar la información que circula en los medios públicos. Si bien la decisión podría implicar un retraso en la respuesta, el impacto a largo plazo puede ser significativo. Es posible que la universidad o el centro de investigación, al recibir esta información, decida actuar en función de su responsabilidad social, promoviendo la investigación sobre el brote y comunicando los riesgos a través de canales adecuados.
> Este enfoque tiene como objetivo asegurar que las personas reciban la información correcta de una fuente confiable, mientras minimiza las consecuencias personales para quienes intentan alertar sobre el peligro. A través de este método, también se garantiza que la comunidad esté preparada para tomar medidas preventivas antes de que la situación se hubiera convertido en una crisis de salud pública mundial como lo que se convirtió.

Alberto López Barragán: > c) a) Lo reportaría al centro de investigación o la universidad.
> En la posición de Li Wenliang lo reportaría a un centro de investigación de forma privada porque a pesar de que sin duda tendría miedo por la advertencia que me dio la policía y que firmé un contrato de parar los “actos ilegales” como los cataloga la policía, mi descubrimiento sería de suma importancia. Un nuevo virus o mutación significativa de uno ya existente siempre será algo que se debe tratar con delicadeza, además en el documento que firmé con la policía argumenta que lo ilegal es difundir rumores en línea y alterar el orden público, al yo notificar a una institución capaz de manejar la información estoy libre de cualquier posible delito del cual las autoridades me quieran culpar y estaría informando a una institución con los recursos y las herramientas necesarias para investigar el virus. Si es una institución privada, es más probable que puedan hacerle frente al gobierno que no quiere que se sepan los datos.
> Es cierto que mi decisión está muy influenciada por mi experiencia vivida en la cuarentena del 2020, en la cual me di cuenta del daño que puede causar un virus, vi todas las muertes, el miedo de las personas, problemas económicos que muchos tuvieron, distancia con seres queridos y muchas otras situaciones. Es cierto que si no hubiera vivido este acontecimiento, probablemente habría tomado más a la ligera la situación y habría puesto más peso a la advertencia de la policía que a la información del virus. Pero tomando en cuenta mis conocimientos actuales, sin duda hubiera alertado a una institución y en caso de que la institución se quede callada, hubiera contactado con alguien más que comprenda la importancia de la situación.

Parte 2

Cargar librerias

# Cargar las librerías necesarias
bioc_pq_analisis <- sort(c("ape","ggtree", "DECIPHER", "S4Vectors", "seqmagick","ggmsa", "ggplot2", "Biostrings"))
cran_pq <- sort(c("remotes","adegenet","ape","phangorn","phytools","geiger","viridis", "rentrez", "stringr", "viridis"))

instalar_faltantes <- function(bioc_pq, cran_pq) {
  # Paquetes instalados actualmente
  paquetes_instalados <- rownames(installed.packages())
  
  # Detectar paqueterias que no están instaladas
  faltantes_bioc <- bioc_pq[!bioc_pq %in% paquetes_instalados]
  faltantes_cran <- cran_pq[!cran_pq %in% paquetes_instalados]
  
  # Instalar BiocManager en caso de no tenerlo, este es necesario para paqueterias de Bioconductor
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("Biostrings")
  
  # Instalar paquetes faltantes de Bioconductor
  if (length(faltantes_bioc) > 0) {
    message("Instalando paquetes de Bioconductor: ", paste(faltantes_bioc, collapse = ", "))
    BiocManager::install(faltantes_bioc, ask = FALSE, update = FALSE)
  }
  
  # Instalar paquetes faltantes de CRAN
  if (length(faltantes_cran) > 0) {
    message("Instalando paquetes de CRAN: ", paste(faltantes_cran, collapse = ", "))
    install.packages(faltantes_cran)
  }
  
  if (length(faltantes_bioc) == 0 && length(faltantes_cran) == 0) {
    message("Todos los paquetes ya están instalados.")
  }
}


instalar_faltantes(bioc_pq_analisis,cran_pq) #correr funcion
## Bioconductor version 3.21 (BiocManager 1.30.25), R 4.5.0 (2025-04-11 ucrt)
## Warning: package(s) not installed when version(s) same as or greater than current; use
##   `force = TRUE` to re-install: 'Biostrings'
## Installation paths not writeable, unable to update packages
##   path: C:/Program Files/R/R-4.5.0/library
##   packages:
##     lattice, mgcv
## Old packages: 'cli'
## Todos los paquetes ya están instalados.
#cargar librerias
library(ape)
library(phangorn)
library(phytools)
## Loading required package: maps
library(geiger)
library(seqinr)
## 
## Attaching package: 'seqinr'
## The following objects are masked from 'package:ape':
## 
##     as.alignment, consensus
library(adegenet)
## Loading required package: ade4
## 
##    /// adegenet 2.1.11 is loaded ////////////
## 
##    > overview: '?adegenet'
##    > tutorials/doc/questions: 'adegenetWeb()' 
##    > bug reports/feature requests: adegenetIssues()
## 
## Attaching package: 'adegenet'
## The following object is masked from 'package:phangorn':
## 
##     AICc
library(ggtree)
## ggtree v3.16.0 Learn more at https://yulab-smu.top/contribution-tree-data/
## 
## Please cite:
## 
## Guangchuang Yu. Using ggtree to visualize data on tree-like structures.
## Current Protocols in Bioinformatics. 2020, 69:e96. doi:10.1002/cpbi.96
## 
## Attaching package: 'ggtree'
## The following object is masked from 'package:ape':
## 
##     rotate
library(DECIPHER)
## Loading required package: Biostrings
## Loading required package: BiocGenerics
## Loading required package: generics
## 
## Attaching package: 'generics'
## The following objects are masked from 'package:base':
## 
##     as.difftime, as.factor, as.ordered, intersect, is.element, setdiff,
##     setequal, union
## 
## Attaching package: 'BiocGenerics'
## The following object is masked from 'package:ade4':
## 
##     score
## The following objects are masked from 'package:stats':
## 
##     IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
## 
##     anyDuplicated, aperm, append, as.data.frame, basename, cbind,
##     colnames, dirname, do.call, duplicated, eval, evalq, Filter, Find,
##     get, grep, grepl, is.unsorted, lapply, Map, mapply, match, mget,
##     order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,
##     rbind, Reduce, rownames, sapply, saveRDS, table, tapply, unique,
##     unsplit, which.max, which.min
## Loading required package: S4Vectors
## Loading required package: stats4
## 
## Attaching package: 'S4Vectors'
## The following object is masked from 'package:ggtree':
## 
##     expand
## The following object is masked from 'package:utils':
## 
##     findMatches
## The following objects are masked from 'package:base':
## 
##     expand.grid, I, unname
## Loading required package: IRanges
## 
## Attaching package: 'IRanges'
## The following object is masked from 'package:ggtree':
## 
##     collapse
## The following object is masked from 'package:grDevices':
## 
##     windows
## Loading required package: XVector
## Loading required package: GenomeInfoDb
## 
## Attaching package: 'Biostrings'
## The following object is masked from 'package:seqinr':
## 
##     translate
## The following object is masked from 'package:ape':
## 
##     complement
## The following object is masked from 'package:base':
## 
##     strsplit
library(viridis)
## Loading required package: viridisLite
## 
## Attaching package: 'viridis'
## The following object is masked from 'package:maps':
## 
##     unemp
library(ggmsa)
## Registered S3 methods overwritten by 'ggalt':
##   method                  from   
##   grid.draw.absoluteGrob  ggplot2
##   grobHeight.absoluteGrob ggplot2
##   grobWidth.absoluteGrob  ggplot2
##   grobX.absoluteGrob      ggplot2
##   grobY.absoluteGrob      ggplot2
## ggmsa v1.14.0  Document: http://yulab-smu.top/ggmsa/
## 
## If you use ggmsa in published research, please cite:
## L Zhou, T Feng, S Xu, F Gao, TT Lam, Q Wang, T Wu, H Huang, L Zhan, L Li, Y Guan, Z Dai*, G Yu* ggmsa: a visual exploration tool for multiple sequence alignment and associated data. Briefings in Bioinformatics. DOI:10.1093/bib/bbac222
library(ggplot2)
library(Biostrings)
library(rentrez)
library(stringr)

1. Buscar en NCBI el gen en cada una de las variantes

Alfa=“OL461238.1”. Encontramos la variante en México y el gen esta spike esta en las coordenadas: 21549..25361/gene=“S”

Beta= “PP518931.1”. En esta variante no la encontramos en México pero si en el primer país donde se dio a conocer segun la pagina Admin-Umai. (2021, 27 diciembre), Sudáfrica y el gen esta spike esta en las coordenadas: 21516..25328/gene=“S”

Gamma= “OK550226.1”. Encontramos la variante en México y el gen esta spike esta en las coordenadas: 21468..25289/gene=“S”

Delta= “OQ083190.1”. Encontramos la variante en México y el gen esta spike esta en las coordenadas: 21554..25369/gene=“S”

Epsilon= “PQ999416.1”. Esra variante no estaba en la página proporcionada de las variantes del pangolin pero investigamos y puede ser B.1.429 o B.1.427, usamos la B.1.429 porque habia mas resultados, encontramos la variante en México y el gen esta spike esta en las coordenadas: 21519..25340/gene=“S”

Omicron=“PQ577963.1”. Sorpresibamente no encontramos la variante en México a pesar de lo mucho que sono la variante y tampoco la encontramos en su país de origen Sudáfrica, segun Admin-Umai. (2021, 27 diciembre), así que hagarramos el mas reciente que era de Estados Unidos y el gen esta spike esta en las coordenadas: 21563..25384/gene=“S”

Descargar en Fasta unicamente y cortar las coordenadas del gen Spike

Variantes <- c(Alfa="OL461238.1", Beta= "PP518931.1", Gamma= "OK550226.1", Delta= "OQ083190.1", Epsilon= "PQ999416.1", Omicron="PQ577963.1")

# Función para obtener y cortar las secuencias FASTA según la coordenada
get_fasta <- function(id, start, end) {
  fasta <- entrez_fetch(db = "nuccore", id = id, rettype = "fasta", retmode = "text")
  lines <- strsplit(fasta, "\n")[[1]]
  seq <- paste(lines[-1], collapse = "")
  seq <- gsub("[^ATCGatcg]", "", seq)  # Eliminar caracteres NO validos
  seq <- toupper(seq)
  names(seq) <- id
  
  # Cortar la secuencia según el rango solicitado
  seq_cut <- substr(seq, start, end)
  return(seq_cut)
}

# Obtener las secuencias y cortarlas al rango deseado de nuestro gen Spike

Alfa <- get_fasta(Variantes[1], 21549, 25361)  # Variante Alfa
Beta <- get_fasta(Variantes[2], 21516, 25328)  # Variante Beta
Gamma <- get_fasta(Variantes[3], 21468, 25289) # Variante Gamma
Delta <- get_fasta(Variantes[4], 21554, 25369) # Variante Delta
Epsilon<- get_fasta(Variantes[5], 21519, 25340)# Variante Epsilon
Omicron<- get_fasta(Variantes[6], 21563, 25384)# Variante Omicron


# Crear un objeto de tipo DNAStringSet con las secuencias cortadas
seqs <- DNAStringSet(c(Alfa, Beta, Gamma, Delta, Epsilon, Omicron))
names(seqs) <- names(Variantes)
seqs
## DNAStringSet object of length 6:
##     width seq                                               names               
## [1]  3813 ATGTTTGTTTTTCTTGTTTTATT...GAGTCAAATTACATTACACATAA Alfa
## [2]  3813 ATGTTTGTTTTTCTTGTTTTATT...GAGTCAAATTACATTACACATAA Beta
## [3]  3822 ATGTTTGTTTTTCTTGTTTTATT...GAGTCAAATTACATTACACATAA Gamma
## [4]  3816 ATGTTTGTTTTTCTTGTTTTATT...GAGTCAAATTACATTACACATAA Delta
## [5]  3822 ATGTTTGTTTTTCTTGTTTTATT...GAGTCAAATTACATTACACATAA Epsilon
## [6]  3822 ATGTTTGTTTTTCTTGTTTTATT...GAGTCAAATTACATTACACATAA Omicron

2. Justificación científica del gen de interés (Spike)

Javier: El gen que codifica para la proteína Spike (S) es de particular interés porque: - Es responsable de la unión del virus al receptor ACE2 humano (Hoffmann et al., 2020, Cell) - Contiene el dominio de unión al receptor (RBD) que determina la infectividad - Es el principal blanco de los anticuerpos neutralizantes (Piccoli et al., 2020, Cell) - Las mutaciones en este gen están asociadas con escape inmunológico y mayor transmisibilidad (Harvey et al., 2021, Nat Rev Microbiol) - Las variantes de preocupación tienen múltiples mutaciones en este gen que afectan la biología del virus (Tao et al., 2021, Nature)

Alberto López Barragán: En mi caso elegí esta proteina porque despues de una investigación encontré que la principal razon de que el coronavirus haya evolucionado y se pueda transmitir entre humanos fue principalmente debido a una mutación en la proteina “spike”, a su vez como es la encargada de adherisise a celulas humanas e infectar al humano es la que mas batalla con el sistema inmune del humano, por lo tanto es la proteina que más puede llegar a mutar debido a esta constante lucha con el sistema inmune del humanol, por lo tanto espero que en nuestros gráficos sea notoria sus mutaciones a través de las diferentes variables del SARS-CoV-2. A su vez, esta proteina es exactamente la razon por la que usamos la variable Alfa (B.1.1.7) como nuestra variante de referencia o como si hubiera sido la original, esto es porque fue la primera variante del SARS-CoV-2 clasificada como ‘variante preocupante’ debido a su mayor transmisibilidad en humanos, identificada en el Reino Unido, alrededor de un 50% más contagiosa que el virus original, de hecho esta mutación que la volvío mucho mas contagiable fue justamente en el gen spike.

De igual forma me parece imporesionante como una mutación en una proteina pudo desencadenar una crisis global que duro 2 años, algo bílogico que re realizo de manera natural, unicamente buscando la supervivencia, es un proceso natural que todos los seres vivos realizamos, la adaptación por la supervivencia y en esta busqueda de sobrevivir miles de humanos fueron los que murieron, a su vez elegí esta proteina porque a de ser más facil encontrar la información acerca de como cada mutación fue afectando a la proteina ya que tengo mucha confinza de que habra cambios notorios en la secuencia genetica de esta proteina porque como mencione anteiormente es la que esta en constante lucha con los anticuerpos del humano, esto tambien implica que conforme fue mutando la proteina spike es muy probable que haya desarollado la mortalidad del virus. Otro aspecto a destacar es que si logramos entender como estas mutaciones en la proteina spike fueron ayudando al virus a penetrar las defensas humanas y hacernos daño nos puede ayudar a desarrollar tratamientos y vacunas mas eficientes, no solo para el coronavirus, sino que nos podria ayudar a tener un mejor entendimiento de nuestro sistema inmune.

José Fernando Munguía: La proteína Spike (S) del SARS-CoV-2 es de gran relevancia científica debido a su papel central en la entrada del virus a las células humanas. Esta proteína interactúa específicamente con el receptor ACE2 en las células humanas, lo que permite la fusión del virus con la célula huésped y la posterior infección (Hoffmann et al., 2020, Cell). Además, el dominio de unión al receptor (RBD) de la proteína Spike es crucial para determinar la afinidad del virus por ACE2, lo que influye directamente en su capacidad de infectar (Piccoli et al., 2020, Cell).

Las mutaciones en el gen que codifica para la proteína Spike están estrechamente asociadas con fenómenos de escape inmunológico, lo que permite que el virus evite la respuesta del sistema inmune y continúe propagándose. Estas mutaciones también han sido vinculadas con un aumento en la transmisibilidad del virus (Harvey et al., 2021, Nat Rev Microbiol). De hecho, las variantes más recientes del SARS-CoV-2, como la Delta y Ómicron, presentan alteraciones en el gen Spike que les otorgan ventajas evolutivas, como una mayor capacidad de evasión del sistema inmune y una mayor infectividad (Tao et al., 2021, Nature).

3. Calcular la longitud de las secuencias

# --- Calcular longitud de las secuencias ---
longitudes <- sapply(seqs, length)
cat("Longitud de las secuencias:\n")
## Longitud de las secuencias:
print(longitudes)
##    Alfa    Beta   Gamma   Delta Epsilon Omicron 
##    3813    3813    3822    3816    3822    3822

4. Gráfica para mostrar la composición de bases para cada variante

# Calcular composición de bases para cada variante

# Función para calcular composición
calcular_composicion <- function(secuencia) {
  frecuencias <- alphabetFrequency(secuencia[[1]])
  data.frame(
    Variante = rep(names(secuencia), 4),
    Base = c("A", "T", "C", "G"),
    Frecuencia = c(frecuencias["A"], frecuencias["T"], frecuencias["C"], frecuencias["G"])
  )
}

# Aplicar la función a todas las variantes
composicion <- do.call(rbind, lapply(names(seqs), function(x) {
  calcular_composicion(seqs[x])
}))

# --- Gráfico de barras bonito con ggplot2 ---

library(ggplot2)

ggplot(composicion, aes(x = Variante, y = Frecuencia, fill = Base)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Composición de bases del gen Spike por variante",
       x = "Variante", y = "Número de bases") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Interpretación del gráfico de la composición de bases para cada variante

En la gráfica de composición de bases del gen Spike para las 6 variantes analizadas Alfa, Beta, Delta, Epsilon, Gamma y Omicron del SARS-CoV-2 se observa que la proporción de nucleótidos es muy similar entre todas ellas. La base más abundante en todas las variantes es la timina (T), seguida de la adenina (A), mientras que las bases citosina (C) y guanina (G) presentan frecuencias más bajas y comparables entre sí. Esta similitud en la composición sugiere que, a pesar de las mutaciones acumuladas, el gen Spike conserva en gran medida su contenido de nucleótidos, lo que podemos interpretaer como una presión evolutiva por mantener la estructura funcional de la proteína Spike.

Además, el número total de bases en las secuencias analizadas es prácticamente igual, indicando que las longitudes de los genes no han sufrido cambios significativos entre variantes. Esto es coherente con la importancia crítica de esta región genética para la entrada del virus en las células humanas y su papel en la infectividad viral.

5. Calcular %GC

# Crear un vector vacío para guardar el %GC
gc_content <- numeric(length(seqs))

# Loop para calcular el %GC de cada variante
for (i in seq_along(seqs)) {
  secuencia <- as.character(seqs[[i]])
  
  g_count <- sum(strsplit(secuencia, "")[[1]] == "G")
  c_count <- sum(strsplit(secuencia, "")[[1]] == "C")
  total_bases <- nchar(secuencia)
  
  gc_content[i] <- round(100 * (g_count + c_count) / total_bases, 2)
}

# Asignar nombres a las variantes
names(gc_content) <- names(seqs)

# --- Gráfico de barras del %GC por variante ---

barplot(gc_content,
        names.arg = names(gc_content),
        col = "steelblue",
        main = "Contenido GC (%) del gen Spike por variante",
        xlab = "Variante",
        ylab = "Contenido GC (%)",
        ylim = c(0, 100))

# Agregar etiquetas sobre las barras
text(x = 1:length(gc_content), y = gc_content + 2,
     labels = paste0(gc_content, "%"), cex = 0.8)

Analisis de la gráfica de %GC

La gráfica muestra que este se mantiene altamente conservado, variando ligeramente entre 37.15% y 37.34%. Esta estabilidad otra vez nos sugiere una fuerte presión evolutiva para mantener la composición genética del Spike, asi como observamos en la composición de bases de cada variante,este estabilidad es crucial para su función en la infección viral. Cambios significativos en el contenido GC podrían alterar la estabilidad del ARN mensajero, afectar la eficiencia de traducción de la proteína y modificar la tasa de mutación, lo que a su vez impactaría la expresión y funcionalidad de la proteína Spike, y posiblemente la capacidad del virus para evadir la respuesta inmune.

6. Secuencias contrasentido (complementarias)

# --- Obtener las secuencias complementarias ---
complementarias <- reverseComplement(seqs)

# --- Calcular composición de bases en las complementarias ---

# Función para calcular la composición de bases
calcular_composicion <- function(secuencia) {
  frecuencias <- alphabetFrequency(secuencia[[1]])
  data.frame(
    Variante = rep(names(secuencia), 4),
    Base = c("A", "T", "C", "G"),
    Frecuencia = c(frecuencias["A"], frecuencias["T"], frecuencias["C"], frecuencias["G"])
  )
}

# Aplicar la función a todas las secuencias complementarias
composicion_comp <- do.call(rbind, lapply(names(complementarias), function(x) {
  calcular_composicion(complementarias[x])
}))

# --- Gráfico de la composición de bases de las secuencias complementarias ---

ggplot(composicion_comp, aes(x = Variante, y = Frecuencia, fill = Base)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Composición de bases en las secuencias complementarias del gen Spike",
       x = "Variante", y = "Número de bases") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

complementarias
## DNAStringSet object of length 6:
##     width seq                                               names               
## [1]  3813 TTATGTGTAATGTAATTTGACTC...AATAAAACAAGAAAAACAAACAT Alfa
## [2]  3813 TTATGTGTAATGTAATTTGACTC...AATAAAACAAGAAAAACAAACAT Beta
## [3]  3822 TTATGTGTAATGTAATTTGACTC...AATAAAACAAGAAAAACAAACAT Gamma
## [4]  3816 TTATGTGTAATGTAATTTGACTC...AATAAAACAAGAAAAACAAACAT Delta
## [5]  3822 TTATGTGTAATGTAATTTGACTC...AATAAAACAAGAAAAACAAACAT Epsilon
## [6]  3822 TTATGTGTAATGTAATTTGACTC...AATAAAACAAGAAAAACAAACAT Omicron

Interpretación

Como podemos obsrvar la composición de las secuencias complementarias es identica a las originales, unicamente cambianda cada base por su complementaria, podemos observar nuevamente la estabilidad de la proteina spike a traves de las diferentes variantes.

Alineamineto de secuencias de bases

Variantes <- c(Wuhan="NC_045512.2", Alfa="OL461238.1", Beta= "PP518931.1", Gamma= "OK550226.1", Delta= "OQ083190.1", Epsilon= "PQ999416.1", Omicron="PQ577963.1")

# Función para obtener y cortar las secuencias FASTA según la coordenada
get_fasta <- function(id, start, end) {
  fasta <- entrez_fetch(db = "nuccore", id = id, rettype = "fasta", retmode = "text")
  lines <- strsplit(fasta, "\n")[[1]]
  seq <- paste(lines[-1], collapse = "")
  seq <- gsub("[^ATCGatcg]", "", seq)  # Eliminar caracteres NO validos
  seq <- toupper(seq)
  names(seq) <- id
  
  # Cortar la secuencia según el rango solicitado
  seq_cut <- substr(seq, start, end)
  return(seq_cut)
}

# Obtener las secuencias y cortarlas al rango deseado de nuestro gen Spike

Wuhan_Referencia <- get_fasta(Variantes[1], 21563, 25384)  # Secuencia de referencia
Alfa <- get_fasta(Variantes[2], 21549, 25361)  # Variante Alfa
Beta <- get_fasta(Variantes[3], 21516, 25328)  # Variante Beta
Gamma <- get_fasta(Variantes[4], 21468, 25289) # Variante Gamma
Delta <- get_fasta(Variantes[5], 21554, 25369) # Variante Delta
Epsilon<- get_fasta(Variantes[6], 21519, 25340)# Variante Epsilon
Omicron<- get_fasta(Variantes[7], 21563, 25384)# Variante Omicron


# Crear un objeto de tipo DNAStringSet con las secuencias cortadas
seqs <- DNAStringSet(c(Wuhan_Referencia,Alfa, Beta, Gamma, Delta, Epsilon, Omicron))
names(seqs) <- names(Variantes)

# Realizar el alineamiento

seqs_aligment <- DECIPHER::OrientNucleotides(seqs)
## ========================================================================================================================
## 
## Time difference of 0.03 secs
alignment <- AlignSeqs(seqs_aligment)
## Determining distance matrix based on shared 10-mers:
## ================================================================================
## 
## Time difference of 0 secs
## 
## Clustering into groups by similarity:
## ================================================================================
## 
## Time difference of 0 secs
## 
## Aligning Sequences:
## ================================================================================
## 
## Time difference of 0.09 secs
## 
## Iteration 1 of 2:
## 
## Determining distance matrix based on alignment:
## ================================================================================
## 
## Time difference of 0 secs
## 
## Reclustering into groups by similarity:
## ================================================================================
## 
## Time difference of 0 secs
## 
## Realigning Sequences:
## ================================================================================
## 
## Time difference of 0.07 secs
## 
## Iteration 2 of 2:
## 
## Determining distance matrix based on alignment:
## ================================================================================
## 
## Time difference of 0 secs
## 
## Reclustering into groups by similarity:
## ================================================================================
## 
## Time difference of 0 secs
## 
## Realigning Sequences:
## ================================================================================
## 
## Time difference of 0 secs
# Mostrar el alineamiento en consola
BrowseSeqs(alignment, highlight = 1) #Resalta la primer secuencia que es la original o la que nos ayuda a comparar

Traduccion y alineamiento de proteinas

# Paso 1: Cortar a múltiplo de 3
alignment_trimmed <- subseq(alignment, start = 1, end = (width(alignment)[1] %/% 3) * 3)

# Paso 2: Convertir a carácter y limpiar secuencias
alignment_char <- as.character(alignment_trimmed)
clean_char <- gsub("[^ATCGatcg]", "A", alignment_char)       # reemplazar todo lo no válido
clean_char <- toupper(clean_char)

# Paso 3: Convertir a DNAStringSet
clean_dna <- DNAStringSet(clean_char)
names(clean_dna) <- names(alignment_trimmed)

# Paso 4: Traducir
alignment_prot <- Biostrings::translate(clean_dna, if.fuzzy.codon = "solve")
a
## function (aa) 
## {
##     aa1 <- s2c("*ACDEFGHIKLMNPQRSTVWY")
##     if (missing(aa)) 
##         return(aa1)
##     aa3 <- aaa()
##     convert <- function(x) {
##         if (all(x != aa3)) {
##             warning("Unknown 3-letters code for aminoacid")
##             return(NA)
##         }
##         else {
##             return(aa1[which(x == aa3)])
##         }
##     }
##     return(as.vector(unlist(sapply(aa, convert))))
## }
## <bytecode: 0x00000227f7d4a770>
## <environment: namespace:seqinr>
# Paso 5: Ver resultado
alignment_prot
## AAStringSet object of length 7:
##     width seq                                               names               
## [1]  1274 MFVFLVLLPLVSSQCVNLTTRTQ...SCCKFDEDDSEPVLKGVKLHYT* Wuhan
## [2]  1274 MFVFLVLLPLVSSQCVNLTTRTQ...SCCKFDEDDSEPVLKGVKLHYT* Alfa
## [3]  1274 MFVFLVLLPLVSSQCVNLTTRTQ...SCCKFDEDDSEPVLKGVKLHYT* Beta
## [4]  1274 MFVFLVLLPLVSSQCVNFTNRTQ...SCCKFDEDDSEPVLKGVKLHYT* Gamma
## [5]  1274 MFVFLVLLPLVSSQCVNLRTRTQ...SCCKFDEDDSEPVLKGVKLHYT* Delta
## [6]  1274 MFVFLVLLPLVSIQCVNLTTRTQ...SCCKFDEDDSEPVLKGVKLHYT* Epsilon
## [7]  1274 MFVFLVLLPLVSSQCVNLTTRTQ...SCCKFDEDDSEPVLKGVKLHYT* Omicron
# Mostrar el alineamiento en consola
BrowseSeqs(alignment_prot, highlight = 1) #Resalta la primer secuencia que es la original o la que nos ayuda a comparar

Interpretación

Para empezar con nuestra interpretación hay que recordar el porque usamos al gen Alfa (B.1.1.7) como nuestra variante de referencia o como si hubiera sido la original, esto es porque fue la primera variante del SARS-CoV-2 clasificada como ‘variante preocupante’ debido a su mayor transmisibilidad en humanos, identificada en el Reino Unido, alrededor de un 50% más contagiosa que el virus original, de hecho esta mutación que la volvío mucho mas fue justamente en la prteina spike, una vez dicho eso vamos a comentar las principales diferencias.

Generamos un archivo Fasta con las bases

#Generar archivo FASTA con secuencias alineadas 
Biostrings::writeXStringSet(alignment, file="Coronavirus_spike.fasta")
virus_align <- Biostrings::readDNAStringSet("Coronavirus_spike.fasta", format = "fasta")

Generamos un archivo Fasta con las proteinas

#Generar archivo FASTA con secuencias alineadas 
Biostrings::writeXStringSet(alignment_prot, file="spike_prot.fasta")
prot_align <- Biostrings::readAAStringSet("spike_prot.fasta", format = "fasta")

Matriz de distancia comparando las bases

#cargar archivo
virus_aligned <- seqinr::read.alignment("Coronavirus_spike.fasta", format = "fasta")

#matriz de distancias para representar las distancias entre las bases
matriz_distancia <- seqinr::dist.alignment(virus_aligned, matrix = "similarity")
temp <- as.data.frame(as.matrix(matriz_distancia))
table.paint(temp, cleg=0, clabel.row=.5, clabel.col=.5) + scale_color_viridis()

## NULL

Interpretación del gráfico de distancias

Como era esperado, la diagonal principal es blanca, ya que cada variante es idéntica a sí misma. Comparado con Wuhan (diciembre 2019), Alfa (identificada en septiembre 2020 en Reino Unido) muestra poca divergencia (gris claro), lo cual refleja que las primeras mutaciones afectaron moderadamente la estructura del Spike. En contraste, Beta (Sudáfrica, mayo 2020) y Gamma (Brasil, noviembre 2020) presentan diferencias mayores, posiblemente relacionadas con presiones de selección natural en ambientes de alta transmisión o evasión inmunológica. Delta (India, octubre 2020) y Gamma muestran una distancia muy alta entre sí, reflejada en tonos casi negros, esto puede deverse a la distancia geografica, la cual afecta de gran forma, porque se ve envuelto en cuestiones climaticas, cambio de población, etc. Epsilon (California, mayo 2020) es una variante que conserva mayor similitud con Wuhan, indicando que su evolución fue menos drástica en la región de Spike, a pesar de haber surgido en una etapa intermedia de la pandemia. Omicron (Sudáfrica, noviembre 2021), aunque es la más reciente y acumula un gran número de mutaciones, no presenta la mayor distancia genética global respecto a Wuhan, pero sus cambios estratégicos en sitios clave explican su alta capacidad de escape inmune. En general, esta matriz no solo evidencia la acumulación progresiva de mutaciones en el Spike, sino también revela cómo diferentes presiones (inmunidad colectiva, transmisibilidad, intervenciones sanitarias) moldearon patrones divergentes de evolución viral en distintas regiones geográficas y momentos de la pandemia.

Arbol filogenetico comparando las bases

hm_tree <- ape::nj(matriz_distancia) #empleamos un árbol de neighbor-joining
class(hm_tree) 
## [1] "phylo"
hm_tree <- ape::ladderize(hm_tree)
plot(hm_tree, cex = 0.6) #observamos el resultado en un plot
title("Ejemplo de dendograma viral")

ggtree(hm_tree ) + geom_tiplab() +
  ggtitle("Dendograma del gen Spike")

#podemos observar el mismo grafico con la función ggtree

Analísis

Basadas en las diferencias en el gen Spike. Las ramas del árbol reflejan la distancia genética: variantes que se separan de nodos más cercanos son más similares entre sí, mientras que separaciones más tempranas indican divergencias mayores. Se observa que Epsilon y Delta se agrupan relativamente cerca, lo que sugiere que, a pesar de sus diferencias funcionales, su divergencia genética en el Spike no fue tan extrema; ambas podrían haber evolucionado en entornos donde la presión selectiva priorizaba la transmisibilidad. Alfa se separa después, mostrando una distancia moderada respecto a estas dos. Gamma y Beta se agrupan en un clado distinto, indicando una trayectoria evolutiva compartida, posiblemente vinculada a una mayor presión inmunológica en sus regiones de origen (Brasil y Sudáfrica). Finalmente, Omicron emerge como una variante altamente divergente, separándose primero de las demás, lo que refleja la enorme cantidad de mutaciones acumuladas en el Spike, especialmente en sitios críticos para el reconocimiento inmunológico, a pesar de no ser necesariamente la más distante en términos de tiempo de aparición. Este patrón sugiere que la evolución del gen Spike en el SARS-CoV-2 no fue lineal, sino marcada por múltiples episodios de divergencia rápida impulsados por adaptaciones locales y cambios en el entorno epidemiológico.

Gráfica de la mutación N501Y, debido a un cambio en la base de posición 1501

ggmsa(virus_align , 1500, 1510, color = "Chemistry_NT", seq_name = TRUE) #delimitar zonas de interes
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

#ggmsa(alineamiento, inicio, fin, color) 

Gráfica de la mutación N501Y, debido a un cambio en la proteina 501

ggmsa(prot_align, start =495, end = 505,
      color = "Chemistry_AA",  # Usa color de aminoácidos
      font = "mono",           # Fuente monoespaciada
      char_width = 0.6,
      seq_name = TRUE) +
  theme_minimal()
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

Investigación acerca de la mutación N501Y

Dentro del gen Spike del SARS-CoV-2, el nucleótido en la posición 1501 experimentó una mutación crítica: un cambio de adenina (A) a timina (T). Este cambio de base ocurrió en el codón correspondiente al aminoácido número 501 de la proteína Spike. Como consecuencia, se produjo un reemplazo de asparagina (N) por tirosina (Y), conocido como la mutación N501Y. Este cambio tuvo un impacto profundo en la biología del virus, ya que el residuo 501 se encuentra en el dominio de unión al receptor (RBD), la región responsable de interactuar directamente con el receptor ACE2 de las células humanas. La sustitución a tirosina, una molécula más grande y capaz de formar interacciones adicionales, aumentó la afinidad del Spike por el ACE2, facilitando una unión más estable y eficiente. Esto se tradujo en una mayor capacidad de infección del virus. La mutación N501Y fue una de las características definitorias de variantes como Alfa, Beta, Gamma y Omicron, y contribuyó significativamente a su mayor transmisibilidad y a la expansión global de estas cepas.

Información onbtenida de: Tian, F., Tong, B., Sun, L., Shi, S., Zheng, B., Wang, Z., Dong, X., & Zheng, P. (2021b). N501Y mutation of spike protein in SARS-CoV-2 strengthens its binding to receptor ACE2. eLife, 10. https://doi.org/10.7554/elife.69091

Gráfica de la mutación E484K, debido a un cambio en la base en la posición 1450

ggmsa(virus_align , 1445, 1455, color = "Chemistry_NT", seq_name = TRUE) #delimitar zonas de interes
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

#ggmsa(alineamiento, inicio, fin, color) 

Gráfica de la mutación E484K, debido a un cambio en la proteina 484

ggmsa(prot_align, start =480, end = 490,
      color = "Chemistry_AA",  # Usa color de aminoácidos
      font = "mono",           # Fuente monoespaciada
      char_width = 0.6,
      seq_name = TRUE) +
  theme_minimal()
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

Investigación de la mutación E484K

Dentro del gen Spike del SARS-CoV-2, la mutación en la posición 1450 corresponde a un cambio de base guanina (G) a adenina (A). Este cambio ocurre en el codón que codifica el aminoácido en la posición 484 de la proteína Spike, provocando un cambio de glutámico (E) —que es un aminoácido cargado negativamente— a lisina (K), que es cargada positivamente. Esta mutación se conoce como E484K. El residuo E484 está localizado en el dominio de unión al receptor (RBD), justo en una zona crítica donde los anticuerpos neutralizantes (producidos por infección previa o vacunación) suelen unirse para bloquear al virus. El cambio de una carga negativa a positiva altera significativamente la superficie de interacción del Spike, permitiendo que el virus escape parcialmente del reconocimiento de varios anticuerpos neutralizantes. Por eso, E484K ha sido una de las mutaciones más preocupantes en variantes como Beta (B.1.351) y Gamma (P.1), asociándose a una reducción en la efectividad de las vacunas y mayor riesgo de reinfección. Aunque esta mutación no mejora tanto la afinidad a ACE2 como N501Y, su contribución principal es permitir al virus evadir la inmunidad adquirida.

Información obtenida de: Yang, W., Huang, W., Liao, T., Hsiao, T., Chuang, H., & Liu, P. (2022). SARS-CoV-2 E484K Mutation Narrative Review: Epidemiology, Immune Escape, Clinical Implications, and Future Considerations. Infection And Drug Resistance, Volume 15, 373-385. https://doi.org/10.2147/idr.s344099

Gráfica de la mutación L452R, debido a uncambio en la base de posición 1355

ggmsa(virus_align , 1350, 1360, color = "Chemistry_NT", seq_name = TRUE) #delimitar zonas de interes
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

#ggmsa(alineamiento, inicio, fin, color) 

Gráfica de la mutación L452R, debido a un cambio en la proteina 452

ggmsa(prot_align, start =450, end = 460,
      color = "Chemistry_AA",  # Usa color de aminoácidos
      font = "mono",           # Fuente monoespaciada
      char_width = 0.6,
      seq_name = TRUE) +
  theme_minimal()
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

Investigación de la mutación L452R

La mutación L452R ocurre en el gen de la proteína Spike, en la posición 1355, se encuentra una mutación puntual importante compartida por las variantes Delta y Épsilon. En la secuencia de referencia de Wuhan, esta posición corresponde a la segunda base del codón que codifica para el aminoácido 452. El codón original es CTT, que codifica para la Leucina (L). La mutación consiste en un cambio de la base Timina (T) a una Guanina (G) en la posición 1354, modificando el codón de CTT a CGT. Como resultado de este cambio, el aminoácido en la posición 452 de la proteína Spike pasa de ser una Leucina (L) a una Arginina (R), mutación conocida como L452R. Esta sustitución ocurre en el dominio de unión al receptor (RBD) y tiene un impacto funcional significativo, ya que incrementa la afinidad de Spike por el receptor ACE2 e incrementa la evasión del virus frente a varios anticuerpos neutralizantes, contribuyendo así a una mayor infectividad y evasión inmune de las variantes que la portan.

Información obtenida de:Zhang, Y., Zhang, T., Fang, Y., Liu, J., Ye, Q., & Ding, L. (2022b). SARS-CoV-2 spike L452R mutation increases Omicron variant fusogenicity and infectivity as well as host glycolysis. Signal Transduction And Targeted Therapy, 7(1). https://doi.org/10.1038/s41392-022-00941-z

Gráfica de la mutación D614G, debido a uncambio en la base de posición 1841

ggmsa(virus_align , 1835, 1845, color = "Chemistry_NT", seq_name = TRUE) #delimitar zonas de interes
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

#ggmsa(alineamiento, inicio, fin, color) 

Gráfica de la mutación D614G, debido a un cambio en la proteina 614

ggmsa(prot_align, start =610, end = 620,
      color = "Chemistry_AA",  # Usa color de aminoácidos
      font = "mono",           # Fuente monoespaciada
      char_width = 0.6,
      seq_name = TRUE) +
  theme_minimal()
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

Investigación de la mutación D614G

En la posición 1841 del gen de la proteína Spike del SARS-CoV-2 (contando desde 0), ocurre una de las mutaciones más importantes de toda la pandemia: D614G. En la secuencia de referencia de Wuhan, el codón que comienza en el nucleótido 1841 es GAT, que codifica para el aminoácido Ácido Aspártico (D) en la posición 614 de la proteína. La mutación consiste en un cambio de base en el segundo nucleótido del codón, donde una Adenina (A) es reemplazada por una Guanina (G), transformando el codón de GAT a GGT, lo que cambia el aminoácido de un Ácido Aspártico (D) a una Glicina (G). Este cambio, conocido como D614G, no afecta directamente el sitio de unión al receptor ACE2, pero sí mejora la estabilidad conformacional del trímero de Spike en su forma abierta, aumentando la eficiencia con la que el virus puede infectar células humanas. Debido a esta ventaja evolutiva, la mutación D614G se volvió dominante muy rápidamente a nivel global durante 2020 y, posteriormente, fue heredada por prácticamente todas las variantes de preocupación, incluyendo Alfa, Beta, Gamma, Delta, Épsilon y Ómicron, entre muchas otras. La presencia de D614G en estas variantes demuestra su importancia para la transmisión mejorada del virus en humanos.

Información obtenida de:Plante, J. A., Liu, Y., Liu, J., Xia, H., Johnson, B. A., Lokugamage, K. G., Zhang, X., Muruato, A. E., Zou, J., Fontes-Garfias, C. R., Mirchandani, D., Scharton, D., Bilello, J. P., Ku, Z., An, Z., Kalveram, B., Freiberg, A. N., Menachery, V. D., Xie, X., . . . Shi, P. (2020). Spike mutation D614G alters SARS-CoV-2 fitness. Nature, 592(7852), 116-121. https://doi.org/10.1038/s41586-020-2895-3

Conclusion General

La proteína Spike del SARS-CoV-2 ha sido fundamental en la evolución y propagación del virus entre humanos, ya que mutaciones clave en esta proteína permitieron al virus mejorar su capacidad de infectar y evadir el sistema inmune. A través del análisis de la composición de bases, el porcentaje de GC y la comparación de variantes, observamos que, aunque la estructura general del gen Spike se ha mantenido bastante conservada —sugiriendo una fuerte presión evolutiva para preservar su función—, ciertas mutaciones específicas como N501Y, E484K, L452R y D614G han tenido un impacto crítico en aumentar la infectividad, la capacidad de escape inmune y la transmisibilidad del virus. Estas adaptaciones reflejan un proceso de selección natural impulsado por la supervivencia viral en un entorno de presión inmunológica humana.

A partir de los gráficos y análisis filogenéticos, también queda claro que la evolución del Spike no fue un proceso lineal, sino más bien marcado por múltiples episodios de divergencia acelerada según las condiciones epidemiológicas de cada región. Mutaciones estratégicas permitieron al virus mejorar su afinidad por el receptor humano ACE2 o esquivar la respuesta inmune, lo que explica las distintas trayectorias evolutivas de variantes como Alfa, Delta, Gamma y Omicron. Comprender a fondo cómo estas mutaciones modificaron la biología del virus no solo ayuda a explicar la magnitud de la pandemia, sino que también ofrece una base crucial para diseñar vacunas y terapias más efectivas frente a futuros retos virales.

Referencias

Johns Hopkins University & Medicine. (2024). COVID-19 Map. https://coronavirus.jhu.edu/map.html Worldometers. (2025). Mexico Coronavirus Statistics. https://www.worldometers.info/coronavirus/country/mexico/ Secretaría de Salud de Nuevo León. (2023, 13 abril). Reporte diario de COVID-19 NL [PDF]. https://saludnl.gob.mx/regulacion-sanitaria/wp-content/uploads/2023/04/RP-SALUD-13-DE-ABRIL-2023.pdf Gobierno de Monterrey. (2022). Plan Municipal de Desarrollo 2021-2024. https://monterrey.gob.mx Korber, B., Fischer, W. M., Gnanakaran, S., et al. (2020). Spike mutation D614G alters SARS-CoV-2 fitness. Nature, 582, 467-470. https://doi.org/10.1038/s41586-020-2895-3 Centers for Disease Control and Prevention [CDC]. (2021). Emergence of SARS-CoV-2 B.1.1.7 Lineage — United States, December 29 2020–January 12 2021. MMWR, 70(3), 95-99. https://doi.org/10.15585/mmwr.mm7003e2 World Health Organization [WHO]. (2024). Tracking SARS-CoV-2 Variants. https://www.who.int/activities/tracking-SARS-CoV-2-variants Sabino, E. C., et al. (2021). Resurgence of COVID-19 in Manaus, Brazil, despite high seroprevalence. The Lancet, 397(10273), 452-455. https://doi.org/10.1016/S0140-6736(21)00183-5 Hoffmann, M., Kleine-Weber, H., Schroeder, S., Krüger, N., Herrler, T., Erichsen, S., … & Pöhlmann, S. (2020). SARS-CoV-2 cell entry depends on ACE2 and TMPRSS2 and is blocked by a clinically proven protease inhibitor. Cell, 181(2), 271-280.e8. https://doi.org/10.1016/j.cell.2020.02.052

Piccoli, L., Park, Y. J., Tortorici, M. A., Czudnochowski, N., Havenar-Daughton, C., Adachi, Y., … & Boons, G. J. (2020). Mapping neutralizing and immunodominant sites on the SARS-CoV-2 spike receptor-binding domain by structure-guided high-resolution serology. Cell, 183(4), 1024-1042.e21. https://doi.org/10.1016/j.cell.2020.09.037

Harvey, W. T., Carabelli, A. M., Jackson, B., Gupta, R. K., Thomson, E. C., Harrison, E. M., … & Robertson, D. L. (2021). SARS-CoV-2 variants, spike mutations and immune escape. Nature Reviews Microbiology, 19(7), 409-424. https://doi.org/10.1038/s41579-021-00573-0

Tao, K., Tzou, P. L., Nouhin, J., Gupta, R. K., de Oliveira, T., & Shapiro, B. J. (2021). The biological and clinical significance of emerging SARS-CoV-2 variants. Nature Reviews Genetics, 22(12), 757-773. https://doi.org/10.1038/s41576-021-00358-1