- Статистические ошибки при проверке гипотез
- Мощность статистического теста
- A priori анализ мощности, оценка величины эффекта
- Post hoc анализ мощности
- Как влиять на мощность тестов
ggplot2
H0 == TRUE | H0 == FALSE | |
---|---|---|
Отклонить H0 | Ошибка I рода Ложно-положительный результат | Верно Положительный результат |
Сохранить H0 | Верно Отрицательный результат | Ошибка II рода Ложно-отрицательный результат |
H0 == TRUE | H0 == FALSE | |
---|---|---|
Отклонить H0 | Ошибка I рода Ложно-положительный результат | Верно Положительный результат |
Сохранить H0 | Верно Отрицательный результат | Ошибка II рода Ложно-отрицательный результат |
H0 == TRUE | H0 == FALSE | |
---|---|---|
Отклонить H0 | Ошибка I рода Ложно-положительный результат | Верно Положительный результат |
Сохранить H0 | Верно Отрицательный результат | Ошибка II рода Ложно-отрицательный результат |
H0 == TRUE | H0 == FALSE | |
---|---|---|
Отклонить H0 | Ошибка I рода Ложно-положительный результат | Верно Положительный результат |
Сохранить H0 | Верно Отрицательный результат | Ошибка II рода Ложно-отрицательный результат |
Haliotis rubra
Лов халиотисов (коммерческий и любительский) запретили, организовав заповедник.
Стало ли больше моллюсков через несколько лет? (Keough, King, 1991)
Что нужно
тест
уровень значимости
желаемая мощность теста
ожидаемая величина эффекта
- \(t\)-критерий
\(alpha = 0.05\)
P = 80%
?
Яков Коэн
\(d\) Коэна (Cohen's d)
\[d = \frac{\bar \mu_1 - \bar \mu_2}{\sigma}\]
\[d = \frac{\bar \mu_1 - \bar \mu_2}{\sigma}\]
\(d = \frac {|\bar x_1 - \bar x_2|} { \sqrt {\frac {s_1^2 + s_2^2 } {2} }}\)
\(g = \frac {|\bar x _{1} - \bar x _{2}|} { \sqrt {\frac {(n_{1} - 1) s_1^2 + (n_{2} - 1) s_{2}^2 } {n_{1} + n_{2} - 2} } }\)
\[d = \frac{\bar \mu_1 - \bar \mu_2}{\sigma}\]
(Cohen, 1982)
сильные, умеренные и слабые эффекты
library(pwr) cohen.ES(test = "t", size = "large")
## ## Conventional effect size from Cohen (1982) ## ## test = t ## size = large ## effect.size = 0.8
величину умеренных и слабых эффектов для t-критерия
library() cohen.ES()
Подсказка: обозначения можно посмотреть в файлах справки
help(cohen.ES) ?cohen.ES cohen.ES # курсор на слове, нажать F1
\[d = \frac{\bar \mu_1 - \bar \mu_2}{\sigma}\]
\({\sigma}\) - cтандартное отклонение плотности халиотисов:
\({\bar \mu_1 - \bar \mu_2}\) - cредний вылов халиотисов в год:
alpha <- 0.05 power <- 0.80 sigma <- 27.7 # варьирование плотности халиотисов diff <- 23.2 # ожидаемые различия плотности халиотисов effect <- diff/sigma # величина эффекта effect
## [1] 0.838
pwr.t.test()
pwr.t2n.test()
pwr.t.test(n = NULL, d = effect, power = power, sig.level = alpha, type = "two.sample", alternative = "two.sided")
## ## Two-sample t test power calculation ## ## n = 23.4 ## d = 0.838 ## sig.level = 0.05 ## power = 0.8 ## alternative = two.sided ## ## NOTE: n is number in *each* group
сколько нужно обследовать мест, чтобы обнаружить слабый эффект с вероятностью 0.8, при уровне значимости 0.01
cohen.ES() pwr.t.test()
cohen.ES(test = "t", size = "small")
## ## Conventional effect size from Cohen (1982) ## ## test = t ## size = small ## effect.size = 0.2
pwr.t.test(n = NULL, d = 0.2, power = 0.8, sig.level = 0.01, type = "two.sample", alternative = "two.sided")
## ## Two-sample t test power calculation ## ## n = 586 ## d = 0.2 ## sig.level = 0.01 ## power = 0.8 ## alternative = two.sided ## ## NOTE: n is number in *each* group
grey bird
В каком возрасте сложнее поддерживать равновесие, если вы сосредоточены на чем-то другом?
9 пожилых людей (6 мужчин и 3 женщины) и 8 молодых мужчин просили стоять на измерительной платформе. В ответ на неожиданный звук испытуемые должны были как можно быстрее нажать на кнопку. Платформа измеряла в мм насколько человек отклонялся вбок или вперед-назад.
Не забудте войти в вашу директорию для матметодов, например, так
# setwd("C:/Мои\ документы/mathmethR/) # в Windows # setwd(/home/yourusername/mathmethR/) # в Linux library(readxl) bal <- read_excel(path = "data/balance.xlsx", sheet = 1)
str(bal) # Структура данных
## Classes 'tbl_df', 'tbl' and 'data.frame': 17 obs. of 4 variables: ## $ subject_no : num 1 2 3 4 5 6 7 8 9 1 ... ## $ forward_backward: num 19 30 20 19 29 25 21 24 50 25 ... ## $ side_side : num 14 41 18 11 16 24 18 21 37 17 ... ## $ age_group : chr "elderly" "elderly" "elderly" "elderly" ...
head(bal) # Первые несколько строк файла
## # A tibble: 6 × 4 ## subject_no forward_backward side_side age_group ## <dbl> <dbl> <dbl> <chr> ## 1 1 19 14 elderly ## 2 2 30 41 elderly ## 3 3 20 18 elderly ## 4 4 19 11 elderly ## 5 5 29 16 elderly ## 6 6 25 24 elderly
bal$side_side[1:3] # Первые три значения переменной side_side
## [1] 14 41 18
bal[12:14, c(1, 2, 4)] # 12-14 строки, 1, 2 и 4 столбцы
## # A tibble: 3 × 3 ## subject_no forward_backward age_group ## <dbl> <dbl> <chr> ## 1 3 17 young ## 2 4 15 young ## 3 5 14 young
bal$age_group <- factor(bal$age_group, levels = c("young", "elderly"), labels = c("молодые", "пожилые"))
Посмотреть, что получилось, можно так
levels(bal$age_group)
## [1] "молодые" "пожилые"
Геом geom_boxplot
library(ggplot2) ggplot(data = bal, aes(x = age_group, y = forward_backward)) + geom_boxplot()
theme_set(theme_bw()) ggplot(data = bal, aes(x = age_group, y = forward_backward)) + geom_boxplot()
эстетика fill
- заливка эстетика colour
- контуры
ggplot(data = bal, aes(x = age_group, y = forward_backward, fill = age_group)) + geom_boxplot() ggplot(data = bal, aes(x = age_group, y = forward_backward, colour = age_group)) + geom_boxplot()
Добавьте - подписи осей - название графика - название легенды
Сохраните график в переменной
gg_balance <- ggplot(data = bal, aes(x = age_group, y = forward_backward)) + geom_boxplot(aes(fill = age_group)) + labs(title = "Баланс тела", x = "Возрастная группа", y = "Движение \nвперед-назад (мм)", fill = "Возрастная \nгруппа") gg_balance
Мы хотим сравнить возрастные группы
Нам нужно рассчитать величину эффекта по исходным данным. Для этого понадобится пакет effsize
library(effsize) effect <- cohen.d(bal$forward_backward, bal$age_group) effect
## ## Cohen's d ## ## d estimate: -1.07 (large) ## 95 percent confidence interval: ## inf sup ## -2.260 0.117
str(effect)
## List of 6 ## $ method : chr "Cohen's d" ## $ name : chr "d" ## $ estimate : Named num -1.07 ## ..- attr(*, "names")= chr "молодые" ## $ conf.int : Named num [1:2] -2.26 0.117 ## ..- attr(*, "names")= chr [1:2] "inf" "sup" ## $ conf.level: num 0.95 ## $ magnitude : Ord.factor w/ 4 levels "negligible"<"small"<..: 4 ## - attr(*, "class")= chr "effsize"
$
effect$estimate
## молодые ## -1.07
effect <- abs(effect$estimate)
объем выборки, чтобы показать различия между группами с вероятностью 0.8?
Вам понадобится функция pwr.t.test
library(pwr) pwr.t.test(n = NULL, d = effect, power = 0.8, sig.level = 0.05, type = "two.sample", alternative = "two.sided")
## ## Two-sample t test power calculation ## ## n = 14.7 ## d = 1.07 ## sig.level = 0.05 ## power = 0.8 ## alternative = two.sided ## ## NOTE: n is number in *each* group
20 морским свинкам давали витамин С в виде апельсинового сока или аскорбиновой кислоты и измеряли рост зубов.
teeth <- read_excel("data/teeth.xlsx", sheet = 1) str(teeth)
## Classes 'tbl_df', 'tbl' and 'data.frame': 20 obs. of 3 variables: ## $ len : num 23.6 18.5 33.9 25.5 26.4 32.5 26.7 21.5 23.3 29.5 ... ## $ supp: chr "VC" "VC" "VC" "VC" ... ## $ dose: num 2 2 2 2 2 2 2 2 2 2 ...
Проверьте при помощи t-критерия будет ли различаться размер зубов при разных способах употребления
t.test(len ~ supp, data = teeth)
## ## Welch Two Sample t-test ## ## data: len by supp ## t = -0.05, df = 10, p-value = 1 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -3.80 3.64 ## sample estimates: ## mean in group OJ mean in group VC ## 26.1 26.1
Какова была реальная величина эффекта?
Хватило ли нам мощности, чтобы выявлять такие незначительные различия?
effect_real <- cohen.d(teeth$len, teeth$supp) effect_real <- abs(effect_real$estimate) pwr.t.test(n = 10, d = effect_real, power = NULL, sig.level = 0.01, type = "two.sample", alternative = "two.sided")
## ## Two-sample t test power calculation ## ## n = 10 ## d = 0.0206 ## sig.level = 0.01 ## power = 0.0101 ## alternative = two.sided ## ## NOTE: n is number in *each* group
Какие из факторов, влияющих на мощность теста, мы не можем контролировать?
Каким образом можно повлиять на мощность теста?