Sum coding sets the grand mean as the intercept. Each contrast compares one level with the grand mean.
contr_code_sum(fct, levels = NULL, omit = length(levels))
the factor to contrast code (or a vector)
the levels of the factor in order
the level to omit (defaults to the last level)
the factor with contrasts set
df <- sim_design(between = list(pet = c("cat", "dog", "bird", "ferret")),
mu = c(2, 4, 9, 13), empirical = TRUE, plot = FALSE)
df$pet <- contr_code_sum(df$pet)
lm(y ~ pet, df) %>% broom::tidy()
#> # A tibble: 4 × 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) 7.00 0.050 140. 0
#> 2 pet.cat-intercept -5.00 0.0866 -57.7 6.13e-195
#> 3 pet.dog-intercept -3.00 0.0866 -34.6 6.42e-122
#> 4 pet.bird-intercept 2.00 0.0866 23.1 2.33e- 75
df$pet <- contr_code_sum(df$pet, omit = "cat")
lm(y ~ pet, df) %>% broom::tidy()
#> # A tibble: 4 × 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) 7.00 0.0500 140. 0
#> 2 pet.dog-intercept -3.00 0.0866 -34.6 6.42e-122
#> 3 pet.bird-intercept 2.00 0.0866 23.1 2.33e- 75
#> 4 pet.ferret-intercept 6 0.0866 69.3 1.82e-223
df$pet <- contr_code_sum(df$pet, omit = 1)
lm(y ~ pet, df) %>% broom::tidy()
#> # A tibble: 4 × 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) 7.00 0.0500 140. 0
#> 2 pet.dog-intercept -3.00 0.0866 -34.6 6.42e-122
#> 3 pet.bird-intercept 2.00 0.0866 23.1 2.33e- 75
#> 4 pet.ferret-intercept 6 0.0866 69.3 1.82e-223