R/emmeans_comparison.R
emmeans_comparison.Rd
Convert emmeans contrast methods into comparison functions
suitable for use with compare_levels()
.
emmeans_comparison(method, ...)
An emmeans-style contrast method. One of: (1) a string specifying
the name of an emmeans contrast method, like
"pairwise"
, "trt.vs.ctrl"
, "eff"
; or (2) an emmeans-style contrast
function itself, like emmeans::pairwise.emmc, emmeans::trt.vs.ctrl.emmc, etc,
or a custom function that takes a vector of factor levels and returns a
contrast matrix.
Arguments passed on to the contrast method.
A function that takes a single argument, var
, containing a variable
to generate contrasts for (e.g., a factor or a character vector) and returns
a function that generates a list of named unevaluated expressions representing
different contrasts of that variable. This function is suitable to be used
as the comparison
argument in compare_levels()
.
Given an emmeans contrast method name as a string
(e.g., "pairwise"
, "trt.vs.ctrl"
, etc) or an emmeans-style contrast function
(e.g., emmeans::pairwise.emmc, emmeans::trt.vs.ctrl.emmc, etc), emmeans_comparison()
returns a new function that can be used in the comparison
argument to compare_levels()
to compute those contrasts.
compare_levels()
, emmeans::contrast-methods.
See gather_emmeans_draws()
for a different approach to using emmeans
with
tidybayes
.
library(dplyr)
library(ggplot2)
data(RankCorr, package = "ggdist")
# emmeans contrast methods return matrices. E.g. the "eff" comparison
# compares each level to the average of all levels:
emmeans:::eff.emmc(c("a","b","c","d"))
#> a effect b effect c effect d effect
#> a 0.75 -0.25 -0.25 -0.25
#> b -0.25 0.75 -0.25 -0.25
#> c -0.25 -0.25 0.75 -0.25
#> d -0.25 -0.25 -0.25 0.75
# tidybayes::compare_levels() can't use a contrast matrix like this
# directly; it takes arbitrary expressions of factor levels. But
# we can use `emmeans_comparison` to generate the equivalent expressions:
emmeans_comparison("eff")(c("a","b","c","d"))
#> $`a effect`
#> 0.75 * a + -0.25 * b + -0.25 * c + -0.25 * d
#>
#> $`b effect`
#> -0.25 * a + 0.75 * b + -0.25 * c + -0.25 * d
#>
#> $`c effect`
#> -0.25 * a + -0.25 * b + 0.75 * c + -0.25 * d
#>
#> $`d effect`
#> -0.25 * a + -0.25 * b + -0.25 * c + 0.75 * d
#>
# We can use the "eff" comparison type with `compare_levels()` as follows:
RankCorr %>%
spread_draws(b[i,j]) %>%
filter(j == 1) %>%
compare_levels(b, by = i, comparison = emmeans_comparison("eff")) %>%
median_qi()
#> # A tibble: 3 × 8
#> i j b .lower .upper .width .point .interval
#> <chr> <int> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
#> 1 1 effect 1 -0.361 -0.546 -0.168 0.95 median qi
#> 2 2 effect 1 -0.0209 -0.243 0.208 0.95 median qi
#> 3 3 effect 1 0.376 0.159 0.598 0.95 median qi