TGViewer
Channel Public Channel
MedData Lab

MedData Lab

@meddatalab

О работе с данными в медицинских и биомедицинских исследованиях.
Анализ, интерпретация, ограничения, аналитические решения.
R • Python • научная практика

Автор канала @phlenyxa

Курс по анализу данных в R ↓
meddatalab.ru
Subscribers
391
Photos
32
Videos
3
Links
21
Recent Posts 17 shown
Post #107 125
Я снова студент 😏
Теперь — магистратуры ВШЭ.

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

Прошу понять и простить!

Зато материала для канала, кажется, станет ещё больше.
  • ❤ 8
  • 🔥 3
  • 🤓 3
  • 👍 2
  • 🤩 2
Post #106 173
  • 👍 4
  • ❤ 1
  • 🤩 1
  • 🤓 1
Post #105 155
p = 0,2. Значит, эффекта нет?

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

На первый взгляд всё логично.

Но вот здесь как раз очень легко сделать лишний шаг в интерпретации.

p > 0,05 означает, что у нас недостаточно оснований отвергнуть нулевую гипотезу.

И всё.

Это не равно утверждению «эффекта нет».

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

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

Например, получили:
разница между группами — 1,2 балла
p = 0,2

Можно ли после этого сказать, что методы лечения одинаковы?

Нет.
Нам ещё нужно понять, насколько неопределённа сама оценка этих 1,2 балла.

И вот здесь гораздо интереснее становится посмотреть на 95% доверительный интервал.

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

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

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

И это совсем другой вывод.
Поэтому при p > 0,05 я бы почти автоматически смотрела ещё на две вещи:
какова сама оценка эффекта и какой у неё доверительный интервал.

Без этого фраза «различий не выявлено» говорит гораздо меньше, чем иногда кажется.

И здесь же возникает ещё одна проблема — publication bias.

Исследования, где получили красивое p < 0,05, публиковать проще и приятнее.
А работы, где статистически значимого результата не получилось, заметно чаще остаются в столе.

В итоге, если смотреть только на опубликованную литературу, можно получить слишком оптимистичное представление об эффективности метода, препарата или вмешательства.

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

А иногда, наоборот, даёт очень важную информацию.
Вопрос в том, насколько точно мы смогли оценить возможный эффект.
  • ❤ 4
  • 👍 4
  • 🔥 4
  • 👏 1
  • 🤩 1
  • 🤓 1
Post #104 204
Когда данные слишком красивые

В конце августа 2011 года трое молодых исследователей из Tilburg University пришли к руководству университета с довольно тяжёлым подозрением.

Они сомневались в данных своего научного руководителя — Дидерика Штаппела.

На тот момент Штаппел был одним из самых известных социальных психологов Нидерландов. Профессор, декан факультета социальных и поведенческих наук Tilburg University, автор множества публикаций, в том числе в Science и Journal of Personality and Social Psychology.

Но с его данными было что-то не так. Они были слишком хорошими.
Эффекты — выраженными.
Результаты — удивительно согласованными.
Данные — подозрительно чистыми.

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

Университет начал расследование.
И дальше масштаб оказался гораздо больше, чем можно было представить.

Комиссии Tilburg University, University of Groningen и University of Amsterdam в итоге установили мошенничество в 55 публикациях Штаппела. Ещё в 11 работах были обнаружены признаки возможной фальсификации. Фальсифицированные данные попали и в 10 докторских диссертаций его студентов — сами аспиранты при этом не были признаны причастными к мошенничеству.

Позднее число отозванных публикаций Штаппела достигло 58.

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

И это, пожалуй, одна из самых интересных частей этой истории.

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

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

Есть у этой истории и почти гротескный эпилог.

После разоблачения Штаппел написал книгу о собственном падении — Ontsporing. А затем исследователи заметили, что в одной из глав он использовал фразы из произведений Реймонда Карвера и Джеймса Джойса без кавычек. Источники при этом были указаны отдельно в приложении.

История получилась почти слишком символичной.

И, пожалуй, именно поэтому эта история так хорошо запомнилась научному сообществу: насторожили исследователей не выбросы и не хаос в данных, а наоборот — их почти неправдоподобная аккуратность.
  • 🔥 4
  • 🙈 4
  • ❤ 3
  • 👍 3
  • 🤩 1
  • 🤓 1
