带有 expss 包的复杂表

Complex tables with expss package

所有 exps 专家您好(@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' 函数并排显示计数和百分比非常简单,但仅限于此目的。我们如何将案例添加到交叉表? (以 cases/percents/tests 的形式,在 3 个不同的列中)

2) 默认情况下,此示例中的显着性测试输出为 LETTERS,级别为 0.05。两个参数都可以更改。但是是否可以在单个 table 计算中包含两个显着性水平?本着以下精神:

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

3) 最后(可能是一个简单的?),是否有可能强制显示零?我有频率为 0 的因子水平,在基数 R tables 中显示为 0。使用 expss 标签保留,但 rows/columns 保持为空。

同样,也许我正在寻找的东西在 expss 中不存在,但至少我可以确定。 谢谢!

你的第二点(双水平意义)现在不可能。但是,您可以通过对专门准备的 table 进行额外计算来添加二级显着性。 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()