Ответ 1
Try:
lines(sort(hp), fitted(fit)[order(hp)], col='red', type='b')
Поскольку ваши статистические единицы в наборе данных не упорядочены, таким образом, когда вы используете lines
, это беспорядок.
У меня есть простая полиномиальная регрессия, которую я делаю следующим образом
attach(mtcars)
fit <- lm(mpg ~ hp + I(hp^2))
Теперь я рисую следующим образом
> plot(mpg~hp)
> points(hp, fitted(fit), col='red', pch=20)
Это дает мне следующее
Я хочу связать эти точки с гладкой кривой, используя строки, дает мне следующее
> lines(hp, fitted(fit), col='red', type='b')
Что мне здесь не хватает. Я хочу, чтобы выход был гладкой кривой, которая соединяет точки
Try:
lines(sort(hp), fitted(fit)[order(hp)], col='red', type='b')
Поскольку ваши статистические единицы в наборе данных не упорядочены, таким образом, когда вы используете lines
, это беспорядок.
Мне нравится использовать ggplot2
для этого, потому что обычно очень интуитивно для добавления слоев данных.
library(ggplot2)
fit <- lm(mpg ~ hp + I(hp^2), data = mtcars)
prd <- data.frame(hp = seq(from = range(mtcars$hp)[1], to = range(mtcars$hp)[2], length.out = 100))
err <- predict(fit, newdata = prd, se.fit = TRUE)
prd$lci <- err$fit - 1.96 * err$se.fit
prd$fit <- err$fit
prd$uci <- err$fit + 1.96 * err$se.fit
ggplot(prd, aes(x = hp, y = fit)) +
theme_bw() +
geom_line() +
geom_smooth(aes(ymin = lci, ymax = uci), stat = "identity") +
geom_point(data = mtcars, aes(x = hp, y = mpg))
Как правило, хороший способ - использовать функцию predict()
. Выберите значения x
, используйте predict()
для создания соответствующих значений y
и запишите их. Он может выглядеть примерно так:
newdat = data.frame(hp = seq(min(mtcars$hp), max(mtcars$hp), length.out = 100))
newdat$pred = predict(fit, newdata = newdat)
plot(mpg ~ hp, data = mtcars)
with(newdat, lines(x = hp, y = pred))
См. римский ответ для более удобной версии этого метода, где также рассчитываются доверительные интервалы. В обоих случаях фактическое построение решения является случайным - вы можете использовать базовую графику или ggplot2
или что-то еще, что вам бы хотелось - ключ просто использует функцию прогнозирования для генерации правильных значений y. Это хороший метод, потому что он распространяется на всевозможные приемы, а не только на полиномиальные линейные модели. Вы можете использовать его с нелинейными моделями, GLM, сглаживанием сплайнов и т.д. - все с помощью метода predict
.