Форум врачей-аспирантов

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Добавить ответ в эту темуОткрыть тему
> Критерий Краскела-Уоллиса для сравнения двух групп на трех визитах
Leonov
сообщение 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 .


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
100$
сообщение 10.07.2023 - 12:03
Сообщение #17





Группа: Пользователи
Сообщений: 902
Регистрация: 23.08.2010
Пользователь №: 22694



Цитата(Leonov @ 10.07.2023 - 08:21) *
Для корректности подробного описания по сравнениям двух групп рекомендую использовать именно значения объёмов значений в каждой сравниваемых групп,, а также использовать наличие или отсутствие именно нормального распределения. И когда в сравниваемых группах уже несколько разных признаков, можно использовать и кластерный анализ, когда может обнаружить и более двух групп. И для понимания возможных методов анализа читайте об этом на моём сайте про адресам 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



Цитата
Для корректности подробного описания по сравнениям двух групп рекомендую использовать именно значения объёмов значений в каждой сравниваемых групп

Мне кажется, или это сгенерировала машина? Не логистической регрессией единой жива томская биометирика - внедряем ИИ потихоньку (пусть пока и не в анализ медицинских данных, а лишь в создание рекламного контента)?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Vitek_22
сообщение 16.02.2024 - 19:14
Сообщение #19





Группа: Пользователи
Сообщений: 17
Регистрация: 7.12.2012
Пользователь №: 24440



Коллеги, очень похожая задача. Есть две группы животных, подвергнуты лечению и контроль. И для каждой группы было проведено 2 анализа в разных временных точках. Причём, во второй временной точке выборки подчиняются нормальному распределению (Шапиро-Уилка), но всё равно отклонение от нормальности субкритическое так сказать, а во второй - нет. Снижение времени - показатель прогрессии заболевания.
На мой взгляд нужен непараметрический аналог ANOVA с повторными измерениями. А его нет. Попарно всё сравнить Манна-Уитни? Не знаю, уместно ли. Посчитать ANOVA и использовать в апостериорном анализе критерий, который не чувствителен к "небольшим отклонениям от нормальности"? Если да, то какой?
Почитал чуть гугл, советуют использовать тест Фридмана. Но он позволяет провести сравнение между повторными измерениями, но не между несвязанными группами. Я так понял, что это аналог теста Вилкоксона... не аналог, но тест, который также работает только на связанных выборках (т.е. повторные измерения)

Прошу совета. Пользуюсь Statistica 12. В ней экзотических методов, которые выше советуют, нет.

Приложил Excel с исходными данными
Прикрепленные файлы
Прикрепленный файл  primer.xlsx ( 9,9 килобайт ) Кол-во скачиваний: 13
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
ИНО
сообщение 16.02.2024 - 23:04
Сообщение #20





Группа: Пользователи
Сообщений: 204
Регистрация: 1.06.2022
Из: Донецк
Пользователь №: 39632



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

Сообщение отредактировал ИНО - 17.02.2024 - 00:12
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
comisora
сообщение 17.02.2024 - 13:25
Сообщение #21





Группа: Пользователи
Сообщений: 95
Регистрация: 27.12.2015
Пользователь №: 27815



Цитата(Vitek_22 @ 16.02.2024 - 19:14) *
Есть две группы животных, подвергнуты лечению и контроль. И для каждой группы было проведено 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



Не нужна там трансформация - остатки плюс-минус лапать нормальны (маленький лапоть, не как в соседней теме smile.gif). Но немаленькая гетероскедастичность.

Вообще, с приведенными данными модно проделать очень много всякого, хорошие такие данные. вкусные smile.gif
Я просто не знаю, что из этого реализовано в Statistica 12, за неимением оной. А еще не совсем ясно, проверка каких конкретно гипотез интересует.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Vitek_22
сообщение 17.02.2024 - 15:25
Сообщение #23





Группа: Пользователи
Сообщений: 17
Регистрация: 7.12.2012
Пользователь №: 24440



Цитата(comisora @ 17.02.2024 - 13:25) *
но не по остаткам модели.


Что значат эти "остатки модели"? Далёк всё же от статистики)

Через месяц - это абсолютный показатель времени
Разницу вычислять - не очень, т.к. разный размер выборок (у части животных симптоматика прогрессировала быстрее и они погибли раньше повторного анализа). как в этом случае произвести вычитание?

Цитата(ИНО @ 17.02.2024 - 13:50) *
Вообще, с приведенными данными модно проделать очень много всякого, хорошие такие данные. вкусные smile.gif
Я просто не знаю, что из этого реализовано в Statistica 12, за неимением оной. А еще не совсем ясно, проверка каких конкретно гипотез интересует.

