Я немного умею складывать, но от вычитания у меня всегда кружится голова

Позднее Ctrl + ↑

Последовательность шагов для определения видов диатомовых микроводорослей по морфологическим признакам

Продолжаю рассуждать об алгоритме идентификации огромного числа видов диатомовых

Я медленно распаковываю присланный архив и передо мною открывается пятьсот фотографий диатомовых водорослей. Боже, они все такие разные, и я не знаю, какие виды на них изображены. А через два месяца мне нужно написать отчет и упомянуть большую часть из этих видов. Но как к ним подступиться, с чего начать? Ведь диатомовых очень много, а я знаю так мало. Караул!


В аннотации к статье Tyree et al. (2020) Reduction of taxonomic bias in diatom species data приведена следующая рекомендация:

«postcount identification and documentation of taxa (as opposed to an approach in which analysts assign names while they enumerate)».

Полностью она звучит так:
Precount voucher floras. [...] Each analyst was instructed to provide the project leader with a digital image of a representative specimen for all taxa that made up 5% or more of an individual count. [...] Multiple images were collected to document the size and morphological range of each taxon, which were then assigned aunique mOTU code. The images were assembled into image catalogs, or precount voucher floras, and made available to analysts. Analysts then had the opportunity to comment and reformulate mOTUs and their member images before the formal analysis began. Once analysis of microslides started, newly encountered taxa were photographed, assigned a code, added to the flora, and made available to project analysts for use throughout the analysis period.


Это натолкнуло меня на мысль о порядке определения видов диатомовых. Он подходит только для определения видов по фотографиям.

(1) Сначала объединяем фотографии особей в группы по схожести видимых признаков, невзирая на таксономическую принадленость изображенных организмов.

Фактически, на первом этапе мы выделяем морфотаксоны.

(2) После, пересматриваем организмы группы. Если какой-то организм из группы чем-то значимо отличается от остальных организмов этой группы, переносим его в другой морфотаксон.

На втором шаге присваиваем имена морфотаксонам.

(3) В финале, определяем видовую принадлежность организмов группы и называем виды, либо оставляем название морфотаксона, если вид определить не удалось.


Такой же алгоритм упомянут на сайте diatoms.org:

Steps to Eliminate Taxonomic Bias

  1. A priori, images are collected and organized into morphological OTUs.
  2. Each OTU is assigned a provisional name (GOM01, GOM02, etc.)
  3. Taxonomists add images to the voucher flora, when new taxa are encountered during analysis.
  4. Identification of species is delayed, until the final step of analysis.
  5. The voucher publicly available and serves as a permanent record of the study.
  6. Permanent slides are deposited in a public herbarium to support the voucher.



Tyree et al. (2020) дает рекомендации по именованию морфотаксонов:

Formal scientific names. [...] analysts [...] enumerated taxa based on the mOTU codes from the shared voucher floras. When analyses were completed, mOTU codes were reconciled, and formal scientific names were assigned during collaborative workshops. During the workshops, project analysts [...] assigned scientific names to mOTUs. For each scientific name assigned, analysts recorded their initials and the taxonomic concept reference used when identifying the taxon. Any mOTU that did not correspond with a validly published species was referenced by its project-specific code (e. g. “Achnanthidium sp. 1 SESQA”). Such names were entered into [...] Taxonomic Database [...] as a bench name, with the voucher flora serving as the image representation of the name.

Изображения диатомовых сгруппированные по морфотаксонам. Bishop et al., 2017



Последовательность шагов для определения диатомовых выглядит так:

  • Делим изображения на морфотаксоны
  • Корректируем состав морфотаксонов
  • Идентифицируем виды, относящиеся к морфотаксонам
  • Соотносим с морфотаксоном валидное видовое название или оставляем рабочее название морфотаксона
  • Заносим результаты в таксономическую базу данных


Эта последовательность подходит для идентификации других групп организмов.



В предыдущих сериях:


Викиданные и Викибаза

Викиданные — это база разнообразных лексических концепций, которые могут прочитать как люди, так и машины. Фактически это база для обучения машин человеческим понятиям.

Работает так: мы активно пишем статьи, семантически размечаем приведенные в тексте понятия, а викиботы их вытягивают и заносят в базу. Затем эти данные специальные алгоритмы используют для обучения нейросетей, с которыми мы потом и взаимодействуем.

Примерно так же мы учим детей, только здесь нам никто не говорит, что все, что мы объясним, потом может быть использовано против нас.

Викибаза — это набор программ, позволяющие извлекать и работать с данными из Викиданных.


Все это открыто и бесплатно. Ну то есть поддержка софта, базы и серверов оплачивается специальными фондами (там ах-ные суммы), а все, кто данные вносят, делают это открыто и бесплатно)

Символизм: пчела — лилия

Лилия — это замаскированная пчела.

Пчела — это символ одного из ответвлений суфизма, из которого вышли массоны — вольные каменщики.

* * *

Информация из интервью уважаемой АсСалам.

Добавляем рисунки к листьям дендрограммы. 1 часть: используем ggtree

