代码之家  ›  专栏  ›  技术社区  ›  Ray Tayek

如何将正态图添加到残差的ggplot中[重复]

  •  0
  • Ray Tayek  · 技术社区  · 3 年前

    我想在与残差直方图相同的图中添加一个模型中残差均值和方差的正态分布图。

    我使用fpp3第5章中的以下代码:

    aug <- google_2015 |>
        model(NAIVE(Close)) |>
        augment()
    
    autoplot(aug, .innov) +
        labs(y = "$US",
             title = "Residuals from the naïve method")
    
    aug |>
        ggplot(aes(x = .innov)) +
        geom_histogram() +
        labs(title = "Histogram of residuals")
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   Ben Bolker    3 年前

    最好告诉我们fpp3是“预测:原理与实践”(第三版),有一个相应的R包 显示 我们创建 google_2015 对象,所以我们不必去挖它,但给你。。。

    设置

    library(fpp3)
    google_2015 <- gafa_stock |>
      filter(Symbol == "GOOG", year(Date) >= 2015) |>
      mutate(day = row_number()) |>
      update_tsibble(index = day, regular = TRUE) |> 
      filter(year(Date) == 2015)
    aug <- google_2015 |>
        model(NAIVE(Close)) |>
        augment()
    

    绘图代码

    我们需要(1)在密度而不是计数标度上绘制直方图,(2)动态计算所需的平均值和SD(或者,我们可以在计数标度绘制直方图,并将正常密度乘以观测次数,但这似乎有点困难)

    对链接副本的唯一改进是 aes(y = ..density..) 从ggplot2 3.4.0开始,这些答案中使用的习语已被弃用,并将发出警告。。。

    gg0 <- aug |>
        ggplot(aes(x = .innov)) +
        geom_histogram(aes(y=after_stat(density)))
    gg0 + geom_function(fun = dnorm, colour = "red", n = 1001,
             args = list(mean = mean(aug$.innov, na.rm = TRUE), 
                         sd = sd(aug$.innov, na.rm = TRUE)))
    
    推荐文章