Итак, дорогие читатели! Сейчас я обучаюсь на 4 курсе (бакалавр) на программиста (направление: Информатика и вычислительная техника) в семестре столкнулся с очень интересным исследовательским проектом, связанным с биоинформатикой! Вместе с заказчиком мы ему дали научное название: "Снижение рисков развития рецидива злокачественного новообразования" и отправляем в долгое плавание!

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

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

Вперед, погнали! Для начала у многих могут возникнуть вопросы, к примеру "Почему ты взялся за биоинформатику?" или "А откуда заказчик и для чего ему такой проект?". Отвечу на эти вопросы сразу на берегу: анализ биологических данных мне был интересен еще со школы, наверно, я один из первых, кто заучил правило комплементарности оснований: тимин (T) связывается с аденином (A) и между ними образуется две водородные связи, а цитозин (C) связывается с гуанином (G) и образуется их целых три! В РНК (рибонуклеиновая кислота) тимин заменяется на урацил (вместо T теперь пишем U). Это база. Но к чему все эти слова, когда твой биолог плачет? (Я между прочим сейчас не про заказчика, а про своего внутреннего биолога). В общем, я слабо прикасался к биологии все первые три курса университета, а на последнем очень сильно загорелся. А вот заказчик мой - настоящий биолог, доцент института ХТИ в УрФУ, его заинтересованность мне стала понятна: он хочет популяризовать биоинформатику в моем вузе. А также, насколько мне известно, он сотрудничает с медиками, проводит исследования и пытается делать науку не только достоянием "кабинетных ученых". Наука ради науки, так же как и программирование ради программирования - звучит депрессивненько. Открытия и нужны для совершенствования мира, как двигатель прогресса. Представьте, если в России появится возможность делать полную "экспертизу" генома людей с четкими рекомендациями, с этой помощью можно будет по мутациям определять риск возникновения того или иного заболевания. Взял как пример, но с рецидивами рака также.

Основы канцерогенеза

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

Пошаговая инструкция для мятежников

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

Инициация: искра революции (1 этап)

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

Мутации касаются "ключевых генов". Среди них различают:

  • Онкогены (например, RAS) — это активаторы, которые подгоняют клетку к делению.

  • Супрессоры опухолей (например, TP53) — защитники, которые обычно тормозят этот процесс.

  • Гены репарации ДНК — те, кто исправляет ошибки. Если они "ломаются", процесс становится неконтролируемым.

Промоция: революция набирает обороты (2 этап)

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

Немного юмора
Немного юмора

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

Прогрессия: захват власти (3 этап)

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

Аналогия с экспансией
Аналогия с экспансией

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

Это как если бы революция в одном городе стала мировой. Безумие, не правда ли?

Хрупкий баланс между хаосом и порядком

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

  • Апоптоз (запрограммированная смерть клеток) - "самоуничтожение" клеток, которые осознали, что сбились с пути. Всё происходит аккуратно, без лишнего шума. Почти как харакири.

  • Иммунная система - стражи всегда начеку. Они распознают аномальные клетки и уничтожают их до того, как они устроят хаос.

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

Канцерогенез - это не приговор

Рак кажется врагом, которого невозможно победить. Но это не так. Каждая стадия канцерогенеза — это ещё один шанс вмешаться: устранить канцерогены (например, перестать курить), вмешаться на стадии промоции (использовать лекарства, которые блокируют рост опухоли), остановить прогрессию (применить таргетную терапию, направленную на раковые клетки).

Еще пара терминов

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

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

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

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

Обзор проекта: снижение рисков развития рецидива

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

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

Хочу немного добавить, что на основе моего проекта-исследования, вы сможете сами быстро приноровиться описывать концепции, заниматься проектированием, поиском нужных данных, а также их анализом и документированием. Говоря другими словами, сможете пройти цикл разработки исследовательских проектов. Мой проект всего лишь является примером, а для кого-то может и шаблоном для углубления знаний в предметной области.

Кто мы? Команда

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

Если коротко говорить о нас и о нашей роли в исследовании:

  • Состав команды - 2 человека: это я и мой сокомандник;

  • Наши роли часто были взаимозаменяемы, но как и везде включали в себя следующие компетенции (Биоинформатик, Аналитик данных, Data Science, Project Manager).

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

Концепция и проектирование исследования

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

Вот именно на эту проблему мы и обратили свой пытливый научный взгляд. Почему рецидивы вообще возвращаются? Неужели они настолько скучают по организму? Или, может быть, мы не нашли ту самую "ядерную кнопку", которая раз и навсегда решит проблему? Спойлер: рецидивы сложны, хитры и невероятно многогранны. Но именно это делает их идеальным объектом для исследования.

Все началось с проблемы

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

Как сформулировать цель и причем тут проблема?

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

Вот, например, сидит такой пользователь и думает: "Как бы мне жить без этого нового чудо-продукта?" — и тут появляетесь вы с пониманием, что именно его гложет. Разобравшись, что жизненно необходимо этим людям (а в идеале и почему), вы магическим образом находите ответ на вопрос: "Зачем?"

Но не торопитесь ставить галочку — это только начало. После "зачем?" неизбежно всплывает следующий экзаменационный билет: "А каким образом вы собираетесь решать эту проблему?" И вот, отвечая на оба этих вопроса, вы наконец-то кристаллизуете цель.

Кстати, небольшой лайфхак для тех, кто только начал вникать в тему: цели желательно формулировать по методологии SMART — она как компас для заблудившихся. Но если это слишком скучно, можете попробовать другие подходы, ведь вариантов пруд пруди. Главное — не забывайте иногда отдыхать. Надеюсь, я вас этим спичем не слишком утомил!

Предложенное нами решение

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

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

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

Целевая аудитория: для кого мы делаем проект?

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

ЦА проекта
ЦА проекта

Главными героями этой истории становятся пациенты. После операции они хотят не просто вздохнуть с облегчением, но и знать, что рецидивы больше не постучатся в дверь. Вопросы пациентов вполне понятны: «Что мне делать, чтобы избежать возвращения болезни? Как мне это контролировать? И главное, почему опять брокколи вместо шоколада?»

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

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

Если вы из тех, кто любит разбирать данные, строить графики и кричать «Эврика!» посреди ночи — этот проект вам точно понравится. Мы предлагаем данные, методы и гипотезы, чтобы вы могли раздвигать границы науки. Кому‑то ведь нужно найти ту самую молекулярную кнопку «стоп» для рецидива.

Обзор конкурентных решений по снижению рецидива

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

Обзор аналогов снижения рецидива ЗН
Обзор аналогов снижения рецидива ЗН

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

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

Как анализировать конкурентов?

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

Самурай видит только путь...

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

  1. Поиск подходящих данных (TCGM, clinical data);

  2. Анализ различных признаков (в том числе и генетических);

  3. Формирование и проверка гипотез (стек: Python, RStudio, Bioconductor, Pandas и другие);

  4. Документирование рабочих гипотез.

Когда исследование — это не просто наука, а искусство

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

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

Data mining: искусство копателя

Итак, друзья, сейчас я расскажу вам о том, как добыть данные из сокровищницы под названием TCGA (The Cancer Genome Atlas). Да, это тот самый проект, который собирает, систематизирует и анализирует данные о раковых мутациях. Для начала — глубокий вдох, немного терпения и, конечно, переход на сайт TCGA.

На сайте нас встречает приветственный экран (всегда приятно, когда встречают). Немного пролистываем вниз, находим заветную кнопку "Access Data" и кликаем. Помните, что "Access" здесь — это не просто кнопка, а портал в мир огромного количества информации.

Главный экран сайта
Главный экран сайта

Теперь нам нужно в "Аналитический центр". Но прежде чем изучать графики и матрицы, создадим свою когорту. Когорта — это как ваша личная коробочка с данными, только больше и сложнее. С учётом того, что случаев (читай "кейсов") в базе более 44 тысяч, собирать всё подряд не стоит. Выбираем интересующие нас параметры через "Cohort Builder" и создаём выборку.

Переходим в Analysis Center
Переходим в Analysis Center

Кстати, интерфейс дружелюбный (ну, относительно). Если английский у вас на уровне "вчера выучил слово cohort" — не паникуйте, в помощь всегда есть Google Переводчик.

Создаем Cohort в Cohort Builder
Создаем Cohort в Cohort Builder

Переходим к настройкам: нас интересует RNA-seq (секвенирование РНК) и WGS (полногеномное секвенирование). Для этого тыкаем на соответствующие чекбоксы, при необходимости жмём "more" (потому что одного экрана данных явно мало). Вуаля, выборка обновлена, лишние кейсы отсеяны. Зачем это нужно? Чтобы не сходить с ума от десятков тысяч строк.

Переходим в Avalaible Data
Переходим в Avalaible Data

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

Выбираем вышеописанные методы
Выбираем вышеописанные методы

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

Снова переходим в Access TCGA Data
Снова переходим в Access TCGA Data

Клацаем в Mutation Frequency. Там нас уже заждались всеми любимые визуализации.

Mutation Frequency
Mutation Frequency

Смотрим графики по когорте и пытаемся разобраться с данными, которые находятся ниже.

График распределения мутаций и график выживаемости
График распределения мутаций и график выживаемости

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

