Introducción

En este documento se analiza un conjunto de secuencias de SARS-CoV-2 provenientes de 10 países: Colombia, México, Brasil, Nigeria, India, Italia, Reino Unido, Japón, Corea del Sur y Sudáfrica.

El objetivo es comparar la longitud de las secuencias, analizar la composición de bases, calcular distancias genéticas y construir un árbol filogenético para observar posibles agrupamientos entre países y regiones.

También se hace énfasis en la comparación entre Colombia y México, ya que ambos países pertenecen al contexto latinoamericano y permiten observar si existen similitudes genéticas importantes entre sus secuencias.

Objetivo

Analizar secuencias de SARS-CoV-2 reportadas en diferentes países para responder si existen diferencias importantes entre las variantes de cada país, y si el virus presenta diferencias claras entre regiones como Latinoamérica, Europa, Asia y África.

Países seleccionados

paises <- data.frame(
  Pais = c("Colombia", "Mexico", "Brasil", "Nigeria", "India", 
           "Italia", "Reino_Unido", "Japon", "Corea_del_Sur", "Sudafrica"),
  Region = c("Latinoamerica", "Latinoamerica", "Latinoamerica", "Africa", "Asia",
             "Europa", "Europa", "Asia", "Asia", "Africa")
)

paises

Carga de paquetes y datos

Primero se cargan los paquetes necesarios para el análisis genético, visualización y construcción del árbol filogenético.

library(Biostrings)
library(ape)
library(ade4)
library(seqinr)

Leemos el archivo FASTA con las secuencias de SARS-CoV-2 de los 10 países.

# Archivo FASTA
archivo_fasta <- "paises.fasta"

# Leer secuencias originales
seqs_originales <- readDNAStringSet(archivo_fasta)

seqs_originales
## DNAStringSet object of length 10:
##      width seq                                              names               
##  [1] 29782 AGATCTGTTCTCTAAACGAACTT...ATTAATTTTAGTAGTGCTATCC Colombia
##  [2] 29763 CGATCTCTTGTAGATCTGTTCTC...ATTAATTTTAGTAGTGCTATCC Mexico
##  [3] 29844 ATTAAAGGTTTATACCTTCCCAG...AAAAAAAAAAAAAAAAAAAAAA Brasil 
##  [4] 29835 TAACAAACCAACCAACTTTCGAT...CATGTGATTTTAATAGCTTCTT India
##  [5] 29770 TCGATCTCTTGTAGATCTGTTCT...TTTAGTAGTGCTATCCCCATGT Italia
##  [6] 29846 AGGTTTATACCTTCCCAGGTAAC...CTTCTTAGGAGAATGACAAAAA ReinoUnido
##  [7] 29781 AAGGTTTATACCTTCCTAGGTAA...TATCCCCATGTGATTTTAATAG Japon
##  [8] 29826 CTTCCCAGGTAACAAACCAACCA...TTTTAGTAGTGCTATCCCCATT CoreadelSur
##  [9] 29769 TCGATCTCTTGTAGATCTGTTCT...TTTAGTAGTGCTATCCCCATGT Sudafrica
## [10] 29835 AAGGTTTATACCTTCCCAGGTAA...CCCATGTGATTTTAATAGCTTC Nigeria

Longitud de las secuencias

Es importante verificar la longitud de cada genoma para confirmar que corresponden a secuencias completas de SARS-CoV-2, que normalmente están cerca de 29,000 a 30,000 bases.

# Calcular longitudes
longitudes <- width(seqs_originales)

# Convertir a data frame
df_longitudes <- data.frame(
  Pais = names(seqs_originales),
  Longitud = longitudes
)

df_longitudes

Gráfica comparativa de longitud

barplot(df_longitudes$Longitud,
        names.arg = df_longitudes$Pais,
        las = 2,
        col = "steelblue",
        border = NA,
        main = "Comparación de longitud de secuencias SARS-CoV-2",
        ylab = "Número de bases (bp)",
        cex.names = 0.7)

Interpretación de la gráfica de longitudes

Esta gráfica compara la longitud de las secuencias de SARS-CoV-2 de los 10 países seleccionados. En general, las longitudes son muy similares, lo cual indica que las secuencias corresponden a genomas completos o casi completos del virus.

Las pequeñas diferencias pueden deberse a regiones no secuenciadas, bases desconocidas representadas por la letra “N”, o diferencias técnicas al momento de obtener la secuencia. Sin embargo, estas variaciones no necesariamente significan que el virus sea totalmente diferente entre países.