Post #103 207
Почему не каждую переменную нужно включать в модель: конфаундер vs коллайдер

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

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

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

Что такое коллайдер
В простейшей причинной схеме коллайдер — это общее следствие двух переменных:

X → C ← Y

Стрелки как бы «сталкиваются» в C — отсюда и название collider.

В такой схеме наличие общего следствия C само по себе не создаёт дополнительной связи между X и Y. Проблема возникает, когда мы начинаем учитывать C в анализе — например, включаем его в регрессионную модель, стратифицируем по его значениям или ограничиваем выборку на основании его значений. В этом случае между X и Y может появиться искусственная статистическая связь или исказиться уже существующая. Такое смещение называют collider bias.

Классический пример — парадокс Берксона
Эта проблема была описана Джозефом Берксоном ещё в 1946 году при анализе госпитальных данных.

Представим два заболевания, каждое из которых повышает вероятность госпитализации.
Схематично:
Заболевание A → госпитализация ← заболевание B

Если в общей популяции заболевания A и B не связаны, то при анализе только госпитализированных пациентов между ними тем не менее может возникнуть искусственная ассоциация.

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

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

Пример из пандемии COVID-19
В начале пандемии обсуждалось парадоксальное наблюдение: среди госпитализированных с COVID-19 доля курильщиков в некоторых данных оказывалась ниже, чем ожидалось исходя из распространённости курения в популяции. Появлялись даже предположения о возможном «защитном» эффекте курения.

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

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

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

Именно поэтому Herbert и соавт. в 2020 году отдельно предупреждали, что неожиданные наблюдательные связи при COVID-19 могут быть следствием Berkson's paradox / collider bias, а не причинного эффекта.

Чем коллайдер отличается от конфаундера
В простой схеме различие можно показать так:

Конфаундер
X ← C → Y
C влияет и на X, и на Y. Поэтому часть наблюдаемой связи между X и Y может быть обусловлена именно C.
Чтобы уменьшить это искажение, C обычно нужно корректно учесть в анализе.

Коллайдер
X → C ← Y
C, наоборот, является общим следствием X и Y. Пока мы не учитываем C, этот путь не создаёт дополнительной ассоциации между X и Y. Но поправка или отбор по C может такую ассоциацию создать и тем самым внести смещение.

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

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

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

Здесь особенно полезны DAG — directed acyclic graphs, причинно-следственные графы.

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

Источники:
Berkson J. Limitations of the Application of Fourfold Table Analysis to Hospital Data. Biometrics Bulletin. 1946;2(3):47–53. DOI: 10.2307/3002000.
Herbert A, Griffith G, Hemani G, Zuccolo L. The Spectre of Berkson's Paradox: Collider Bias in Covid-19 Research. Significance. 2020;17(4):6–7. DOI: 10.1111/1740-9713.01413.
  • 🔥 5
  • ❤ 3
  • 👍 1
  • 👏 1
  • 🤔 1
  • 🤩 1
  • 🤓 1
Post #102
MedData Lab pinned «31 августа начинаем третий поток курса по анализу данных в R До старта осталось совсем немного. На курсе мы последовательно проходим весь путь анализа данных: исходная таблица → подготовка данных → описательная статистика → выбор метода → анализ → визуализация…»
Post #101 157
31 августа начинаем третий поток курса по анализу данных в R

До старта осталось совсем немного.

На курсе мы последовательно проходим весь путь анализа данных:
исходная таблица → подготовка данных → описательная статистика → выбор метода → анализ → визуализация в ggplot2 → интерпретация результата.

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

Начинаем с самых основ, поэтому опыт программирования не нужен.

До старта стоимость участия остаётся 23 000 ₽.
С 31 августа27 000 ₽.

Присоединиться к потоку можно до второго занятия — 3 сентября.

И, как и раньше, оплачивать сразу не нужно: сначала можно посмотреть первую лекцию, пройти практику и прочитать лонгрид, а уже потом решить, подходит ли вам формат.
Подробнее о программе и участие — http://meddatalab.ru/
meddatalab.ru Анализ клинических данных в R — курс для врачей и исследователей | MedData Lab Базовая статистика в R для врачей и исследователей без опыта программирования. 13 занятий, 6 недель, 2,5 часа в неделю. Старт 31 августа. Оплата после первого занятия.
  • ❤ 3
  • 🤩 2
  • ❤‍🔥 1
  • 👍 1
  • 🔥 1
  • 🤓 1
