Consider a two-factor design with disease type (MI, MINOCA) and time
point (T0, T150, T300):
primary_levels <- c("MI", "MINOCA")
secondary_levels <- c("T0", "T150", "T300")
Main effect contrasts
Main effects average across all levels of the secondary factor. For
example, the main effect of MINOCA vs MI is the average difference
across all time points:
me <- main_effect_contrasts(primary_levels, secondary_levels)
data.frame(ContrastName = names(me), Contrast = unlist(me))
## ContrastName
## MINOCA_vs_MI MINOCA_vs_MI
## Contrast
## MINOCA_vs_MI (G_MINOCA_T0 + G_MINOCA_T150 + G_MINOCA_T300)/3 - (G_MI_T0 + G_MI_T150 + G_MI_T300)/3
Swapping the roles of primary and secondary gives main effects for
time points averaged across disease types:
me2 <- main_effect_contrasts(secondary_levels, primary_levels)
data.frame(ContrastName = names(me2), Contrast = unlist(me2))
## ContrastName
## T150_vs_T0 T150_vs_T0
## T300_vs_T0 T300_vs_T0
## T300_vs_T150 T300_vs_T150
## Contrast
## T150_vs_T0 (G_T150_MI + G_T150_MINOCA)/2 - (G_T0_MI + G_T0_MINOCA)/2
## T300_vs_T0 (G_T300_MI + G_T300_MINOCA)/2 - (G_T0_MI + G_T0_MINOCA)/2
## T300_vs_T150 (G_T300_MI + G_T300_MINOCA)/2 - (G_T150_MI + G_T150_MINOCA)/2
Level-specific contrasts
These compare primary factor levels at each individual level of the
secondary factor:
ls <- level_specific_contrasts(primary_levels, secondary_levels)
data.frame(ContrastName = names(ls), Contrast = unlist(ls))
## ContrastName Contrast
## MINOCA_vs_MI_at_T0 MINOCA_vs_MI_at_T0 G_MINOCA_T0 - G_MI_T0
## MINOCA_vs_MI_at_T150 MINOCA_vs_MI_at_T150 G_MINOCA_T150 - G_MI_T150
## MINOCA_vs_MI_at_T300 MINOCA_vs_MI_at_T300 G_MINOCA_T300 - G_MI_T300
Interaction contrasts
Interaction contrasts test whether the difference between primary
levels changes across secondary levels (difference of differences):
ic <- interaction_contrasts(primary_levels, secondary_levels)
data.frame(ContrastName = names(ic), Contrast = unlist(ic))
## ContrastName
## interaction_MINOCA_vs_MI_at_T150_vs_T0 interaction_MINOCA_vs_MI_at_T150_vs_T0
## interaction_MINOCA_vs_MI_at_T300_vs_T0 interaction_MINOCA_vs_MI_at_T300_vs_T0
## interaction_MINOCA_vs_MI_at_T300_vs_T150 interaction_MINOCA_vs_MI_at_T300_vs_T150
## Contrast
## interaction_MINOCA_vs_MI_at_T150_vs_T0 (G_MINOCA_T150 - G_MI_T150) - (G_MINOCA_T0 - G_MI_T0)
## interaction_MINOCA_vs_MI_at_T300_vs_T0 (G_MINOCA_T300 - G_MI_T300) - (G_MINOCA_T0 - G_MI_T0)
## interaction_MINOCA_vs_MI_at_T300_vs_T150 (G_MINOCA_T300 - G_MI_T300) - (G_MINOCA_T150 - G_MI_T150)
Single-factor contrasts
For a one-factor design, generate_contrasts_for_factor
generates all pairwise comparisons:
group_levels <- c("CondA", "CondB", "CondC")
sf <- generate_contrasts_for_factor(group_levels)
data.frame(ContrastName = names(sf), Contrast = unlist(sf))
## ContrastName Contrast
## CondB_vs_CondA CondB_vs_CondA CondB - CondA
## CondC_vs_CondA CondC_vs_CondA CondC - CondA
## CondC_vs_CondB CondC_vs_CondB CondC - CondB