任何人都可以在geom_smooth()中更详细地解释preictdf()

时间:2019-10-01 14:35:31

标签: r ggplot2

我目前正在尝试了解geom_smooth()背后的内容以及如何预测散点图的趋势线。在信息中说

  

“通过(当前未记录的)predictedf()执行计算   泛型及其方法。”

所以我想知道是否有人对此有更多信息。

预先感谢

1 个答案:

答案 0 :(得分:2)

我写了a blog post,关于在geom_smooth中使用自定义函数可能会有所帮助。它是西班牙文,但我认为Google翻译does a decent job

要点是,平滑功能必须将“公式”,“数据”和“权重”作为参数以及您需要的其他参数。然后,它需要返回一个对象,该对象需要具有一个使用“模型”,“ xseq”,“ se”和“级别”自变量的predictdf方法。哪里: *模型是您的平滑函数返回的对象, * xseq是x轴上用于评估模型的点序列, * se是指示是否绘制标准误差的逻辑,并且 *水平是所述标准误差的置信度。

predictdf方法应返回带有x和y列的数据帧,并可选地返回xmin和xmax(用于标准错误)。

这是一个简单的平滑函数的示例,该函数将截断序列的傅立叶变换。请注意,它忽略了传递给平滑函数或predictdf方法的大多数参数。但是,他们需要在那里。

library(ggplot2)

FFTSmooth <- function(formula, data, weights, n = 0.5) {
  f <- fft(data$y)
  keep <- c(0, seq_len(floor(length(f)/2*n)))
  keep <- c(keep + 1, length(f) - keep[keep != 0] + 1)
  f[-keep] <- 0 + 0i

  model <- list(x = data$x, pred = Re(fft(f, inverse = T))/length(f))
  class(model) <- "my_smooth"
  return(model)
}

predictdf.my_smooth <- function(model, xseq, se, level) {
  data.frame(x = model$x, y = model$pred)
}

set.seed(42)
df <- data.frame(x = seq(0, 360, length.out = 100))
df$y <- with(df, 5*cos(x*pi/180) + 3*sin(x*pi/180*3) + 1.6*rnorm(100))

ggplot(df, aes(x, y)) +
  geom_point() +
  geom_smooth(method = "FFTSmooth", method.args = list(n = 0.2))

reprex package(v0.3.0)于2019-10-01创建