To be used ideally with emmeans::contrast. Each contrasts is tested (sum to 0?) and scaled so that all positive weights sum to 1 (and all negative weights to -1).
Usage
contrast_weights(..., .name = "custom", .adjust = NULL)
cw(..., .name = "custom", .adjust = NULL)Arguments
- ...
- Can be: - Unnamed scalars. 
- (Possibly named) vectors if equal length 
 
- .name
- The label as it will appear in the results in - emmeans.
- .adjust
- Gives the default adjustment method for multiplicity (used in - emmeans).
Examples
data(mtcars)
mod <- lm(mpg ~ factor(cyl) * am, mtcars)
my_contrasts <- data.frame(
  "squares" = c(-1, 2, -1),
  "4 vs 6" = c(-30, 30, 0),
  check.names = FALSE
)
(my_contrasts2 <- cw(my_contrasts))
#>   squares 4 vs 6
#> 1    -0.5     -1
#> 2     1.0      1
#> 3    -0.5      0
my_contrasts3 <- cw(my_contrasts, .adjust = "fdr")
library(emmeans)
(emms <- emmeans(mod, ~ cyl + am))
#>  cyl am emmean    SE df lower.CL upper.CL
#>    4  0   22.9 1.751 26     19.3     26.5
#>    6  0   19.1 1.516 26     16.0     22.2
#>    8  0   15.1 0.875 26     13.3     16.8
#>    4  1   28.1 1.072 26     25.9     30.3
#>    6  1   20.6 1.751 26     17.0     24.2
#>    8  1   15.4 2.144 26     11.0     19.8
#> 
#> Confidence level used: 0.95 
contrast(emms, method = my_contrasts, by = "am")
#> am = 0:
#>  contrast estimate    SE df t.ratio p.value
#>  squares      0.30  3.61 26   0.083  0.9344
#>  4 vs 6    -113.25 69.48 26  -1.630  0.1152
#> 
#> am = 1:
#>  contrast estimate    SE df t.ratio p.value
#>  squares     -2.34  4.24 26  -0.552  0.5858
#>  4 vs 6    -225.25 61.59 26  -3.658  0.0011
#> 
contrast(emms, method = my_contrasts2, by = "am") # estimate is affected!
#> am = 0:
#>  contrast estimate   SE df t.ratio p.value
#>  squares      0.15 1.80 26   0.083  0.9344
#>  4 vs 6      -3.77 2.32 26  -1.630  0.1152
#> 
#> am = 1:
#>  contrast estimate   SE df t.ratio p.value
#>  squares     -1.17 2.12 26  -0.552  0.5858
#>  4 vs 6      -7.51 2.05 26  -3.658  0.0011
#> 
contrast(emms, method = my_contrasts3, by = "am") # p value is affected
#> am = 0:
#>  contrast estimate   SE df t.ratio p.value
#>  squares      0.15 1.80 26   0.083  0.9344
#>  4 vs 6      -3.77 2.32 26  -1.630  0.2303
#> 
#> am = 1:
#>  contrast estimate   SE df t.ratio p.value
#>  squares     -1.17 2.12 26  -0.552  0.5858
#>  4 vs 6      -7.51 2.05 26  -3.658  0.0023
#> 
#> P value adjustment: fdr method for 2 tests 
# Also in interaction contrasts
contrast(emms, interaction = list(cyl = my_contrasts2, am = "pairwise"))
#>  cyl_custom am_pairwise estimate   SE df t.ratio p.value
#>  squares    0 - 1           1.32 2.79 26   0.474  0.6393
#>  4 vs 6     0 - 1           3.73 3.09 26   1.206  0.2386
#>