Пример ужасного множества данных в выборке
Пример ужасного множества данных в выборке

А теперь уменьшаем выборку. И наконец, сохраняем обработанные данные. Формат — TSV, но для удобства перекидываем в CSV. Ура, файл с говорящим названием вроде HierClaster.2024-12-09.tsv уже на компьютере. Что в нём? Вещественные числа, показывающие корреляцию между генами. Этот файл пригодится для дальнейшего объединения с другими данными из TCGA. Например, в моём случае это были аликвоты.

Сохранение данных в формате TSV
Сохранение данных в формате TSV

Ну что ж, вот и всё! Теперь вы знаете, как справиться с этим квестом. А я пошёл готовить следующую порцию данных. Удачи в ваших исследованиях и помните: "Access Data" — это только начало!

Перевод файла из TSV в CSV формат

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

import pandas as pd
from google.colab import files

# Функция для преобразования TSV в CSV
def convert_tsv_to_csv():
    """
    Конвертирует загруженный TSV файл в формат CSV.
    Пользователь может загрузить файл с произвольным названием.
    """
    print("Загрузите ваш TSV файл:")
    uploaded = files.upload()  # Загрузка файла пользователем

    if uploaded:  # Проверяем, загружен ли файл
        # Получаем имя загруженного файла
        input_tsv = list(uploaded.keys())[0]
        print(f"Загружен файл: {input_tsv}")

        # Формируем имя для выходного CSV файла
        output_csv = input_tsv.rsplit('.', 1)[0] + '.csv'

        try:
            # Чтение TSV файла
            data = pd.read_csv(input_tsv, sep='\t')
            # Сохранение в формате CSV
            data.to_csv(output_csv, index=False)
            print(f"Файл успешно конвертирован: {output_csv}")

            # Скачать результат
            files.download(output_csv)
        except Exception as e:
            print(f"Ошибка при конвертации файла: {e}")
    else:
        print("Файл не был загружен.")

# Запуск функции
convert_tsv_to_csv()

Что такое аликвота и как она связана с онкологией и генами?

Если кратко: аликвоты — это транспортный кораблик, а гены — его драгоценный груз.

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

На практике это выглядит так. Вы делите оригинальный образец на несколько маленьких порций, каждая из которых становится самостоятельной исследовательской единицей. Например, у вас 10 мл ткани опухоли (да, звучит не очень аппетитно), вы делаете 20 аликвот по 0,5 мл и отправляете их в разные лаборатории для анализа. В одной лаборатории секвенируют РНК, в другой — ДНК, а в третьей... ну, просто смотрят, что получится.

Анализ онкологических и геномных данных

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

Гены: тайные дирижёры рецидивов

Вы когда-нибудь задумывались, кто заправляет всем этим хаосом под названием "рецидивы" в онкологии? Нет, это не ваши зловредные соседи или ретроградный Меркурий. Это гены. Те самые скромные молекулы ДНК, которые, как оказалось, обожают играть в ролевые игры и переодеваться в дирижёров, управляя оркестром нашего здоровья (или его отсутствия).

Ранее, мы уже разбирались, как эти молчаливые дирижёры умудряются исподтишка запускать симфонии рецидивов.

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

Известные гены в развитии рецидивов и их описание
Известные гены в развитии рецидивов и их описание

Экспериментальные данные и как с ними работать

Представьте, перед вами набор данных (dataset) и уже руки начинают трястись от страха, а глаза хотят не видеть этого. "Сколько же данных?" - первый возникающий вопрос. И вручную работать с ними возможно, но при этом бывает очень сложно. Есть такая область науки, а называется она Data Science. Концепции и подходы, которые содержатся в этой области, помогают при помощи довольно не сложных инструментов справляться с масштабными задачами и решать рутинные проблемы. Нашим фаворитом, среди кучи инструментов анализа данных становится - Google Collab (с легкостью запускается в браузере) и язык программирования Python. Среди прочего, очень сильное уважение заслуживает и язык R.

Признаки, которые станут помощником при поиске рецидивов
Признаки, которые станут помощником при поиске рецидивов

Попутно объясню выбор своих наборов данных:

  • msk_impact_2017_clinical_data.csv - клинические данные за 2017 год.

  • HierCluster.2024-12-09.csv - гены и их корреляция ( с сайта TCGA).

  • aliquot.csv - аликвоты пациентов (с сайта TCGA).

  • merged_data.csv - объединенные данные (между генами и корреляцией, и аликвотами по идентификаторам кейсам) для анализа.

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

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

Методы анализа и прочее
Методы анализа и прочее

Предобработка данных: приготовьте ручки

Что вы делаете, если ваша одежда испачкалась? Правильно! Чистите. С данными точно также, их нужно очищать от избыточного мусора, даже от его отсутствия: если в строках нет определенных данных, их нужно дополнять, или избавляться, словно вы профессиональный киллер. Как дополнить данные? В табличке (набор данных) у вас есть куча всяких чисел и циферок, по аналогии с другими числами и циферками, их можно усреднить (подобрать среднее значение, моду, медиану). И не забудем импортировать библиотеки языка Python, для работы с нашими данными. А теперь посмотрим на наши чудесные примеры:

# Импорт необходимых библиотек
import pandas as pd
from scipy.stats import ttest_ind
import statsmodels.api as sm
import numpy as np
# Загрузка данных
data = pd.read_csv('msk_impact_2017_clinical_data.csv')
# Очистка данных: удаление пропущенных значений в столбцах 'Mutation Count' и 'Overall Survival Status'
data_clean = data.dropna(subset=['Mutation Count', 'Overall Survival Status'])

# Преобразование статуса выживаемости в бинарные значения с использованием .loc
data_clean.loc[:, 'Survival_Status_Binary'] = data_clean['Overall Survival Status'].apply(lambda x: 1 if x == '0:LIVING' else 0)

# Разделение данных на группы: живые и умершие
alive_group = data_clean[data_clean['Survival_Status_Binary'] == 1]['Mutation Count']
deceased_group = data_clean[data_clean['Survival_Status_Binary'] == 0]['Mutation Count']


# Выполнение t-теста (независимый t-тест)
t_stat, p_value = ttest_ind(alive_group, deceased_group, equal_var=False)

# Вывод результатов
print("t-статистика:", t_stat)
print("p-значение:", p_value)

# Интерпретация
if p_value < 0.05:
    print("Разница в количестве мутаций между группами значима (p < 0.05).")
else:
    print("Разница в количестве мутаций между группами не является значимой (p >= 0.05).")
Вывод

t-статистика: 1.4543233492617522

p-значение: 0.14589623716291028

Разница в количестве мутаций между группами не является значимой (p >= 0.05).

Что же это означает? О чем нам пытаются донести представленные в выводе показатели? Представьте себе соревнование по перетягиванию каната: t-статистика измеряет, насколько одна сторона перевесила другую. Чем больше значение t, тем более значительная разница между группами (или командами). А p-значение - это вероятность того, что разница между группами возникла случайно. Если p-значение маленькое (меньше 0.05), значит, разница настоящая и значимая.

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

Идем дальше.

# Проверка на пропущенные значения
print(data[['TMB (nonsynonymous)', 'Tumor Purity', 'Mutation Count']].isnull().sum())

# Замена NaN и inf значений
data[['TMB (nonsynonymous)', 'Tumor Purity', 'Mutation Count']] = data[['TMB (nonsynonymous)', 'Tumor Purity', 'Mutation Count']].replace([np.inf, -np.inf], np.nan)
data = data.dropna(subset=['TMB (nonsynonymous)', 'Tumor Purity', 'Mutation Count'])

# Подготовка данных для логистической регрессии
X = data[['TMB (nonsynonymous)', 'Tumor Purity', 'Mutation Count']]
X = sm.add_constant(X)
y = data['Survival_Status_Binary']

# Построение модели
logit_model = sm.Logit(y, X)
result = logit_model.fit()
print(result.summary())
Вывод
Очень много интересных циферок
Очень много интересных циферок

Слишком много чисел, о нет! Классно, что сейчас все станет понятно.

TMB (nonsynonymous) и Mutation Count получили ведущие роли, ведь они влияют на сюжет. Отрицательный коэффициент (-0.279), статистически значимый (p < 0.001). Кажется, чем больше мутаций, тем хуже дела у пациента. Ну, логично — слишком много "багов" в генетическом коде явно не способствуют стабильной работе системы. В Mutation Count различим положительный коэффициент (0.2793), тоже значимый (p < 0.001). Чем больше мутаций в целом, тем выше шансы выживания — похоже, здесь раковые клетки теряют организованность и начинают "стрелять" вхолостую.

Tumor Purity даже не прошла прослушивание — роль слишком мала, и зритель её всё равно не заметит. Коэффициент минимальный (0.0003) и абсолютно незначимый (p = 0.797). Другими словами, чистота опухоли не впечатлила статистику и была ею отклонена как несущественный фактор.

Мутировать — это иногда плохо, а иногда... не так уж и плохо. Главное — делать это правильно и вовремя.

А что если попробовать отобразить таблицу в Google Collab? Не вопрос.

