Функция предсказания
Пусть у нас задана функция y(x) = x^2 – 2*x + 3. И у нас имеется ряд значений которая принимает данная функция при разных значениях x: (в интервале от -4 до 3 с шагом 0.25). Так же добавим в аргумент небольшую ошибку (для чего воспользуемся функцией нормального распределения). Начало положено:
set.seed(45)
x = seq(-4, 3, 0.25)
x = x
y = x^2 - 2*x + 3 + rnorm(length(x), 0, 1)
plot(x, y)
Прежде чем мы начнем работать с функцией предсказания predict нам необходимо создать модель зависимости y от x. Это удобно реализовать с помощью функции lm
md2 = lm(y ~ poly(x, degree = 2, raw = T))
summary(md2)
> summary(md2) Call: lm(formula = y ~ poly(x, degree = 2, raw = T)) Residuals: Min 1Q Median 3Q Max -1.8682 -0.5005 -0.2633 0.1918 3.5443 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 3.22719 0.30370 10.63 5.90e-11 *** poly(x, degree = 2, raw = T)1 -1.98521 0.11175 -17.77 4.63e-16 *** poly(x, degree = 2, raw = T)2 0.95980 0.05275 18.20 2.60e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1.11 on 26 degrees of freedom Multiple R-squared: 0.9792, Adjusted R-squared: 0.9776 F-statistic: 612.4 on 2 and 26 DF, p-value: < 2.2e-16 |
Теперь настала пора применить и функцию предсказания predict. Для этого выполним три шага:
- Создадим вектор новых значений xn, для которых и будут рассчитываться предсказанные значения yn: xn = seq(-5, 5, 0.1)
- Создадим новый набор данных xdata, присвоив аргументу х модели функции уже новые значения (x = xn): xdata = data.frame(x = xn)
- Вычислим предсказанные значения: yn = predict(md2,newdata = xdata)
Далее можно для большей наглядности построить график полученных новых значений функции, одновременно поместив на график точки значений исходных данных.
xn = seq(-5, 5, 0.1)
xdata = data.frame(x = xn)
yn = predict(md2,newdata = xdata)
plot(xn, yn, lwd = 2, 'l')
points(x, y)
И наконец мы можем просто найти значение предсказанной функции в заданной точке (хотя можем задать и несколько точек):
predict(md2, data.frame(x = 6))

