gpt4 book ai didi

r - 从指定的x值显示geom_smooth()趋势线

转载 作者:行者123 更新时间:2023-12-03 16:29:43 25 4
gpt4 key购买 nike

假设一个数据集包含以下格式的每个时间段和多个组的计数数据:

set.seed(123)
df <- data.frame(group = as.factor(rep(1:3, each = 50)),
week = rep(1:50, 3),
rate = c(round(700 - rnorm(50, 100, 10) - 1:50 * 2, 0),
round(1000 - rnorm(50, 200, 10) - 1:50 * 2, 0),
round(1000 - rnorm(50, 200, 10) - 1:50 * 2, 0)))

group week rate
1 1 1 604
2 1 2 598
3 1 3 578
4 1 4 591
5 1 5 589
6 1 6 571
7 1 7 581
8 1 8 597
9 1 9 589
10 1 10 584
我有兴趣为每个组拟合基于模型的趋势线,但是,我希望仅从某个x值显示此趋势线。要使用所有数据点可视化趋势线(需要 ggplot2):
df %>%
ggplot(aes(x = week,
y = rate,
group = group,
lty = group)) +
geom_line() +
geom_point() +
geom_smooth(method = "glm",
method.args = list(family = "quasipoisson"),
se = FALSE)
Plot 1
或根据特定值范围拟合模型(需要 ggplot2dplyr):
df %>%
group_by(group) %>%
mutate(rate2 = ifelse(week < 35, NA, rate)) %>%
ggplot(aes(x = week,
y = rate,
group = group,
lty = group)) +
geom_line() +
geom_point() +
geom_smooth(aes(y = rate2),
method = "glm",
method.args = list(family = "quasipoisson"),
se = FALSE)
Plot 2
但是,我无法找到一种使用所有数据来拟合模型的方法,而只能显示特定x值(例如35+)的趋势线。因此,我本质上是希望为图一计算出趋势线,但要使用 ggplot2和理想情况下仅使用一个管道根据第二个图显示趋势线。

最佳答案

我去看看@tjebo提到的after_stat函数。看看以下项目对您有用吗?

df %>%
ggplot(aes(x = week,
y = rate,
lty = group)) +
geom_line() +
geom_point() +
geom_smooth(method = "glm",
aes(group = after_stat(interaction(group, x > 35)),
colour = after_scale(alpha(colour, as.numeric(x > 35)))),
method.args = list(family = "quasipoisson"),
se = F)
result
通过将与每条线关联的点分成两组,即x <= 35区域中的点和x> 35区域中的点,这是有效的,因为线的颜色不应改变,并为每个新组定义单独的颜色透明度。结果,只有x> 35区域中的线可见。
当使用该代码时,该代码会触发警告,说明 after_scale修改未应用于图例。但我认为这不是问题,因为无论如何我们都不需要它出现在图例中。

关于r - 从指定的x值显示geom_smooth()趋势线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66091753/

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