Model Formulae
Table of Contents
Overview
The operator ~ is used to define a model formula in R.
response ~ op_1 term_1 op_2 term_2 op_3 term_3 …
- response
- is a vector or matrix, (or expression evaluating to a vector or matrix) defining the response variable(s).
- opi
- is an operator, either
+or-, implying the inclusion or exclusion of a term in the model, (the first is optional). - termi
is either
- a vector or matrix expression, or
1, - a factor, or
- a formula expression consisting of factors, vectors or matrices connected by formula operators.
In all cases each term defines a collection of columns either to be added to or removed from the model matrix.
- a vector or matrix expression, or
Notations:
Y ~ MYis modeled asM.M_1 + M_2- Include
M_1andM_2. M_1 - M_2- Include
M_1leaving out terms ofM_2. M_1 : M_2- The tensor product of
M_1andM_2. If both terms are factors, then the “subclasses” factor. M_1 %in% M_2- Similar to
M_1:M_2, but with a different coding. M_1 * M_2M_1 + M_2 + M_1:M_2.M_1 / M_2M_1 + M_2 %in% M_1.M^n- All terms in
Mtogether with “interactions” up to ordern I(M)- Insulate
M. InsideMall operators have their normal arithmetic meaning, and that term appears in the model matrix.
poly(x, ..., degree = 1, raw = FALSE) reference
sim = function(sample_size = 250) {
x = runif(n = sample_size, min = -1, max = 1) * 2
y = 3 + -6 * x ^ 2 + 1 * x ^ 4 + rnorm(n = sample_size, mean = 0, sd = 3)
data.frame(x, y)
}
data = sim()
unname(coef(lm(y ~ x + I(x^2) + I(x^3) + I(x^4), data)))
unname(coef(lm(y ~ poly(x, degree = 4, raw = TRUE), data)))
unname(coef(lm(y ~ poly(x, degree = 4), data)))[1] 2.7807038 -0.3471052 -5.8677261 0.1627440 0.9384000
[1] 2.7807038 -0.3471052 -5.8677261 0.1627440 0.9384000
[1] -2.4457333 0.5099472 -50.5814792 4.0435950 18.0532313
poly()calculates an orthogonal polynomial by default.x + I(x^2) + ... + I(x^n)is equivalent topoly(x, degree = n, raw = TRUE).
Create a formula from a string howto
y ~ x1 + x2
Also, you can create a formula from a variable:
npred = 10
preds = paste("x", 1:npred, sep="", collapse = " + ")
as.formula(sprintf("y ~ %s", preds))y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10