Дендрограмма — это результат объединения данных при помощи иерархического кластерного анализа. Обычно на листьях дендрограммы написаны имена переменных — названия объектов. Рассказываю, как вместо названий показать изображения.

В конце заметки — финальный код на R


Эта красочная дендрограмма содержит 38 листьев и разделена на 19 классов. На листьях дендрограммы написаны названия видов плоских паразитических червей из класса моногеней. Собираюсь показать вместо них изображения прикрепительных органов этих паразитов


Для работы понадобятся

Знание языка Эр.

Установленный пакет ggtree.

Создаю изображения объектов

Каждому листу дендрограммы сопоставлю маленький рисунок объекта. Для этого буду использовать два набора изображений: один — для тестирования, другой — для финальной отрисовки.

Тестовые изображения
Тестовые изображения содержат номера, идущие по порядку. Они нужны для того, чтобы было понятно, куда именно разработанный код помещает картинки.

Вот код для генерации 99-ти пнг-файлов размером 20×20 пикселей. Имя файла с изображением совпадает с нарисованым номером.

imgs_path = "img_indexed/"

for (i in 1:99) {
  # Создаю новый пнг-файл img_{i}.png с нулевыми отступами
  png(file = paste0(imgs_path, "img_", i, ".png"), width = 20, height = 20)
  par(mar = c(0, 0, 0, 0))
  
  # Созданию рисунок числа
  plot(0, 0, type = "n", xlim = c(0, 1), ylim = c(0, 1), xlab = "", ylab = "", axes = FALSE)
  text(0.5, 0.5, i, cex = 1)
  
  # Сохраняю пнг-файл
  dev.off()
}

Вот сами изображения.

Вод код для их загрузки.

imgs_indexed = c()
imgs_path = "imgs_indexed/"

for(i in 1:75) {
  imgs_indexed = c(imgs_indexed, paste0(imgs_path, "img_", i, ".png"))
}

Изображения объектов

Изображение объекта — это уменьшенный рисунок прикрепительного крючка паразитического червя (моногенеи). Вот они все:

Общая картинка создана с помощью Имедж-меджик: montage -tile 20x2 -geometry +0+0 *.png all-anchors.png

Название файла с крючком совпадает с наванием вида. Эти названия храню списком в текстовом файле labels.txt. Для загрузки изображений объектов использую следующий код.

imgs_path = "img_objects/"
# Загружаем имена меток
img_objects <- readLines("labels.txt")
# и добавляем расширение '.png'
img_objects <- paste0(imgs_path, img_objects, ".png")

Изображения готовы, перейдем к дереву.

Строю дерево с картинками, используя ggtree

В книге «Data integration, manipulation and visualization of phylogenetic trees» описано, как прикрутить картинки к дендрограмме с помощью ggtree.

К сожалению, приведнный в книге код у меня не заработал. Он подразумевает, что мы загружаем филодерево из файла. А я строю дерево при помощи иерархической кластеризации и преобразую ее в объект дендрограммы.

data — это матрица данных: в ее строках — объекты, в столбцах — признаки.

# Выполняю иерархический кластерный анализ
dist <- dist(data)
hc   <- hclust(dist, method = "complete") 

library(dendextend)

# Преобразую результат в дендрограмму
dend <- as.dendrogram(hc)

Из дендрограммы делаю филодерево.

library(ggtree)

phylo <- as.phylo(dend)

Рисую дерево.

ggtree(phylo)

И получаю пустой каркас.

R: ggtree(∙)

Строю дендрограмму с текстовыми листьями

Добавлю к листьям каркаса текстовые подписи при помощи функции geom_tiplab(∙). Чтобы подписи поместились на канве, оставлю пустое место справа при помощи xlim(∙).

ggtree(phylo) + xlim(0, 0.7) + geom_tiplab(geom="label", size=2.2)
R: ggtree(∙) + xlim(∙) + geom_tiplab(label)

Получилось так себе: текст мелкий и бесит рамка вокруг него, но как от нее избавиться — не понял.

Метки мелкие и иногда перекрывают друг на друга. От перекрытия меток избавит пакет ggrepel. Но в результате получается каша.

Рисую картинки на дендрограмме

У функции geom_tiplab(∙) есть параметр geom, задающий тип метки:

one of ’text’, ’label’, ’shadowtext’, ’image’ and ’phylopic’.

При помощи опции ’image’, можно на месте листьев нарисовать картинки.

На нашей дендрограмме 38 листьев. Значит передадим ей массив из 38 тестовых изображений: imgs_indexed[1:38].

Параметр size управляет размером картинок. Пришлось с ним повозиться, пока не подобрал подходящее значение.

ggtree(phylo) + geom_tiplab(geom="image", aes(image=imgs_indexed[1:38]), size=.03)

В результате выполнения кода получил ошибку:

Error in `label_geom()`:
! Problem while computing aesthetics.
i Error occurred in the 3rd layer.
Caused by error in `check_aesthetics()`:
! Aesthetics must be either length 1 or the same as the data (75)
x Fix the following mappings: `image`

После длительного анализа определил, что массив изображений должен состоять из 75 элементов, что написано в сообщении об ошибке. (75 = 38 листьев * 2 − 1.) Но код все равно использует только 38 первых изображений. (Это хорошо.)

