我有它的一些点的数据集,并希望以适合有一条线。 我与尝试了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)
任何帮助是极大的赞赏。 谢谢!
你对绘制拟合值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)
不幸的是,数据不再可用,但一个简单的方法如何适应非参数线(局部加权平滑散点图或只是一抔黄土,如果你想)是使用下面的代码:
scatter.smooth(y ~ x, span = 2/3, degree = 2)
请注意,您可以用参数玩span
和degree
来获得任意平滑。
可能是晚了,但你有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)
另一种方式,是通过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))
更新 :添加一行代码来加载例如数据提供UPDATE2:校正上geom_smoot()
函数名acoording @phi评论