Bootstrap t.test: использование функции apply для нескольких уровней группировки

#r #dataframe #lapply #t-test

#r #фрейм данных #lapply #t-тест

Вопрос:

Мне нужно запустить мою «автоматическую» lapply t.test функцию для вычисления статистики начальной загрузки (оригинал, смещение и стандартная ошибка). Вот базовый t.test код, который я получил на данный момент (без начальной загрузки):

 # create data
val<-runif(60, min = 0, max = 100)
distance<-floor(runif(60, min=1, max=3))
phase<-rep(c("a", "b", "c"), 20)
color<-rep(c("red", "blue","green","yellow","purple"), 12)

df<-data.frame(val, distance, phase, color)

# run function to obtain t.tests
lapply(split(df, list(df$color, df$phase)), function(d) {
  tryCatch({ t.test(val ~ distance, var.equal=FALSE, data=d) },
       error = function(e) NA)
})
  

Которая отлично работает. Однако я не уверен, как я мог бы включить метод начальной загрузки в эту функцию apply.

Комментарии:

1. Вам нужны только p-значения?

2. Я бы предпочел p-значения, t-статистику и CI, если это возможно

3. Проблема в том, что функция boot::boot заполняет матрицу значениями начальной загрузки, и вы выполняете много тестов, результатом является список . Способ вычислить нужные значения — повторить тесты 3 раза.

4. Вы действительно хотите выполнить загрузку, как в примере с заменой? поскольку размеры группы в этом примере непомерно малы

5. Запустите ее всего 3 раза (по 1 для каждой статистики)? Это все равно было бы фантастически

Ответ №1:

Возможно, что-то вроде следующего делает то, что вы хотите. Обратите внимание, что возвращаемое значение представляет собой список списков объектов класса "htest" (которые являются списками) или NA .

 boot_fun <- function(DF){
  n <- nrow(DF)
  i <- sample(n, n, TRUE)
  df <- DF[i, ]
  lapply(split(df, list(df$color, df$phase)), function(d) {
    tryCatch({ t.test(val ~ distance, var.equal=FALSE, data=d) },
             error = function(e) NA)
  })
}

set.seed(1234)
R <- 10
result <- lapply(seq_len(R), function(i) boot_fun(df))
  

Комментарии:

1. Я ценю помощь. Ваш ответ рандомизирует данные и выполняет 10 t.test секунд, что приводит к списку, состоящему из результатов каждого запуска. Я хотел бы каким-то образом получить общую статистику начальной загрузки, как показано здесь: stats.idre.ucla.edu/r/faq /…

2. Но это именно то, что я сказал в своем комментарии к вопросу, lapply(list, t.test) возвращает список списков / htest, функция boot::boot не может справиться с этим. Вы должны разделить проблему на элементарные задачи, такие как получение p-значений или CI.

3. Я могу вызвать статистику из списка, но мне любопытно, как я затем буду вычислять статистику начальной загрузки, такую как (оригинал, смещение и std. ошибка)

4. @NickDylla original — это статистика исходных данных, bias <- original - mean(bootstatistic) , stderr <- sd(bootstat) .

5. Итак, например, мне просто нужно было бы создать apply функцию для извлечения p-значений из списка, а затем их усреднения? Т.е. pvalue_bias <- original_pvalue - mean(boot_pvalues) ? То же самое для t-статистики?