ggtree(phylo) + geom_tiplab(geom="image", aes(image=imgs_indexed[1:75]), size=.03)

Вуаля.

R: ggtree(∙) + xlim(∙) + geom_tiplab(image)

Подставлю сюда изображения объектов.

ggtree(phylo) + geom_tiplab(geom="image", aes(image=img_objects[1:75]), size=.03)

Цель достигнута.

Финальный код

library(ggplot2)
library(ggtree)

# Формируем массив с названиями файлов с рисунками объектов.
imgs_path = "img_objects/"
img_objects <- readLines("labels.txt")
img_objects <- paste0(imgs_path, img_objects, ".png")

# Выполняю иерархический кластерный анализ
dist <- dist(data)
hc   <- hclust(dist, method = "complete") 

# Преобразую результат в филодерево
phylo <- as.phylo(dend)

# Рисую дерево с картинками
ggtree(phylo) + geom_tiplab(geom="image", aes(image=img_objects[1:75]), size=.03)

Итог

Результат не нравится.

Дендрограмма вверху заметки — красивая, а эта — средненькая. Поэтому в следующий раз покажу, как сделать красивую дендрограмму с картинками при помощи пакета dendextend.



Если после прочтения этой прекрасной заметки вам вдруг непреодолимо захотелось меня поблагодарить, переведите мне 200 руб. на круасан с чаем. А я пока напишу что-то новенькое.

Rесурсы. Как перенести пакеты R из одного каталога в другой (под Виндоус)

Рассказываю, что делать, если ваш каталог с пакетами Эр закрыт для записи

Установка пакетов Эр в каталог по-умолчанию равносильно ношению корсета: внешне красиво, а внутри — тяжелые последствия. Источник.

Эр работает со множеством вспомогательных пакетов. Для этого Эр скачивает пакеты в специальный каталог на компьютере.

Пакеты Эр установленные на моей машине

По-умолчанию Эр помещает пакеты в системный каталог Виндоус. Обычно — это каталог текущего пользователя. Например, у меня на Виндоус 10 — это:

C:\User\Anton\AppData\Local\R\win-library\4.3\

По какой-то причине данный каталог иногда закрыт для записи, поэтому я не могу установить туда новые пакеты.

Чтобы исправить это досадное недоразумение, создадим новый каталог и укажем Эр, что теперь пакеты нужно устанавливать в него.

  1. Создадим новый каталог для пакетов Эр. Например:
    C:\User\R\packages
  1. Откроем переменные среды текущего пользователя.
  1. Найдем переменную R_LIB_PATH или создадим ее.
  1. Запишем в эту переменную название каталога с пакетами Эр.
  2. Перезапустите Эр. Теперь новые пакеты будут установлены в указанный каталог.




Первоисточник.
How do I change the default library path for R packages.

Доп. чтение:
Migrating R libraries

R Installation and Administration. 6 Add-on packages
Painless way to install a new version of R?




—-

Если вам вдруг непреодолимо захотелось меня поблагодарить, переведите мне 200 руб. на чашеку кофе.

Десять принципов Артема Горбунова

Артем Горбунов — дизайнер, основатель и руководитель Бюро Горбунова.

Вот его жизненные принципы.

  1. Прямо сейчас. Если перед вами стоит сложная задача и вы не знаете, как к ней подступиться, задайте себе вопрос: Что мне мешает достичь цели прямо сейчас? При таком подходе вы начинаете думать о главной проблеме, которая мешает добиться результата.
  2. Не авось. Если сделать что-то на авось, есть два варианта развития событий. Старший товарищ заметит вашу ошибку и наругает вас. Или, что ещё хуже, вы сделаете проект, запустите его, он начнёт работать и что-то в нём пойдёт не так. Поэтому не полагайтесь на авось.
  3. Я виноват. Когда что-то идёт не так, хочется обвинять других. Но в этом случае вы перекладываете ответственность на обстоятельства. Если вы признаёте вину, то можете влиять ни происходящее.
  4. Не ной. Нытьё дискредитирует вас в глазах окружающих, и они будут считать, что на вас нельзя положиться.
  5. Не бери деньги у мудаков. Деньги всегда связаны с доверием и создают ожидания. Поэтому не берите деньги у клиентов, которым вы не доверяете.
  6. Учись.
  7. Не ссы. Меняйте профессию, открывайте собственный бизнес и заводите детей даже тогда, когда кажется, что уже слишком поздно
  8. Путешествуй.
  9. Помни. Человеческая память ограничена, поэтому чтобы сохранить воспоминания, используйте подручные приспособления. Например, ведите записи, сохраняйте важную переписку, переносите данные из старого компьютера на новый
  10. Мечтай. Делите свои мечты с другими людьми: путешествуйте с ними, делайте совместные проекты. Тогда ваша мечта станет мечтой тех, с кем вы ею поделились.

Это полная запись выступления.

Вырезаем из большой дендрограммы маленькую веточку с помощью R

Во время анализа больших дендрограмм у меня возникает необходимость выделить отдельную ветвь для подробного изучения. Например у нижеследующей дендрограммы намерен оставить ветку, отмеченную красным, а также по одному листу из соседних ветвей, отмеченных синим.

