gpt4 book ai didi

r - 如何使 geom_smooth 不那么动态

转载 作者:行者123 更新时间:2023-12-01 12:18:34 25 4
gpt4 key购买 nike

在 ggplot 中生成带分面的平滑图时,如果数据范围从一个面到另一个面发生变化,则平滑可能会为数据较少的面获得太多的自由度。

例如

library(dplyr)
library(ggplot2) # ggplot2_2.2.1

set.seed(1234)
expand.grid(z = -5:2, x = seq(-5,5, len = 50)) %>%
mutate(y = dnorm(x) + 0.4*runif(n())) %>%
filter(z <= x) %>%
ggplot(aes(x,y)) +
geom_line() +
geom_smooth(method = 'loess', span = 0.3) +
facet_wrap(~ z)

生成以下内容:faceted plotz=-5 方面很好,但是当移动到后续方面时,平滑似乎“过度拟合”;事实上 z=-1 已经受到了影响,在最后一个方面,z=2,平滑线完美地拟合了数据。理想情况下,我想要的是不太动态的平滑,例如总是平滑大约 4 个点(或使用固定内核的内核平滑)。

following SO question相关但可能更雄心勃勃(因为它希望对 span 进行更多控制);在这里,我想要一种更简单的平滑形式。

最佳答案

我会简单地删除 span 选项(因为 0.3 看起来太细了)或使用 lm 方法进行多项式拟合。

library(dplyr)
library(ggplot2) # ggplot2_2.2.1

set.seed(1234)
expand.grid(z = -5:2, x = seq(-5,5, len = 50)) %>%
mutate(y = dnorm(x) + 0.4*runif(n())) %>%
filter(z <= x) %>%
ggplot(aes(x,y)) +
geom_line() +
geom_smooth(method = 'lm', formula = y ~ poly(x, 4)) +
#geom_smooth(method = 'loess') +
#geom_smooth(method = 'loess', span = 0.3) +
facet_wrap(~ z)

关于r - 如何使 geom_smooth 不那么动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com