Composición de bases

Además de la longitud, se comparó el número de bases A, T, C y G en cada secuencia.

contar_bases <- function(secuencia) {
  secuencia <- toupper(as.character(secuencia))
  letras <- strsplit(secuencia, "")[[1]]
  
  data.frame(
    A = sum(letras == "A"),
    T = sum(letras == "T"),
    C = sum(letras == "C"),
    G = sum(letras == "G")
  )
}

conteo_bases <- do.call(rbind, lapply(seqs_originales, contar_bases))
conteo_bases$Pais <- names(seqs_originales)

conteo_bases

Gráfica global de composición de bases

matriz_bases <- as.matrix(conteo_bases[, c("A", "T", "C", "G")])
rownames(matriz_bases) <- conteo_bases$Pais

barplot(t(matriz_bases),
        beside = FALSE,
        col = c("darkgreen", "steelblue", "orange", "purple"),
        legend.text = c("A", "T", "C", "G"),
        args.legend = list(x = "topright", cex = 0.7),
        las = 2,
        main = "Composición de bases por país",
        ylab = "Número de bases",
        cex.names = 0.7)

Interpretación de la composición de bases

La gráfica de composición de bases muestra que las secuencias tienen proporciones parecidas de adenina, timina, citosina y guanina. Esto es esperado porque todas corresponden al mismo virus, SARS-CoV-2.

Las diferencias pequeñas en el número de bases pueden deberse a mutaciones, bases desconocidas o diferencias en la calidad de la secuenciación. En general, no se observan cambios extremos que indiquen que las secuencias de un país sean completamente diferentes a las de otro.

Preparación de secuencias para distancia genética

Para calcular la distancia genética, primero limpiamos las secuencias y las dejamos con la misma longitud. Esto ayuda a evitar errores por bases desconocidas o diferencias de tamaño.

# Convertir secuencias a texto
seqs_texto <- as.character(seqs_originales)

# Reemplazar caracteres raros por N
seqs_texto <- gsub("[^ATCGNatcgn]", "N", seqs_texto)
seqs_texto <- toupper(seqs_texto)

# Cortar todas a la longitud mínima para compararlas
long_minima <- min(nchar(seqs_texto))

seqs_cortadas <- substring(seqs_texto, 1, long_minima)

# Convertir a formato DNAbin
lista_seqs <- strsplit(seqs_cortadas, "")
dna <- as.DNAbin(lista_seqs)

names(dna) <- names(seqs_originales)

dna
## 10 DNA sequences in binary format stored in a list.
## 
## All sequences of same length: 29763 
## 
## Labels:
## Colombia
## Mexico
## Brasil 
## India
## Italia
## ReinoUnido
## ...
## 
## Base composition:
##     a     c     g     t 
## 0.299 0.183 0.196 0.322 
## (Total: 297.63 kb)

Matriz de distancias genéticas

Se calcula una matriz de distancias genéticas usando el modelo TN93. Este modelo permite comparar diferencias entre secuencias de ADN.

D <- dist.dna(dna, model = "TN93", pairwise.deletion = TRUE)

# Por seguridad, si aparece algún NA, se reemplaza por el valor máximo observado
D_matriz <- as.matrix(D)

if (any(is.na(D_matriz))) {
  max_dist <- max(D_matriz, na.rm = TRUE)
  D_matriz[is.na(D_matriz)] <- max_dist
}

D <- as.dist(D_matriz)

D
##              Colombia    Mexico   Brasil      India    Italia ReinoUnido
## Mexico      3.3056700                                                   
## Brasil      2.6313523 3.3056700                                         
## India       3.0916955 3.3056700 1.0483821                               
## Italia      0.7294583 3.3056700 2.6651737 3.0059005                     
## ReinoUnido  3.3056700 3.3056700 3.3056700 3.3056700 3.3056700           
## Japon       3.3056700 2.7922025 3.3056700 3.3056700 3.3056700  3.3056700
## CoreadelSur 2.8928984 3.3056700 2.7961435 2.5329377 3.3056700  3.3056700
## Sudafrica   3.1464214 2.3280404 2.8758886 3.1452995 1.0549525  3.3056700
## Nigeria     3.3056700 2.7584883 3.3056700 3.3056700 3.3056700  3.3056700
##                 Japon CoreadelSur Sudafrica
## Mexico                                     
## Brasil                                     
## India                                      
## Italia                                     
## ReinoUnido                                 
## Japon                                      
## CoreadelSur 3.3056700                      
## Sudafrica   3.3056700   3.0581776          
## Nigeria     0.2323824   3.3056700 3.3056700