Нужно оставить только отмеченные ветви


Примечание. Размер шрифта на денрограмме уменьшил при помощи R-кода ↓.

# Размер подписей на оси
par(cex.axis=0.8)
# Размер подписей листьев
dend <- set(dend, "labels_cex", 0.9)
# Рисует дендрограмму
plot(dend)

В R (вроде бы пока еще) нет специальной процедуры для вырезания ветвей. Зато в пакете dendextend есть функция prune.

Prune обрезает дерево, то есть удаляет из него указанные листья. Так, если в качестве параметра передать названия листьев, отмеченных на рис. красным, prune именно их и вырежет.

dend_pruned <- prune(dend, c("L_grandis__da", "L_kedahensis__TG__da", "L_chabaudi__da", "L_fenestrum__KM221913__da"))
plot(dend_pruned)
Отмеченные ветви удалены

Получается, чтобы оставить только отмеченные листья, мне нужно перечислить все остальные. Когда дендрограмма большая, перечислять листья вручную я буду довольно долго.

«Пусть потеет машина», гласит дизайнерская мудрость. Поручим компьютеру сделать необходимые перестроения.

Для этого предлагаю функцию invert_prune. Она получает на вход список листьев, которые нужно оставить в дендрограмме, и возвращает список листьев, которые должна обрезать функция prune.

invert_prune <- function(dend, remained_leaves) {
  setdiff( labels(dend), remained_leaves )
}

Пользуемся ею так:

dend_pruned <- prune(dend, 
invert_prune(dend, c("L_grandis__da", "L_kedahensis__TG__da", "L_chabaudi__da", "L_fenestrum__KM221913__da"))
)

plot(dend_pruned)

Вуаля, и все нужные ветки остались.


Учите R.


—-

Если вам вдруг непреодолимо захотелось меня поблагодарить, переведите мне 200 руб. на чашеку кофе.

Сила сознания


«Сознание не только позволяет видеть призраков, но может и создавать предметы из ничего и ввергать их обратно в небытие. Например, в темноте человек видит змею, а при включенном свете понимает, что принял за змею обычную веревку — змея ещё секунду назад была невероятно реальна, а вот её уже нет. Сознание обладает такой невероятной силой, что даже может изменять прошлое и будущее. Вот вы смотрите на прошлое своей страны одним способом, а после прочтения книги оно видится уже совершенно другим. Смотрите на свое будущее — и оно кажется неопределенным безрадостным, а, например, поставили цели и составили планы на следующий месяц, и очертания будущего стали более чёткими, а его восприятие заметно улучшилось. Факты не изменились, изменилась лишь интерпретация — и вот изменились прошлое и будущее, так как они существуют лишь у нас в уме.»


«Обладая таким могущественным инструментом как сознание, человек может поставить себе цель — сотворить у себя в уме из существующих фактов свою собственную вселенную и наполнить её смыслом, радостью и светом, таким образом полностью уподобившись Богу и по сути став им. При этом крайне важно строить эту вселенную из реальных, а не поддельных фактов, так как использование некачественных материалов может повлечь за собой крах всего мироздания.»


Источник на Хабре: Как управлять Вселенной, не покидая психиатрической лечебницы.


Выбор за тобой

«Ведь человек в этом мире — свободен. Хочешь — обжирайся и напивайся, хочешь — развлекай себя нейростимуляторами, хочешь — предавайся персональному мазохизму. Но, с другой-то стороны: хочешь учиться — учись; хочешь читать — читай, все что угодно и сколько угодно; хочешь самосовершенствоваться — пожалуйста; хочешь, в конце концов, чистить и улучшать свой мир, хочешь драться за достоинство человека — ради бога! — это отнюдь никем не запрещено, действуй, и дай тебе бог удачи! Ты волен в этом мире стать таким, каким сможешь и захочешь. Выбор за тобой. Действуй.»

Воспоминания Бориса Стругацкого о повести «Хищные вещи века».

Хорошее определение термина trait (экопризнак) с примером для диатомовых: очень кратко

Нашел хорошее определние английского термина trait.


Eng
Traits are defined as “any morphological, physiological or phenological measurable feature at the individual level” [Violle et al., 2007] and are more tightly linked to ecosystem functioning than species; thus, their study provides a more integrative ecological assessment potential at the ecosystem level [Tapolczai et al., 2016].

Traits described in benthic diatoms are cell size, ecological guilds and life forms, and have been successfully related to environmental stressors (i.e., pesticides—herbicides, heavy metals, nutrients and organic pollution).


Violle et al., 2007


По русски trait переводится как признак. Но признак — общее понятие, которое включает как диагностические признаки, так и просто любые признаки объекта. А trait-based approach подразумевает признаки, связанные с экологией организма, с его функционированием в экосистеме, а не с его таксономическим положением. Поэтому trait перевожу как экопризнак.


Trait — Экопризнак
Trait-based approach — Анализ экопризнаков


Ru

