Сложные таблицы с пакетом expss

Привет всем экспертам expss (@Gregory Demin, если вы читаете это сообщение!), После нескольких дней знакомства с этим пакетом я добился хороших результатов, но все еще немного борюсь с созданием сложных кросс-таблиц с семейством функций tab_ *, особенно для создания комбинаций с тестами на значимость.

Начнем с примера, приведенного в справочном руководстве:

library(expss)
mtcars %>%
  tab_significance_options(keep = "none", sig_labels = NULL, subtable_marks = "greater", mode = "append") %>%
  tab_cols(total(), vs, am) %>%
  tab_cells(cyl, gear) %>%
  tab_stat_cpct() %>%
  tab_last_add_sig_labels() %>%
  tab_last_sig_cpct() %>%
  tab_last_hstack("inside_columns") %>%
  tab_pivot(stat_position = "inside_rows")

С этого момента я не знаю, возможны ли следующие действия, и если да, то какие сценарии подойдут для этого:

1) С функцией 'fre' довольно просто отображать числа и проценты рядом, но она ограничена этой единственной целью. Как мы можем добавить наблюдения в кросс-таблицу? (в виде кейсов / процентов / тестов, в 3 отдельных столбцах)

2) По умолчанию результаты проверки значимости в этом примере - БУКВЫ с уровнем 0,05. Оба параметра можно изменить. Но возможно ли учесть два уровня значимости в одном вычислении таблицы? Что-то в духе:

sig_level = c(0.01, 0.05)
sig_labels = c(LETTERS, letters)

3) И последнее (наверное, легкое?), Есть ли возможность принудительно отображать нули? У меня есть уровни факторов с частотами = 0, отображаемые с нулями в базовых таблицах R. С expss метка остается, но строки / столбцы остаются пустыми.

Опять же, возможно, то, что я ищу, не существует с expss, но, по крайней мере, я буду в этом уверен. Спасибо!


person Maxence Dum.    schedule 31.03.2020    source источник


Ответы (1)


Ваш второй пункт (двухуровневая значимость) сейчас невозможен. Однако вы можете добавить второй уровень значимости дополнительными вычислениями по специально подготовленной таблице. 1 и 3 довольно просты:

library(expss)
data(mtcars)
mtcars %>%
    tab_significance_options(keep = "none", sig_labels = NULL, subtable_marks = "greater", mode = "append") %>%
    tab_cols(total(), vs, am) %>%
    tab_cells(cyl, gear) %>%
    # block for cases 
    tab_stat_cases(label = "cases") %>% 
    tab_last_add_sig_labels() %>%
    # block for percent statistic
    tab_stat_cpct(label = "%") %>% # percent
    tab_last_add_sig_labels() %>%
    tab_last_sig_cpct() %>%
    tab_pivot(stat_position = "inside_columns") %>% 
    # converts NA to zero
    recode(as.criterion(is.numeric) & is.na ~ 0, TRUE ~ copy)

введите здесь описание изображения

ОБНОВЛЕНИЕ: вы можете указать части цепочки как пользовательские функции, чтобы избежать повторения:

library(expss)
data(mtcars)

### tab cols
my_banner = mtcars %>%
    tab_cols(total(), vs, am)

### table and formattig
my_custom_table = . %>% 
    tab_significance_options(keep = "none", sig_labels = NULL, subtable_marks = "greater", mode = "append") %>%
    # block for cases 
    tab_stat_cases(label = "cases") %>% 
    tab_last_add_sig_labels() %>%
    # block for percent statistic
    tab_stat_cpct(label = "%") %>% # percent
    tab_last_add_sig_labels() %>%
    tab_last_sig_cpct() %>%
    tab_pivot(stat_position = "inside_columns") %>% 
    # converts NA to zero
    recode(as.criterion(is.numeric) & is.na ~ 0, TRUE ~ copy)

 ### here we build table
 my_banner %>%
    tab_cells(cyl, gear) %>%
    my_custom_table()
person Gregory Demin    schedule 02.04.2020
comment
Спасибо за быстрый ответ, работает как шарм! Я добавил кое-что здесь и там (например, промежуточные итоги), хотя это становится довольно многословным. Есть какие-нибудь советы, как избежать повторения этой последовательности слишком много раз? (например, завернутый в функцию?) - person Maxence Dum.; 02.04.2020
comment
Блин ты быстр! Именно то, что мне было нужно, большое вам спасибо! - person Maxence Dum.; 02.04.2020