Visualización tipo mapa de distancias

temp <- as.data.frame(as.matrix(D))

table.paint(temp, 
            cleg = 0, 
            clabel.row = 0.7, 
            clabel.col = 0.7)

Interpretación de la matriz de distancias

Esta matriz muestra las distancias genéticas entre pares de secuencias. Los colores más claros representan mayor similitud genética, mientras que los colores más oscuros representan mayor diferencia.

En general, las secuencias muestran distancias bajas o moderadas, lo que indica que los genomas de SARS-CoV-2 analizados son bastante similares entre sí. Esto apoya la idea de que el virus mantiene una estructura genética conservada a nivel global.

En el caso de Colombia y México, al pertenecer al grupo latinoamericano, se espera encontrar una alta similitud genética. Si aparecen cercanos en la matriz o en el árbol, esto puede indicar que sus secuencias comparten muchas regiones similares.

Árbol filogenético

A partir de la matriz de distancias, se construye un árbol filogenético con el método Neighbor-Joining. Este árbol ayuda a visualizar relaciones genéticas entre las secuencias.

tre <- nj(D)
tre <- ladderize(tre)

plot(tre,
     cex = 0.8,
     edge.width = 2,
     col = "darkblue",
     main = "Árbol filogenético NJ de SARS-CoV-2")

# Crear anotación por región
annot <- data.frame(
  Pais = names(seqs_originales),
  Region = c("Latinoamerica", "Latinoamerica", "Latinoamerica", 
             "Africa", "Asia", "Europa", "Europa", 
             "Asia", "Asia", "Africa")
)

rownames(annot) <- annot$Pais

region <- factor(annot[tre$tip.label, "Region"])

myPal <- rainbow(length(levels(region)))

tiplabels(pch = 21,
          bg = myPal[region],
          cex = 1.2)

legend("topright",
       legend = levels(region),
       fill = myPal,
       cex = 0.7,
       title = "Región")

Interpretación del árbol filogenético

El árbol filogenético muestra las relaciones evolutivas entre las secuencias de SARS-CoV-2 de los países seleccionados. Las ramas más cortas indican mayor similitud genética, mientras que ramas más largas indican mayor distancia.

En el caso de Colombia y México, aunque ambos pertenecen al contexto latinoamericano, no necesariamente aparecen como las secuencias más cercanas dentro del análisis. Esto indica que la similitud genética del SARS-CoV-2 no depende solamente de la región geográfica, sino también de la variante, la fecha de recolección y las mutaciones acumuladas.

En general, si las ramas del árbol son cortas, se puede concluir que las secuencias comparten un ancestro común reciente y que el virus se mantiene genéticamente conservado.

Conclusiones generales

  1. Las secuencias analizadas tienen longitudes similares, lo que sugiere que corresponden a genomas completos o casi completos de SARS-CoV-2.

  2. La composición de bases A, T, C y G es parecida entre los países, lo cual indica que el genoma viral mantiene una estructura común.

  3. La matriz de distancias genéticas muestra que las secuencias son similares entre sí, sin diferencias extremas entre países.

  4. El árbol filogenético Neighbor-Joining permite observar agrupamientos genéticos, pero no necesariamente muestra una separación clara por región geográfica.

  5. En la comparación entre Colombia y México, no se puede concluir que sean las secuencias más cercanas solo por pertenecer a Latinoamérica. La similitud genética también depende de la variante, la fecha de recolección y las mutaciones presentes.

  6. En conclusión, SARS-CoV-2 presenta variaciones entre países, pero conserva una base genética común a nivel mundial.

Referencias

National Center for Biotechnology Information. NCBI Virus. SARS-CoV-2 sequence data.
https://www.ncbi.nlm.nih.gov/labs/virus/vssi/#/

National Center for Biotechnology Information. GenBank.
https://www.ncbi.nlm.nih.gov/genbank/

Li, X., Zai, J., Zhao, Q., Nie, Q., Li, Y., Foley, B. T., & Chaillon, A. (2020). Evolutionary history, potential intermediate animal host, and cross-species analyses of SARS-CoV-2. Journal of Medical Virology, 92(6), 602–611. https://doi.org/10.1002/jmv.25731