library(stylo)
data <- read.table("table_with_frequencies.txt", quote="\"", comment.char="")
transposed_data <- t(data)
transposed_data <- as.data.frame(transposed_data)Авторство “Тихого Дона”
Исследование Бориса Орехова и Натальи Великановой подтвердило, что именно Михаил Шолохов автор знаменитого романа-эпопеи “Тихий Дон”. Попробуем пройти часть пути этого исследования и построим деревья на основе датасета «Стилеметрические данные “Тихого Дона” и современной ему прозы».
Загружаем и транспонируем данные.
Строим дерево
par(mar = c(2, 2, 2, 2))
bct_result <- stylo(gui = FALSE,
frequencies = transposed_data,
analysis.type = "BCT",
mfw.min = 100,
mfw.max = 500,
mfw.incr = 100,
distance.measure = "wurzburg",
write.png.file = FALSE,
consensus.strength = 0.5,
plot.custom.width = 10,
plot.custom.height = 1
)Получившееся дерево отлично иллюстрирует близость “Тихого Дона” к другим произведениям Шолохова, ни один другой автор не раположен так близко. Можно заметить, что 4 часть “Тихого Дона” оказалась в отдельном кластере вместе с другими произведениями Шолохова, а “Донские Рассказы”, наоборот, близки к первым 3-м частям “Тихого Дона”.
Построим 12 филогенетических деревьев (число выбрано по количеству предполагаемых авторов) и используем метод простого большиснтва. Отдельное внимание уделим уникальной окраске для каждого автора.
library(ape)
get_tree <- function(df) {
X <- df[ , sample(3000, replace = F, size = 100)]
distmx <- dist(scale(X))
tr <- as.phylo(hclust(distmx))
tr
}
library(purrr)
set.seed(123)
trees_result <- map(1:12, ~get_tree(transposed_data))
library(tidyverse)
library(RColorBrewer)
authors_df <- transposed_data |>
mutate(author = str_extract(rownames(transposed_data), "^[^_]+"))
# Уникальные цвета для каждого автора
set.seed(124)
author_colors <- brewer.pal(length(unique(authors_df$author)), "Paired")
authors_df <- authors_df |>
mutate(color = author_colors[as.factor(author)])
authors_df <- authors_df |>
select(author, color)
authors_names <- rownames(transposed_data)
color_map <- setNames(authors_df$color, authors_df$author) # Соответствие цветов
tip_colors <- map_chr(authors_names, ~ color_map[str_extract(.x, "^[^_]+")])
cons <- consensus(trees_result, p = 0.5, rooted = FALSE)
par(mar = c(1,1,1,1))
plot.phylo(cons,
type = "phylogram",
use.edge.length = FALSE,
edge.width = 1.5,
node.color = "grey30",
font = 2,
no.margin = TRUE,
label.offset = 0.8,
direction = "rightwards",
plot = TRUE,
lab4ut = "a",
node.depth = 1,
tip.color = tip_colors) # Применяем цвета для листьев
nodelabels(text=sprintf("%.2f", cons$node.label),
node=1:cons$Nnode+Ntip(cons),
frame="circle",
bg = "#E0FFFF",
cex = 0.5)Окарска по авторам должна быть автоматической, чтобы не перечислять цвета вручную, используем палитру Paired. Ее главный минус в том, что желтый цвет слишком светлый и надпись “Фурманов Чапаев” сложно прочитать, но в других стандартных палитрах количество цветов меньше, чем авторов, поэтому оставляем эту.
К сожалению, на основе этого дерева невозможно сделать каких-либо выводов относительно авторства “Тихого Дона”.
Более интересные результаты может дать изменение количества деревьев, например, для 15 деревьев все части “Тихого Дона” образуют самостоятельный, ни с кем не связанный кластер, причины появления которого вызывают интерес, но здесь будем рассматривать только вариант с 12 деревьями.
Построим консенсусную сеть.
# вычисляем консенсус
library(TreeTools)
library(phangorn)
mph <- as.multiPhylo(trees_result)
cons.nw <- consensusNet(mph, prob = 0.3, rooted = FALSE)
cons.nw$col <- str_extract(cons.nw$tip.label, "^[^_]+")
color_group <- tibble(label = unique(cons.nw$col)) %>%
left_join(authors_df, by = c("label" = "author"))
cons.nw$col <- color_group$color[match(cons.nw$col, color_group$label)]
# Рисуем
set.seed(125)
par(mar = c(0, 0, 0, 0))
plot(cons.nw, type = "2D",
direction = "axial",
tip.color = cons.nw$col,
edge.color = "grey30",
edge.width = 1,
label.offset = 0.2,
cex = 0.8,
no.margin = TRUE,
font = 3,
lab4ut = "a")Части “Тихого Дона” оказываются связанными между собой, и единственный связанный с ними автор - Михаил Шолохов. Отметим, что все остальные произведения Шолохова образовали отдельную ветвь, и только “Донские рассказы” свзяны с “Тихим Доном”, в связи с этим было бы интересно отдельно рассмотерть это произведение отдельно.
Подводя итоги, построив деревья и проанализировав консенсусную сеть, можно с уверенностью сказать, что Михаил Шолохов является автором “Тихого Дона”.