Установите строку с LOESS в R
У меня есть набор данных с некоторыми точками в нем и хочу поместить в него строку. Я попробовал его с помощью функции loess
. К сожалению, я получаю очень странные результаты. См. График ниже. Я ожидаю, что линия будет проходить через точки и весь сюжет. Как я могу это достичь?
![plot]()
Как воспроизвести его:
Загрузите набор данных из https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1 (всего два kb) и используйте этот код:
load(url('https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1'))
lw1 = loess(y ~ x,data=data)
plot(y ~ x, data=data,pch=19,cex=0.1)
lines(data$y,lw1$fitted,col="blue",lwd=3)
Любая помощь приветствуется. Спасибо!
Ответы
Ответ 1
Вы построили установленные значения против y
вместо x
. Кроме того, вам нужно будет заказать значения x перед построением строки. Попробуйте следующее:
lw1 <- loess(y ~ x,data=data)
plot(y ~ x, data=data,pch=19,cex=0.1)
j <- order(data$x)
lines(data$x[j],lw1$fitted[j],col="red",lwd=3)
![enter image description here]()
Ответ 2
К сожалению, данные больше не доступны, но проще всего установить непараметрическую линию (Локально взвешенное сглаживание Scatterplot или просто LOESS, если хотите) - использовать следующий код:
scatter.smooth(y ~ x, span = 2/3, degree = 2)
Обратите внимание, что вы можете играть с параметрами span
и degree
, чтобы получить произвольную гладкость.
Ответ 3
Может быть, это поздно, но у вас есть опции с ggplot (и dplyr). Прежде всего, если вы хотите только зарисовать линию лёсса над точками, вы можете попробовать:
library(ggplot2)
load(url("https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1"))
ggplot(data, aes(x, y)) +
geom_point() +
geom_smoth(method = "loess", se = FALSE)
Loess line с ggplot::geom_smooth()
Другим способом, является функция predict()
, используя лесс. Например, я использовал функции dplyr для добавления прогнозов в новый столбец с именем "loess"
:
library(dplyr)
data %>%
mutate(loess = predict(loess(y ~ x, data = data))) %>%
ggplot(aes(x, y)) +
geom_point(color = "grey50") +
geom_line(aes(y = loess))
Loess line с predict()
и geom_line()
Обновление: добавлена строка кода для загрузки представленных данных примера