我有一个数据集,其中包含一些点,并希望在其上插入一条线.我尝试了这个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)
可能为时已晚,但您可以选择 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)
另一种方式是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)
更新:添加了代码行来加载提供的示例数据
更新2:根据geom_smoot()
@phi 注释更正函数名称