【问题标题】:Can anyone explain more in detail preictdf() in geom_smooth()任何人都可以在 geom_smooth() 中更详细地解释 preictdf()
【发布时间】:2019-10-01 22:51:20
【问题描述】:

我目前正在尝试了解 geom_smooth() 背后的内容以及它在预测我的散点图的趋势线方面的作用。资料里说

"计算由(当前未记录的)predictdf() 执行 泛型及其方法。”

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

提前致谢

【问题讨论】:

  • Rafael,这个问题目前有点模糊,可以理解为要求我们“推荐或找一本书、工具、软件库、教程” (@987654321 @)。您能否在其行为不符合您预期的情况下提出具体问题?使用示例数据/代码(一个最小的工作示例)将其作为一个问题会有所帮助。
  • 可以查看github上的源码:github.com/tidyverse/ggplot2/blob/master/R/…

标签: r ggplot2


【解决方案1】:

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

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

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 月 1 日创建

【讨论】:

  • 好的。这很好,但问题没有提到新方法,似乎只是想了解它目前正在应用的方法。
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 2011-06-24
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多