Экопризнак — это «любая морфологичекая, физиологическая или фенологичсекая характеристика, измеряемая на индивидуальном уровне» [Violle 2007]. Экопризнаки боле тесно связаны с функционированием экосистемы. Поэтому их изучение обеспечивает более комплексный потенциал экологической оценки на уровне экосистем [Tapolczai, 2016].

У бентосных диатомовых к экопризнакам относятся размеры, экологические группы, жизненные формы.

Экопризнаки бентосных диатомовых и факторы, с которыми они связаны [Tapolczai et al., 2016]


Подробнее здесь:

Как связаны обилие и таксономическое разнообразие диатомовых с загрязнениями

Цит. [Pandey et al., 2017]:

Ответ: явная связь отсутствует

Diatom diversity indices and their relative abundance in the diatom communities are widely used to indicate the presence and extent of organic and inorganic contaminants in fluvial ecosystems. In most studies,

these routinely used indices provide a statistically weak relationship between diatom diversity and pollutants.

Thus, in the light of this result,

there is an urgent need to incorporate new types of diatom-based indices

(e. g., a taxonomic composition based index), which can provide reliable information using statistical tools. Improvement in taxonomic resolution of diatom species, use of composite indices (richness, evenness, diversity and dominance), increased cell counting (3000-8000 valves) and simultaneous use of several indices to detect and evaluate the huge spectrum of potential pollutants have been proposed to improve the efficacy of diatom-based ecotoxicological assessments [Blanco and Becares, 2010; Stevenson et al., 2010; Rimet and Bouchez, 2011].

Нет прямого влияния химических загрязнений на разнообразие диатомовых

Analysis of available literature does not support a direct causeeffect relationship between chemical pollution and diatom diversity.

In general,

the relationship between diversity and chemical contamination is not always a simple linear positive/negative association and results are not always strong enough to indicate a management approach that would most effectively conserve the health of the ecosystem.

<...>

These biodiversity parameters are regularly used but sometimes do not provide consistent information about the known impairment of waterbodies [Blanco et al., 2012].

<...>

Other studies showed mixed responses of diatoms against different types of stresses.

<...>

This inconsistency of diatom diversity indices and lack of significant correlations between diversity, evenness and environmental variables is in accordance with the “Intermediate Disturbance Hypothesis”, which assumes a parabolic relation between diversity and water quality, with the highest diatom diversity at intermediate pollution levels [Van de Vijver and Beyens, 1998; Hirst et al., 2002].

Как выявить потенциальную взаимосвязь

Используйте несколько индексов разнообразия

Ricciardi et al. (2009) reviewed the status of biological communities in rivers in relation to chemical contamination and reported two major constrains in diversity and pollution studies.

  • First, they found that the use of a single diversity index or small number of diversity indices was inadequate. The different biodiversity indices assess different types of information and using only one of these indices (types of information) is not enough to adequately define biological diversity. Multivariate-analysis studies that combine both conventional and taxonomy-based indices and possibly different trophic levels provide a more comprehensive view of the diversity status of an ecosystem and its potential response to pollutants.
  • Second, they advocated the use of coupled chemical and biological analyses to evaluate water-quality status and the effect of chemicals on fluvial biological diversity, thus promoting a multidisciplinary approach.
  • Further, they recommended incorporating a variety of types of biodiversity indices, especially when using algae (diatoms) for assessing the chemical status of aquatic systems.

According to Stevenson et al. (2010), composite indices that incorporate both the richness and evenness elements of diversity are needed to characterize the kind and severity of pollution in fluvial ecosystems. Similarly, Blanco and Becares (2010) found that the simultaneous use of several diatom indices is required to detect and evaluate the huge spectrum of potential pollutants in river basins.

Применяйте методы понижения размерности

Relative abundance data can become informative through the use of ordination, clustering and similarity indices [Stevenson et al., 2010].

More specifically, ordination-based multivariate analysis (e. g., correspondence analysis, detrended correspondence analysis, non-metric multidimensional scaling, principal component analysis and distance-based redundancy analysis) was developed to relate community composition to measured variation in the environment.

  • Ordination plots obtained in the analyses are linear combinations of environmental variables, along which the relative distributions of species assemblages.
  • Ordination plots help in visualizing the pattern of community variation, distributions of species and assemblages among environmental variations, and can be used for indicating species-environment relationships. (ter Braak, 1986; ter Braak, 1987; ter Braak and Smilauer, 2002).
  • Furthermore, ordination and clustering can be used to show assemblages that differ from other assemblages, which may be caused by anthropogenic impacts (e. g. Chessman, 1986; Stevenson and White, 1995).

Thus, incorporation of these analyses (any one) provides a simple, easy-to-understand description of the percent change in species relative abundances between assemblages at assessed and reference sites.

Процитирован

Pandey L. K., Bergey E. A., Lyu J., Park J., Choi S., Lee H., Depuydt S., Oh Y.-T., Lee S.-M., Han T. (2017) The use of diatoms in ecotoxicology and bioassessment: Insights, advances and challenges. Water Research. 118: 39-58.

Шпаргалки по пакетам R

R — это мощный язык программирования и среда анализа данных, широко используемая в области статистики и науки о данных. Благодаря своей гибкости и расширяемости, в R разработаны тысячи пакетов, предоставляющих разнообразные функции и инструменты для работы с данными, статистического анализа, графического представления и др.