# Для отображения таблицы в Colab
from IPython.display import display
display(data_clean)
Вывод
Отображение части набора данных
Отображение части набора данных

Точно также, но для всего набора:

# Отображаем весь датасет
pd.set_option('display.max_rows', None)  # Разрешаем выводить все строки
pd.set_option('display.max_columns', None)  # Разрешаем выводить все столбцы

display(data_clean)  # Выводим датасет

Как интересно, а есть ли пропуски?

# Проверка на пропущенные значения
print(data_clean.isnull().sum())
Вывод

И все же, в некоторых столбцах нашлись пропущенные значения.

Пропущенные значения в столбцах
Пропущенные значения в столбцах

Самое время разобраться с типами данных. Тоже найдется несколько рекомендаций по работе с ними:

  • Превратить все объектные данные в категории или числа (хотя бы через OneHotEncoder).

  • Числовые данные почистить, проверить на выбросы и вернуть на танцпол.

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

# Проверка типов данных
print(data_clean.dtypes)
Вывод
Типы данных в клиническом наборе
Типы данных в клиническом наборе

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

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

# Проверка уникальных значений в категориальных признаках
print(data_clean['Cancer Type'].unique())
print(data_clean['Sex'].unique())
print(data_clean['Overall Survival Status'].unique())
Вывод

['Breast Cancer' 'Mesothelioma' 'Endometrial Cancer' 'Non-Small Cell Lung Cancer' 'Bladder Cancer' 'Hepatobiliary Cancer' 'Esophagogastric Cancer' 'Ovarian Cancer' 'Uterine Sarcoma' 'Germ Cell Tumor' 'Small Cell Lung Cancer' 'Sex Cord Stromal Tumor' 'Colorectal Cancer' 'Gastrointestinal Stromal Tumor' 'Cervical Cancer' 'Prostate Cancer' 'Pancreatic Cancer' 'Soft Tissue Sarcoma' 'Thyroid Cancer' 'Salivary Gland Cancer' 'Anal Cancer' 'Glioma' 'Head and Neck Cancer' 'Bone Cancer' 'Skin Cancer, Non-Melanoma' 'Renal Cell Carcinoma' 'Cancer of Unknown Primary' 'CNS Cancer' 'Melanoma' 'Nerve Sheath Tumor' 'Thymic Tumor' 'Adrenocortical Carcinoma' 'Histiocytosis' 'Appendiceal Cancer' 'Small Bowel Cancer' 'Gastrointestinal Neuroendocrine Tumor' 'Penile Cancer' 'Vaginal Cancer' 'Peripheral Nervous System' 'Wilms Tumor' 'Ampullary Cancer' 'Pheochromocytoma' 'Pineal Tumor' 'Miscellaneous Brain Tumor' 'Ampullary Carcinoma' 'Miscellaneous Neuroepithelial Tumor' 'Mastocytosis' 'Mature B-Cell Neoplasms' 'Embryonal Tumor' 'Sellar Tumor' 'Gestational Trophoblastic Disease' 'Mature T and NK Neoplasms' 'Non-Hodgkin Lymphoma' 'Adrenocortical Adenoma' 'T-Lymphoblastic Leukemia/Lymphoma' 'Leukemia' 'Retinoblastoma' 'Hodgkin Lymphoma']

['Female' 'Male']

['0:LIVING' '1:DECEASED']

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

В нашем наборе присутствуют:

  1. 54 различных типа рака.

  2. С полом вроде все понятно - разделение на женщин и мужчин.

  3. 0 означает, что пациент жив, а 1 - что умер.

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

# Описание статистических данных
print(data_clean.describe())
Вывод
Статистика по набору данных
Статистика по набору данных

Смотрим по порядку. Первое на что обращаем наш взор - это DNA Input. Количество данных: 10,943. Среднее значение: 238.6. Максимум: 250. В общем, это классический пример того, как данные, похоже, решили стать бесконечно стабильными. Даже скучновато. Все ровно, как в швейцарских часах. Похоже, здесь всё завязано на строгом протоколе измерений, где исключений — как в монастыре.

А теперь, посмотрим на Fraction Genome Altered, где среднее значение 19.5%, максимум — 100%. Кто-то из генома решил максимально измениться до неузнаваемости. Ощущение, что некоторые образцы изо всех сил хотели попасть на "генетический олимп". А вот стандартное отклонение (0.18) говорит, что большинство участников этой "вечеринки" всё же остались в пределах разумного.

В Mutation Count у нас среднее значение 7.13. А теперь внимание: максимум — 456! Тут явно кто-то переусердствовал. Возможно, это тот самый пациент, который решил взять от мутаций всё, что только можно. Интересно, что скажет модель на такие данные? Скорее всего, закатит глаза и попросит логарифмирования.

Посмотрим на Overall Survival (Months): средняя выживаемость — 12.45 месяца. Минимум — 0. Ну, тут всё грустно, кто-то не протянул даже до одного месяца. А максимум — 40.4. Вот это уже повод для оптимизма: кому-то удалось не только справиться, но и пожить полноценной жизнью в течение нескольких лет.

Что мы видим в Tumor Purity? Среднее значение — 45.6%. Вопрос: это уже хорошо или ещё не совсем? Диапазон от 10% до 100% явно намекает на разные подходы к взятию образцов. Возможно, кто-то решил "загрязнить" данные, чтобы добавить интриги. Или просто руки дрожали.

Еще нас очень интересует Survival_Status_Binary. Здесь среднее значение 0.715. Это значит, что почти 72% пациентов остались "в живых" в данных. А вот те 28%, которые стали "единичками", напоминают нам, что за числами стоят судьбы. Но компьютер это не волнует: для неё 0 и 1 — просто биты информации.

Представим, что это Tumor Purityзавод по производству чистоты опухоли, тогда:

# Проверка распределения данных
import matplotlib.pyplot as plt
data_clean['Tumor Purity'].hist()
plt.title('Tumor Purity Distribution')
plt.show()
Вывод
Распределение частоты опухоли
Распределение частоты опухоли

Завод явно перегружен на определённом участке (30-40%), а некоторые отделы работают на полсилы. Если бы это был реальный завод, владельцы задумались бы о реструктуризации. А в нашем случае — будем учитывать перекосы, чтобы обучить модель с максимальной точностью.

Ну что ж, таков мир статистики, где всё неожиданно становится чётким и красивым! Мы решили применить методику, столь важную для любой здравомыслящей души, которая не хочет жить в мире выбросов — конечно же, z-оценку. В качестве наших подопытных данных мы взяли такие чарующие показатели, как Mutation Count, TMB (nonsynonymous) и Tumor Purity.

Мы с безмерной гордостью загоняем данные в stats.zscore, чтобы вычленить те точки, которые так явно «выходят за рамки». Как только мы это сделаем, сразу поймём, кто из наших данных пытается казаться чем-то особенным, но на самом деле выглядит как одиночный странный элемент в куче весьма нормальных значений. Z-оценка скажет нам, какие значения убегают на пару стандартных отклонений от всей остальной толпы.

В конечном итоге мы получим список, где по каждому значению будет своя «зачётная» оценка. Ну а если z-оценка больше 3 или меньше -3, то это будет нашим тревожным звоночком.

# Проверка на выбросы
from scipy import stats
print(stats.zscore(data_clean[['Mutation Count', 'TMB (nonsynonymous)', 'Tumor Purity']]))

Зачем все эти сложности? Ну как же, с помощью этого можно разобраться, какие данные стоят в углу, переживают и пытаются «выглядеть круто». Но когда посмотрим на их z-оценку, всё станет на свои места: они либо статистически значимы, либо просто как тот парень, который на вечеринке громко говорит о своём опыте с машинным обучением, но на деле так и не научился делать нормальные прогнозы.

А вот и момент истины — корреляционный анализ. Этот волшебный инструмент, словно детектив, помогает нам понять, кто с кем в данных ходит за руку, а кто оставляет за собой следы одиночных прогулок. Мы решили, что «Mutation Count», «TMB (nonsynonymous)» и «Tumor Purity» достойны нашего внимания, и не ошиблись.

# Корреляционный анализ
correlation_matrix = data_clean[['Mutation Count', 'TMB (nonsynonymous)', 'Tumor Purity']].corr()
print(correlation_matrix)
Вывод
Матрица корреляций
Матрица корреляций

Что же происходит, когда мы запускаем .corr()? На выходе появляется матрица корреляций, которая словно диковинный ковер, на котором раскладываются отношения между нашими величинами.

Итог таков:

  • Высокая корреляция между Mutation Count и TMB (nonsynonymous) говорит о том, что эти два признака можно рассматривать как взаимозаменяемые для модели, поскольку они тесно связаны.

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

Вот и момент для тщательной перепроверки наших категориальных данных — самые неожиданные герои нашего исследования. Мы открываем портал в мир Sample Type и Specimen Type, два столбца, которые, казалось бы, не могут быть более разные, но вот они — на виду. Пора взглянуть на их загадочные и многослойные статистики.

# Перепроверка категориальных данных
print(data_clean['Sample Type'].value_counts())
print(data_clean['Specimen Type'].value_counts())
Вывод
Перепроверка
Перепроверка

