Here is a function for this task:
refCat <- function(model, var) {
cs <- attr(model.matrix(model), "contrasts")[[var]]
if (is.character(cs)) {
if (cs == "contr.treatment")
ref <- 1
else stop("No treatment contrast")
}
else {
zeroes <- !cs
ones <- cs == 1
stopifnot(all(zeroes | ones))
cos <- colSums(ones)
stopifnot(all(cos == 1))
ros <- rowSums(ones)
stopifnot(sum(!ros) == 1 && sum(ros) != ncol(cs))
ref <- which(!ros)
}
return(levels(model$data[[var]])[ref])
}
The function will stop if the variable var
is not represented as treatment contrasts.
Examples:
refCat(reduced, "interaction_var")
# [1] "a"
refCat(full, "interaction_var")
# [1] "a"