Пакеты R позволяют пользователям расширять функциональность языка R, добавлять новые методы анализа данных, реализовывать свои алгоритмы и многое другое. Они часто распространяются через специальный репозиторий CRAN (Comprehensive R Archive Network), что делает установку и использование пакетов простым и удобным процессом.

Чат-джи-пи-ти.


Шпаргалки по пакетам R на гитхабе.


Пример шпаргалки для пакета stringr, который сильно упрощает работу со строками.

Оригинал stingr шпаргалки.

Покажите улучшение градиентом

Градиент цветов традиционно используют для изображения плавных отличий каких-либо признаков.

Широтный градиент распределения окраски птиц. Cooney et al., 2002, fig. 2

Он хорошо отображает динамику распределения значений. Но с его помощью также можно показать какое-то улучшение. Для этого объекты с начальными (худшими) параметрами отметьте самым тусклым цветом. Далее постепенно повышайте насыщенность цветов. Наилучший результат покажите самым насыщенным цветом.

Для примера на рисунке ниже ↓ изображено, как улучшается форма биологических объектов при использовании все большего и большего числа параметров — гармоник эллиптического преобразования Фурье.

Самый светлый серый цвет раскрашивает примитивные эллиптические формы, восстановленные из одной гармоники (второй ряд), а насыщенный черный (последний ряд) — наилучшие формы, восстановленные из 32 гармоник, которые практически не отличаются от исходных. Градиент серого иллюстрирует поэтапное восстановление исходных форм.

А на следующем рисунке ↓ изображен тот же процесс, но без использования градиента.

Очевидно, что градиент лучше передает динамику процесса.

Двойная дуга в СВГ пути

Это короткая техническая заметка о декодировании СВГ тега path.

Я — ретроград и у меня есть Дельфи-библиотека для загрузки СВГ графики. Она хорошо работала до тех пор, пока в теге path не встретился такой набор команд:

... a25.35,25.35,0,0,0-.32,8.58,32.42,32.42,0,0,0,1.53,6.3 ...

По спецификации a — рисует дугу и содержит семь параметров (семь чисел). А здесь их четырнадцать.

Немного подумав, понял, что вторая семерка чисел определяет следующую дугу. То есть без сокращений будет так:

... a25.35,25.35,0,0,0-.32,8.58 a32.42,32.42,0,0,0,1.53,6.3 ...

Учту это правило в библиотеке.

Проверяем уникальность выборок в методе бустрепа при помощи хешей

Где-то в крымском лесу

Это продолжение серии заметок об анализе биологических данных.


Сегодня рассмотрим частную задачу, которая может возникнуть при использования метода бустрепа.

Дано множество объектов. Необходимо случайным образом составить из них неповторяющиеся выборки. Задача заключается в проверке уникальности каждой выборки. Для этого используем хеш.


Бутстреп

Метод бустрепа предполагает, что из множества исходных данных мы создаем случайную выборку и вычисляем по ней некоторые статистические величины: среднее, дисперсию и тому подобные. Затем мы создаем новую случайную выборку, вычисляем новые величины и так продолжаем очень много раз. В результате по полученным значениям мы оцениваем реальные статистические величины. Достоверность оценок как раз достигается за счет многократного выбора.

Немного о бустрепе.

Уникальные выборки

В классическом бустреп-анализе могут повторяться как сами выборки, так и элементы в каждой выборке. Но в данной случае нам нужно создать совокупность уникальных выброк. Для проверки уникальности каждой выборки используем хеш.

Хеш — это математическое преобразование, переводящее произвольный входной массив данных в строку фиксированной длины, состоящую из букв и цифр. Хеш считается хорошим, если он устойчив к колизиям — это когда невозможно получить из различных входных последовательностей одинаковые хеши.
Group-IB: Хеш четкий и хеш нечеткий.

Хеш

Для создания хеша объединим все элементы выборки (их значения, идентификаторы или названия) в одну строку и вычислим хеш строки. Затем проверим, встречался ли такой хеш ранее (в массиве сохраненных хешей). Если его там нет, значит выборка уникальная.

Вот как можно составить строку для хеширования из данных.

  • Если данные — это символы, например названия, тогда объединяем их в одну строку:
  • ’ellipse’ + ’convex’ + ’square’ + ’curve’ → ’ellipseconvessquarecurve’.
  • Если данные — это числа, то считаем их строками и тоже объединяем в одну строку:
  • 17.5 + 21.1 + 33.333 + 77.00098 + 1 + 0.008 → ’17.521.133.33377.0009810.008’

Алгоритмов хеширования много. Среди них наиболее распространены: MD5, SHA-1, SHA-2, SHA-256. Используйте любой.

Вот хеши SHA-256 двух вышенаписанных строк:

  • ellipseconvessquarecurve → 6d80b7d933b69b974189bd2a61b90a05f050c62afa055fb5a033f36114d360a2
  • 17.521.133.33377.0009810.008 → d1a728197a46f18060a0c2533938c881b0d48e8e65358f21f1d86dd0f5f1612b

Успехов в анализе данных.

