ошибка в add_p()'для переменной X и теста' fisher.test', p-значение опущено

Я получаю сообщение об ошибке ниже, когда пытаюсь использовать функцию add_p(), чтобы получить значение p для различий между моей переменной by (с 10 уровнями) и категориальной переменной с двумя уровнями (да / нет). Я не знаю, как привести воспроизводимый пример. Из данных исследований, я полагаю, что я по переменной была бы "T Stage" переменная с 10 уровнями, и категориальные переменные будут: (1) "Химиотерапия Лечение" с 2 -х уровнях, и (2) "Химиотерапия Treatment2" с 4 уровни. Но вот код, который я запустил.

library(gtsummary)
library(tidyverse)
miro_def %>% 
  select(mheim, age_dx, time_t1d_yrs, gender, collard, fhist_pandz) %>% 
  tbl_summary(by = mheim, missing = "no",
              type = list(c(gender, collard, fhist_pandz, mheim) ~ "categorical"),
              label = list(gender ~ "Gender", 
                           fhist_pandz ~ "Family history of PD", 
                           age_dx ~ "Age at diagnosis", 
                           time_t1d_yrs ~ "Follow-up(years)")) %>% 
  add_p() %>% 
  # style the output with custom header 
  #modify_header(stat_by = "{level}") %>% 
  # convert to kableExtra as_kable_extra(booktabs = TRUE) %>% 
  # reduce font size to make table fit. # you may also use the `latex_options = "scale_down"` argument here. 
  kable_styling(font_size = 7, latex_options = "scale_down")

Однако я получаю p-значение для этого по переменной (10 уровней) с другими переменными (которые являются непрерывными / числовыми)

  1. Как исправить эту ошибку?
  2. В случае, если у меня есть упомянутая многоуровневая переменная и многоуровневая (>2 уровня) категориальная переменная, есть ли что-то особенное, что я должен сделать, чтобы получить значение p?

    Произошла ошибка в 'add_p()' для переменной 'пол' и теста 'fisher.test', значение p пропущено: ошибка в stats::fisher.test(data[[переменная]], as.factor (data [[by]])): ФАКТИЧЕСКАЯ ошибка 7(местоположение). LDSTP=18540 слишком мал для этой проблемы (pastp =51.2364, ipn_0:= ipoin [itp=150]=215, stp[ipn_0]=40.6787). Увеличьте рабочее пространство или рассмотрите возможность использования simulate.p.value=TRUE. Произошла ошибка в "add_p()" для переменной "collard" и теста "fisher.test", значение p пропущено: ошибка в stats::fisher.test (данные [[переменная]], as.factor(data[[by]])): FEXACT error 7(location). LDSTP=18570 слишком мал для этой проблемы (pastp =37.0199, ipn_0:= ipoin [itp=211]=823, stp[ipn_0]=23.0304). Увеличьте рабочую область или рассмотрите возможность использования simulate.p.value=TRUE. Ошибка в add_p() для переменной fhist_pandz и проверьте 'fisher.test', значение p опущено: Ошибка в stats::fisher.test (данные [[переменная]], as.factor (данные [[by]])): ошибка FEXACT 7(местоположение). LDSTP=18570 слишком мал для этой проблемы (pastp=36.4614, ipn_0:=ipoin[itp=58]=1, stp[ipn_0]=31.8106). Увеличьте рабочее пространство или рассмотрите возможность использования simulate.p.value=TRUE

3 ответа

Поскольку никто не отправил ответа, вот что я использовал, когда столкнулся с этим. Следуя примерам, приведенным в файле справки ?gtsummary::add_p.tbl_summary, Я создал специальную функцию, которая запускает fisher.test с simulate.p.values = TRUE вариант:

## define custom test
fisher.test.simulate.p.values <- function(data, variable, by, ...) {
  result <- list()
  test_results <- stats::fisher.test(data[[variable]], data[[by]], simulate.p.value = TRUE)
  result$p <- test_results$p.value
  result$test <- test_results$method
  result
}

## add p-values to your gtsummary table, using custom test defined above
summary_table %>%
add_p(
  test = list(all_categorical() ~ "fisher.test.simulate.p.values")  # this applies the custom test to all categorical variables
) 

Вы также можете изменить количество итераций для вычисления смоделированных p-значений, изменив значение по умолчанию B = 2000 параметр для fisher.test() выше.

Все это, конечно, предполагает, что в первую очередь целесообразно использовать тест Фишера.

Поскольку это устранило проблему для меня, я хотел бы указать, что с версии 1.3.6 из gtsummary есть опция, с помощью которой вы можете указать аргументы для тестовых функций (т.е. test.args). Спасибо за это разработчикам!

Из НОВОСТЕЙ:
Теперь у каждого метода есть test.args = argument. Используйте этот аргумент для передачи дополнительных аргументов статистическому методу, например

      add_p(test = c(age, marker) ~ "t.test",
      test.args = c(age, marker) ~ list(var.equal = TRUE))

Это также объясняется в add_p() помощь (т.е. ?add_p).

У меня была аналогичная проблема. Вы должны увеличить свое рабочее пространство с помощью test.args в пределах add_p().

      miro_def %>% 
  select(mheim, age_dx, time_t1d_yrs, gender, collard, fhist_pandz) %>% 
  tbl_summary(by = mheim, missing = "no",
              type = list(c(gender, collard, fhist_pandz, mheim) ~ "categorical"),
              label = list(gender ~ "Gender", 
                           fhist_pandz ~ "Family history of PD", 
                           age_dx ~ "Age at diagnosis", 
                           time_t1d_yrs ~ "Follow-up(years)")) %>% 
  add_p(test.args = variable_with_no_pval ~ list(workspace=2e9))

или

      add_p(test.args = all_test("fisher.test") ~ list(workspace=2e9))
Другие вопросы по тегам