Одновыборочные тесты, распределение данных и выбросы в GraphPad Prism
Привет, коллеги!
Продолжаем работать в GraphPad Prism. Предыдущие части можно найти по ссылкам:
Начинаем, как и прежде, со стандартного для колонок тренировочного датасета — Entering replicate data.
Идём в анализ
Смотрим, что мы там уже изучили
А сегодня разберём сразу 4 анализа: One sample t and Wilcoxon test, Normality and Lognormality Tests, Frequency distribution и Identify outliers. Остальное будет не так здорово смотреться на нашем обычном датасете, так что это посмотрим в следующий раз. Итак,
One sample t and Wilcoxon test
Это одновыборочный критерий Стьюдента и критерий Уилкоксона. Если до этого этими критериями сравнивали две выборки между собой, то в данном варианте происходит сравнение по одной выборке. Одновыборочный критерий Стьюдента нужен для сравнения среднего значения выборки с заданным гипотетическим средним. Уилкоксон же сравнивает медиану выборки с гипотетической медианой. Зачем это делать? Например, вы знаете, что, согласно майским указам, средняя зарплата научных сотрудников должна быть 200% от средней по региону. Берёте выборку зарплат учёных своего НИИ и сравниваете с этим гипотетическим средним.
В случае тренировочного датасета у нас есть измерение некоторого параметра в группах контроль, плацебо и лечение. В самом начале мы решили, что пусть это будет концентрация фолиевой кислоты (витамин B9) в нг/мл.
Итак, смотрим, что нам предлагает Prism:
1 - Очень простое меню. Сначала выберем тест. Для t-теста программа предполагает нормальность распределения генеральной совокупности. Не совсем то же самое, что нормальность распределения выборки, но их часто заменяют, так как распределение генеральной совокупности не всегда известно. С зарплатами оно не будет нормальным, а вот распределение концентраций, скорее всего, будет нормальным.
2 - В окошко hypothetical value нужно внести теоретическое среднее значение или медиану для теста Уилкоксона.
Если выбрать Wilcoxon signed-rank test (не путать с Wilcoxon matched pairs test для двух выборок), программа предложит посчитать дополнительные параметры:
1 - Calculate CI for discrepancy — посчитать доверительный интервал для расхождения, который показывает наиболее вероятный диапазон разницы между «центром» нашей выборки и проверяемым гипотетическим значением. Чем больше, тем хуже оценка.
2 - Не стоит забывать, что критерий Уилкоксона работает с разницами между значениями, в данном случае — с разницей между каждым значением выборки и теоретической медианой. Для него имеет значение, сколько положительных и отрицательных разниц получилось. Если значение выборки совпадает с теоретической медианой, получится 0. Ноль нельзя отнести ни в плюс, ни в минус, поэтому такие значения чаще всего игнорируются, как будто их не существует. Это уменьшает размер выборки. Но есть метод Пратта, который позволяет не учитывать нули при подсчёте плюсов и минусов, но сохраняет размер выборки. Об этом и последний пункт.
Теперь заглянем в опции
Первый пункт касается таблиц с подстолбцами, такое мы видели в Grouped анализе. Открыла для примера таблицу.
1 - Расчёт среднего по строчкам, чтобы в одной группе получился один столбец.
2 - Воспринимать каждый подстолбец как отдельную колонку.
3 - Воспринимать все значения в подстолбцах группы как единый датасет.
Остальные пункты в опциях нам уже знакомы.
Посмотрим же на результаты. Я решила взять критерий Уилкоксона, потому что не уверена в нормальности генеральной совокупности, и сравнить с медианой в 5 нг/мл.
Prism сравнила каждую колонку с теоретическим значением 5. Написала реальную медиану (actual median) и количество значений в выборке.
На строках 6–8 можно увидеть сумму рангов и количество положительных и отрицательных, а также p-value теста на строке 9. Строки 11–12 интерпретируют это самое p-value: на уровне значимости 0.05 мы не отклоняем нулевую гипотезу и считаем, что медиана выборки совпадает с теоретической.
На строках 15–17 видим рассчитанную величину разницы и её доверительный интервал.
Интересно, что в данном случае увеличение медианы до 100 и выше не приведёт к появлению значимой разницы. Это связано с малым размером выборок и низкой мощностью критерия, то есть его способностью найти различия там, где они есть. Поэтому критерий Уилкоксона тут применять не стоило.
Ниже привожу результаты сравнения со средним, равным 5, с помощью одновыборочного t-теста.
Строка 6 — значение критерия и число степеней свободы.
Строки 7–9 — значимость различий; в первой группе среднее не соответствует теоретическому.
Строки 12–16 — о величине различий. В ANOVA мы уже видели R-squared, здесь же он показывает, какая доля общей вариативности данных обусловлена отличием среднего от гипотетического значения. Чем он больше, тем больше разница.
И на этом с одновыборочными критериями заканчиваем, поговорим о
Frequency distribution
Этот тип анализа позволяет посмотреть, как часто те или иные значения встречаются в выборке. За счёт этого мы можем визуально оценить форму распределения (симметричность, наличие нескольких «пиков» или аномальных выбросов), определить наиболее типичные значения и понять, насколько данные соответствуют нормальному распределению. Посмотрим на его меню
1 - Сначала смотрим, что нам надо. Frequency distribution — это обычное распределение частот. Мы разбиваем весь диапазон данных на равные отрезки и смотрим, как часто значения попадают в тот или иной отрезок. Cumulative frequency distribution — это кумулятивное (накопительное) распределение. Каждая следующая точка — это сумма текущей частоты и всех предыдущих, поэтому график всегда идёт только вверх.
2 - Tabulate позволяет выбрать, в виде чего будет представлена частота встречаемости: в виде абсолютного количества значений (Number of values), доли от единицы (Relative frequency (fractions)) или в процентах (Relative frequency (percentages)).
3 - Bin range позволяет выбрать диапазон интервалов, то есть откуда будут отсчитываться равные отрезки, на которых будут считаться частоты. В режиме Auto Prism сама определит границы на основе ваших минимальных и максимальных данных.
4 - Bin width устанавливает ширину интервала и это самая важная настройка. В режиме Choose automatically Prism сам подберёт ширину, но она часто делает их слишком крупными. Можно задать фиксированный шаг в Bin width. Чем меньше число, тем более детальным будет график. Для малых выборок шаг должен быть побольше. В режиме No bins программа не будет группировать данные, а просто построит график по каждому уникальному значению, что актуально для кумулятивного распределения.
5 - Графа Replicates относится к таблицам с подстолбцами, и здесь можно выбрать: разносить каждую повторность по интервалам отдельно (Bin each replicate), или сначала усреднить их и работать только со средним значением (Bin only means).
6 - И наконец, ставя галочку в New graph (Новый график), вы создаёте новый лист с графиком распределения. Можно выбрать тип этого графика, но классически используется столбчатая диаграмма.
Итак, я решила построить распределение данных, частота будет в долях от единицы, диапазон автоматический, а интервал я изменила на двойку.
В результате мы получаем таблицу с частотами.
СтолбецX — это центр нашего интервала, а далее идёт частота встречаемости значений в том или ином интервале. Например, в untreated все данные попадают в интервал с центром в 4 (от 3 до 5). А вот в остальных группах распределение чуть более разбросанное.
Графически это выглядит так:
Мы можем уменьшить интервал до 1, чтобы получить хоть какую-то форму в распределении группы untreated. Тогда таблица приобретает следующий вид:
А гистограмма — такой:
Это всё равно выглядит уродливо, потому что у нас всего 5 значений в выборке. Для больших выборок будет сильно лучше, и я рекомендую самостоятельно построить Frequency distribution на стандартном датасете Prism для этих целей, он так и называется. Там, кстати, очень интересное распределение данных.
В целом, по форме гистограмм с частотами можно примерно предполагать, нормальное ли распределение у данных или нет. Но можно проверить и с помощью тестов.
Normality and Lognormality Tests
Что же у нас тут во вкладке с параметрами:
1 - Prism умеет проверять не только соответствие распределения нормальному, но и логнормальному. Логнормальное распределение — это вид распределения, при котором сами данные выглядят асимметрично с длинными хвостами, но если взять натуральный логарифм от каждого значения, то полученные числа выстроятся в симметричную «колоколообразную» кривую Гаусса. Выглядит как-то так:
Собственно, в первом пункте мы и должны выбрать, на какое распределение тестировать. Также есть вариант посчитать, какая из кривых вероятнее описывает наши данные.
2 - Далее идут варианты статистических тестов на нормальность. Каждый имеет свои особенности и ограничения, так что выбирать лучше под данные. Я писала немного про них тут: https://t.me/ad_research/235. Из того, что предлагает Prism:
- Anderson-Darling — достаточно мощный тест, формально подходит для выборок от 5 значений, но лучше использовать для больших выборок от 20.
- D'Agostino-Pearson — тест оценивает асимметрию и эксцесс, поэтому достаточно чувствителен к наличию повторяющихся значений. Его не рекомендуют использовать на выборках меньше 20 значений.
- Shapiro-Wilk – очень популярный тест среди биологов, поскольку работает на малых выборках от 3 значений.
- Kolmogorov-Smirnov - классический, но наименее мощный тест, его часто используют просто по привычке. Рекомендуется при выборках от 50 значений.
Я как-то разбирала одну статейку, в которой показано, что почти все тесты часто выдают нормальность распределения при малых выборках, даже если данные взяты из заведомо ненормального распределения, и наоборот, оказываются слишком жёсткими и не дают нормальности даже если выборка взята из заведомо нормального распределения.
3 - Следующая вкладка – это графики, в которых нам предлагается сделать заодно Q-Q plot, то есть график квантиль-квантиль. Если вы не помните, что это такое, ещё раз рекомендую перечитать пост про нормальность.
4 - Далее идёт опция с подстолбцами, которая используется для группированных таблиц. Мы эти опции видели уже в одновыборочном t-тесте, так что повторяться не буду.
5, 6 - И последняя опция нам тоже уже знакома: выбор уровня значимости, количества цифр после запятой в p-значении и способ перевода конкретного p-значения в звёздочки.
Чтобы посмотреть на результат, я решила поставить галочки на все возможные опции.
Чтобы посмотреть на результат, я решила поставить галочки на все возможные опции.
Строки 1-6 рассказывают нам о том, какое распределение наиболее вероятно для наших данных. Программа считает, что нормальное, но, откровенно говоря, вероятности настолько похожи, что это сомнительно. Далее мы увидим, что наши выборки проходят тесты как на соответствие нормальному распределению, так и одновременно на соответствие логнормальному распределению. Такое часто будет встречаться на маленьких выборках, поэтому считается не совсем корректным говорить о какой-то форме распределения и соответствии чему-либо, если у вас всего 5 значений.
С 8-й строки начинаются результаты тестов на нормальность. Андерсон-Дарлинг и Д'Агостино-Пирсон сразу сказали, что им мало значений. Ну и ладно. Зато Шапиро-Уилк, которому 5 значений хватает, говорит, что p>0.05, а значит, мы не отвергаем нулевую гипотезу и считаем, что наше распределение соответствует нормальному. Колмогоров-Смирнов согласен с этим, но я бы не учитывала этот результат из-за размера выборки.
Далее идут результаты проверки на логнормальность в строках 33-56.
Далее идут результаты проверки на логнормальность в строках 33-56.
По сути, при проверке соответствия распределения логнормальному программа проверяет распределение логарифмов наших данных на соответствие нормальному распределению. Поэтому тесты все те же самые и с теми же ограничениями. Поскольку выборка маленькая, результат тестов получился таким же, то есть согласно этому наши данные имеют логнормальное распределение. Данные Шрёдингера, так сказать.
Но вообще, в посте про t-тест мы уже обсуждали, что значение нормальности распределения данных для t-теста и далее для ANOVA преувеличено. Гораздо большие проблемы с работой параметрических тестов могут вызвать отдельные выбросы. О них и последняя часть.
Но вообще, в посте про t-тест мы уже обсуждали, что значение нормальности распределения данных для t-теста и далее для ANOVA преувеличено. Гораздо большие проблемы с работой параметрических тестов могут вызвать отдельные выбросы. О них и последняя часть.
Identify outliers
Выбросы (outliers) — это отдельные значения в наборе данных, которые существенно отклоняются от общей массы наблюдений и не вписываются в общую статистическую закономерность. Бывает, что это техническая ошибка, например, прибор заключил на лунке и выдал 0 вместо значения флуоресценции. Или ошибка при внесении данных, например, рост человека записали не в метрах (1.75), а в сантиметрах (175). Такие значения при обнаружении можно спокойно удалить или исправить. Если же причина выброса не ясна, то стоит быть осторожным и перепроверить данные. Например, «странный» результат, не вписывающийся в нашу гипотезу, может быть признаком нового явления или неизвестного биологического механизма. Плюс, если удалять все значения, которые «портят» красивую картинку, мы получим заниженную вариабельность и увеличенную вероятность ложноположительного результата (ошибки первого рода). Учёный не должен быть предвзятым и доказывать правильность гипотезы любой ценой.
Но всё же, что там предлагает Prism для поиска выбросов?
1 - Для начала выбираем математический алгоритм, который будет решать, является ли значение выбросом:
- ROUT (recommended) – самый современный и мощный метод. Он основан на нелинейной регрессии и может найти сразу несколько выбросов в одном наборе данных. Prism рекомендует использовать именно его, и я бы не стала спорить с этим.
- Grubbs’ – имеет довольно жесткое ограничение: он ищет только один (самый крайний) выброс. Если в данных два выброса, он может не найти ни одного из-за их взаимного влияния.
- Iterative Grubbs’: Тот же метод Граббса, запущенный по кругу несколько раз, что позволяет найти больше одного выброса. Но не рекомендуется, так как он менее надёжен, чем ROUT.
2 - Далее у нас спрашивают, насколько агрессивно искать выбросы. Регулируется это с помощью ползунка, который определяет параметр Q (False Discovery Rate).
Q = 1% – означает, что мы готовы рискнуть тем, что не более 1% «выбросов», которые найдёт программа, на самом деле окажутся нормальными данными. Это «золотая середина».
Сдвиг влево (Remove definitive outliers) – сделает поиск очень строгим. Программа удалит только самые очевидные, экстремальные значения.
Сдвиг вправо (Remove likely outliers) – сделает поиск агрессивным. Программа удалит даже подозрительные значения, которые лишь слегка отклоняются от нормы.
Сдвиг влево (Remove definitive outliers) – сделает поиск очень строгим. Программа удалит только самые очевидные, экстремальные значения.
Сдвиг вправо (Remove likely outliers) – сделает поиск агрессивным. Программа удалит даже подозрительные значения, которые лишь слегка отклоняются от нормы.
3 - И в конце снова знакомая нам часть с подстолбцами.
В наших данных абсолютно точно нет выбросов, так что я предварительно добавила новые значения, чтобы показать, как выглядит результат.
В результатах у нас есть 3 вкладки.
В summary мы видим, что программа нашла выбросы в группах untreated и placebo. Хоть для второй группы я ввела большее дополнительное значение, из-за более высокого среднего и медианы программа не посчитала его выбросом.
Во вкладке cleaned data – наши данные без выбросов. Мы можем проводить дальнейший анализ прямо из неё, нажав на кнопку Analyze в верхнем меню.
А в outliers нам показывают позицию наших выбросов. Это помогает, если мы понимаем, что это техническая ошибка и мы хотим поправить значение.
Очень рекомендую взять стандартные датасеты для изученных сегодня видов анализа или даже свои собственные данные и посмотреть, что получится с ними. А на сегодня всё.
#статистика_для_котиков