微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何知道由 geom_smooth 在 R 中生成的多项式回归曲线的极值?

如何解决如何知道由 geom_smooth 在 R 中生成的多项式回归曲线的极值?

我在阅读 Hadley Wickham 所著的《R for Data Science》一书时开始产生这个问题。在“数据转换”一章中,作者使用了这个例子:

library(nycflights13)
library(tidyverse)
by_dest <- group_by(flights,dest)
delay <- summarise(by_dest,count = n(),dist = mean(distance,na.rm = TRUE),delay = mean(arr_delay,na.rm = TRUE)
)
#> `summarise()` ungrouping output (override with `.groups` argument)
delay <- filter(delay,count > 20,dest != "HNL")

# It looks like delays increase with distance up to ~750 miles 
# and then decrease. Maybe as flights get longer there's more 
# ability to make up delays in the air?
ggplot(data = delay,mapping = aes(x = dist,y = delay)) +
  geom_point(aes(size = count),alpha = 1/3) +
  geom_smooth(se = FALSE)
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'

输出图如下所示: relationship between delay and flight distance

所以我想知道我们是否可以使用R知道曲线的极值和对应的x值?

this answer 开始,我使用 ggpmisc 中的 stat_poly_eq() 计算多项式回归方程:

library(ggpmisc)    
formula=y ~ poly(x,3,raw=TRUE)
p <- ggplot(data = delay,y = delay)) 
p <- p + geom_point(aes(size = count),alpha = 1/3) 
p <- p+ geom_smooth(method = "lm",formula = formula,se = FALSE)
(p1 <- p+ stat_poly_eq(formula = formula,aes(label = paste(..eq.label..,..rr.label..,sep = "~~~")),parse = TRUE))

Polynomial Equation

并使用该方程找出曲线的极值,我认为这非常不聪明。所以我想知道如何计算回归曲线的极值和对应的 x 值(不是原始数据的最大值和最小值,而是回归曲线的最大值和最小值)。

解决方法

您可以在第一个代码段中看到,您的 ggplot 调用输出了以下消息:

#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'

查看 geom_smoothstat_smoothdocumentation

stats::loess() 用于少于 1,000 次的观察;否则 mgcv::gam() 与公式 = y ~ s(x,bs = "cs") 和 method = "REML" 一起使用。

因此,您只需对数据调用 stats::loess 以拟合 geom_smooth 曲线隐含的模型,然后使用 predict 方法获取实际范围之外的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。