library(stylo)
<- read.table("table_with_frequencies.txt", quote="\"", comment.char="")
data
<- t(data)
transposed_data
<- as.data.frame(transposed_data) transposed_data
Авторство “Тихого Дона”
Исследование Бориса Орехова и Натальи Великановой подтвердило, что именно Михаил Шолохов автор знаменитого романа-эпопеи “Тихий Дон”. Попробуем пройти часть пути этого исследования и построим деревья на основе датасета «Стилеметрические данные “Тихого Дона” и современной ему прозы».
Загружаем и транспонируем данные.
Строим дерево
par(mar = c(2, 2, 2, 2))
<- stylo(gui = FALSE,
bct_result 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)
<- function(df) {
get_tree <- df[ , sample(3000, replace = F, size = 100)]
X <- dist(scale(X))
distmx <- as.phylo(hclust(distmx))
tr
tr
}
library(purrr)
set.seed(123)
<- map(1:12, ~get_tree(transposed_data))
trees_result
library(tidyverse)
library(RColorBrewer)
<- transposed_data |>
authors_df mutate(author = str_extract(rownames(transposed_data), "^[^_]+"))
# Уникальные цвета для каждого автора
set.seed(124)
<- brewer.pal(length(unique(authors_df$author)), "Paired")
author_colors
<- authors_df |>
authors_df mutate(color = author_colors[as.factor(author)])
<- authors_df |>
authors_df select(author, color)
<- rownames(transposed_data)
authors_names
<- setNames(authors_df$color, authors_df$author) # Соответствие цветов
color_map
<- map_chr(authors_names, ~ color_map[str_extract(.x, "^[^_]+")])
tip_colors
<- consensus(trees_result, p = 0.5, rooted = FALSE)
cons
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)
<- as.multiPhylo(trees_result)
mph
<- consensusNet(mph, prob = 0.3, rooted = FALSE)
cons.nw
$col <- str_extract(cons.nw$tip.label, "^[^_]+")
cons.nw
<- tibble(label = unique(cons.nw$col)) %>%
color_group left_join(authors_df, by = c("label" = "author"))
$col <- color_group$color[match(cons.nw$col, color_group$label)]
cons.nw
# Рисуем
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")
Части “Тихого Дона” оказываются связанными между собой, и единственный связанный с ними автор - Михаил Шолохов. Отметим, что все остальные произведения Шолохова образовали отдельную ветвь, и только “Донские рассказы” свзяны с “Тихим Доном”, в связи с этим было бы интересно отдельно рассмотерть это произведение отдельно.
Подводя итоги, построив деревья и проанализировав консенсусную сеть, можно с уверенностью сказать, что Михаил Шолохов является автором “Тихого Дона”.