在R中与LOESS匹配一条线

leo*_*leo 21 r loess

我有一个数据集,其中包含一些点,并希望在其上插入一条线.我尝试了这个loess功能.不幸的是我的结果非常奇怪.见下图.我期待一条线越过整点和整个情节.我怎样才能做到这一点? 情节

如何重现它:

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)
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.谢谢!

Rob*_*man 53

你已经绘制了拟合值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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


gav*_*712 5

可能为时已晚,但您可以选择 ggplot (和 dplyr)。首先,如果您只想在点上绘制黄土线,您可以尝试:

library(ggplot2)
load(url("https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1"))
ggplot(data, aes(x, y)) + 
geom_point() +
geom_smooth(method = "loess", se = FALSE)
Run Code Online (Sandbox Code Playgroud)

使用 ggplot::geom_smooth() 绘制黄土线</code>

另一种方式是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))
Run Code Online (Sandbox Code Playgroud)

使用 <code>predict()</code> 和 <code>geom_line()</code> 绘制黄土线

更新:添加了代码行来加载提供的示例数据 更新2:根据geom_smoot()@phi 注释更正函数名称

  • 评论旧帖子,但我想我应该指出代码中存在拼写错误。“geom_smoth”应该是“geom_smooth”。由于代码中的拼写错误会导致代码无法运行,因此值得指出。 (3认同)