Я создал фиктивные данные со значениями x
и y
. x
- любое значение от 0
до 2*pi
. y
равно sin(x) +- noise
. noise
- случайное значение между 0
и 0.5
.
Я создал кривую линейной регрессии, используя эту формулу: fit <- lm(ys ~ xs + I(xs^2) + I(xs^3))
. Я могу нарисовать только исходную синусоидальную функцию и точки с помощью следующего кода:
plot(sin, 0, 2*pi,col="green",xlim = c(-0.5, 6.5), ylim = c(-1.5, 1.5))
points(xs, ys,col="blue")
Я также хочу добавить подобранную кривую к тому же графику. Я провел небольшое исследование и придумал следующий код:
library(ggplot2)
ggplot(x = xs) +
stat_function(fun=sin, geom="line", col="green") +
geom_point(aes(x = xs, y = ys), col="blue") +
stat_smooth(method = "lm", formula = ys ~ xs + I(xs^2) + I(xs^3), col="red")
Но он просто отображает точки. Как нарисовать исходную функцию, точки данных и кривую линейной регрессии на одном графике с R?
Вот весь код:
xs <- c(0, 2*pi)
ys <- c(runif(1,0,0.5), -runif(1,0,0.5))
for(i in 1:20){
x <- runif(1, 0, 2*pi)
y <- sin(x)
noise <- runif(1,0,0.5)
if(i%%2 == 0){
y <- y + noise
}
else{
y <- y - noise
}
xs <- c(xs, x)
ys <- c(ys, y)
}
data <- data.frame(xs, ys)
fit <- lm(ys ~ xs + I(xs^2) + I(xs^3))
#plot(sin, 0, 2*pi,col="green",xlim = c(-0.5, 6.5), ylim = c(-1.5, 1.5))
#points(xs, ys,col="blue")
#abline(fit)
library(ggplot2)
ggplot(x = xs) +
stat_function(fun=sin, geom="line", col="green") +
geom_point(aes(x = xs, y = ys), col="blue") +
stat_smooth(method = "lm", formula = ys ~ xs + I(xs^2) + I(xs^3), col="red")