Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости

Всем доброго времени суток! С вами Яруллина Ляйсян!

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

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

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

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

На что способен Statannotations?

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

- Диаграмма размаха (или «ящик с усами»):

Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости

- Столбчатая диаграмма:

Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости

- Strip plots (одномерная диаграмма рассеяния):

Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости

- Swarm plots (одномерная диаграмма рассеяния без перекрывания точек):

Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости

- Скрипичная диаграмма:

Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости

При этом в пакете интегрированы такие статистические тесты, как:

· Критерий Манна-Уитни;

· t-критерий Стьюдента;

· t-критерий Уэлча;

· Тест Левена;

· Критерий Вилкоксона;

· Критерий Краскела-Уоллиса;

· Тест Бруннера-Мюнцеля.

Кроме того, Statannotations позволяет вводить поправку на множественное сравнение гипотез, используя такие методы коррекции, как:

· Поправка Бонферрони («bonf»);

· Поправка Бенджамини-Хохберга («BH»);

· Метод Холма-Бонферрони («HB»);

· Поправка Бенджамини-Екутиэли («BY»).

Данный пакет представляет умную компоновку нескольких аннотаций с правильными смещениями по оси Y. Поддерживаются как вертикальная, так горизонтальная ориентации комментариев. Также аннотации могут располагаться как внутри графика, так и за его пределами, во втором случае не нарушая его размерностей. Формат комментариев можно настроить: он может быть звездчатым либо в виде p-значения. Кроме того, имеется множество других параметров, с которыми можно ознакомиться в документации.

Для полного понимания работы действия пакета Statannotations рассмотрю его применение на графиках, описывающих реализацию астроцитарной сети головного мозга. Данные по активности были получены путем графового анализа видеозаписи жизнедеятельности клеток головного мозга мышей. Это исследование проводилось для изучения изменения сетевых характеристик астроцитарной культуры головного мозга при моделировании старения. Как думаете, почему именно астроциты, а не всем известные нейроны? Потому что именно астроцитарная сеть отвечает за поддержание работы нейронов, их питание, свойства окружающей среды, проводимость и т.д. Поэтому старение астроцитов – «нянек» – неизменно влияет на старение нейронов и возникновение возрастных заболеваний. Итак, у нас есть график, составленный при помощи Seaborn:

fig, axs = plt.subplots(1, figsize=(5, 4), dpi=300) sns.set_palette(rotate(sns.color_palette("Set1", 12), 0)) bx = sns.boxplot(data=df_ins_outs, x="group", y="insouts", width = 0.5, boxprops=dict(alpha=.5), ax = axs) sns.swarmplot(x = "group", y = "insouts", data = df_ins_outs, ax = axs, size = 4) for i, box in enumerate(bx.artists): color = box.get_facecolor() color = list(color) color[3] = 0.8 box.set_edgecolor([.3,.4,.5,.6]) box.set_linewidth(1) for j in range(i*6,i*6+6): bx.lines[j].set_color(color) bx.lines[j].set_mec(color) bx.lines[j].set_mfc(color) bx.lines[j].set_linewidth(1) plt.yscale('log') axs.set_xticklabels(captions, fontsize = 10) axs.set_ylabel('Среднее число периодически\n-возникающих связей на клетку', fontsize = 10) axs.set_xlabel('')

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

Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости

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

Для начала устанавливаю Statannotations, используя pip:

pip install statannotations

Либо conda:

conda install -c conda-forge statannotations

1. Первым шагом импортирую Аннотатор:

from statannotations.Annotator import Annotator

2. Затем выявляю группы, которые необходимо сравнить, формируя список кортежей. Их можно записать в отдельную переменную.

[("Control", "Hyp"), ("Control", "Hyp old"), ("Control", "Int old"), ("Hyp", "Hyp old"), ("Hyp", "Int old"), ("Hyp old", "Int old")]

3. Третьим шагом создаю экземпляр Аннотатора, все параметры которого передаются в Seaborn:

annot = Annotator(axs, [("Control", "Hyp"), ("Control", "Hyp old"), ("Control", "Int old"), ("Hyp", "Hyp old"), ("Hyp", "Int old"), ("Hyp old", "Int old")], data=df_ins_outs, x="group", y="insouts", order=group_names)

4. Для выбора теста («test»), поправки («comparisons_correction»), формата комментариев («text_format»), их расположения («loc») и др. параметров используется .configure:

annot.configure(test='Mann-Whitney', comparisons_correction="Bonferroni", text_format ="star", loc='inside', verbose=2, line_width=0.5, fontsize = 7) annot.apply_test()

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

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

axs, test_results = annot.annotate()
Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости
Гарант качества визуализации данных: простое внедрение аннотаций статистической значимости

Исходя из легенды аннотаций p-значений, становится ясно, чем больше звезд располагается между группами, тем выше статистическая значимость их различий. При этом сами p-значения сильно снижаются. Так же визуально можно наблюдать, что старение сильно ухудшило количество периодически возникающих связей на клетку, что указывает на снижение интенсивности работы каждой активной клетки в культуре. Аннотация показывает, что эти изменения существенны. Если рассмотреть средние значения внутри одной группы – молодых клеток, например, то можно наблюдать снижение, которое с точки зрения статистики не оказалось значимым. Если бы пакет Statannotations не был использован, график был бы интерпретирован неверно, что может привести к серьезным ошибкам в анализе тех или иных изменений значений в последующих исследованиях.

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

Примечание:

Возможно, вам было бы интересно ознакомится с исследованием, на которое я ссылаюсь.

Mitroshina E. V. et al. Unravelling the Collective Calcium Dynamics of Physiologically Aged Astrocytes under a Hypoxic State In Vitro //International Journal of Molecular Sciences. – 2023. – Т. 24. – №. 15. – С. 12286.

11
Начать дискуссию