Este documento guía a través de los pasos para alinear secuencias y
construir redes de haplotipos utilizando los paquetes msa y
haplotypes, con apoyo de ape,
Biostrings, seqinr y pegas.
⚠️ Recuerde establecer su carpeta de trabajo antes de iniciar. Esta acción también puede ser definida por medio de las pestañas en la parte superior Session > Set Working Directory > Choose Directory.
Instalación de paquetes
#install.packages("BiocManager")
#BiocManager::install("msa")
#BiocManager::install("Biostrings")
#Nota: Si está ejecutando el código por primera vez o no ha usado las bibliotecas mencionadas anteriormente, instalar las bibliotecas eliminando el símbolo de anotación "#" al inicio de cada comando.
#install.packages("ape")
#install.packages("haplotypes")
#install.packages("seqinr")
#install.packages("pegas")
#Nota: Si está ejecutando el código por primera vez o no ha usado las bibliotecas mencionadas anteriormente, instalar las bibliotecas eliminando el símbolo de anotación "#" al inicio de cada comando.
Para cargar los paquetes
#Notar que algunas bibliotecas también se usan para reconstruir árboles filogenéticos.
library(Biostrings)
library(ape) # Distancias genéticas y NJ
library(msa) # Alineamiento múltiple
library(haplotypes) # Manipulación secuencias genéticas y redes de haplotipo
library(seqinr) # Análisis exploratorio y visualización de secuencias biológicas
library(pegas) # Agrupamiento en árboles
Para leer el archivo .fasta (aún no alineado)
secuencias_lobster <- readDNAStringSet("lobster.fasta", format = "fasta")
#Visualizar nuestras secuencias
secuencias_lobster
## DNAStringSet object of length 187:
## width seq names
## [1] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR01_Pg025
## [2] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR02_Pg026
## [3] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR03_Pg027
## [4] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR03_Pg028
## [5] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR04_Pg029
## ... ... ...
## [183] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR03_Pg106
## [184] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR04_Pg107
## [185] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR02_Pg151
## [186] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR02_Pg167
## [187] 400 TCCTAAGCAAGAATCAAACTTC...TCTACACTTAAAATATTAACCA AR01_Pg187
Para alinear con MUSCLE (puede cambiarse por “ClustalW”)
aligned_lobster <- msa(secuencias_lobster, method = "Muscle")
aligned_lobster
## MUSCLE 3.8.31
##
## Call:
## msa(secuencias_lobster, method = "Muscle")
##
## MsaDNAMultipleAlignment with 187 rows and 400 columns
## aln names
## [1] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR03_Pg173
## [2] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR03_Pg174
## [3] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR03_Pg137
## [4] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg115
## [5] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR02_Pg130
## [6] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR02_Pg131
## [7] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR02_Pg132
## [8] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR03_Pg133
## [9] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR04_Pg138
## ... ...
## [180] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg038
## [181] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg037
## [182] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg036
## [183] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg035
## [184] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg034
## [185] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg033
## [186] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg032
## [187] TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA AR01_Pg031
## Con TCCTAAGCAAGAATCAAACTTCTTC...TGTCTACACTTAAAATATTAACCA Consensus
aligned_lobster.DNAbin <- as.DNAbin(aligned_lobster)
#¿Qué clase de objeto tenemos aquí?
class(aligned_lobster.DNAbin)
## [1] "DNAbin"
PASO OPCIONAL: Exportar el alineamiento a su computador
Si deseamos exportar este alineamiento en archivo .fasta, para su visualización o edición en otro software.
aligned_lobster.DNAStringSet <- DNAStringSet(aligned_lobster)
writeXStringSet(aligned_lobster.DNAStringSet, filepath = "lobster_alineado.fasta")
Luego, puede cargar su archivo de alientamiento desde el computador, en caso deba cortar y editar flancos.
lobster.aligned <- read.dna("lobster_alineado.fasta", format = "fasta")
#Nota: El archivo cargada se actualizará a formato DNAbin, compatible con los siguientes pasos.
Obteniendo valores de diversidad haplotípica con comando hap.div() de
pegas
hap.div(aligned_lobster.DNAbin, variance = TRUE)
## [1] 0.8579150135 0.0004894735
Obteniendo valores de diversidad nucleotídica con comando nuc.div()
de pegas
nuc.div(aligned_lobster.DNAbin, variance = TRUE)
## [1] 4.124941e-03 7.296537e-06
haplotypesPara obtener haplotipos
lobster_haps <- haplotype(aligned_lobster.DNAbin)
lobster_haps
##
## Haplotypes extracted from: aligned_lobster.DNAbin
##
## Number of haplotypes: 57
## Sequence length: 400
##
## Haplotype labels and frequencies:
##
## I II III IV V VI VII VIII IX X
## 2 1 1 4 1 1 1 5 1 1
## XI XII XIII XIV XV XVI XVII XVIII XIX XX
## 1 1 1 1 1 2 1 1 1 1
## XXI XXII XXIII XXIV XXV XXVI XXVII XXVIII XXIX XXX
## 1 8 1 2 1 6 1 7 2 1
## XXXI XXXII XXXIII XXXIV XXXV XXXVI XXXVII XXXVIII XXXIX XL
## 1 1 1 1 1 23 4 1 2 1
## ...
## (use summary() to print all)
summary(lobster_haps)
## I II III IV V VI VII VIII IX X
## 2 1 1 4 1 1 1 5 1 1
## XI XII XIII XIV XV XVI XVII XVIII XIX XX
## 1 1 1 1 1 2 1 1 1 1
## XXI XXII XXIII XXIV XXV XXVI XXVII XXVIII XXIX XXX
## 1 8 1 2 1 6 1 7 2 1
## XXXI XXXII XXXIII XXXIV XXXV XXXVI XXXVII XXXVIII XXXIX XL
## 1 1 1 1 1 23 4 1 2 1
## XLI XLII XLIII XLIV XLV XLVI XLVII XLVIII XLIX L
## 1 2 1 1 2 1 1 1 1 1
## LI LII LIII LIV LV LVI LVII
## 1 1 1 1 10 1 65
Para construir la red de haplotipos con el método TCS
lobster_net <- haploNet(lobster_haps)
#Visualizamos
lobster_net
## Haplotype network with:
## 57 haplotypes
## 1210 links
## link lengths between 1 and 3 step(s)
##
## Use print.default() to display all elements.
Para obtener la frecuencia de cada haplotipo
hap_freq <- sapply(attr(lobster_haps, "index"), length)
#Visualizamos
hap_freq
## [1] 2 1 1 4 1 1 1 5 1 1 1 1 1 1 1 2 1 1 1 1 1 8 1 2 1
## [26] 6 1 7 2 1 1 1 1 1 1 23 4 1 2 1 1 2 1 1 2 1 1 1 1 1
## [51] 1 1 1 1 10 1 65
Para graficar la red de haplotipos
plot(lobster_net,
size = hap_freq,
scale.ratio = 10, # más espacio entre nodos
labels = TRUE,
show.mutation = FALSE,
col = "skyblue",
cex = 0.5, # tamaño del texto
font = 1) # estilo del texto
¿Cómo podríamos mejorar el gráfico resultante? Por ejemplo, cambiar la etiqueta del haplotipo o colorearlo de acuerdo a su distribución geográfica.
OPCIONAL: Podemos exportar la red de haplotipos en SVG o PDF para editarla en otro programa. Para ello usaremos los comandos pdf() o svg()
svg("red_haplotipos.svg", width = 10, height = 10)
plot(lobster_net,
size = hap_freq,
scale.ratio = 10,
labels = TRUE,
show.mutation = FALSE,
col = "skyblue",
cex = 0.5,
font = 1)
dev.off()
Aclaración: Cuando el objetivo es estudiar lo que ocurre dentro de una población —por ejemplo, en análisis de diversidad genética o en la reconstrucción de redes de haplotipos—, no es recomendable incluir un grupo externo (como una especie distinta). Esto se debe a que las diferencias genéticas acumuladas entre la población de estudio y el grupo externo son generalmente muy amplias, lo que provocaría una separación artificial en dos grupos bien definidos. Este efecto enmascara la variación interna de la población, que es precisamente lo que se busca analizar. Por ello, en estudios de estructura o relaciones internas, el uso de grupos externos puede distorsionar la interpretación biológica de los resultados.