Primary явно выигрывает, и метастазы, хоть и присутствуют, но их меньше. И вот вам контекст — Resection и Biopsy в основном заполонили пространство, а вот остальные типы — редкие гости на празднике данных.

Таким образом, все эти перепроверки показывают, как, в общем-то, всё было ожидаемо: одни категории больше, другие меньше, но мы можем быть уверены, что наши данные обладают гармонией и балансом… за исключением вот этого одного CUSA. Наверное, он — тот странный персонаж, который на вечеринке всех пугает, но не перестаёт смеяться.

А вот и время для самой захватывающей проверки — дисбаланс классов! В данном случае мы пытаемся понять, насколько справедливо распределены данные между выжившими и невыжившими. Мы берём столбец Survival_Status_Binary и открываем завесу тайны.

# Проверка на дисбаланс классов (выживаемость)
print(data_clean['Survival_Status_Binary'].value_counts())
Вывод

Survival_Status_Binary

1 7830

0 3113

Name: count, dtype: int64

Так что тут всё становится на свои места: выживших больше, а невыживших — почти в два раза меньше. Кажется, что класс «выжил» явно будет доминировать в моделях машинного обучения, и наши алгоритмы могут легко попасть в ловушку, где они всегда будут предсказывать "выжил". Но это ещё не значит, что с этим ничего нельзя сделать — это всего лишь вызов для нашей модели.

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

Visual magic: как данные оживают на графиках и диаграммах

А теперь давайте поднимем завесу тайны и посмотрим, как же создаются эти визуальные чудеса! Ведь всё, что мы делаем, — это не просто магия, а настоящий код, который превращает скучные цифры в яркие картинки.

Мы подключаем библиотеки, и тут же начинаем создавать тот самый код, который превращает наши беспорядочные данные в нечто прекрасное. С первыми блоками кода вы уже познакомились. Но вот за визуализации отвечают библиотеки питона matplotlib и seaborn, они то нам и нужны!

# Установка библиотек (при необходимости)
!pip install pandas matplotlib seaborn scikit-learn lifelines

# Импорт библиотек
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from lifelines import KaplanMeierFitter

# Загрузка данных
from google.colab import files
uploaded = files.upload()  # Загрузите файл через интерфейс Google Colab
file_name = list(uploaded.keys())[0]

# Чтение файла
df = pd.read_csv(file_name)

# Проверка структуры данных
print("Столбцы в датасете:", df.columns.tolist())
print("Пример данных:")
display(df.head())

# Пример анализа: распределение выживаемости
if "Overall Survival (Months)" in df.columns and "Overall Survival Status" in df.columns:
    # Подготовка данных
    survival_data = df[["Overall Survival (Months)", "Overall Survival Status"]].dropna()

    # Разделение на группы
    kmf = KaplanMeierFitter()
    status_alive = survival_data["Overall Survival Status"] == "Alive"
    status_deceased = survival_data["Overall Survival Status"] == "Deceased"

    # Построение кривых выживаемости
    plt.figure(figsize=(10, 6))
    kmf.fit(survival_data["Overall Survival (Months)"][status_alive], label="Выжившие")
    kmf.plot_survival_function()

    kmf.fit(survival_data["Overall Survival (Months)"][status_deceased], label="Умершие")
    kmf.plot_survival_function()

    plt.title("Кривые выживаемости")
    plt.xlabel("Месяцы")
    plt.ylabel("Выживаемость")
    plt.grid()
    plt.show()

# Анализ мутаций и факторов риска
if "Mutation Count" in df.columns:
    plt.figure(figsize=(12, 6))
    sns.histplot(df["Mutation Count"], bins=50, kde=True)
    plt.title("Распределение количества мутаций")
    plt.xlabel("Количество мутаций")
    plt.ylabel("Частота")
    plt.grid()
    plt.show()
Вывод

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

Анализ набора данных и визуализации по нему
Анализ набора данных и визуализации по нему

Важно для понимания: здесь уже загружаем файл с генами и их корреляциями - HierCluster.2024-12-09.csv.

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

В этот раз мы погружаемся в мир группировки данных и создания барных графиков с использованием тех же библиотек: Matplotlib и Seaborn.

from matplotlib import pyplot as plt
import seaborn as sns
_df_4.groupby('Case').size().plot(kind='barh', color=sns.palettes.mpl_palette('Dark2'))
plt.gca().spines[['top', 'right',]].set_visible(False)
Вывод
Барное распределение
Барное распределение

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

Пример классической гистограммы:

from matplotlib import pyplot as plt
_df_0['H1-0'].plot(kind='hist', bins=20, title='H1-0')
plt.gca().spines[['top', 'right',]].set_visible(False)
Вывод
Классическая гистограмма
Классическая гистограмма

В результате на выходе мы получаем классическую гистограмму, которая помогает понять, как распределены значения в столбце 'H1-0'.

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

# Проверим наличие ключевых колонок
required_columns = [
    "Study ID", "Patient ID", "Cancer Type", "Overall Survival (Months)",
    "Mutation Count", "Tumor Purity", "TMB (nonsynonymous)", "Patient's Vital Status"
]

missing_columns = [col for col in required_columns if col not in data.columns]
if missing_columns:
    print(f"Отсутствуют столбцы: {missing_columns}")
else:
    print("Все необходимые данные присутствуют!")
Вывод

Все необходимые данные присутствуют!

Значит с данными все нормально. Переходим к следующей визуализации.

# Фильтрация данных для анализа выживаемости
if "Overall Survival (Months)" in data.columns and "Patient's Vital Status" in data.columns:
    survival_data = data[["Overall Survival (Months)", "Patient's Vital Status"]].dropna()
    survival_data["Event"] = survival_data["Patient's Vital Status"].apply(lambda x: 0 if x == "Alive" else 1)

    # Kaplan-Meier анализ
    kmf = KaplanMeierFitter()
    kmf.fit(survival_data["Overall Survival (Months)"], event_observed=survival_data["Event"])

    # Построение кривой
    plt.figure(figsize=(10, 6))
    kmf.plot_survival_function()
    plt.title("Кривая выживаемости Kaplan-Meier")
    plt.xlabel("Время (месяцы)")
    plt.ylabel("Выживаемость")
    plt.grid()
    plt.show()
Вывод

График наглядно представляет статистику, где показана максимальная выживаемость более 40 месяцев.

График выживаемости
График выживаемости

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

Сейчас мы рассмотрим гистограмму, которая помогает понять, как часто встречаются разные количества мутаций. Она даёт представление о том, какое количество мутаций характерно для большинства случаев, а какое — редкость. Как бы да, можно увидеть, что количество мутаций в опухолях обычно распределяется по интересному и иногда неожидаемому сценарию. А вместе с ней еще и обратим внимание на диаграмму размаха (boxplot), чтобы сравнить TMB (nonsynonymous) (количество мутированных нон-синонимичных точек) между разными типами рака.

# Гистограмма для количества мутаций
if "Mutation Count" in data.columns:
    plt.figure(figsize=(10, 6))
    sns.histplot(data["Mutation Count"].dropna(), bins=50, kde=True)
    plt.title("Распределение количества мутаций")
    plt.xlabel("Количество мутаций")
    plt.ylabel("Частота")
    plt.grid()
    plt.show()

# Boxplot для TMB по типам рака
if "Cancer Type" in data.columns and "TMB (nonsynonymous)" in data.columns:
    plt.figure(figsize=(12, 6))
    sns.boxplot(x="Cancer Type", y="TMB (nonsynonymous)", data=data)
    plt.title("Сравнение TMB между типами рака")
    plt.xticks(rotation=90)
    plt.grid()
    plt.show()
Вывод

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

Гистограмма распределения
Гистограмма распределения

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

Диаграмма размаха
Диаграмма размаха

Boxplot показывает, как значения TMB распределяются по различным типам рака. В коробке мы видим медиану, 25-й и 75-й перцентили, а также выбросы (если они есть). Такой график наглядно демонстрирует, насколько варьируется TMB среди разных типов рака.

Ну что ж, держитесь за свои аналитические кресла, потому что мы только что зашли на территорию корреляций — того самого таинственного места, где числа не только дружат, но иногда и обиженно игнорируют друг друга. Посмотрим, как ведут себя наши показатели: Mutation Count (количество мутаций), TMB (nonsynonymous) и Overall Survival (Months) (выживаемость в месяцах).

# Корреляция между количеством мутаций, TMB и выживаемостью
if "Mutation Count" in data.columns and "Overall Survival (Months)" in data.columns:
    correlation = data[["Mutation Count", "TMB (nonsynonymous)", "Overall Survival (Months)"]].corr()
    print("Корреляция между ключевыми показателями:")
    print(correlation)

# Визуализация корреляционной матрицы
    plt.figure(figsize=(8, 6))
    sns.heatmap(correlation, annot=True, cmap="coolwarm")
    plt.title("Корреляция между ключевыми характеристиками")
    plt.show()
Вывод
Корреляционные характеристики
Корреляционные характеристики
Тепловая матрица корреляций между признаками
Тепловая матрица корреляций между признаками

Визуализируем матрицу с помощью heatmap от Seaborn. Это график, который не только красиво переливается цветами, но и показывает всю эмоциональную динамику между нашими показателями:

  • Оттенки синего сигнализируют о нейтральности или негативе (чуть-чуть недолюбливают друг друга).

  • Оттенки красного кричат о дружбе и тесных связях.