Post #97 1.33K
box_plot.jpeg84.3 KB clinical_case.csv1.6 KB clinical_case.R1.8 KB geom_smooth.jpeg177.7 KB
p = 0,01. Новый протокол работает? Часть 2 — разбираем данные в R

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

А здесь разберём тот же пример уже практически — в R.

Напомню исходные данные:

120 пациентов после планового хирургического вмешательства,

по 60 человек в каждой группе.

Средняя длительность госпитализации:

новый протокол — 5,5 дня

стандартный — 6,8 дня

1. Исходное сравнение
Начнём с обычного сравнения двух независимых групп:
t.test(hospital_days ~ protocol, data = dat)

Получаем разницу около 1,3 дня, p = 0,008 — при округлении p ≈ 0,01.

То есть без учёта других факторов длительность госпитализации в группе нового протокола статистически значимо меньше.

Но исследование нерандомизированное, поэтому важно оценить, насколько сопоставимы сами группы.

2. Возраст пациентов
Средний возраст:

новый протокол — 52,9 года
стандартный — 62,4 года

Почти 10 лет разницы.

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

Для визуализации используем ggplot2 — пакет R, который позволяет собирать графики из отдельных слоёв. Здесь совместим boxplot с отдельными наблюдениями: так видны и распределение, и данные каждого пациента.
ggplot(dat, aes(protocol, age_years)) +
geom_boxplot() +
geom_jitter(width = 0.1, alpha = 0.5)


Различие в возрасте между группами хорошо видно и на графике.

