为什么包 stats 中的 scatter.smooth 和包 ggplot2 中的 geom_smooth 给出不同的结果?

Why do scatter.smooth from package stats and geom_smooth from package ggplot2 give different results?

这是base r中的黄土平滑曲线

dat <- data.frame(RT = c(151, 160, 168, 169, 172, 175, 189, 279),
              IQ = c(123, 121, 115, 110, 105, 103, 100, 120))
with(dat, scatter.smooth(IQ, RT, span = 0.8))

这是用ggplot生成的黄土曲线:

ggplot(dat, aes(x = IQ, y = RT)) +
geom_point() +
geom_smooth(method = stats::loess, se = F, span = 0.8)

为什么不同?

这是因为 scatter.smooth() 不使用默认的 loess() 参数,而 geom_smooth() 使用。如果您将 scatter.smooth() 中默认的方法参数提供给 ggplot2 方法,它们会产生非常相似的结果。

dat <- data.frame(RT = c(151, 160, 168, 169, 172, 175, 189, 279),
                  IQ = c(123, 121, 115, 110, 105, 103, 100, 120))
with(dat, scatter.smooth(IQ, RT, span = 0.8))

library(ggplot2)

ggplot(dat, aes(x = IQ, y = RT)) +
  geom_point() +
  geom_smooth(formula = y ~ x, method = "loess", se = F, span = 0.8,
              method.args = list(degree = 1, family = "symmetric"))

reprex package (v1.0.0)

于 2021-02-03 创建