Возможно, мне надо осваивать другие программы))

Гипотеза. что лечение повлияло на развитие симптоматики и этот эффект был стойким во времени. Само заболеваний вылечить нельзя, т.к. оно генетически-обусловлено, но у "лечённой" группы показатели были лучше, как можно видеть из данных.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
ИНО
сообщение 17.02.2024 - 21:07
Сообщение #24





Группа: Пользователи
Сообщений: 204
Регистрация: 1.06.2022
Из: Донецк
Пользователь №: 39632



Цитата
Через месяц - это абсолютный показатель времени
Разницу вычислять - не очень, т.к. разный размер выборок (у части животных симптоматика прогрессировала быстрее и они погибли раньше повторного анализа). как в этом случае произвести вычитание?


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

Если же есть основания считать что смерить никак не связана с исследуемыми факторами, а произошла по сторонней (например, от старости), то все достаточно просто.

Из статистического ПО ничего универсальные R, вреде бы, пока не придумали. Единственный недостаток - тормоза, но сомневаюсь, что Ваши выборки столь велики, чтобы Вы из заметили. Ну и придется осваивать синтаксис. Но это придется рано или поздно делать в любом случае, не с R, так с Питоном или еще чем-то. То что предлагаться в кнопочный интерфейсах очень скудно и негибко. Я сходил по ссылке на статью многоуважаемого nokh о смешанном ДА - это же какой-то ужас в плане эргономики, а главное, вообще непонятно, каким конкретно образом был обработан случайный фактор (наверное оно где-то в недрах руководства мелким шрифтом прописано, но места знать надо). Ну на фиг такой интерфейс! Читал, что в новых версиях Statistica R уже интегрирован, т.е. устанавливать не придется, достаточно только вызвать.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
comisora
сообщение 17.02.2024 - 23:31
Сообщение #25





Группа: Пользователи
Сообщений: 95
Регистрация: 27.12.2015
Пользователь №: 27815



Цитата(Vitek_22 @ 17.02.2024 - 15:25) *
Что значат эти "остатки модели"?

Посмотрите учебные материалы по ссылке.

Цитата(Vitek_22 @ 17.02.2024 - 15:25) *
Разницу вычислять - не очень, т.к. разный размер выборок (у части животных симптоматика прогрессировала быстрее и они погибли раньше повторного анализа). как в этом случае произвести вычитание?


Тут возможны варианты: исключать из анализа (умер/не умер - другой вопрос), проставить умершим нули (время 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()


Цитата(ИНО @ 17.02.2024 - 21:07) *
Единственный недостаток - тормоза, но сомневаюсь, что Ваши выборки столь велики, чтобы Вы из заметили.

Это не баг, это - фича (с).
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  txt.txt ( 3,94 килобайт ) Кол-во скачиваний: 18
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
ИНО
сообщение 18.02.2024 - 11:34
Сообщение #26





Группа: Пользователи
Сообщений: 204
Регистрация: 1.06.2022
Из: Донецк
Пользователь №: 39632



Зачем GAM если есть только две точки для каждого животного. Чем обычные линейный модели не угодили? Кривую все равно по двум точкам не построить.

Идея с подстановкой нуля умершим меня тоже посещала, но была отброшена как неправомерная. Почему 0, а не 0,001 или -1? Первый вариант возможен в случае, если смерть животного наступает при показателе измеряемой величины малом, но большем, чем ноль, вторая - если она наступила задолго до второго измерения, а динамика показателя была такова, что при линейной эстраполяции на момент второго измерения ушла бы в область отрицательных значений. Так что правильного ответа, что следовало бы подставить мертвым, мы не знаем, а поскольку от него зависит параметры модели и достигаемые уровни значимости, подставлять что-либо права не имеем. Или же имеем право подставлять разное мульён раз, а потом рисовать ДИ для ДИ и для p, но то такое себе занятие... См. импутация.

Не только смешанные модели. Особь можно ввести в обычную линейную модель как фиксирванный фактор. Мощность пострадает, зато допущений меньше. Есть и другие пути. Но ни один из них не будет учитывать тот факт, что рецензирование неслучайно. Быть может, лучше построить две модели? Первая, построенная на всех особях, будет предсказывать выживет или умрет,вторая, построенная только на выживших особях - величину измеряемого показателя в случае, если подопытный таки протянет месяц.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
comisora
сообщение 18.02.2024 - 12:14
Сообщение #27





Группа: Пользователи
Сообщений: 95
Регистрация: 27.12.2015
Пользователь №: 27815



Цитата(ИНО @ 18.02.2024 - 11:34) *
Зачем 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

2 страниц V  < 1 2
Добавить ответ в эту темуОткрыть тему