比较ggplot loess拟合和loess拟合函数

1. ggplot拟合曲线

根据钻石的克拉和价格作图,并以切割的好坏进行分组。 用geom_smooth函数对数据进行拟合,拟合方法选择局部线性回归loess,黑色曲线即为回归曲线。

library(ggplot2)
p <- ggplot(data=diamonds, aes(x=carat,y=price,color=cut))+geom_point()+
    facet_grid(. ~ cut)+geom_smooth(color="black",method="loess",se=F)
p
_1539848669_1351126368.png

2. 提取数据

提取作图数据,得到一个list。每一个图层的数据为其中一个元素。

plot_data <- ggplot_build(p)$data
dot_data <- plot_data[[1]] #散点图数据
line_data <- plot_data[[2]] #拟合曲线数据
_1539849029_888783598.png

看了一下数据量,作图数据其实比原始数据要精简很多。


_1539850057_1328959586.png

3. 和predict拟合函数比较

用predict函数,根据自变量carat,应变量price做loess回归预测。然后以carat为变量,用回归函数计算预测价格。

smooth_vals <- predict(loess(carat~price,diamonds), diamonds$price)
result <- cbind(diamonds,smooth_vals)
ggplot(data=result, aes(x=carat,y=price,color=cut))+
    geom_line(aes(y=smooth_vals),size=1)+
    facet_grid(. ~ cut)+
    geom_smooth(method="loess",se=F,color="black")

比较一下ggplot拟合的曲线(黑色)和loess函数拟合画出来的曲线,后面四组基本是重合的,第一个不知道为啥有点偏差。


_1539849806_2037166701.png

4. 总结

  1. ggplot的loess拟合和loess拟合函数出来的曲线趋势是一致的。
  2. 但ggplot的预测数据只能从作图数据中提取,不仅只对应x和y轴的坐标,而且相比原始数据要少很多。
  3. loess函数预测结果更适合用作后续分析,不过如果数据量较大,计算会比较耗时。

你可能感兴趣的:(比较ggplot loess拟合和loess拟合函数)