Мы можем использовать y = intercept + slope * x, если мы знаем intercept и slope, а x - это некоторое значение, для которого мы хотим знать y. (Если у нас есть более одного предиктора, он работает аналогично.)
Выше очень просто, нам не нужен объект lm
для этого, но если вам действительно нужен объект lm
, тогда Поскольку линия определяется двумя точками, мы можем использовать эти две, которые следуют из приведенного выше уравнения.
- x = 0, y = перехват
- x = 1, y = перехват + slope
, поэтому для использования этих fm
ниже необходим lm
объект. (Если у нас есть несколько предикторов, рассмотрим точку, где все они равны 0, и точки, где ровно один из них равен 1, а остальные равны 0.)
intercept <- 1; slope <- 2 # test data
y <- c(intercept, intercept + slope)
x <- 0:1
fm <- lm(y ~ x)
coef(fm)
## (Intercept) x1 x2
## 1 2 3
# suppose we want to know y given x = 3. Here are two ways.
predict(fm, list(x = 3))
## 1
## 7
intercept + slope * 3
## [1] 7
Вот пример с несколькими предикторами:
b <- 1:3 # test data
# 1st row of X is all 0's; remaining rows each have one 1 and rest 0
X <- diag(length(b))[, -1]
colnames(X) <- paste0("x", seq(ncol(X))) # x1, x2
y <- b[1] + c(0, b[-1])
DF <- data.frame(y, X)
fm <- lm(y ~ ., DF)
predictors <- c(x1 = 3, x2 = 10)
predict(fm, as.list(predictors))
## 1
## 37
sum(b * c(1, predictors))
## [1] 37
Обновлен
Обновлен несколько раз.