Корреляционная матрица показывает: мир данных жесток. Даже если переменные работают в одном проекте, это ещё не значит, что между ними будет химия. Однако светлое будущее есть, по крайней мере для Mutation Count и TMB - у них довольно высокая корреляция.

Давайте же вернемся на шаг назад, чтобы сделать шаг вперед. Что я хочу этим сказать? Попробуем проанализировать данные для набора HierCluster.2024-12-09.csv и построить интересующие нас визуализации:

# Загрузка второго датасета с генами (например, HierCluster.csv)
gene_data_path = 'HierCluster.csv'  # Поменяйте путь на актуальный
gene_data = pd.read_csv(gene_data_path)

# Просмотр структуры данных
print("Информация о датасете с генами:")
print(gene_data.info())

# Первые строки датасета
print("\nПервые строки датасета с генами:")
print(gene_data.head())
Вывод
Вывод информации о наборе данных
Вывод информации о наборе данных

Количество строк: 999 — почти тысяча образцов. С учётом их содержания можно сказать, что это своеобразный VIP-клуб клеточных данных. А количество колонок целая тысяча. Да, это не опечатка. Тут 1000 колонок, каждая из которых может рассказать о жизни и приключениях отдельного гена.

Среди типов данных выделяется object (это колонка Case, видимо, с уникальными идентификаторами). А остальные - это float64, в которых хранятся числовые данные, возможно, экспрессия генов или их магические коэффициенты.

Добавляем еще и аликвоты для объединения наборов данных:

# Импортируем библиотеки
import pandas as pd

# Пути к файлам
hier_cluster_path = '/content/HierCluster.2024-12-09.csv'  # Замените на путь к файлу
aliquot_path = '/content/aliquot.csv'  # Замените на путь к файлу

# Загрузка данных
hier_cluster_data = pd.read_csv(hier_cluster_path)
aliquot_data = pd.read_csv(aliquot_path)

# Преобразование идентификаторов для объединения
hier_cluster_data['case_submitter_id'] = hier_cluster_data['Case'].str.extract(r'([A-Z]+-\d+-\d+)')

# Объединение данных
merged_data = pd.merge(hier_cluster_data, aliquot_data, on='case_submitter_id', how='inner')

# Преобразование столбца aliquot_volume в числовой формат, некорректные значения заменяются на NaN
merged_data['aliquot_volume'] = pd.to_numeric(merged_data['aliquot_volume'], errors='coerce')

# Проверка числовых данных в aliquot_volume
print("Aliquot volume column statistics:")
print(merged_data['aliquot_volume'].describe())

# Обработка данных: выберем только числовые столбцы генов
gene_columns = hier_cluster_data.columns[1:-1]  # Все генные данные, кроме идентификаторов
gene_data = merged_data[gene_columns].apply(pd.to_numeric, errors='coerce')  # Убедимся, что данные числовые

# Вычисление корреляции между экспрессией генов и объемом аликвот (aliquot_volume)
correlations = gene_data.corrwith(merged_data['aliquot_volume'])

# Вывод генов, которые наиболее снижают риск (наибольшая отрицательная корреляция)
print("\nTop genes reducing recurrence risk:")
top_genes = correlations.nsmallest(10)
print(top_genes)

# Сохранение результатов в файл
output_path = 'gene_correlations.csv'
top_genes.to_csv(output_path, header=['Correlation'])
print(f"Results saved to {output_path}")
Вывод
Aliquot volume column statistics:
count    8738.000000
mean       86.155031
std       135.851513
min         0.000000
25%        13.300000
50%        20.000000
75%        60.000000
max       400.000000
Name: aliquot_volume, dtype: float64

Top genes reducing recurrence risk:
EPAS1     -0.067053
PIK3CD    -0.049461
ZFP36L2   -0.048634
CTSZ      -0.047241
IRAK3     -0.046510
EGFR      -0.046241
TEAD1     -0.045632
ITGA4     -0.043515
ADGRF5    -0.042697
EFEMP1    -0.041847
dtype: float64
Results saved to gene_correlations.csv

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

Что произошло с данными? Из колонки Case в генетическом датасете извлекли идентификатор образца (case_submitter_id). Да-да, это как вырезать из билета только номер. Затем объединили два датасета по этому идентификатору. Теперь у нас одна большая таблица, где рядом стоят гены и данные о химии.

Результаты экспортируются в файл gene_correlations.csv, а объединенный датасет в файл merged_data.csv, потому что всё хорошее нужно сохранять. Вдруг завтра придётся защищать диссертацию или писать грант?

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

# Топ-10 генов с самой высокой корреляцией
top_10_genes = data.sort_values(by='Correlation', ascending=False).head(10)
print(top_10_genes)
Вывод

№ Gene Correlation

92 HSPB1 0.064304

654 PSAT1 0.064086

41 GSTP1 0.061594

674 MTRNR2L12 0.058015

531 UCP2 0.057036

775 HBA2 0.053303

524 CYSTM1 0.053117

833 JUND 0.052459

582 PPDPF 0.048373

663 PTMS 0.046419

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

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Пути к файлам
hier_cluster_path = '/content/HierCluster.2024-12-09.csv'  # Замените на путь к файлу
aliquot_path = '/content/aliquot.csv'  # Замените на путь к файлу

# Загрузка данных
hier_cluster_data = pd.read_csv(hier_cluster_path)
aliquot_data = pd.read_csv(aliquot_path)

# Преобразование идентификаторов для объединения
hier_cluster_data['case_submitter_id'] = hier_cluster_data['Case'].str.extract(r'([A-Z]+-\d+-\d+)')

# Объединение данных по идентификатору case_submitter_id
merged_data = pd.merge(hier_cluster_data, aliquot_data, on='case_submitter_id', how='inner')

# Преобразование столбца aliquot_volume в числовой формат, некорректные значения заменяются на NaN
merged_data['aliquot_volume'] = pd.to_numeric(merged_data['aliquot_volume'], errors='coerce')

# Выбираем только числовые столбцы с данными о генах
gene_columns = hier_cluster_data.columns[1:-1]  # Все генные данные, кроме идентификаторов
gene_data = merged_data[gene_columns].apply(pd.to_numeric, errors='coerce')  # Убедимся, что данные числовые

# Вычисление корреляции между всеми генами
correlation_matrix = gene_data.corr()

# Построение тепловой карты
plt.figure(figsize=(16, 12))
sns.heatmap(correlation_matrix, annot=False, cmap='coolwarm', fmt='.2f', cbar_kws={'label': 'Correlation coefficient'})
plt.title('Gene Expression Correlation Heatmap')
plt.show()
Вывод

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

Тепловая матрица корреляции генов
Тепловая матрица корреляции генов

Любые нецифровые значения в колонках генов — это как шум на радио. Мы избавились от такого «мусора», превратив данные в формат float, а всё сомнительное заменили на NaN. Всё для того, чтобы корреляции не лгали. Затем мы взяли числовые данные о генах и запустили их через .corr(). Эта функция вычисляет коэффициент корреляции для каждой пары генов:

  • Близко к +1: два гена работают в унисон, как идеальные партнёры.

  • Близко к -1: гены — заклятые враги, один работает только тогда, когда другой отдыхает.

  • Около 0: каждый сам по себе, общение минимальное.

Таким образом, тепловая карта превращает эти цифры в яркую мозаичную картину. Синие квадраты показывают отрицательные связи, красные — положительные, а белёсые промежутки — нейтральность. Видите кластеры из красных квадратиков? Это гены, которые образуют команды. Они действуют сообща, поддерживая друг друга — возможно, в процессе роста опухоли, воспаления или борьбы с вирусами. Их корреляция близка к +1. А вот синие регионы — это настоящие фронты противостояния. Гены подавляют друг друга: один включается, второй уходит в спячку. Типичный пример — антагонисты роста и деления клеток. Большая часть карты — хаотичная нейтральность. Просто гены, которые друг друга просто игнорируют, как случайные попутчики в метро.

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

import seaborn as sns
import matplotlib.pyplot as plt

# Рассчитываем корреляцию между генами и объемом аликвот
selected_genes_data = merged_data[genes]
correlation_matrix = selected_genes_data.corrwith(merged_data['aliquot_volume'])

# Создание тепловой карты
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix.to_frame(), annot=True, cmap='coolwarm', fmt='.2f', cbar_kws={'label': 'Correlation coefficient'})
plt.title('Gene Expression Correlation with Aliquot Volume')
plt.show()
Вывод
Корреляция экспрессии генов с объемом аликвот
Корреляция экспрессии генов с объемом аликвот

Как рассчитывать корреляцию? Представьте сколько раз два человека кивают головой на встречах. Чем больше кивают вместе — тем больше корреляция. В данном случае, отрицательная корреляция (-0.05) означает, что при увеличении объема аликвот активность гена немного падает. Неудивительно, гены не любят быть разбавленными.

Итог:

  • Ген EPAS1 не любит большие объемы (ну а кто бы любил).

  • Гены CTSZ и EGFR решили быть политкорректными, но все же слегка поддерживают негодование EPAS1.

  • Остальные гены притворяются, что им всё равно, но мы-то знаем правду.

