вы можете использовать функцию поли в формуле как этот
set.seed(123)
dat <- data.frame(y=rnorm(10), x1=rnorm(10), x2=rnorm(10))
n <-3
fm <-lm(y ~ poly(x1, degree=n, raw=TRUE)+poly(x2, degree=n, raw=TRUE), data=dat)
summary(fm)
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.50796 0.81187 0.626 0.576
## poly(x1, degree = n, raw = TRUE)1 -0.54354 0.86195 -0.631 0.573
## poly(x1, degree = n, raw = TRUE)2 -0.66328 0.55169 -1.202 0.315
## poly(x1, degree = n, raw = TRUE)3 0.05989 0.35421 0.169 0.876
## poly(x2, degree = n, raw = TRUE)1 1.06890 1.00518 1.063 0.366
## poly(x2, degree = n, raw = TRUE)2 0.01655 0.76730 0.022 0.984
## poly(x2, degree = n, raw = TRUE)3 -1.18610 0.84214 -1.408 0.254
степени, конечно, максимальная степень x1 и x2, сырец = TRUE означает, что это эквивалентно x1 + I(x1^2) + ...
, если raw = FALSE, полиномы будут ортогональными.
Обратите внимание, что число в конце имен коэффициентов представляет степень связанных многочленов.
PS: вы можете использовать poly(x1, x2, degree=n, raw=TRUE)
, чтобы написать аналогичную формулу, которая включает взаимодействия.