Стандартизация числовых данных

Это продолжение серии заметок об анализе биологических данных. В прошлый раз мы разобрали понятие объекта и его признаков.


Сегодня рассмотрим процедуру предварительной обработки первичных данных — стандартизацию.


Допустим нам нужно статистически сравнить или сгруппировать несколько наблюдений по схожести признаков (например, выполнив кластерный анализ). Каждое наблюдение — это ряд числовых значений, к примеру, биомасс разных видов организмов. Ряды наблюдений упорядочены: первой всегда идет биомасса вида А, затем вида Б и так далее.

У значений есть особенность: в пределах ряда они могут отличаются в несколько раз, потому что мы изучаем как крупные, так и мелкие организмы. В результате биомасса одного или нескольких видов часто в несколько раз превышает остальные. Как на графике.

Первичные нестандартизованные данные, строки соответствуют наблюдениям, столбцы — видам. Биомассса первого вида практически во всех случаях подавляет биомассу остальных, поэтому кластерный анализ таких данных приведет к неверным выводам

Такие наблюдения сравнивать некорректно. Виды, доминирующие по биомассе, будут сильнее всего влиять на результаты сравнения. Поэтому получится, что мы будем сравнивать не биомассы всех видов, а только нескольких доминирующих (в частном случае — одного).

Теперь выполним стандартизацию по видам (по столбцам).

Данные стандартизованные по признакам (столбцам)

После стандартизации значения выровнялись и исчезло резкое доминирование отдельных видов. Теперь на результаты кластерного анализа будут влиять все значения. А его результаты будут более корректными.

Формула стандартизации

Для стандартизации ряда значений (строки или столбца) необходимо вычислить среднее \( \mu \) и стандартное отклонение \( \sigma \) значений ряда, затем отнять среднее от каждого элемента ряда и поделить разницу на стандартное отклонение:

\( y_i = (x_i — \mu) / \sigma \).

После таких манипуляций среднее ряда станет равным нулю, а стандартное отклонение — единице.

Полученные величины \( y_i \) будут выражать значения в пропорции к стандартному отклонению: то есть 1 будет означать одно стандартное отклонение, 2 — два и т. д.

Код на R

Если вы работаете в R, для стандартизации используйте функцию scale(). Она стандартизирует столбцы переданной матрицы.

standardized_columns <- scale(matrix)

Если необходимо стандартизировать строки, транспонируйте t матрицу, а затем транспонируйте результат.

standardized_rows <- t( scale( t(matrix) ) )

Когда применять стандартизацию

Обычно стандартизацию применяют, когда диапазоны изменения значения признаков существенно отличаются, как в примере выше. Вот еще несколько рекомендация на английском о применимости стандартизации.

Объект и признаки объекта в биологической статистике

Базовые понятия необходимые для полноценного восприятия заметок об анализе биологических данных.


N. B. Нет такой дисциплины, как биологическая статистика. Статистика везде одинаковая, что в биологии, что в физике, что в лингвистике. А в заголовке она упомянута, чтобы подчеркнуть, что эта заметка, в первую очередь, предназначеная для биологов. Также поступают авторы соответствующих изданий: в названии они показывают, для какой аудитории предназначены их книги, и используют в тексте упрощения (минимум спец. символов и сложных формул в изданиях для биологов) или усложнения (доказательства теорем и выводы формул в изданиях для физиков).


Вид Южного берега Крыма

Основные понятия

Сырые данные
Сырыми назваются исходные непреобразованные данные. Это первичный материал как он есть, полученный в ходе наблюдений или эксперимента. Сырые данные считаются наиболее ценными, так как позволяют любому перепроверить результаты анализа или провести на их основе собственные исследования.

Объект и признаки
Объект — это то, что мы исследуем. Например, численность разных видов в сообществе, обилие вида в разных районах, совокупность абиотических и биотических характеристик в точке, признаки форм тела представителя вида, характеристики траектории движения микроорганизма.

Признаки объекта — это набор числовых значений, которые его описывают. Например:

  • объект численность видов сообщества в заданном районе описывается набором, состоящим из численности вида А, вида Б, вида В и т. д.
  • объект обилие вида в разных районах описывается набором, который содержит обилие вида в районе А, в районе Б, в районе В и т. д.
  • объект совокупность абиотических и биотических характеристик описывает значения этих характеристик в конкретной точке: значение характеристики А, характеристики Б, характеристики В и т. д.
  • объект признаки формы тела представителя вида описывает особенностями формы особи, выраженные какими-то числами, например — размерами: размер А, размер Б, размер В и т. д.
  • объект характеристики траектории движения микроорганизма описывает какие-то показатели траекторий, например: среднюю скорость, спрямленность, средний азимут движения и т. д.

С математической точки зрения признаки объекта — это вектор числовых или иных значений: текстовых, логических, прочих.

Позиция признаков
Позиция каждого признака в векторе строго фиксирована и ее нельзя изменить. Например, в признаках объектов сообщество X и сообщество Y на первом месте должна всегда стоять численность вида А, затем вида Б, потом В, — и их нельзя поменять местами. То же самое с объектами форма особи X, Y и Z: их вектора признаков должны на первом месте содержать размер А, потом Б, потом В и не иначе.



