Подтвердить что ты не робот

Установите строку с 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)

Любая помощь приветствуется. Спасибо!

4b9b3361

Ответ 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()

Обновление: добавлена ​​строка кода для загрузки представленных данных примера