11 заметок с тегом

анализ данных

Очень кратко о JSON Lines

jsonlines.org

Джисон-лайнс состоит из строк, разделенных символом новой строки \n.

Каждая строка является отдельным объектом джисон.

Джисон-лайнс можно обрабатывать построчно,
это основное достоинство формата.

jsonl — расширение файлов джисон-лайнс.


JSON

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

[
  {"id": 1, "position": [{"x": 17, "y": 256}], "status": "grow"},
  {"id": 2, "position": [{"x": 78, "y": 341}], "status": "sleep"},
  {"id": 3, "position": [{"x": 45, "y": 650}], "status": "moved"},
  ...
]

JSON Lines

Каждая строка — отдельный объект джисон; можем читать файл построчно.

{"id": 1, "position": [{"x": 17, "y": 256}], "status": "grow"},
{"id": 2, "position": [{"x": 78, "y": 341}], "status": "sleep"},
{"id": 3, "position": [{"x": 45, "y": 650}], "status": "moved"},
...
 Нет комментариев    8   14 дн   json   анализ данных

Добавляем рисунки к листьям дендрограммы. 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-кода ↓.

# Размер подписей на оси
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 руб. на чашеку кофе.

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

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

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


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

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


Бутстреп

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

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

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

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

Хеш — это математическое преобразование, переводящее произвольный входной массив данных в строку фиксированной длины, состоящую из букв и цифр. Хеш считается хорошим, если он устойчив к колизиям — это когда невозможно получить из различных входных последовательностей одинаковые хеши.
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

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

 Нет комментариев    44   10 мес   SHA-256   анализ данных   бутстреп   хеш

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

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


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


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

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

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

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

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

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

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

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