Становится интересно? И вот перед нами диаграмма рассеяния, которая пытается рассказать нам историю про то, как ген EPAS1 взаимодействует с объёмом аликвот.

import matplotlib.pyplot as plt

# Гены для анализа
genes = ['EPAS1', 'PIK3CD', 'ZFP36L2', 'CTSZ', 'IRAK3', 'EGFR', 'TEAD1', 'ITGA4', 'ADGRF5', 'EFEMP1']

# Создание графиков рассеяния для каждого гена
for gene in genes:
    plt.figure(figsize=(8, 6))
    plt.scatter(merged_data[gene], merged_data['aliquot_volume'], alpha=0.5)
    plt.title(f'Correlation between {gene} expression and aliquot volume')
    plt.xlabel(f'{gene} expression')
    plt.ylabel('Aliquot volume')
    plt.show()
Вывод
 Ген EPAS1 взаимодействует с объёмом аликвот
Ген EPAS1 взаимодействует с объёмом аликвот
Ген PIK3CD взаимодействует с объёмом аликвот
Ген PIK3CD взаимодействует с объёмом аликвот
Ген ZFP36L2 взаимодействует с объёмом аликвот
Ген ZFP36L2 взаимодействует с объёмом аликвот
Ген CTSZ взаимодействует с объёмом аликвот
Ген CTSZ взаимодействует с объёмом аликвот
Ген IRAK3 взаимодействует с объёмом аликвот
Ген IRAK3 взаимодействует с объёмом аликвот
Ген EGFR взаимодействует с объёмом аликвот
Ген EGFR взаимодействует с объёмом аликвот
Ген TEAD1 взаимодействует с объёмом аликвот
Ген TEAD1 взаимодействует с объёмом аликвот
Ген ITGA4 взаимодействует с объёмом аликвот
Ген ITGA4 взаимодействует с объёмом аликвот
Ген ADGRF5 взаимодействует с объёмом аликвот
Ген ADGRF5 взаимодействует с объёмом аликвот
Ген EFEMP1 взаимодействует с объёмом аликвот
Ген EFEMP1 взаимодействует с объёмом аликвот

На оси X — уровни экспрессии гена EPAS1 и далее (от "практически молчания" до "кричащего актива"), на оси Y — объём аликвот (величина, которая может быть индикатором биологического материала). Перед нами диаграммы рассеяния, которые пытаются рассказать нам историю про то, как ген EPAS1 и другие гены взаимодействуют с объёмом аликвот.

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

# Строим гистограмму для каждого гена
for gene in genes:
    plt.figure(figsize=(8, 6))
    plt.hist(merged_data[gene].dropna(), bins=30, alpha=0.7, color='skyblue')
    plt.title(f'Distribution of {gene} Expression')
    plt.xlabel(f'{gene} Expression')
    plt.ylabel('Frequency')
    plt.show()
Вывод
 Как часто значения экспрессии гена EPAS1 встречаются в данных
Как часто значения экспрессии гена EPAS1 встречаются в данных
Как часто значения экспрессии гена PIK3CD встречаются в данных
Как часто значения экспрессии гена PIK3CD встречаются в данных
Как часто значения экспрессии гена ZFP36L2 встречаются в данных
Как часто значения экспрессии гена ZFP36L2 встречаются в данных
Как часто значения экспрессии гена CTSZ встречаются в данных
Как часто значения экспрессии гена CTSZ встречаются в данных
Как часто значения экспрессии гена IRAK3 встречаются в данных
Как часто значения экспрессии гена IRAK3 встречаются в данных
Как часто значения экспрессии гена EGFR встречаются в данных
Как часто значения экспрессии гена EGFR встречаются в данных
Как часто значения экспрессии гена TEAD1 встречаются в данных
Как часто значения экспрессии гена TEAD1 встречаются в данных
Как часто значения экспрессии гена ITGA4 встречаются в данных
Как часто значения экспрессии гена ITGA4 встречаются в данных
Как часто значения экспрессии гена ADGRF5 встречаются в данных
Как часто значения экспрессии гена ADGRF5 встречаются в данных
Как часто значения экспрессии гена EFEMP1 встречаются в данных
Как часто значения экспрессии гена EFEMP1 встречаются в данных

Перед тем как с головой уйти в машинное обучение, ученые проверяют, как распределены данные. Вдруг тут кто-то шалит? Таким образом распределение экспрессии гена может намекнуть на его активность в определенных условиях (например, при заболеваниях или в процессе лечения). Например, PIK3CD известен своей ролью в клеточной сигнализации, так что его странное поведение может быть полезной подсказкой. Смелые значения справа (около 1.25) могут оказаться аномалиями. Или это супергены, которые хотят быть особенными.

Смотрим на ген PIK3CD, он явно не в настроении блистать своей экспрессией. Это видно по пику около -0.5. Также наблюдаются редкие, но смелые экземпляры с положительными значениями экспрессии. График немного скошен влево, что говорит о том, что отрицательные значения преобладают, но положительные тоже вносят вклад в статистику. Аналогично рассматриваем и графики с другими генами.

Линейные графики — это способ показать изменения данных во времени или вдоль упорядоченных индексов. Мы использовали их, чтобы понять, как ведёт себя экспрессия гена EPAS1. Если вы когда-нибудь задавались вопросом, что делают отдельные гены на "временной шкале", то этот график специально для вас.

# Пример линейного графика для каждого гена
for gene in genes:
    plt.figure(figsize=(10, 6))
    plt.plot(merged_data[gene].dropna().reset_index(drop=True), label=f'{gene} Expression')
    plt.title(f'Trend of {gene} Expression')
    plt.xlabel('Sample Index')
    plt.ylabel(f'{gene} Expression')
    plt.legend()
    plt.show()
Вывод
Линейный график, показывающий динамику уровня экспрессии гена EPAS1 по выборке
Линейный график, показывающий динамику уровня экспрессии гена EPAS1 по выборке
Линейный график, показывающий динамику уровня экспрессии гена PIK3CD по выборке
Линейный график, показывающий динамику уровня экспрессии гена PIK3CD по выборке
Линейный график, показывающий динамику уровня экспрессии гена ZFP36L2 по выборке
Линейный график, показывающий динамику уровня экспрессии гена ZFP36L2 по выборке
Линейный график, показывающий динамику уровня экспрессии гена CTSZ по выборке
Линейный график, показывающий динамику уровня экспрессии гена CTSZ по выборке
Линейный график, показывающий динамику уровня экспрессии гена IRAK3 по выборке
Линейный график, показывающий динамику уровня экспрессии гена IRAK3 по выборке
Линейный график, показывающий динамику уровня экспрессии гена EGFR по выборке
Линейный график, показывающий динамику уровня экспрессии гена EGFR по выборке
Линейный график, показывающий динамику уровня экспрессии гена TEAD1 по выборке
Линейный график, показывающий динамику уровня экспрессии гена TEAD1 по выборке
Линейный график, показывающий динамику уровня экспрессии гена ITGA4 по выборке
Линейный график, показывающий динамику уровня экспрессии гена ITGA4 по выборке
Линейный график, показывающий динамику уровня экспрессии гена ADGRF5 по выборке
Линейный график, показывающий динамику уровня экспрессии гена ADGRF5 по выборке
Линейный график, показывающий динамику уровня экспрессии гена EFEMP1 по выборке
Линейный график, показывающий динамику уровня экспрессии гена EFEMP1 по выборке

Перед нами линейный график, на котором показаны изменения экспрессии генов (далее рассмотрим на примере гена EPAS1) по образцам. Каждая точка на графике соответствует значению экспрессии для определённого индекса (образца).

Экспрессия гена колеблется как акции на бирже. Иногда она поднимается до 3 (высокая активность), а иногда падает почти до -1 (почти молчание). Также, несмотря на всплески, график демонстрирует, что большинство значений остаются в пределах от -1 до 1. А крупные пики, которые выбиваются из основного диапазона, могут быть вызваны специфическими условиями или техническими ошибками.

Давайте разберемся, зачем это нужно? Ну во-первых, такие графики помогают понять, насколько сильно активность гена меняется по выборке. Для EPAS1 это может быть важно, поскольку он участвует в процессах, связанных с кислородным гомеостазом. Во-вторых, может быть произведет поиск паттернов. Например, если вы увидите, что пики или провалы группируются в определённые участки графика, это может указывать на биологические закономерности. И в третьих всплески могут сигнализировать о проблемах в эксперименте или о необычных биологических явлениях. Это может говорить о выявлении аномалий.

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

Как корреляции помогают раскрыть тайны биологии

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

Ранее, мы составили два списка: топ-10 генов с положительной корреляцией (чем выше их экспрессия, тем больше аликвоты) и отрицательной корреляцией (чем выше их экспрессия, тем меньше аликвоты). Это и есть наши найденные гены. Рассмотрим их подробнее.

Топ-10 генов с положительной корреляцией:

Ген

Корреляция

Описание

HSPB1

0.064304

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

PSAT1

0.064086

Участвует в метаболизме серина. Может быть связан с ростом клеток при повышенной экспрессии.

GSTP1

0.061594

