Majda Ammi Majda Ammi - 5 months ago 31
R Question

How to remove intercept from formula

I have a formula which I would like to use to create a model matrix, but for my use I need to stop the user from adding an intercept as this will be taken care of at a later stage in the regression. How can I remove the intercept from the formula and is there a better option than update?


You can do this a few ways. The first option specified below is probably the best way of going about this.

# Create dataset and form for example
dta <- data.frame(y = rnorm(3), x = rnorm(3), z = rnorm(3))
form <- y ~ x + z 

# No censoring
(X <- model.matrix(form, dta))

# Option 1 (my default option)
tf <- terms(form)
attr(tf, "intercept") <- 0
model.matrix(tf, dta)

# Option 2
X[, !colnames(X) %in% "(Intercept)"]

# Option 3
form2 <- update(form, . ~ . - 1)
model.matrix(form2, dta)