library(stylo)
library(paletteer)
<- paletteer_c("scico::berlin", n=12)
pal library(ape)
library(purrr)
library(tidyverse)
Определение авторства: Тихий дон
Домашнее задание № 14
Аннотация
В этом домашнем задании используется датасет «Стилеметрические данные “Тихого Дона” и современной ему прозы», подготовленный Б.В. Ореховым. Этот датасет содержит частотные слова из ряда произведений, в числе которых “Тихий Дон” и различные рассказы Шолохова.
Предобработка данных
Установим все необходимые для работы библиотеки и палитру для графика:
Скачаем данные и приведём к нужному формату (транспонируем таблицу)
<- read.table("table_with_frequencies.txt", sep=" ",header=T) |>
freq_data t() |>
data.frame()
Консенсусное дерево: stylo
<- stylo(gui = FALSE,
bct_result frequencies = freq_data,
analysis.type = "BCT",
mfw.min = 100,
mfw.max = 500,
mfw.incr = 100,
distance.measure = "wurzburg",
write.png.file = TRUE,
consensus.strength = 0.5,
custom.graph.title = "Тихий дон: кто автор?",
plot.custom.width = 10,
plot.custom.height = 10
)
По этому графику мы можем заметить, что рассказы Шолохова похожи по авторскому сигналу на Тихий дон, так как они смешались.
Консенсусное дерево: purrr + ape
<- function(df) {
get_tree <- df[ , sample(3000, replace = F, size = 100)]
X <- dist(scale(X))
distmx <- as.phylo(hclust(distmx))
tr
tr
}
set.seed(1902)
<- map(1:5, ~get_tree(freq_data))
trees_result <- consensus(trees_result, p = 0.5, rooted = TRUE)
cons
<- tibble(author = str_remove(cons$tip.label, "_.+")) |>
cols mutate(color = case_when(author == "Булгаков" ~ pal[6],
== "Шолохов" ~ pal[11],
author == "Фурманов" ~ pal[3],
author == "Фадеев" ~ pal[4],
author == "Иванов" ~ pal[5],
author == "Крюков" ~ pal[1],
author == "Леонов" ~ pal[7],
author == "Островский" ~ pal[8],
author == "Платонов" ~ pal[9],
author == "Севский" ~ pal[10],
author == "Серафимович" ~ pal[2],
author == "Dubia" ~ pal[12])
author
)
par(mar = c(5,5,5,5))
plot.phylo(cons,
type = "phylogram",
use.edge.length = TRUE,
edge.width = 1.5,
node.color = "grey30",
font = 2,
no.margin = TRUE,
label.offset = 0.1,
direction = "rightwards",
plot = TRUE,
lab4ut = "a",
node.depth = 1,
tip.color = cols$color)
nodelabels(text=sprintf("%.2f", cons$node.label),
node=1:cons$Nnode+Ntip(cons),
frame="circle",
bg = "#E8C4A2FF",
cex = 0.5,
)
На этом графике уже нет каких-то чётких свидетельств в пользу авторства Шолохова!