Участвует в детоксикации. Часто ассоциируется с сопротивляемостью к химиотерапии.

MTRNR2L12

0.058015

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

UCP2

0.057036

Ген отвечает за транспорт электронов и может участвовать в защите от окислительного стресса.

HBA2

0.053303

Ген, кодирующий альфа-глобин, ключевой компонент гемоглобина.

CYSTM1

0.053117

Связан с ответом клеток на окислительный стресс.

JUND

0.052459

Этот ген участвует в клеточной пролиферации, регенерации и дифференцировке.

PPDPF

0.048373

Ген участвует в метаболизме и дифференцировке клеток.

PTMS

0.046419

Этот ген кодирует белок, участвующий в регуляции трансляции.

Топ-10 генов с отрицательной корреляцией:

Ген

Корреляция

Описание

EPAS1

-0.067053

Ген, связанный с адаптацией к низкому уровню кислорода. Его экспрессия важна для регуляции гипоксии.

PIK3CD

-0.049461

Этот ген участвует в передаче сигналов и клеточной пролиферации. Мутировал в некоторых раках.

ZFP36L2

-0.048634

Регулятор транскрипции, участвует в стабилизации РНК.

CTSZ

-0.047241

Ген кодирует катепсин Z, фермент, участвующий в деградации белков и иммунном ответе.

IRAK3

-0.046510

Регулятор воспалительного ответа. Его высокая экспрессия может подавлять воспаление.

EGFR

-0.046241

Ген эпидермального фактора роста, ключевой в процессах роста и деления клеток.

TEAD1

-0.045632

Ген участвует в регуляции органогенеза и клеточной пролиферации.

ITGA4

-0.043515

Ген кодирует интегрин, участвующий в адгезии и миграции клеток.

ADGRF5

-0.042697

Ген из семейства рецепторов, участвующих в иммунном ответе.

EFEMP1

-0.041847

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

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

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

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

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

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

