Здравствуйте, гость ( Вход | Регистрация )
25.05.2022 - 12:45
Сообщение
#1
|
|
|
Группа: Пользователи Сообщений: 30 Регистрация: 7.12.2012 Пользователь №: 24440 |
Салют! Столкнулся с проблемой сравнения двух выборок, в каждой из которых по 3 значения. Это результаты иммуноблоттинга (определение концентрации целевого белка в пробе) очень ценных образцов, полученных от трансгенных животных. Но их - образцов, было всего 3 для каждой из групп (2 группы: интактная и подвергнутая воздействию исследуемого фактора). Покопавшись в литературе, нашёл статьи, где есть такие выборки и авторы как ни в чём не бывало используют t-критерий Стьюдента для сравнения средних. Нашёл статьи, где используют U-критерий Манна-Уитни... Скажем так, в биологии 3 образца - это нормально для публикации, если речь идёт об особо ценном и сложнополучаемом биоматериале (к примеру как у меня, когда животные практически не дают потомства). Т.е. представить эти данные можно и не стыдно. Но вот как сравнить, как показать, что эти выборки отличаются статистически значимо, иными словами, что наш исследуемый фактор значимо повлиял на концентрацию целевого белка?
Почитал ещё о таком методе, как ресамплинг или бутстреп, когда объём выборки искусственно увеличивают. Ну, не знаю насколько это правильно... также не нашёл софт и чёткого понимания как это сделать у меня нет. Работаю в проге Statistica 12 Посоветуйте, как всё же обработать эти данные. Вот пример исходных цифр: Выборка 1: 221,60112 305,217725 295,251684 Выборка 2: 371,3313 397,452722 437,212724 |
|
|
![]() |
![]() |
![]() |
18.06.2022 - 17:49
Сообщение
#2
|
|
|
Группа: Пользователи Сообщений: 109 Регистрация: 27.12.2015 Пользователь №: 27815 |
Добрый день.
Предлагаю рассмотреть на жизнеспособность подход из серии "продуктивных методов анализа". Так как данные количественные, минимальное значение концентрации белка 0, а в качестве максимального возьмём самое больше значение из данных обсуждаемого эксперимента. После трансформации данных к диапазону (0, 1), можно выполнить сравнение двух групп через бета-регрессию. CODE ## Создадим данные a <- c(221.60112, 305.217725, 295.251684) b <- c(371.3313, 397.452722, 437.212724) ab <- c(a, b) n <- length(ab) g <- rep(c('a', 'b'), time = c(length(a), length(b))) ## Трансформация к диапазону (0; 1) vec <- scales::rescale_max(ab, from = c( 1/max(ab)/n, max(ab)+max(ab)/n ) ) ## Бета-регрессия fit <- betareg::betareg(vec~g) emm <- emmeans::emmeans(fit, ~g) ## Средние и ДИ для групп res <- data.frame(emm, row.names = 'g')[c('emmean', 'asymp.LCL', 'asymp.UCL')] cev <- apply(res, 2, function(x) scales::rescale_max(x, to = c( 1/max(ab)/n, max(ab)+max(ab)/n ), from = c(0, 1))) ## Разница средних и ДИ ctr <- data.frame(confint(pairs(emm)))[c('estimate', 'asymp.LCL', 'asymp.UCL')] rtc <- apply(ctr, 2, function(x) scales::rescale_max(x, to = c( 1/max(ab)/n, max(ab)+max(ab)/n ), from = c(0, 1))) ## Расчёт средних в группах set.seed(32167) mean.a <- Hmisc::smean.cl.boot(a, B = 9999) mean.b <- Hmisc::smean.cl.boot(b, B = 9999) means <- rbind(cev, mean.a, mean.b) colnames(means) <- c('mu', 'lwr', 'upr') ## Расчёт разницы средних и ДИ set.seed(32167) ci.bca <- confintr::ci_mean_diff(a, b, type = 'bootstrap', boot_type = 'bca') ci.per <- confintr::ci_mean_diff(a, b, type = 'bootstrap', boot_type = 'perc') ci.nor <- confintr::ci_mean_diff(a, b, type = 'bootstrap', boot_type = 'norm') ci.bas <- confintr::ci_mean_diff(a, b, type = 'bootstrap', boot_type = 'basic') fun_extr <- function(x) { #Для единообразного извлечения estimate <- x[['estimate']] interval <- x[['interval']] result <- c(estimate, interval) return(result) } diffs <- rbind( beta = rtc, bca = fun_extr(ci.bca), perc = fun_extr(ci.per), norm = fun_extr(ci.nor), basic = fun_extr(ci.bas) ) colnames(diffs) <- c('mu', 'lwr', 'upr') ## Выводим результат summary(fit) print(means, digits = 5) print(diffs, digits = 5) > Call: betareg::betareg(formula = vec ~ g) Standardized weighted residuals 2: Min 1Q Median 3Q Max -1.7892 -1.0236 0.2118 0.9816 1.5627 Coefficients (mean model with logit link): Estimate Std. Error z value Pr(>|z|) (Intercept) 0.1480 0.1607 0.921 0.357 gb 1.1632 0.2525 4.606 4.1e-06 *** Phi coefficients (precision model with identity link): Estimate Std. Error z value Pr(>|z|) (phi) 50.91 29.16 1.746 0.0808 . --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Type of estimator: ML (maximum likelihood) Log-likelihood: 8.148 on 3 Df Pseudo R-squared: 0.7817 Number of iterations: 68 (BFGS) + 2 (Fisher scoring) > mu lwr upr a 273.88 233.94 313.82 b 401.80 369.21 434.40 mean.a 274.02 221.60 305.22 mean.b 402.00 371.33 437.21 > mu lwr upr beta -127.92 -179.45 -76.395 bca -127.98 -191.06 -86.850 perc -127.98 -180.40 -78.143 norm -127.98 -180.30 -74.747 basic -127.98 -177.81 -75.553 Судя по результатам, средние и доверительные интервалы, разница средних, которые получены через бета-модель, аналогичны таковым при вычислении через бутстреп. Теперь попробуем повторить анализ для смеси распределений бета-регрессией, разными вариантами бутстрепа. Форма вывода - как у 100$. CODE ##Дополнительные функции #fix fun_int <- function(x) { int <- x[['interval']] return(int) } fun_res <- function(data, diff) { len <- length(data) res <- vapply(X = 1:n, FUN.VALUE = logical(1), function(i) { cond <- diff>data[[i]][1] & diff<data[[i]][2] return(cond) } ) pr <- sum(res)/len sums <- rowMeans(simplify2array(data)) res <- list(low = sums[1], up = sums[2], l = abs(sums[1]-sums[2]), prob = pr) return(res) } x <- c(221.60112, 305.217725, 295.251684) y <- c(371.3313, 397.452722, 437.212724) mu_x <- mean(x) mu_y <- mean(y) len_x <- length(x) sd_x <- sd(x) sd_y <- sd(y) len_y <- length(y) diff <- mu_x-mu_y len <- len_x+len_y g <- rep(c('x', 'y'), time = c(len_x, len_y)) idx <- c('asymp.LCL', 'asymp.UCL') n <- 1000 res <- vector(mode = 'logical', length = n) set.seed(32167) x_sim <- replicate(n, c( rnorm(round(len_x*2/3), mu_x, sd_x*1/3), rnorm(round(len_x*1/3), mu_x, sd_x*2/3*2.5) ) ) y_sim <- replicate(n, c( rnorm(round(len_x*2/3), mu_y, sd_y*1/3), rnorm(round(len_x*1/3), mu_y, sd_y*2/3*2.5) ) ) xy_sim <- rbind(x_sim, y_sim) vec_sim <- apply(xy_sim, 2, function(i) scales::rescale_max(i, from = c( 1/max(i)/len, max(i)+max(i)/len ) )) ci_beta <- lapply( X = 1:n, FUN = function(i) { fit <- betareg::betareg(vec_sim[,i]~g) ci <- as.numeric(confint(pairs(emmeans::emmeans(fit, ~g)))[idx]) ic <- scales::rescale_max(ci, to = c( 1/max(xy_sim[,i])/len, max(xy_sim[,i])+max(xy_sim[,i])/len ), from = c(0, 1) ) return(ic) }) ci_bca <- lapply( X = 1:n, FUN = function(i) { fit <- confintr::ci_mean_diff(x_sim[,i], y_sim[,i], type = 'bootstrap', boot_type = 'bca', R = n) ci <- fun_int(fit) return(ci) }) ci_perc <- lapply( X = 1:n, FUN = function(i) { fit <- confintr::ci_mean_diff(x_sim[,i], y_sim[,i], type = 'bootstrap', boot_type = 'perc', R = n) ci <- fun_int(fit) return(ci) }) ci_norm <- lapply( X = 1:n, FUN = function(i) { fit <- confintr::ci_mean_diff(x_sim[,i], y_sim[,i], type = 'bootstrap', boot_type = 'norm', R = n) #fix ci <- fun_int(fit) return(ci) }) ci_basic <- lapply( X = 1:n, FUN = function(i) { fit <- confintr::ci_mean_diff(x_sim[,i], y_sim[,i], type = 'bootstrap', boot_type = 'basic', R = n) #fix ci <- fun_int(fit) return(ci) }) vct <- ls(pattern = 'ci_') res_ci <- t(simplify2array(lapply(1:length(vct), function(i) { #do.call(fun_res, list(data = get(vct[i]), diff = get('diff'))) fun_res(data = get(vct[i]), get('diff')) #fix }))) row.names(res_ci) <- vct print(res_ci, digits = 5) # fix low up l prob ci_basic -173.1 -81.769 91.328 0.885 ci_bca -176.03 -81.595 94.435 0.773 ci_beta -172.44 -79.885 92.552 0.866 ci_norm -174 -80.332 93.666 0.876 ci_perc -172.38 -81.104 91.271 0.814 Сообщение отредактировал comisora - 18.06.2022 - 21:58 |
|
|
![]() |
![]() |
Vitek_22 Критерий для анализа сверхмалых выборок 25.05.2022 - 12:45
Игорь В принципе любая непараметрика. Можно посмотреть к... 26.05.2022 - 08:42
salm Цитата(Игорь @ 26.05.2022 - 08:42) В... 24.02.2023 - 13:32
ИНО В указанных критериях объемы выборок, учитывается ... 24.02.2023 - 14:47

