TGViewer
Ebm_base Ebm_base @ebm_base · 3.94K subscribers
Post #1146 1.07K
Ebm_base Photo
Увидел я такой график. Опустим, что человек гордится тем, что LLM ему помогает их делать (и не только). Я хочу разобрать методологическую сторону (как я это вижу/пониманию).

1) Мне не очень понятно, зачем в заголовке указывать статистические показатели (ещё и явно другим шрифтом для латиницы). 🤷‍♂️

2) Вопросы, которые представлены на графике, словно подразумевают ответы "да"/"нет", а по цветовой гамме и легенде можно сделать вывод, что это сравнение между мужским и женским полом.

Наиболее вероятно, что по полам был подсчет относительной частоты утвердительных ответов на каждый вопрос с последующим расчетом разницы (мужской - женский). В медицинских исследованиях обычно это обозначается термином разница рисков (risk difference, RD) или абсолютный риск (absolute risk, AR). И это было бы окэй, но...

Здесь зачем-то используется мера эффекта d Коэна (Cohen's d)... Если кто не знает, то обычно она используется для стандартизации разницы средних (если очень упрощенно, подробнее тут). И вроде бы можно сказать, что частота и среднее - это мат ожидание, для бинарных данных они равны (сам же здесь показывал), но...
Зачем нужен этот перерасчёт? Ведь разница рисков итак уже в какой-то мере стандартизирована (она всегда находится на одной шкале, единицы измерения равны). Если сильно хочется, то можно посчитать относительный риск (risk ratio, RR), который лучше (если надо в единых величинах) отражает изменение эффекта (RR может быть равным 2 при RD = 30% или = 5%, зависит от исходной частоты).
А ещё интересный вопрос - как ведёт себя неопределенность?

Давайте проверим, сделаем симуляцию.
library(tidyverse)

# Создаем симуляцию, где мужчины реже ответили "да", чем женщины
set.seed(42)
d_long <- tibble(male = rbinom(1000, 1, 0.4),
female = rbinom(1000, 1, 0.6)) |>
pivot_longer(male:female) |>
mutate(name = factor(name, levels = c("male", "female")),
value = as.numeric(value))

# Посмотрим частоту ответов
d_long |>
summarise(rate = sum(value),
prct = rate/1000,
.by = name)
#> A tibble: 2 × 3
#> name rate prct
#> <fct> <dbl> <dbl>
#> 1 male 377 0.377
#> 2 female 599 0.599

# В целом как и планировалось

# Выводим таблицу сопряженности
d_long |>
mutate(value = factor(value, levels = c(1,0))) |>
select(value, name) |>
table()
#> name
#> value male female
#> 1 377 599
#> 0 623 401

# Рассчитаем разницу рисков с ДИ
RD = 0.377 - 0.599
SE = sqrt((377 * 623)/(377 + 623)^3 + (599 * 401)/(599 + 401)^3)
paste0(RD, " (", round(RD - 1.96*SE, 3), "; ", round(RD + 1.96*SE, 3), ")")
#> [1] "-0.222 (-0.265; -0.179)"

# Проверим через пакет
table(d_long) |>
effectsize::arr()
#> ARR | 95% CI
#> -------------------
#> 0.22 | [0.18, 0.26]

# Все верно, только знака минус нет (потому что это Absolute risk reduction)

# Рассчитаем sd
d_long |>
summarise(rate = sum(value),
prct = rate/1000,
sd = sd(value),
.by = name)
#> A tibble: 2 × 4
#> name rate prct sd
#> <fct> <dbl> <dbl> <dbl>
#> 1 male 377 0.377 0.485
#> 2 female 599 0.599 0.490

# Получим d Коэна
sd_pool = sqrt(((1000 - 1) * 0.485^2 + (1000 - 1) * 0.490^2)/(2000-2))
round(RD/sd_pool, 3)
#> [1] -0.455

# Проверим через пакет
effectsize::cohens_d(value ~ name, data = d_long, pooled_sd = F)
#> Cohen's d | 95% CI
#> --------------------------
#> -0.46 | [-0.54, -0.37]


Упс... Какая-то квази/прокси/псевдо-оценка эффекта. Получается, что результаты стандартизации излишни. Они ничего не добавляют, а только усложняют интерпретацию (т.к. это теперь не разница частоты, а ее размер в SD). Сделал бы так человек, который базово что-то прочитал про статистику?
  • 👍 4
  • ❤ 2
More from @ebm_base
  1. Sep 16, 2026Отсутствую по важным причинам
  2. Aug 31, 2026Не очень я хотел когда-либо подобное писать... Но ситуация и ответственность за семью для…
  3. Aug 31, 2026Ebm_base pinned «Коллеги из института биоинформатики начали публиковать материалы, чтобы у…
  4. Aug 30, 2026IQDOC получил масштабное обновление 1.4 Вот что в версии 1.4: 🎙Голосовой ввод – теперь IQ…
  5. Aug 29, 2026Коллеги из института биоинформатики начали публиковать материалы, чтобы уменьшить количест…
  6. Aug 28, 2026в рамках подготовки снова делаю мемы) Предложения и критика приветствуются)
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 →