Комментарии (27)


  1. amazingname
    13.12.2024 20:29

    Вспоминаете, как это бывает на митингах?

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

    Но, как говорится, можно убрать себя от телевизора, но нельзя убрать телевизор из себя.


    1. YuriPanchul
      13.12.2024 20:29

      Коктейли молотова в офисах оппозиционных партий в вашу схему "сборища интеллигентов и маргиналов" вписываются?


      1. amazingname
        13.12.2024 20:29

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

        Ключевым моментом для попытки насильственной смены власти является раскол элит. Отколовшиеся элиты могут сверху организовать реальное сопротивление и насилие. А если говорить о том ”как бывает на митингах”, то эти люди ходят с шариками и флажками вечно, пока их не пересжают по одному, как показывает опыт России, Беларуси и Грузии, где были митинги без раскола в элитах.

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


        1. YuriPanchul
          13.12.2024 20:29

          Картинки горящих полицейских были в The New York Times (google "burning policement in kiev 2014"). The New York Times выдумывает такого рода информацию?

          А вообще я знаком с людьми с таких митингов, в том числе топами российкой оппозиции. По моей теории, их программа сводится к призывам "Слушайтесь Запад!", при этом они хотят стать своего рода посредниками, апостолами этого Запада, причем не всего Запада, а конкретно политического бомонда типа Нуланд, Блинкен, Макфол, с которыми находятся в симбиозе. У меня есть про это вот такая заметка - https://panchul.livejournal.com/615016.html


          1. amazingname
            13.12.2024 20:29

            А вы выше прочитали то что я писал про раскол элит? Протестующие люди (в наше время и с нашим менталитетом, не средневековые крестьяне) сами в своей массе психологически не склонны к деструктивным действиям. 99% из них держат в голове что-то вроде "я хороший, я буду соблюдать закон, мы ничего не поломаем, но то что происходит неправильно и я должен сделать свой вклад в протест как хороший гражданин, чтобы моя совесть была чиста, хотя мне страшно и очень не хочется". Если начинается реальная жесть со стороны властей, люди немного ожесточаются, но как правило не сильно. Если нужно реальное силовое сопротивление, то тут уже его надо организовать, и с этим никакая оппозиция никогда не справится, потому что она все больше состоит из того же рода людей с той же мотивацией. Для этого нужны люди уже имеющие отношение к власти и имеющие абсолютно реальные шансы на получение всей власти, примерно больше 50%. В частности по этим причинам на демократическом западе никто не боится митингов и не считает их угрозой государству или проблемой вообще.

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

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


  1. LavaLava
    13.12.2024 20:29

    Не увидел ничего про трансплантацию костного мозга. А именно изменение ДНК больного часто приводит к исчезновению некоторых видов рака.


    1. FeLkan Автор
      13.12.2024 20:29

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


  1. swenik
    13.12.2024 20:29

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

    На мой дилетантский взгляд, ваша работа очень нужная. Пока пыталась прочесть, всё время удивлялась, а оказывается, так можно было? Разные метрики посчитать и по полочкам разложить, что и почему? А говорят, медицина -- совершенно не точная наука. А что делать с людьми после химии, возможен ли похожий подход? Поймите меня пожалуйста правильно, я никакой помощи ни для кого не прошу, вопрос чисто академический. Просто интересно, если здесь уместно такое слово.

    Спасибо.


    1. FeLkan Автор
      13.12.2024 20:29

      Ваш вопрос абсолютно уместен, и спасибо за добрые слова — работа с данными в онкологии действительно важна. У меня из окружения близких людей тоже есть человек с онкологическим заболеванием. Да, подобный подход, связанный с людьми после химии возможен для коррекции терапии. Насколько мне известно, после прохождения химиотерапии пациентом, врачам важно наблюдать за несколькими показателями: восстановлением иммунной системы (например, числом лейкоцитов), состоянием печени и почек (оценка биохимических показателей, связанных с выводом токсинов из организма) риском тех же самых рецидивов (можно создать модель машинного обучения, которая будет предсказывать эти риски и давать вероятностную оценку), а также общим качеством жизни пациента (через анализ физической активности, сна, уровня боли и усталости). Но все, что касается данных, пока что возможно в теории, потому что есть масса проблем с их сбором, я не возьму на себя ответственность утверждать, что и ИИ модель будет выдавать полностью репрезентативные результаты. Потому что данные с наборов данных TCGA репрезентативны для США: данные были отобраны из разных медицинских учреждений по городам США, что может быть нерелевантным для РФ. У нас другие социально-демографические показатели, другой уровень жизни и тд..


      1. swenik
        13.12.2024 20:29

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


        1. FeLkan Автор
          13.12.2024 20:29

          Буду стараться)) Есть над чем работать и есть желание вынести этот проект на дипломную работу


    1. loly_girl
      13.12.2024 20:29

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


  1. loly_girl
    13.12.2024 20:29

    А есть тут хорошие химики на стыке дисциплин?

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


    1. isden
      13.12.2024 20:29

      А если индукционный нагрев частиц?


  1. SeanT
    13.12.2024 20:29

    Причины разные, но Ваши потуги обречены на частичный успех в узкой сфере. У меня нет возможности так богато и напомаженно расфуфыривать тему а-ля Вы, но приведу пример индекса атерогенности, что имеется сегодня в каждой липидограмме. Когда исследования реальности копнули чуть(!) глубже и выявили чуть(!) больше факторов и состояний, влияющих на атерогенез( преддиабет, сам диабет, мочевая кислота, состояние печени и почек, липопротеиды (а) и так далее, когда для каждого состояния доказательно определены свои уровни липидов, этот индекс атерогенности оказался лишь профанацией, показателем, верным лишь для неких оторванных от реальности идеальных условий. Жизнь оказалась намного сложнее даже в рамках пяти показателей, что способны описать только 32 возможных варианта. Сами вдумайтесь а)в количество самих генов, спящих и экспрессирующих, поврежденных и целых - и тут уже триллионы способов не просчитать верно и засраться, б) внешних факторов, что тоже значительное количество - предсказуемых и совсем непредсказуемых - экологических( шашлычная коптильня дяди Ашота на 1 этаже десятиэтажного дома, измена супруги/супруга как стресс с повышением кортизола или избыточная болезненность ребенка). Да, на сегодня и в узкой сфере неких онкологических заболеваний и идеальных состояниях внутри и снаружи можно что-то просчитать приближенное к реальности, но завтра и для многих это будет шаткой дощечкой через поток


    1. adeshere
      13.12.2024 20:29

      del (не туда ответил)


  1. shadrap
    13.12.2024 20:29

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

    На самом деле нужно разделять науку и лечение. Для лечения практически всех видов рака на сегодня есть четкие клинические рекомендации , они прописаны как в минздраве , так и в США и в Европе и в общем они практически совпадают , разнятся как правило быстро появляющимися и испытанными Мабами (антителами) и регистрированными мед препаратами. Все эти рекомендации работают и работают не плохо , мало того они улучшаются. Конечно и неудачи случаются ,но и огромный % неудач происходит из-за банальных ошибок. Поэтому подходя к лечению пациента нормальный врач прежде всего руководствуется текущими рекомендациями. Если случай действительно редкий ( а такое бывает в 2% случаев ) начинается творчество, как правило это коллегиальное решение. Почему я настаиваю что это правильный подход - клиническая практика говорит у данной рекомендации такая то %% медиана выживших 3, 5 и тд лет. и поскольку речь идёт о жизни это существенно.

    Что касается самой статьи- не буду ничего критиковать ибо , честно,не люблю тотальные цифровые корреляции без оглядки на конкретную детализацию. Ну например, какой смысл проводить корреляции Mutation Count и TMB? понятно что высокая мутационная нагрузка обеспечит большое количество мутаций.. в свое время уже все наелись эти ТМВ и его ценность как таргет маркера лишком переоценена. ТМВ может быть неплох для прогноза успешности лечения ..но не больше.

    Ещё раз повторюсь - это мое ИМХО, возможно из это цифровой каши и возродится истина.. )


    1. FeLkan Автор
      13.12.2024 20:29

      Спасибо за комментарий, хоть и с вашей позицией я частично не согласен. Не согласен с тем, что как это может быть "теоретическим творчеством", если там есть куча практической части! И кого я по вашему собираюсь лечить? Вы боитесь, что "некоторые люди, сами или их близкие, находясь в предполагаемом "безвыходном" положении ,могут начать не разобравшись использовать любые источники информации для последующего лечения...". Пожалуйста, укажите, где я предлагаю лечение или методы лечения? Я провожу исследование - показываю, как я искал данные и проводил анализ, на чем основывался. Многим это интересно, возможно здесь найдутся эксперты, способные к обоснованной критике моей статьи, поэтому я и публикую. Согласен лишь с тем, что мне не хватает сильной биологической и медицинской базы. Это верно. Я не медик и не биолог. С самого начала указал, что я студент-программист 4 курса, человек и сам поймет, что там нужны дополнительные корректировки и обоснования. Даже в ошибках рождается истина! Тогда ответьте тем же людям, которые находятся в "безвыходном" положении, почему же такая высокая смертность от онкологических заболеваний (отчет ВОЗ за 2023 год - смертность от онкологии 22%, на 2 месте, после сердечно-сосудистых заболеваний)? Почему еще не разработана действующая вакцина (или любой другой способ) со 100% гарантией избавления от рака? Значит, есть что изучать!


      1. shadrap
        13.12.2024 20:29

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


        1. FeLkan Автор
          13.12.2024 20:29

          Спасибо, я разберусь, но пожалуйста, научитесь корректно описывать ваши очень ценные предложения по статье, без эмоциональной окраски. Если вы не можете объяснить, что с ней не так. К чему этот газлайтерский подход? Я уж точно переживу ваши нападки) Посмотрите пожалуйста комментарий ниже, человек подробно обосновал свою позицию с научной точки зрения. За что я ему благодарен.


          1. shadrap
            13.12.2024 20:29

            Ей богу , Это забавно слышать от студента 4го курса ! ) удачи вам.


            1. FeLkan Автор
              13.12.2024 20:29

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


  1. paroletatel
    13.12.2024 20:29

    Предостережение для авторов статьи:

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

    Как биоинформатик-онколог скажу:

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

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

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

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

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


    1. FeLkan Автор
      13.12.2024 20:29

      Спасибо за замечания, обязательно приму их во внимание!


      1. paroletatel
        13.12.2024 20:29

        я случайно отправил, сейчас допишу и отправлю


      1. paroletatel
        13.12.2024 20:29

        Предостережение для авторов статьи:

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

        Как биоинформатик-онколог скажу:

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

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

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

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

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

        (дублирую и советую пересмотреть название, текст и настроение данной публикации)


  1. adeshere
    13.12.2024 20:29

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

    Хорошо известно, что если вы проанализируете 100 совершенно случайных наборов данных, то просто по статистике в 4-5 случаях строгие математические критерии, примененные в точности так, как это следует делать, покажут достоверный (значимый на 95-96%-ном уровне) эффект. Можно ли отсюда сделать вывод, что именно в этих 4-5 случаях "лекарство работает"? Вопрос риторический

    Но чуть реже люди задумываются о том, что вместо 100 абсолютно случайных наборов данных можно взять лишь один набор данных и 100 разных методов обработки. Нужно лишь, чтобы эти методы анализа данных были в каком-то смысле независимы друг от друга. Ситуация полностью симметричная: в 4-5 случаях мы опять найдем "достоверный" (т.е. "статистически значимый") эффект. Значит ли это, что другие способы обработки данных никуда не годятся, а вот эти 4-5 методов поиска "эффекта" и правда работают?

    Ну и последний шаг: теперь у нас есть только один набор данных, и только один метод. Но метод имеет настраиваемые (подгоняемые) параметры. Это может быть как один параметр, который может принимать 100 разных значений, либо два параметра с десятью вариантами у каждого (всего 100 комбинаций), или три параметра с четырьмя вариантами у каждого (итого 81 <примерно равно> 100) комбинаций, и т.д. Понятно, что из этих 81-100 комбинаций мы опять-таки получим "статистически достоверный" эффект в 4-5 случаях (нужно лишь, чтобы каждый вариант модели давал результат, слабо зависимый с остальными). Не поленюсь повторить: эти 4-5 "успешных исходов" мы будем иметь для абсолютно случайного набора данных...

    Так вот, последний вариант - самый опасный из всех. Так как глядя на результат, мы не всегда ясно понимаем, что в процессе оптимизации алгоритм перепробовал не только 4 "результативных" случая, но еще и 96 "нерезультативных". И поэтому при интерпретации может быть не совсем очевидно, что на самом деле абсолютно никакого эффекта нет. Речь идет лишь об совершенно обычном (я бы даже сказал неизбежном) статистическом артефакте.

    Дополнительное пояснение для тех, кто все еще не увидел никакой аналогии

    Если вдруг вы не очень близки со статистикой, или мои намеки слишком криво написаны, то приведу еще одну аналогию (мысленный эксперимент). Давайте проверим гипотезу, что при некоторой температуре воздуха монетка всегда выпадает орлом. Мы хотим получить очень надежное подтверждение - значимое на 99%-ном уровне. Для этого мы последовательно делаем 8 бросаний монетки. Как известно, вероятность получить серию ОООООООО равна 1/128. Если монетка и правда выпадет именно так, - все, теорема доказана (можно писать статью ;-)

    Итак, мы проводим 128 экспериментов при разных температурах, чтобы найти ту самую. Но... Если экспериментов настолько много, то скорее всего хотя бы один из них как раз и даст серию ОООООООО. Имеем ли мы теперь право сказать, что заветная температура и правда найдена?!

    В случае с температурой ответ простой: достаточно сделать еще одну серию из 8 бросаний при точно такой же температуре, и крах надежд почти неизбежен. Но что делать, если повторить эксперимент невозможно?! Увы, но в жизни первая ситуация (когда эксперимент можно провести столько раз, сколько хочешь), сейчас все чаще уступает место второй (когда вместо целенаправленной постановки эксперимента на влияние конкретного фактора мы вынуждены перелопачивать ретроспективно накопленную статистику). В той же клинической практике или при мониторинге процессов в Земле эксперименты (накопление данных) длятся годами.

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

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

    Как же быть, спросите Вы?

    Мне кажется, что простого ответа тут просто нет

    я его точно не знаю

    Хотя какие-то соображения пробовал высказывать

    вот в этих публикациях в ГПиБ и в СП

    Дещеревский А.В. О влиянии метеорологической и гидрологической обстановки на электротеллурические потенциалы по данным многолетних наблюдений на станции «Хазор-Чашма» // Геофизические процессы и биосфера. 2024б. Т. 23, № 3. С. 16–40. https://https://doi.org/10.21455/GPB2024.3-2

    Дещеревский А.В. Учет влияния экзогенных факторов на изменения разности потенциалов медного и свинцового электродов при поиске предвестников землетрясений // Сейсмические приборы. 2024в. Т. 60, № 3. C.40–76. https://doi.org/10.21455/si2024.3-3

    а также в статье в НТР

    Дещеревский А.В. Проблема качества данных при режимном геофизическом мониторинге: кто виноват и что делать? // Наука и технологические разработки. 2024а. Т. 103, № 3. С.3–26. https://doi.org/10.21455/std2024.3-1

    но это, во-первых, геофизика, а во-вторых, тема p-хакинга там скорее побочная. Хотя, в НТР мне сказали, что у них будет дискуссия на эту тему в 3-м 4-м номерах этого года. Может, там кто-нибудь умный отметится и что-нибудь посоветует...

    Если вдруг все-таки захочется заглянуть в PDF-ки упомянутых статей/номеров, то я их выкладываю на Я-диске по мере поступления.

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

    С другой стороны, пока мы остаемся в рамках сугубо статистического подхода, то опасность выдать желаемое за действительное возрастает неограниченно. Особенно если анализ идет в многомерном пространстве признаков. Ведь в этом случае число проверяемых комбинаций де-факто устремляется в бесконечность, что позволяет нам не просто обнаруживать высокозначимые псевдоэффекты, но и находить в данных ложные логические цепочки, когда из утверждения А (проверенного на уровне 99.9%) однозначно вытекает утверждение Б (также значимое на уровне 99.9%). Для этого достаточно проверить всего лишь Е+6 комбинаций параметров (что для современных моделей вообще не вопрос)...