Теперь оценим, как связаны возраст и длительность госпитализации:
ggplot(dat, aes(age_years, hospital_days, colour = protocol)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm")


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

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

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

В R линейная модель задаётся функцией lm(). Слева указываем исход — длительность госпитализации, справа — протокол и возраст:
model <- lm(
hospital_days ~ protocol + age_years,
data = dat
)

summary(model)
confint(model)

summary() показывает коэффициенты модели и p-value,
а confint() — 95% доверительные интервалы.

До учёта возраста различие между протоколами составляло около 1,3 дня.
После поправки на возраст оценка уменьшается до 0,82 дня. Для протокола p ≈ 0,14, а 95% доверительный интервал включает 0.

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

Это не означает, что мы доказали отсутствие эффекта. Но и сказать:
«новый протокол сокращает госпитализацию на 0,8 дня»
по этим данным нельзя.

Корректнее сказать так: после поправки на возраст оценка различий между протоколами уменьшилась примерно до 0,8 дня, а 95% доверительный интервал включает 0 — поэтому по этим данным нельзя исключить отсутствие различий между протоколами.

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

При этом технически весь анализ в R занимает совсем немного кода: t-test, два графика и линейная модель.

Когда статистическая задача сформулирована, реализовать её в R часто можно всего несколькими строками.

Для практикума мы подготовили учебный датасет и полный R-скрипт с комментариями, чтобы весь анализ можно было скачать и повторить самостоятельно.
  • 🔥 4
  • 👍 3
  • ✍ 1
  • ❤ 1
  • 🤩 1
  • 🤓 1
Post #96 117

Forwarded from medstatistic

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

Пост подготовлен совместно с медицинским кибернетиком Еленой Филипповой, автором канала MedData Lab.

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

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

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

Для устранения или минимизации влияния конфаундеров в такой ситуации можно использовать:
🔹анализ подгрупп,
🔹многофакторную регрессию,
🔹псевдорандомизацию методом сопоставления оценок склонности (PSM).

Все эти методы с примерами в программе SPSS мы будем подробно изучать во второй теме Курса по сложным методам, который стартует 14 сентября.

А в этом посте вместе с медицинским кибернетиком Еленой Филипповой мы проведем статистический разбор подобной ситуации с применением языка R.

Итак. В клинике ретроспективно проанализировали результаты планового хирургического вмешательства: 60 пациентов в первой группе получали новый протокол ранней активизации, 60 пациентов во второй группе - стандартное послеоперационное ведение

При оценке длительности госпитализации пациентов:
средние значения составили, соответственно, 5,5 и 6,8. Разность средних составила -1,29 дня с 95% ДИ: -2,25 до -0,34, p = 0,008.
Другими словами, различия групп были статистически значимы.

Все бы хорошо, но наше исследование наблюдательное, то есть отбор в группы был неслучайным. Поэтому мы дополнительно провели сравнение групп по потенциальным конфаундерам. И получили, что возраст исследуемых имел заметные различия:
в первой группе он составил 52,9 года, а во второй был почти на 10 лет старше - 62,4 года.

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

Продолжение следует🔽
  • 🔥 4
  • ❤ 1
  • 👍 1
  • 🤩 1
  • 👌 1
  • 🤓 1
Post #95 235
  • 🔥 2
  • ❤ 1
  • 👍 1
  • 🤩 1
  • 🤓 1
Post #94 225
Эпигенетика памяти: когда воспоминание можно усилить или ослабить

Эпигенетические изменения давно связывают с формированием памяти. Но наличие такой ассоциации ещё не доказывает, что именно эти изменения причинно участвуют в её регуляции.

Именно это удалось проверить в работе, опубликованной в Nature Genetics в октябре 2025 года.

Авторы использовали CRISPR–dCas9-систему для эпигенетического редактирования. В отличие от классического CRISPR/Cas9, здесь ДНК не разрезали и её последовательность не меняли: dCas9 служила адресной системой, которая доставляла активатор или репрессор к нужному участку ДНК.

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

Редактирование проводили в энграм-клетках зубчатой извилины гиппокампа — нейронах, активированных во время обучения.

С помощью репрессора dCas9-KRAB-MeCP2 авторы снижали активность Arc. При последующем помещении животных в тот же контекст у них наблюдалось меньше freezing-поведения — стандартного поведенческого показателя памяти в этой модели.

В противоположном эксперименте использовали активатор dCas9-VPR.

Повышение активности Arc сопровождалось более выраженной поведенческой реакцией при последующем тестировании памяти.

То есть последовательность ДНК оставалась прежней, а менялось эпигенетическое состояние конкретного локуса в определённой популяции нейронов.

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

Во-вторых, эффект оказался обратимым.
Авторы использовали anti-CRISPR-белок AcrIIA4, который блокирует связывание dCas9 с ДНК. После его активации эффект dCas9-VPR исчезал.

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

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

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

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

Авторы сами рассматривают её как proof-of-principle того, что сайт-специфическое эпигенетическое редактирование может причинно влиять на проявление памяти.

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

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

Методологически работа очень красивая: вместо вопроса
«какие эпигенетические изменения сопровождают формирование памяти?»
можно поставить более сильный экспериментальный вопрос:
«изменится ли поведение, если адресно изменить эпигенетическое состояние конкретного локуса в энграм-клетках?»

И здесь авторы получили экспериментальный ответ — да.

Coda DM, Watt L, Glauser L et al. Cell-type- and locus-specific epigenetic editing of memory expression. Nature Genetics. 2025;57:2661–2668. DOI: 10.1038/s41588-025-02368-y.
  • 🔥 7
  • ❤ 4
  • 🤓 2
  • 👍 1
  • 🤩 1
  • 👌 1
Post #93 261
R_start_script.R2 KB
Почему R..?

В Excel меня долго устраивало почти всё.

Можно отфильтровать нужные строки, посчитать показатели, собрать таблицу, быстро что-то поправить вручную.

Но в какой-то момент появляется очень простой вопрос:
а как именно была получена эта цифра?

Какие строки мы исключили?
Что сделали с пропусками?
По какому принципу сформировали группы?
Не возник ли на каком-то этапе анализа артефакт?

Если было несколько фильтраций, промежуточных таблиц и правок, спустя время восстановить всю цепочку бывает уже непросто.

Наверное, поэтому уже много лет для анализа данных я использую именно R.

Анализ остаётся записанным в скрипте — шаг за шагом.
Загрузили данные:
dat <- read.csv("data.csv")

Проверили:
str(dat)
summary(dat)

Проверили пропуски:
sum(is.na(dat))

Описали группы:
dat %>%
group_by(group) %>%
summarise(
n = sum(!is.na(marker)),
mean = mean(marker, na.rm = TRUE),
sd = sd(marker, na.rm = TRUE)
)

Построили график:
ggplot(dat, aes(group, marker)) +
geom_boxplot() +
geom_jitter(width = 0.1)

Сравнили группы:
t.test(marker ~ group, data = dat)

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

Это и есть одна из основ воспроизводимого анализа.

И для меня здесь важно ещё одно: код фиксирует не только расчёты, но и аналитические решения.

Какую выборку мы анализируем?
Что делаем с пропусками?
Какие группы сравниваем?
Какой метод используем?

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

В итоге R для меня — это не столько «программирование», сколько способ записать логику анализа.

И чтобы этот пост не остался только рассуждением, я подготовила небольшой файл:
«С чего начать анализ новой таблицы в R: минимальный рабочий шаблон»
Внутри — простой каркас:
загрузка данных → первичная проверка → пропуски → описание групп → визуализация → статистический тест.
Его можно скачать, открыть в RStudio и адаптировать под свою таблицу.

А на курсе мы идём дальше по той же логике: от исходной таблицы и подготовки данных до статистического анализа, визуализации в ggplot2 и интерпретации результатов.
Старт нового потока — 31 августа.
  • ❤ 5
  • 🔥 5
  • 👍 3
  • 🤩 1
  • 👌 1
  • 🤓 1
Post #90 318
Снимок говорит: «опухоль осталась». Патолог — «опухоли нет». Кому верить?

У части пациентов с колоректальным раком есть молекулярная особенность — дефицит системы репарации неспаренных оснований (dMMR) или высокая микросателлитная нестабильность (MSI-H).

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

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

Но прежде чем отказаться от операции, нужно понять, исчезла ли она на самом деле. И здесь возникает проблема.

В 2026 году был опубликован метаанализ 12 исследований, включивший 396 пациентов с dMMR/MSI-H колоректальным раком после неоадъювантной иммунотерапии.
Авторы сравнили результаты радиологической оценки ответа с патоморфологической.

Расхождение обнаружили у 59,6% пациентов.
При раке ободочной кишки — у 64,2%, при раке прямой кишки — у 34,9%.

Причём особенно интересно направление этого расхождения.

238 пациентов с патоморфологически подтверждённым полным ответом по данным визуализации были расценены как имеющие остаточную опухоль.

Например, в исследовании NICHE-2 только 2,7% пациентов с патоморфологически подтверждённым полным ответом имели полный ответ и по данным визуализации.

То есть снимок нередко говорил: «опухоль осталась», хотя при исследовании операционного материала жизнеспособных опухолевых клеток уже не обнаруживали.

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

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

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

При этом цифру 59,6% не стоит читать как «визуализация ошибается в 60% случаев». В метаанализ вошли разные исследования, разные локализации опухоли и подходы к оценке ответа.

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

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

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

Xie Y, Liao L, Ding P, Jiang W. Discordance between radiological and pathological response to neoadjuvant immunotherapy in mismatch repair-deficient/microsatellite instability-high colorectal cancer: a meta-analysis. Front Immunol. 2026;17:1680500. DOI: 10.3389/fimmu.2026.1680500
  • ❤ 5
  • 👍 3
  • 🔥 3
  • ❤‍🔥 1
  • 👌 1
  • 🤓 1
Post #89
MedData Lab pinned «31 августа стартует новый поток курса «R для медицинских исследований» ⚡️⚡️⚡️ Это уже третий поток — и за время первых двух я немного пересобрала курс с учётом вопросов, которые чаще всего возникали у участников. Курс рассчитан в первую очередь на врачей…»
Post #88 287
31 августа стартует новый поток курса

«R для медицинских
исследований» ⚡️⚡️⚡️

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

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

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

Предварительный опыт работы в R не нужен.

Старт — 31 августа.

В ближайшие дни подробнее расскажу о программе и формате третьего потока.
meddatalab.ru Анализ клинических данных в R — курс для врачей и исследователей | MedData Lab Базовая статистика в R для врачей и исследователей без опыта программирования. 13 занятий, 6 недель, 2,5 часа в неделю. Старт 31 августа. Оплата после первого занятия.
  • ❤‍🔥 3
  • ❤ 2
  • 👍 1
  • 🔥 1
  • 🤩 1
  • 🤓 1
Post #87 289
Множественные сравнения: откуда берутся случайные «находки»

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

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

1 − (1 − 0.05)²⁰ ≈ 0.64
То есть около 64%.

Откуда столько?

В одном тесте вероятность не получить ложноположительный результат — 0.95. Если провести 20 независимых тестов, вероятность, что ни один из них не даст ложноположительного результата:
0.95²⁰ ≈ 0.36

А значит, вероятность получить хотя бы один — около 64%.

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

Теперь представим реальную задачу: например, мы анализируем RNA-seq и сравниваем экспрессию 20 000 генов между двумя группами. Для каждого гена проверяется отдельная статистическая гипотеза и получается своё p-value.

Если просто использовать для всех генов порог p < 0.05, среди «значимых» результатов неизбежно появятся случайные находки.

Поэтому при множественных сравнениях p-value необходимо корректировать.

Один из вариантов — поправка Бонферрони.

Логика очень простая: допустимый уровень ошибки делится на число проведённых тестов.
Для 20 тестов:

0.05 / 20 = 0.0025

Теперь результат отдельного теста должен иметь p < 0.0025, чтобы считаться статистически значимым.

Так мы контролируем FWER (family-wise error rate) — вероятность получить хотя бы один ложноположительный результат среди всего набора тестов.

Это довольно строгий подход. И иногда — слишком строгий.
Если одновременно тестируются 20 000 генов, порог Бонферрони составит:

0.05 / 20 000 = 2.5 × 10⁻⁶

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

Поэтому в исследованиях, где одновременно проверяются тысячи гипотез, часто используют другой принцип — FDR (false discovery rate).

Один из наиболее распространённых методов его контроля — поправка Бенджамини–Хохберга.

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

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

Именно поэтому в результатах RNA-seq нас обычно интересует не только исходный p-value, но и скорректированный p-value (padj).
Кстати, padj и q-value часто используют почти как синонимы, но строго говоря, это не одно и то же.

Какую поправку выбирать?

Зависит от задачи.
Если особенно важно минимизировать вероятность хотя бы одного ложноположительного вывода — нужен контроль FWER.

Если одновременно проверяется множество гипотез и важно не потерять реальные находки — чаще выбирают контроль FDR.

Поэтому вопрос при множественном тестировании не только в том, «какое получилось p-value?», но и в том, какую ошибку мы хотим контролировать.

Benjamini Y, Hochberg Y. Controlling the false discovery rate: a practical and powerful approach to multiple testing. J R Stat Soc Series B. 1995;57(1):289–300
  • 🔥 12
  • ❤ 4
  • 👍 1
  • 🤩 1
  • 🤓 1
Post #86 296
Сейчас я на летней школе по биоинформатике в МФТИ, и одна из тем программы — одноклеточное секвенирование и пространственная транскриптомика.

Хороший повод рассказать, почему эти технологии так сильно изменили наш взгляд на опухоль!

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

Примерно так работает обычная bulk RNA-seq.
Мы берём фрагмент ткани, выделяем из него РНК и получаем общий профиль экспрессии генов.

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

Следующим шагом стало одноклеточное секвенирование — single-cell RNA-seq.

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

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

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

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

И здесь появляется пространственная транскриптомика.

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

Пространственная транскриптомика позволяет сохранить эту исходную картину.

Мы видим не только, какие клетки присутствуют в ткани, но и где они расположены относительно друг друга.

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

Сейчас single-cell RNA-seq и пространственную транскриптомику всё чаще используют вместе.

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

В результате вопрос уже звучит не просто так:
Какие гены экспрессируются в опухоли?

А гораздо точнее:
В каких клетках они экспрессируются, где находятся эти клетки и кто расположен рядом?

Именно это позволяет рассматривать опухоль не как однородную массу, а как сложную систему из разных клеток, состояний и взаимодействий.
  • ❤ 8
  • 🔥 7
  • ❤‍🔥 3
  • 👍 1
  • 🤩 1
  • 🤓 1
Older posts →

About this channel

How can I read @meddatalab without a Telegram account?
TGViewer shows the public web preview Telegram publishes for MedData Lab: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does MedData Lab have?
MedData Lab (@meddatalab) has 391 subscribers on Telegram, refreshed roughly every 30 minutes.
Does MedData Lab know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →