Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup, message=FALSE, warning=FALSE--------------------------------------
library(contrastable)
library(dplyr)
library(MASS)
## ----mdl-data-----------------------------------------------------------------
mdl_data <-
mtcars |>
as_tibble() |>
mutate(cyl = factor(cyl),
twolevel = factor(rep(c("a", "b"), times = nrow(mtcars) / 2)),
gear = factor(gear),
carb = factor(carb))
## ----inspect-contrasts--------------------------------------------------------
options("contrasts") # Show defaults for unordered and ordered
contrasts(mdl_data$twolevel)
contrasts(mdl_data$carb) # Note the reference level
## ----default-model-summary----------------------------------------------------
summary(lm(mpg ~ carb, data = mdl_data))
## ----manual-change-contrasts--------------------------------------------------
mdl_data2 <- mdl_data
contrasts(mdl_data2$carb) <- contr.sum(6)
contrasts(mdl_data2$carb) # Note the reference level
summary(lm(mpg ~ carb, data = mdl_data2))
## ----intro-set-contrasts------------------------------------------------------
mdl_data3 <- set_contrasts(mdl_data, carb ~ sum_code)
contrasts(mdl_data2$carb) # matrix from before
contrasts(mdl_data3$carb) # new matrix, note the column names
## ----set-reference------------------------------------------------------------
mdl_data4 <- set_contrasts(mdl_data, carb ~ sum_code + "3")
contrasts(mdl_data4$carb)
## ----intercept-example--------------------------------------------------------
# mean of group means:
group_means <- summarize(mdl_data4, grp_mean = mean(mpg), .by = "carb")
group_means
mean(group_means$grp_mean)
# model coefficients
coef(lm(mpg ~ carb, data = mdl_data4))
## ----set-intercept------------------------------------------------------------
mdl_data5 <- set_contrasts(mdl_data, carb ~ sum_code + 3 * 3)
contrasts(mdl_data5$carb)
coef(lm(mpg ~ carb, data = mdl_data5))
## ----set-labels---------------------------------------------------------------
mdl_data6 <- set_contrasts(mdl_data,
carb ~ sum_code + 3 * 3 | c("1-3",
"2-3",
"4-3",
"6-3",
"8-3"))
contrasts(mdl_data5$carb)
coef(lm(mpg ~ carb, data = mdl_data6))
## ----manual-matrix------------------------------------------------------------
mdl_data7 <- mdl_data
my_contrasts <- matrix(c(2, 1, 0, 1, 1, 1,
1, 2, 0, 1, 1, 1,
1, 1, 0, 2, 1, 1,
1, 1, 0, 1, 2, 1,
1, 1, 0, 1, 1, 2),
nrow = 6)
dimnames(my_contrasts) <-
list(
c("1", "2", "3", "4", "6", "8"),
c("1-3", "2-3", "4-3", "6-3", "8-3")
)
contrasts(mdl_data7$carb) <- my_contrasts
contrasts(mdl_data7$carb)
## ----matrix-example-fractions-------------------------------------------------
mdl_data8 <- set_contrasts(mdl_data, carb ~ helmert_code * 4)
MASS::fractions(contrasts(mdl_data8$carb))
## ----set-contrasts-multiple-vars----------------------------------------------
mdl_data9 <- set_contrasts(mdl_data,
carb ~ helmert_code * 4,
cyl ~ scaled_sum_code + 4,
twolevel ~ scaled_sum_code + "a",
gear ~ helmert_code)
MASS::fractions(contrasts(mdl_data9$carb))
MASS::fractions(contrasts(mdl_data9$cyl))
MASS::fractions(contrasts(mdl_data9$twolevel))
MASS::fractions(contrasts(mdl_data9$gear))
## ----intro-enlist-contrasts---------------------------------------------------
enlist_contrasts(mdl_data,
carb ~ helmert_code * 4,
cyl ~ scaled_sum_code + 4)
## ----example-functions--------------------------------------------------------
# all equivalent to carb ~ sum_code
foo <- sum_code
enlist_contrasts(mdl_data, carb ~ contr.sum)
enlist_contrasts(mdl_data, carb ~ sum_code)
enlist_contrasts(mdl_data, carb ~ foo)
## ----example-as-is------------------------------------------------------------
enlist_contrasts(mdl_data, carb ~ I(contr.sum))
## ----parentheses-handling-----------------------------------------------------
enlist_contrasts(mdl_data, carb ~ contr.sum())
## ----function-must-exist,eval = FALSE-----------------------------------------
# foo <- contr.sum(6) # foo is a matrix
# enlist_contrasts(mdl_data, carb ~ foo()) # foo is not a function
## ----lhs-plus-----------------------------------------------------------------
# equivalent to: enlist_contrasts(mdl_data, cyl ~ sum_code, gear ~ sum_code)
enlist_contrasts(mdl_data, cyl + gear ~ sum_code)
## ----tidyselect-where---------------------------------------------------------
enlist_contrasts(mdl_data, where(is.factor) ~ sum_code)
# see also enlist_contrasts(mdl_data, where(is.unordered) ~ sum_code)
# see also enlist_contrasts(mdl_data, where(is.numeric) ~ sum_code)
## ----tidyselect-all-of--------------------------------------------------------
these_vars <- c("cyl", "gear")
enlist_contrasts(mdl_data, all_of(these_vars) ~ sum_code)
## ----tidyselect-forbidden, eval = FALSE---------------------------------------
# enlist_contrasts(mdl_data,
# cyl ~ sum_code,
# where(is.factor) ~ sum_code) # cyl is a factor for mdl_data
#
# enlist_contrasts(mdl_data,
# cyl ~ sum_code,
# cyl + gear ~ sum_code) # cyl can't be specified twice
## ----use-matrix---------------------------------------------------------------
my_matrix <- contr.sum(6) / 2
enlist_contrasts(mdl_data, carb ~ my_matrix)
## ----use-list-----------------------------------------------------------------
my_contrasts <- list(carb ~ contr.sum, gear ~ scaled_sum_code)
enlist_contrasts(mdl_data, my_contrasts)
mdl_data12 <- set_contrasts(mdl_data, my_contrasts)
## ----intro-glimpse-contrasts--------------------------------------------------
my_contrasts <- list(carb ~ contr.sum,
gear ~ treatment_code + 4,
twolevel ~ scaled_sum_code * "b",
cyl ~ helmert_code)
mdl_data$twolevel
enlist_contrasts(mdl_data, cyl ~ scaled_sum_code + 6 * 6)
mdl_data13 <- set_contrasts(mdl_data, my_contrasts)
glimpse_contrasts(mdl_data13, my_contrasts)
## ----glimpse-warnings---------------------------------------------------------
glimpse_contrasts(mdl_data, my_contrasts)
## ----glimpse-manual-----------------------------------------------------------
glimpse_contrasts(mdl_data13,
carb ~ contr.sum,
gear ~ treatment_code + 4,
twolevel ~ scaled_sum_code * "b",
cyl ~ helmert_code)
## ----glimpse-check-default----------------------------------------------------
glimpse_contrasts(mdl_data) # no warnings
glimpse_contrasts(mdl_data13) # warnings
## ----glimpse-mismatch-warnings------------------------------------------------
glimpse_contrasts(mdl_data,
carb ~ contr.sum,
gear ~ treatment_code * 4,
cyl ~ contr.treatment | c("diff1", "diff2"))
## ----drop-trends--------------------------------------------------------------
enlist_contrasts(mdl_data, carb ~ contr.poly)
enlist_contrasts(mdl_data, carb ~ contr.poly - 3:5)
## ----drop-trends-reinstated-matrix--------------------------------------------
mdl_data14 <- set_contrasts(mdl_data, carb ~ contr.sum)
contrasts(mdl_data14$carb)
contrasts(mdl_data14$carb) <- contrasts(mdl_data14$carb)[, 1:2]
contrasts(mdl_data14$carb)
## ----drop-trends-hypotheses-floats--------------------------------------------
MASS::fractions(
contrastable:::.convert_matrix(
contrasts(mdl_data14$carb)
)
)
## ----drop-trends-set-contrasts-incompatible-----------------------------------
mdl_data15 <- set_contrasts(mdl_data, carb ~ polynomial_code - 3:5)
## -----------------------------------------------------------------------------
mdl_data16 <-
mdl_data |>
set_contrasts(cyl ~ helmert_code,
gear ~ helmert_code) |>
decompose_contrasts(~ cyl * gear)
# Look at the decomposed contrast columns
mdl_data16 |>
dplyr::select(matches("^cyl|gear")) |>
head()
## -----------------------------------------------------------------------------
coef(lm(mpg ~ cyl, data = mdl_data16))
coef(lm(mpg ~ `cyl<6` + `cyl<8`, data = mdl_data16))
coef(lm(mpg ~ cyl * gear, data = mdl_data16))
coef(lm(mpg ~
`cyl<6` + `cyl<8` +
`gear<4` + `gear<5` +
`cyl<6:gear<4` +
`cyl<8:gear<4` +
`cyl<6:gear<5` +
`cyl<8:gear<5`,
data = mdl_data16))
## -----------------------------------------------------------------------------
coef(lm(mpg ~ `cyl<6` + `cyl<8`, data = mdl_data16))
coef(lm(mpg ~ `cyl<6`, data = mdl_data16)) # not the same estimate as the above
## ----usage-pattern-1----------------------------------------------------------
raw_data <- mtcars # load raw data from a csv or something here
# wrangle data for your final model
final_data <-
mtcars |>
# mutate(# ... some data wrangling transformations ..) |>
set_contrasts(carb ~ sum_code) # set contrasts at the very end
mdl <- lm(mpg ~ carb, data = final_data) # run model with contrasts set
## ----usage-pattern-2----------------------------------------------------------
raw_data <- mtcars # load raw data from a csv or something here
# specify contrasts up front
my_contrasts <- list(carb ~ sum_code,
cyl ~ scaled_sum_code,
gear ~ sum_code)
# wrangle data for your final model
final_data <-
mtcars |>
# mutate(# ... some data wrangling transformations ..) |>
set_contrasts(my_contrasts) # set contrasts at the very end
# Show the matrices we're using
enlist_contrasts(final_data, my_contrasts)
# Show a summary
glimpse_contrasts(final_data, my_contrasts)
# Fit the model with contrasts set
mdl <- lm(mpg ~ carb, data = final_data)
## ----fractions-usage----------------------------------------------------------
enlist_contrasts(final_data, my_contrasts) |>
lapply(MASS::fractions)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.