Если для последовательностей нуклеиновых кислот n составлена таблица частот слов (последовательность ATG соответствует двум словам длины 2, AT и TG), то эту таблицу можно использовать (непосредственно или после уменьшения размерности с помощью PCA), чтобы вычислить матрицу расстояний этих последовательностей, которая затем может быть сгруппирована в филогенетическое дерево (doi: 10.1007 / s00285-002-0185-3):
library(sequinr)
Bat1 <- read.fasta(file="bat1.FASTA")
Bat1.seq <- Bat1[[1]]
Bat1.count <- as.vector(count(Bat1.seq, 2)) # count word frequencies, k < log4(Sequence length)
...
Counts <- rbind(Bat1.count, ...)
rownames(Counts) <- c("Bat1", ...)
colnames(Counts) <- c(rownames(count(Bat1.seq, 2)))
RowCounts <- rowSums(Counts)
Counts.norm <- Counts/RowCounts # normalise word counts for different sequence length
distance <- dist(Counts.norm, method = "euclidian")
hc <- hclust(distance, method = "average")
plot(hc)
Филогенетическое дерево нескольких вирусных последовательностей
Это работает на удивление хорошо, результат похож на дерево, полученное путем множественного выравнивания последовательностей с помощью ClustalX, но время вычислений составляет секунды, а не часы.
Вопрос: Как я могу измерить качество этих деревьев, чтобы выбрать оптимальную длину слов k или (если используется PCA) оптимальное количество компонентов q, а также расстояние и кластеризацию методы? Желательно без длительных загрузок со случайными последовательностями ;-).