Матрица данных
Объекты и их признаки хранят в таблице — матрице. В большинстве статистических программ считается, что объекты хранятся в строках, а признаки — в столбцах. Это нужно помнить, когда вы формируете матрицу данных.

Обычно объекты — это строки, признаки — это столбцы матрицы данных.

Первая колонка матрицы данных часто содержит названия объектов, а первая строка — названия признаков.


Нулевые и отсутствующие признаки
Следует различать нулевое и отсутствующее значения признака. Когда значение какого-то признака объекта не известно, в векторе признаков в этой позиции ставят специальный символ отсутствия данных (это может быть просто пустое место), а ноль пишут только, когда зачение действительно равно нулю.

Когда значение признака нулевое — пишем ноль, а когде оно не известно — пишем специальный символ отсутствия данных.

Например, если вид А отсутствовал в заданной пробе, то в качестве значения численности мы пишем 0, а если он был, но численность его мы не измерили, то есть она не известна, то в качестве значения мы пишем символ отсутствия данных.

Узнайте в документации к статистической программе, какой символ используется для указания отсутствующих данных.


Дополнительное чтение

Признаковое описание объекта на сайте machinelearning.ru.

«Матрица „объекты × признаки“ является стандартным и наиболее распространённым способом представления исходных данных в задачах классификации и регрессии. Подавляющее большинство методов обучения приспособлены к обработке именно таких данных. Однако на практике встречаются задачи, в которых данные устроены сложнее. [...] В таких случаях по имеющимся исходным данным вычисляются некоторые признаки, что позволяет привести данные к стандартному матричному виду. Этот прием называется извлечением признаков из данных (features extraction) или генерацией признаков (features generation).»

«Любой алгоритм регрессии или классификации также может рассматриваться в роли признака. Хотя это наблюдение тривиально, оно дает ключ к построению суперпозиций или композиций алгоритмов. Всегда имеется возможность, построив один или несколько алгоритмов, присоединить их к признаковому описанию в роли новых признаков и использовать при построении следующего алгоритма.»



Если после прочтения этой прекрасной заметки вам вдруг непреодолимо захотелось меня поблагодарить, переведите мне 200 руб. на круасан с чаем. А я пока напишу что-то новенькое.

Написал скрипт для бинаризации видео движения микроорганизмов

Траектории движения микроорганизмов — легко доступный источник данных об их реакции на внешние условия. Траектории изучают по видеозаписям, которые обрабатывают специализированные программы трекинга.

К сожалению наши видео получаются низкоконтастными, поэтому программы трекинга не могут корректно выделить подвижные объекты.

По этой причине я написал скрипт, который переводит видео в черно-белый (бинарный) формат, что существенно улучшает заметность подвижных объектов.


Узнать больше и скачать скрипт.


Rесурсы. Хорошие книги для изучающих R

Обновлено 24 ноя 2023.


Собрал ссылки на хорошие книги по R. Все на английском языке. Все бесплатно доступны в онлайне, но также можно купить бумажные издания.

Для доступа к некоторым книгам понадобится Ви-Пи-Эн.

Использование R

Advanced R. Второе издание.
The book is designed primarily for R users who want to improve their programming skills and understanding of the language. It should also be useful for programmers coming to R from other languages, as help you to understand why R works the way it does.

R for Data Science. Второе издание.
This book will teach you how to do data science with R: You’ll learn how to get your data into R, get it into the most useful structure, transform it and visualize.

Дендрограммы

Data Integration, Manipulation and Visualization of Phylogenetic Trees.
Рассказывает как строить дендрограммы и филогенетические деревья с помощью пакета ggtree. Есть глава, где говорится как прикрутить картинки к дендрограмме.

Статистическое моделирование

Tidy Modeling with R.
This book is a guide to using a collection of software in the R programming language for model building called tidymodels, and it has two main goals:

  • First and foremost, this book provides a practical introduction to how to use these specific R packages to create models. We focus on a dialect of R called the tidyverse that is designed with a consistent, human-centered philosophy, and demonstrate how the tidyverse and the tidymodels packages can be used to produce high quality statistical and machine learning models.
  • Second, this book will show you how to develop good methodology and statistical practices. Whenever possible, our software, documentation, and other materials attempt to prevent common pitfalls.

Визуализация

R Graphics Cookbook. Второе издание.
A practical guide that provides more than 150 recipes to help you generate high-quality graphs quickly, without having to comb through all the details of R’s graphing systems. Each recipe tackles a specific problem with a solution you can apply to your own project, and includes a discussion of how and why the recipe works.

ggplot2: Elegant Graphics for Data Analysis. Третье издание.
While this book gives some details on the basics of ggplot2, its primary focus is explaining the Grammar of Graphics that ggplot2 uses, and describing the full details. It is not a cookbook, and won’t necessarily help you create any specific graphic that you need. But it will help you understand the details of the underlying theory, giving you the power to tailor any plot specifically to your needs.

Статьи

«Кто за всех решил, что Python удобен для „гражданской“ аналитики?», — объясняет, почему R лучше Питона.

Ранее Ctrl + ↓