Для стандартизации ряда значений (строки или столбца) необходимо вычислить среднее \( \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 руб. на круасан с чаем. А я пока напишу что-то новенькое.

 Нет комментариев    20   11 мес   анализ данных   статистика

Хорошие книги для изучающих 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 лучше Питона.

Серия заметок об анализе траекторий движения протист


Последнее обновление 5 янв. 2024 года.

Планирую выпустить серию заметок про обработку видео с подвижными живыми микрообъектами. Мы хотим понять, как двигаются одноклеточные организмы (протисты) определенного вида при разных условиях, меняется ли что-то в их движении и что именно. Это наша задача.

Задача: определить, что меняется в движении протист при разных условиях

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


Оглавление серии

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


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


Немного о рутине

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


Необходимый софт

Для автоматизации рутины использую:

  • Пакетный файл Виндоус (батч-файл, bat-файл)
  • Баш (bash) Юникса для исполнения алгоритмов обработки видео и изображений;
  • FFmpeg для автоматической работы с видео;
  • ImageMagick для автоматической обработки изображений кадров;
  • Fiji для построения траекторий.
  • Эр для выделения объектов на кадрах и построения траекторий движения объектов.

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


Занесите заметку в закладки, чтобы не потерять.


Дисперсионный анализ средних длин раковин моллюсков

Коллега попросил помочь с выполнение дисперсионного анализа. Рассказываю, что получилось.

У нас есть три ряда длин раковин моллюсков, полученные в три разных года: 1981, 1998 и 2012. Мы хотим узнать, есть ли статистически достоверное различие между средними длинами в каждый период или нет? Расскажу, как это сделать.

Фрагмент исходных данных

Сначала посмотрим на статистическое описание данных.

Средние и медианы неплохо отличаются, наверное различия все-таки есть.

Потом построим диаграммы размахов, в простонародье — ящики с усами.

Второй и третий ящики практически полностью пересекаются с первым. Значит различия недостоверны?

Теперь попробуем попарно сравнить средние при помощи t-теста стьюдента: первое со вторым, второе с третьим и третье с первым. Наши данные независимы, потому что мы каждый раз измеряли разных моллюсков. Значит применим t-тест для независимых выборок. Но предварительно проверим данные на нормальность. Если выборки имеют нормальное распределение, используем t-тест. Если ненормальное, прочитаем Сергея Мастицкого (стр. 36):

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

Вперед.

Попарные сравнения u-тестом манна-уитни

Попарные сравнения показали отличия средних.

А теперь читаем книгу Мастицкого уже на стр. 43:

Тесть стьюдента и его непараметрические аналоги предназначены для сравнения исключительно двух выборок. Очень часто исследователи допускают ошибку: используют t-тест для попарных сравнений более двух выборок.

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

Для избежания данной ошибки необходимо использовать дисперсионный анализ.

Алилуя! Но теперь надо прочитать хорошие книги о дисперсионном анализе?

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

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

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

Но тот-кто-знает, что «интерфейс — зло» и «потеть должна машина», тот выберет способ «нажал на кнопку и получил развернутый ответ». Мозги, в этом случае, пригодятся для интерпретации ответа.


Пирамида Лебедева

Выбирайте сами. И, да — это не реклама Сигмаплота. Просто мне понравилось, как он интерпретировал результат.

Книги, в любом случае, читать полезно.

Книги о дисперсионном анализе

М. попросила проверить, достоверно ли различие между длинами раковин моллюсков? Причем с помощью дисперсионного анализа. А я, как это бывает, позабыл как его выполнить. Чтобы вспомнить, принялся читать книги. И родился у меня рейтинг прочитанного.

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

Многоразовые книги

Мастицкий С. Э. (2009) Методическое пособие по использовании программы Statistica при обработке данных биологических исследований. Минск: Ин-т рыбного хозяйства.

Прекрасное руководство для прикладных статистов.

Автор кратко описывает для каких рядов данных подходит тот или иной прием и рассказывает, как их выполнить в «Статистике». Книга полезна, даже если вы не используете «Статистику».





Любищев А. А. (1986) Дисперсионный анализ в биологии. М.: Изд-во Моск. ун-та.

О том как планировать эксперименты и интерпретировать результаты без помощи компьютера.

Книга написана в середине 20-го века. Написано легко, с разбором многочисленных примеров и методикой ручных вычислений. Буду не раз к ней возвращаться.





Плохинский Н. А. (1960) Дисперсионный анализ. Новосибирск: Изд-во СО АН СССР.

Дисперсионный анализ на бумаге.

Ясно и прекрасно.





Одноразовые книги

Аренс Х., Лёйтер Ю. (1985) Многомерный дисперсионный анализ / Пер. с немецкого. М.: Финансы и статистика.

Полезно, кратко, по делу.

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





Маркова Е. В., Денисов В. И., Полетаева И. А., Пономарев В. В. (1982) Дисперсионный анализ и синте планов на ЭВМ. М.: Наука.

За деревьями леса не видно.

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





Шеффе Г. (1980) Дисперсионный анализ / Пер. с английского. Изд. второе. М.: Наука. Гл. ред. физ.-мат. лит-ры.

Сложно, для истинных математиков.

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





Яковлев В., Яковлева О. (2015) Дисперсионный анализ в Excel. Lap Lambert Acad. Publ.

Хрень полная.

Не тратьте время — выбрасывайте в корзину, не читая.





Рейтинг отражает мое лично впечатление от указанных книг. Ваше мнение может быть другим.



Читайте книги.

Общие впечатления от книги В. Л. Андреева «Анализ эколого-географических данных с использованием теории нечетких множеств»

Ленинград: Наука, 1987.

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

Тут логично предположить, что степень принадлежности — это обычная вероятность. Например число от 0 до 1, которое показывает с какой вероятностью данный объект относится ко множеству. Но это не так.

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

Функция принадлежности — не обязательно строгая количественная мера. Позволяет (субъективно) оценивать, насколько сильно элемент принадлежит к заданному множеству.

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

Книга содержит семь глав.

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

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

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

Четвертой глава содержит формальное описание наиболее употребительных отношений между реальными объектами: отношений сходства и оригинальности.

Пятая глава посвящена вопросам нечеткой классификации объектов; в ней даны приемы описания одних признаков объектов через другие.

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

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

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

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

Математика в книге есть, но она доступна для понимания, если разобраться. В книге приведены коды подпрограмм на Фортране, которые помогают понять описанные методы.

Автономность книги означает возможность ее проработки без обращения к дополнительным источникам. От читателя не требуется специальных знаний в какой-либо области математики: достаточно лишь общелогической культуры мышления и известной доли терпения.

Рекомендую.