Критерий Краскела-Уоллиса для сравнения двух групп на трех визитах |
Здравствуйте, гость ( Вход | Регистрация )
Критерий Краскела-Уоллиса для сравнения двух групп на трех визитах |
10.07.2023 - 08:21
Сообщение
#16
|
|
Группа: Пользователи Сообщений: 25 Регистрация: 7.10.2004 Пользователь №: 5 |
Для корректности подробного описания по сравнениям двух групп рекомендую использовать именно значения объёмов значений в каждой сравниваемых групп,, а также использовать наличие или отсутствие именно нормального распределения. И когда в сравниваемых группах уже несколько разных признаков, можно использовать и кластерный анализ, когда может обнаружить и более двух групп. И для понимания возможных методов анализа читайте об этом на моём сайте про адресам http://www.biometrica.tomsk.ru/biostat_2.htm , http://www.biometrica.tomsk.ru/biostat_3.htm, http://www.biometrica.tomsk.ru/biostat_12.htm .
В. Леонов, "Биометрика" - журнал для медиков и биологов
|
|
10.07.2023 - 12:03
Сообщение
#17
|
|
Группа: Пользователи Сообщений: 902 Регистрация: 23.08.2010 Пользователь №: 22694 |
Для корректности подробного описания по сравнениям двух групп рекомендую использовать именно значения объёмов значений в каждой сравниваемых групп,, а также использовать наличие или отсутствие именно нормального распределения. И когда в сравниваемых группах уже несколько разных признаков, можно использовать и кластерный анализ, когда может обнаружить и более двух групп. И для понимания возможных методов анализа читайте об этом на моём сайте про адресам http://www.biometrica.tomsk.ru/biostat_2.htm , http://www.biometrica.tomsk.ru/biostat_3.htm, http://www.biometrica.tomsk.ru/biostat_12.htm . Ой вэй, а таки шо это было? Глупая ботяра leo_biostat() не оправдала ожиданий, и теперь еще более глупая ботяра Leonov() (хотя, казалось бы, куда уж глупее) пытается авторитетно поставить точку в этой дискуссии? Но ведь это же попытка с негодными средствами... |
|
10.07.2023 - 12:08
Сообщение
#18
|
|
Группа: Пользователи Сообщений: 204 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
Цитата Для корректности подробного описания по сравнениям двух групп рекомендую использовать именно значения объёмов значений в каждой сравниваемых групп Мне кажется, или это сгенерировала машина? Не логистической регрессией единой жива томская биометирика - внедряем ИИ потихоньку (пусть пока и не в анализ медицинских данных, а лишь в создание рекламного контента)? |
|
16.02.2024 - 19:14
Сообщение
#19
|
|
Группа: Пользователи Сообщений: 17 Регистрация: 7.12.2012 Пользователь №: 24440 |
Коллеги, очень похожая задача. Есть две группы животных, подвергнуты лечению и контроль. И для каждой группы было проведено 2 анализа в разных временных точках. Причём, во второй временной точке выборки подчиняются нормальному распределению (Шапиро-Уилка), но всё равно отклонение от нормальности субкритическое так сказать, а во второй - нет. Снижение времени - показатель прогрессии заболевания.
На мой взгляд нужен непараметрический аналог ANOVA с повторными измерениями. А его нет. Попарно всё сравнить Манна-Уитни? Не знаю, уместно ли. Посчитать ANOVA и использовать в апостериорном анализе критерий, который не чувствителен к "небольшим отклонениям от нормальности"? Если да, то какой? Почитал чуть гугл, советуют использовать тест Фридмана. Но он позволяет провести сравнение между повторными измерениями, но не между несвязанными группами. Я так понял, что это аналог теста Вилкоксона... не аналог, но тест, который также работает только на связанных выборках (т.е. повторные измерения) Прошу совета. Пользуюсь Statistica 12. В ней экзотических методов, которые выше советуют, нет. Приложил Excel с исходными данными
Прикрепленные файлы
|
|
16.02.2024 - 23:04
Сообщение
#20
|
|
Группа: Пользователи Сообщений: 204 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
Посмотрел на Ваши данные одним глазком. С нормальностью после добавления в модель всех независимых переменных не все так плохо (у многих авторов, использовавших анову в публикациях бывало гораздо хуже, и прокатило), зато есть неслабая гетроскедастичность, причем в обеих группах. Что с лечением, что без, через месяц разброс сильно уменьшается. Есть модели, позволяющие корректно это учесть (правда, не знаю, в Вашем-ли ПО), но для начала надо в биологической причине феномена разобраться бы... А в остальном, лечение работает, с ним время значимо больше, чем в контроле. Чтобы доказать только последнее, многофакторный дизайн особо и не требуется, достаточно двухвыборочного теста, лучше там, где через месяц.
Сообщение отредактировал ИНО - 17.02.2024 - 00:12 |
|
17.02.2024 - 13:25
Сообщение
#21
|
|
Группа: Пользователи Сообщений: 95 Регистрация: 27.12.2015 Пользователь №: 27815 |
Есть две группы животных, подвергнуты лечению и контроль. И для каждой группы было проведено 2 анализа в разных временных точках. Причём, во второй временной точке выборки подчиняются нормальному распределению (Шапиро-Уилка), но всё равно отклонение от нормальности субкритическое так сказать, а во второй - нет. Снижение времени - показатель прогрессии заболевания. Выборки проверять на соответствие нормальному распределению не надо. В линейной модели предполагается нормальное распределение остатков. В примере показано, как можно создать выборки, по которым тест Шапиро-Уилка отклонит нулевую гипотезу в двух из трех подгрупп, но не по остаткам модели. В приложении - статьи по процедуре проверке нормальности. CODE set.seed(324) n <- 1000 nu <- 1.5 sd <- 1 x <- gl(n = 3, k = n, labels = c('a', 'b', 'c')) a <- gamlss.dist::rSN2(n = n, mu = 160, sigma = 1, nu = nu) b <- rnorm(n = n, mean = 140, sd = 1) c <- gamlss.dist::rSN2(n = n, mu = 120, sigma = 1, nu = 1/nu) y <- c(a, b, c) fit <- lm(y~x) res <- resid(fit) lst <- list(a, b, c, y, res) round( sapply(seq_along(lst), function(i) {shapiro.test(lst[[i]])[['p.value']]}), digits = 3 ) #[1] 0.000 0.847 0.000 0.000 0.634 dev.new(noRStudioGD = TRUE) layout(matrix(c(1,2,3,4,5,5), nrow = 3, ncol = 2, byrow = TRUE)) plot(density(a)) plot(density(b)) plot(density©) plot(density(y)) plot(density(res)) По Вашим данным можно сделать следующее: 0. Пояснить следующее: измерение через месяц - это реальное время или величина изменения относительно первоначального замера? 1. Взять разницу между состояниями "до-после" и сравнивать её между группами любым тестом, который Вам нравится (Стьюдента/Уэлча, Манна-Уитни, точный тест Фишера-Питмана и т.п.). 2. Ознакомиться с выполнением смешанного дисперсионного анализа по ссылке за авторством nokh. 3. Попытаться выполнить трансформацию (логарифмирование) и посмотреть, что будет.
Прикрепленные файлы
1471_2288_12_81.pdf ( 790,19 килобайт )
Кол-во скачиваний: 12
p302.pdf ( 1,96 мегабайт ) Кол-во скачиваний: 20 |
|
17.02.2024 - 13:50
Сообщение
#22
|
|
Группа: Пользователи Сообщений: 204 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
Не нужна там трансформация - остатки плюс-минус лапать нормальны (маленький лапоть, не как в соседней теме ). Но немаленькая гетероскедастичность.
Вообще, с приведенными данными модно проделать очень много всякого, хорошие такие данные. вкусные Я просто не знаю, что из этого реализовано в Statistica 12, за неимением оной. А еще не совсем ясно, проверка каких конкретно гипотез интересует. |
|
17.02.2024 - 15:25
Сообщение
#23
|
|
Группа: Пользователи Сообщений: 17 Регистрация: 7.12.2012 Пользователь №: 24440 |
но не по остаткам модели. Что значат эти "остатки модели"? Далёк всё же от статистики) Через месяц - это абсолютный показатель времени Разницу вычислять - не очень, т.к. разный размер выборок (у части животных симптоматика прогрессировала быстрее и они погибли раньше повторного анализа). как в этом случае произвести вычитание? Вообще, с приведенными данными модно проделать очень много всякого, хорошие такие данные. вкусные Я просто не знаю, что из этого реализовано в Statistica 12, за неимением оной. А еще не совсем ясно, проверка каких конкретно гипотез интересует. Возможно, мне надо осваивать другие программы)) Гипотеза. что лечение повлияло на развитие симптоматики и этот эффект был стойким во времени. Само заболеваний вылечить нельзя, т.к. оно генетически-обусловлено, но у "лечённой" группы показатели были лучше, как можно видеть из данных. |
|
17.02.2024 - 21:07
Сообщение
#24
|
|
Группа: Пользователи Сообщений: 204 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
Цитата Через месяц - это абсолютный показатель времени Разницу вычислять - не очень, т.к. разный размер выборок (у части животных симптоматика прогрессировала быстрее и они погибли раньше повторного анализа). как в этом случае произвести вычитание? Важное замечание! Это значит, что выборки цензурированы справа. причем причина рецензирования не является независимой от исследуемых факторов. То есть сам факт цензурирования информативен. Я о таком только читал (даже термин какой-то есть для этого), но в виду отсутствия перспектив встретить подобную ситуацию в своей практике, все позабыл. Если же есть основания считать что смерить никак не связана с исследуемыми факторами, а произошла по сторонней (например, от старости), то все достаточно просто. Из статистического ПО ничего универсальные R, вреде бы, пока не придумали. Единственный недостаток - тормоза, но сомневаюсь, что Ваши выборки столь велики, чтобы Вы из заметили. Ну и придется осваивать синтаксис. Но это придется рано или поздно делать в любом случае, не с R, так с Питоном или еще чем-то. То что предлагаться в кнопочный интерфейсах очень скудно и негибко. Я сходил по ссылке на статью многоуважаемого nokh о смешанном ДА - это же какой-то ужас в плане эргономики, а главное, вообще непонятно, каким конкретно образом был обработан случайный фактор (наверное оно где-то в недрах руководства мелким шрифтом прописано, но места знать надо). Ну на фиг такой интерфейс! Читал, что в новых версиях Statistica R уже интегрирован, т.е. устанавливать не придется, достаточно только вызвать. |
|
17.02.2024 - 23:31
Сообщение
#25
|
|
Группа: Пользователи Сообщений: 95 Регистрация: 27.12.2015 Пользователь №: 27815 |
Что значат эти "остатки модели"? Посмотрите учебные материалы по ссылке. Разницу вычислять - не очень, т.к. разный размер выборок (у части животных симптоматика прогрессировала быстрее и они погибли раньше повторного анализа). как в этом случае произвести вычитание? Тут возможны варианты: исключать из анализа (умер/не умер - другой вопрос), проставить умершим нули (время 0 у живого быть не может), оставить для использования (реально только через смешанные модели). В коде ниже указана попытка сделать анализ повторных измерений при допущении различных трансформаций. Лучшей оказалась модель с предварительным логарифмированием зависимой переменной. На графике видно, что группы изначально различались, к концу исследования эти различия усилились. На мой взгляд, если различия объясняются эффектом лечения, то результат (сила эффекта) достаточно скромный. Чтобы в этом убедиться, нужно или усилить эффект от лечения или увеличить количество наблюдений. CODE library(mgcv) txt <- "id value group time 1 31 control first 2 40 control first 3 19 control first 4 55 control first 5 27 control first 6 3 control first 7 40 control first 8 29 control first 9 17 control first 10 46 control first 11 55 treatment first 12 55 treatment first 13 38 treatment first 14 55 treatment first 15 55 treatment first 16 55 treatment first 17 27 treatment first 18 40 treatment first 1 0,7 control second 2 1,4 control second 3 0,5 control second 4 3 control second 5 0,5 control second 6 1,5 control second 7 1,6 control second 11 3 treatment second 12 6,6 treatment second 13 2,4 treatment second 14 2,1 treatment second 15 3 treatment second 16 1,4 treatment second 17 4 treatment second 18 9,7 treatment second" df <- read.table(text = txt, header = TRUE, dec = ',') #df <- df[-which(df$id %in% c(8, 9, 10)),] df$group <- factor(df$group, levels = c('control', 'treatment')) df$time <- factor(df$time, levels = c('first', 'second')) df$val1 <- log(df$value) df$val2 <- df$value/60 fitA <- gam(value~time*group + s(id, bs = 're'), family = gaussian(link = 'identity'), data = df) fitB <- gam(value~time*group + s(id, bs = 're'), family = gaussian(link = 'log'), data = df) fitC <- gam(value~time*group + s(id, bs = 're'), family = gaussian(link = 'inverse'), data = df) fit1 <- gam(val1~time*group + s(id, bs = 're'), family = gaussian(link = 'identity'), data = df) fit2 <- gam(val2~time*group + s(id, bs = 're'), family = betar(link = 'logit'), data = df) mods <- ls(pattern = 'fit') modSum <- do.call(cbind, lapply(seq_along(mods), function(i) { mod <- summary(get(mods[i])) result <- rbind(mod$dev.expl, mod$r.sq) row.names(result) <- c('DevExpl', 'RsqAdj') colnames(result) <- mods[i] return(result) } ) ) pred <- predict(fit1, newdata = expand.grid(group = levels(df$group), time = levels(df$time)), newdata.guaranteed = TRUE, type = 'response', exclude = 's(id)', se.fit = TRUE) pred$cil <- pred$fit - pred$se.fit*qnorm(0.975) pred$ciu <- pred$fit + pred$se.fit*qnorm(0.975) pred$mu <- exp(pred$fit) pred$lwr <- exp(pred$cil) pred$upr <- exp(pred$ciu) pred <- data.frame(pred) pred <- cbind(pred, expand.grid(group = levels(df$group), time = levels(df$time)) ) pl <- ggplot(pred, aes(x = time, y = mu, ymax = upr, ymin = lwr, shape = group)) + geom_pointrange(position = position_dodge(0.1)) + theme_bw() + theme(strip.text = element_blank()) + scale_y_log10() Единственный недостаток - тормоза, но сомневаюсь, что Ваши выборки столь велики, чтобы Вы из заметили. Это не баг, это - фича (с).
Прикрепленные файлы
|
|
18.02.2024 - 11:34
Сообщение
#26
|
|
Группа: Пользователи Сообщений: 204 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
Зачем GAM если есть только две точки для каждого животного. Чем обычные линейный модели не угодили? Кривую все равно по двум точкам не построить.
Идея с подстановкой нуля умершим меня тоже посещала, но была отброшена как неправомерная. Почему 0, а не 0,001 или -1? Первый вариант возможен в случае, если смерть животного наступает при показателе измеряемой величины малом, но большем, чем ноль, вторая - если она наступила задолго до второго измерения, а динамика показателя была такова, что при линейной эстраполяции на момент второго измерения ушла бы в область отрицательных значений. Так что правильного ответа, что следовало бы подставить мертвым, мы не знаем, а поскольку от него зависит параметры модели и достигаемые уровни значимости, подставлять что-либо права не имеем. Или же имеем право подставлять разное мульён раз, а потом рисовать ДИ для ДИ и для p, но то такое себе занятие... См. импутация. Не только смешанные модели. Особь можно ввести в обычную линейную модель как фиксирванный фактор. Мощность пострадает, зато допущений меньше. Есть и другие пути. Но ни один из них не будет учитывать тот факт, что рецензирование неслучайно. Быть может, лучше построить две модели? Первая, построенная на всех особях, будет предсказывать выживет или умрет,вторая, построенная только на выживших особях - величину измеряемого показателя в случае, если подопытный таки протянет месяц. |
|
18.02.2024 - 12:14
Сообщение
#27
|
|
Группа: Пользователи Сообщений: 95 Регистрация: 27.12.2015 Пользователь №: 27815 |
Зачем GAM если есть только две точки для каждого животного. Чем обычные линейный модели не угодили? Кривую все равно по двум точкам не построить. Идея с подстановкой нуля умершим меня тоже посещала, но была отброшена как неправомерная. Почему 0, а не 0,001 или -1? Первая, построенная на всех особях, будет предсказывать выживет или умрет,вторая, построенная только на выживших особях - величину измеряемого показателя в случае, если подопытный таки протянет месяц. Из коробки один синтаксис позволяет строить lm/glm, betareg и заодно прикрутить случайный эффект. На двух точка кривую, конечно, не построить, но их соединить прямой линией библиотека может. Исходя из условий задачи, 0 - это какое-то время. Я допустил, что 0 - это железный показатель того, что "пациент мёртв" и никакой активности не может быть по определению. Отрицательное значение времени (исходя из задачи) ситуация невозможная. Создавать колонку статуса "жив/мертв" смысла нет, если мы знаем, что 0 - это смерть. Считаю, что подставлять мы имеем право. Другое дело, что придётся подумать, как этот 0 учесть, чтобы он проблем не создавал. Первое, что приходит в голову - Zero inflated beta (ZOIB) regression. Если у всех результат измерения укалдывается в 60 с, то мы легко перейдём к данной модели. Еще лучше знать дату смерти особи, чтобы задачу свести к анализу выживаемости. Вторая модель (на живих) уже сделана. |
|
18.02.2024 - 13:18
Сообщение
#28
|
|
Группа: Пользователи Сообщений: 204 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
ИМХО с нулем Вас куда-то не туда занесло. Бета-регрессия - про данные, естественным образом жестко ограниченные в определенном интервале как снизу, так и сверху (например, проценты). У нас не так.
Насчет моих соображений об отрицательном значении зависимой переменной попробую объяснить их ход. Пусть истинная функция изучаемого показателя в времени - некая монотонно убывающая кривая. Предположим, что она достигает минимальной величины (допустим 0), после которой следует смерть. У нас имеются всего две фиксированные временные точки, когда были произведены замеры: 0 месяцев и 1 месяц. Очевидно, что истинную форму кривой по ним восстановить не получится. Но можно аппроксимировать ее прямой. Однако в таком случае, если 0 был достигнут между точками "0 мес." и "1 мес.", наша аппроксимирующая прямая в точке "1 мес." будет уже лежать в области отрицательных значений. Конечно, в случае времени отклика в качестве зависимой переменной, это будет величина фиктивная, но такое моделирование было бы более корректно, чем приравнивающее зависимую к нулю в точке "1 мес.". Просто любые отрицательные предсказания следовало бы жестко заменить на нули. Построить такую модель можно, если для каждой особи создать дополнительную точку "измерения" в момент ее гибели (если он известен) со значением 0. Но это сработает толков том случае, если гибель наступает строго при нуле, в чем я своем не уверен. В общем, такое моделирование включает довольно сильные непроверяемые предположения, заставляющие вспомнить о знаменитом сферическом коне... |
|
18.02.2024 - 13:30
Сообщение
#29
|
|
Группа: Пользователи Сообщений: 204 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
Vitek_22, пожалуйста, ответьте на два вопроса:
1. Известны ли даты смерти каждого животного, не дожившего до второго измерения? 2. Есть ли теоретические основания считать, что смерть животного наступает строго при достижении измеряемой величины нулевого значения? Сообщение отредактировал ИНО - 18.02.2024 - 13:30 |
|