salm Цитата(ИНО @ 24.02.2023 - 14:47) В у... 24.02.2023 - 20:55

100$ > Спасибо. А в принципе, такое выражение ... 24.02.2023 - 23:32
Игорь Цитата(salm @ 24.02.2023 - 14:32) Зд... 24.02.2023 - 17:37
salm Цитата(Игорь @ 24.02.2023 - 17:37) Е... 24.02.2023 - 20:47
ИНО Цитата(salm @ 24.02.2023 - 20:47) А ... 25.02.2023 - 05:37
Игорь Удалено автором поста. 1.03.2023 - 10:25
Vitek_22 Игорь, спасибо. А как обосновать использование это... 26.05.2022 - 10:41
100$ Цитата(Vitek_22 @ 26.05.2022 - 10:41... 26.05.2022 - 17:46
Игорь Цитата(Vitek_22 @ 26.05.2022 - 10:41... 31.05.2022 - 07:07
ИНО Вот-только при помощи перестановок Вы никогда не д... 5.06.2022 - 23:55
Игорь Цитата(Vitek_22 @ 25.05.2022 - 13:45... 9.06.2022 - 13:53
100$ Цитата(Игорь @ 9.06.2022 - 13:53) Кр... 9.06.2022 - 16:17
ИНО Цитата(100$ @ 9.06.2022 - 16:17... 9.06.2022 - 23:21
100$ Цитата(ИНО @ 9.06.2022 - 23:21) Поче... 10.06.2022 - 10:08
ИНО Сдается мне, Ваше творение нагло врет, по крайней ... 9.06.2022 - 16:05
Игорь Спасибо коллегам за подробный разбор. Проверил. Сн... 9.06.2022 - 20:08
ИНО ЦитатаГрубо говоря - одно и то же. Исправлять нече... 9.06.2022 - 22:28
Игорь Цитата(ИНО @ 9.06.2022 - 22:28) Одна... 10.06.2022 - 13:15
ИНО Очевидно, сии подделки экселя прозрачно намекают, ... 10.06.2022 - 14:00
ИНО Почитал мануал ПАСТа, относительно "permutati... 11.06.2022 - 15:09
100$ Цитата(ИНО @ 11.06.2022 - 15:09) Пол... 12.06.2022 - 12:43
ИНО ЦитатаА это разовое значение (в смысле, полученное... 13.06.2022 - 19:29
nokh Цитата(Vitek_22 @ 25.05.2022 - 14:45... 17.06.2022 - 07:34
ИНО Цитата(nokh @ 17.06.2022 - 07:34) Мо... 17.06.2022 - 13:17
100$ Цитата(ИНО @ 17.06.2022 - 13:17) ...... 17.06.2022 - 13:26
100$ ЦитатаНе знаю почему уважаемые участники форума не... 17.06.2022 - 12:13
ИНО Хороший вопрос! Документация пакета boot (свер... 17.06.2022 - 17:12
100$ Цитата(ИНО @ 17.06.2022 - 17:12) Выв... 18.06.2022 - 01:12
ИНО Ну что поделать, я не умею толком ни программирова... 18.06.2022 - 01:54
ИНО ИМХО бета тут как бы совсем за уши притянута, огра... 18.06.2022 - 18:17
comisora 2ИНО
Ошибки исправил, результат тоже, спасибо.
По... 18.06.2022 - 19:12
100$ >comisora,
а вы можете откомментировать констр... 18.06.2022 - 21:26
comisora 2 100$
Конечно. Это я усложнил код, так как ... 18.06.2022 - 23:53
100$ Цитата(comisora @ 18.06.2022 - 23:53... 19.06.2022 - 00:16
100$ Подведем некоторые промежуточные итоги.
В соответ... 19.06.2022 - 22:20
comisora 2 100$
У меня опыта создания пакетов нет (да... 20.06.2022 - 00:42
ИНО Цитата(100$ @ 19.06.2022 - 22:2... 20.06.2022 - 04:56
100$ "Я проснулся сегодня рано..." (Исполняет... 20.06.2022 - 13:01
ИНО Нет, на той гистограмме - распределение при нулево... 20.06.2022 - 17:10
100$ ЦитатаНет, на той гистограмме - распределение при ... 20.06.2022 - 23:24
ИНО Да все в порядке изначально было с гистограммой ст... 21.06.2022 - 03:31
100$ ЦитатаС этим не спорю. Заметьте, здесь порядок циф... 21.06.2022 - 12:21
ИНО Ну, результаты моделирования как бы намекают, что ... 21.06.2022 - 21:00
100$ Цитата(ИНО @ 21.06.2022 - 21:00) А в... 23.06.2022 - 00:19
comisora Цитата(100$ @ 21.06.2022 - 12:2... 22.06.2022 - 10:42
ИНО Этот ответ справедлив только для критериев рандоми... 23.06.2022 - 04:56
100$ Но, если уж на то пошло, для желаемого соотношения... 23.06.2022 - 11:10
salm Добрый день. пожалуйста, у меня есть парные измер... 12.01.2023 - 11:51
100$ Цитата(salm @ 12.01.2023 - 11:51) До... 12.01.2023 - 13:39
salm Цитата(100$ @ 12.01.2023 - 13:3... 12.01.2023 - 16:09
ИНО Проблема множественных сравнений отнюдь не исчерпы... 1.03.2023 - 12:35
Игорь Удалено автором поста. 1.03.2023 - 20:24
ИНО Пример 1. Почему у Смирнова мощность значительно м... 2.03.2023 - 07:16
Игорь Удалено автором поста. 2.03.2023 - 07:39
ИНО Так-то оно так, вот только для перестраховки приня... 2.03.2023 - 10:06
ИНО Причем тут смежные области? Вопрос лежит сугубо в ... 2.03.2023 - 11:51
Vitek_22 Господа, я что-то совсем позабыл выложить пример. ... 8.08.2025 - 00:33
Игорь Цитата(Vitek_22 @ 8.08.2025 - 01:33)... 8.08.2025 - 07:38
ИНО Если я правильно понял задачу, то получить p<0... 8.08.2025 - 18:26
Vitek_22 тов. Игорь, можете привести эти две выборки по 3 з... 8.08.2025 - 20:53
Игорь Цитата(Vitek_22 @ 8.08.2025 - 21:53)... 9.08.2025 - 10:01
ИНО Признаю свою неправоту. Хотя она не столкьо моя, с... 8.08.2025 - 21:21
Vitek_22 Тов. Игорь, в статье. что я приложил объём выборок... 9.08.2025 - 13:02
Игорь Цитата(Vitek_22 @ 9.08.2025 - 14:02)... 9.08.2025 - 15:58
ИНО Дело не в мощности. Мощность критерия - функция, з... 9.08.2025 - 17:51
ИНО RE: Критерий для анализа сверхмалых выборок 9.08.2025 - 18:24
ИНО Один неприятный технический момент, который можно ... 9.08.2025 - 18:34
Игорь Удалено автором поста. 10.08.2025 - 18:41
ИНО Я выложил распределение статистики. Постройте гист... 11.08.2025 - 12:32
Игорь Удалено автором поста. 11.08.2025 - 19:16
ИНО То есть слово "exact" в выдаче Вы в упор... 11.08.2025 - 20:52
ИНО ЦитатаStudent test (location): two sided p = 0.019... 11.08.2025 - 21:06
Игорь Удалено автором поста. 11.08.2025 - 21:56
ИНО Скачал Руниона этого. Алгоритм, который он предлаг... 11.08.2025 - 22:13
ИНО Цитата(Игорь @ 11.08.2025 - 21:56) У... 11.08.2025 - 22:25
Игорь Удалено автором поста. 12.08.2025 - 13:29
ИНО R правильно считает. StatXact, наверное, тоже счи... 12.08.2025 - 21:52
Игорь Удалено автором поста. 13.08.2025 - 11:44
ИНО Вы неверно считаете двустороннее. Что есть односто... 13.08.2025 - 13:55
Игорь Удалено автором поста. 14.08.2025 - 07:10
ИНО Вот именно двустороннее и неверное, к односторонни... 14.08.2025 - 17:40
Игорь Удалено автором поста 15.08.2025 - 09:21
ИНО Только что совершенно случайно в процессе чтения с... 14.08.2025 - 18:01
ИНО Игорь, полагаю, откуда и как установить R или еще ... 15.08.2025 - 13:48
Игорь Удалено автором поста. 15.08.2025 - 14:31
ИНО Если Вы считаете слово "творения" оскорб... 16.08.2025 - 13:13
Игорь Думаю, что мы немного погорячились. Да и я, винова... 26.08.2025 - 19:58
ИНО Тогда и меня простите. Но это касается исключитель... 26.08.2025 - 23:54
Игорь Цитата(ИНО @ 27.08.2025 - 00:54) Во-... 27.08.2025 - 08:09
ИНО Ну все ж хотелось бы докопаться до истины - какой ... 27.08.2025 - 16:26
Игорь В комментариях исходников coin есть названия источ... 4.09.2025 - 19:12![]() ![]() |