Попытка использовать приборку для анализа мощности и использования clmm2 - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь провести анализ мощности на анализе clmm2, который я делаю. Это код для конкретной статистической модели:

test <- clmm2(risk_sensitivity ~ treat + sex + dispersal + 
sex*dispersal + treat*dispersal + treat*sex,random = id, data = datasocial, Hess=TRUE)

Теперь у меня есть следующая функция:

sim_experiment_power <- function(rep) {
  s <- sim_experiment(n_sample = 1000,
                      prop_disp = 0.10,
                      prop_fem = 0.35,
                      disp_probability = 0.75,
                      nondisp_probability = 0.90,
                      fem_probability = 0.75,
                      mal_probability = 0.90)
  broom.mixed::tidy(s) %>%
    mutate(rep = rep)
}
my_power <- map_df(1:10, sim_experiment_power)

Детали функции sim_experiment не имеют значения, потому что они работают как ожидается. Важно знать, что это приводит к статистическому результату clmm2. Моя цель с помощью функции выше - провести анализ мощности. Тем не менее, я получаю следующую ошибку:

Ошибка: нет аккуратный метод для объектов класса clmm2

Я немного новичок в R, но я думаю, это означает эта приборка не работает с clmm2. Кто-нибудь знает обходной путь для этой проблемы?

РЕДАКТИРОВАТЬ: Это то, что следует за кодом, который я опубликовал выше, что в конечном итоге я пытаюсь получить.

Вы можете тогда нанесите на график распределение оценок по вашим симуляциям.

ggplot(my_power, aes(estimate, color = term)) +
  geom_density() +
  facet_wrap(~term, scales = "free")

Вы также можете просто рассчитать мощность как долю значений р, меньшую вашей альфа.

my_power %>%
  group_by(term) %>%
  summarise(power <- mean(p.value < 0.05))

1 Ответ

2 голосов
/ 13 февраля 2020

Для того, что вам нужно, вы можете написать функцию, которая будет возвращать коэффициенты с тем же именем столбца:

library(ordinal)
library(dplyr)
library(purrr)

tidy_output_clmm = function(fit){
  results = as.data.frame(coefficients(summary(fit)))
  colnames(results) = c("estimate","std.error","statistic","p.value")
  results %>% tibble::rownames_to_column("term")
}

Затем мы применяем его, используя пример, в котором я выбираю набор данных wine в порядковом порядке:

sim_experiment_power <- function(rep) {
  idx = sample(nrow(wine),replace=TRUE)
  s <- clmm2(rating ~ temp, random=judge, data=wine[idx,], nAGQ=10,Hess=TRUE)
  tidy_output_clmm(s) %>% mutate(rep=rep)
}

my_power <- map_df(1:10, sim_experiment_power)

Плоттерные работы:

ggplot(my_power, aes(estimate, color = term)) +
  geom_density() +
  facet_wrap(~term, scales = "free")

enter image description here

Так же, как и мощность:

my_power %>% group_by(term) %>% summarise(power = mean(p.value < 0.05))
    # A tibble: 5 x 2
  term     power
  <chr>    <dbl>
1 1|2        0.9
2 2|3        0.1
3 3|4        1  
4 4|5        1  
5 tempwarm   1  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...