Если вы используете ggplot, вы можете сделать сглаживание прямо в geom_smooth
. Поскольку ggplot требует длинной формы, использование столбцов списка и tidyr::unnest
является полезной заменой replicate
, хотя существует множество способов выполнить этап генерации данных.
library(tidyverse)
set.seed(47)
# A nice theme with a white background to help make low-opacity objects visible
theme_set(hrbrthemes::theme_ipsum_tw())
df <- tibble(replication = seq(100), # scaled down a little
x = map(replication, ~runif(1000, 0, 10)),
y = map(x, ~rpois(1000, lambda = 2*.x + 0.2*.x*sin(.x)))) %>%
unnest()
# base plot with aesthetics and points
point_plot <- ggplot(df, aes(x, y, group = replication)) +
geom_point(alpha = 0.01, stroke = 0)
point_plot +
geom_smooth(method = lm, formula = y ~ splines::ns(x), size = .1, se = FALSE)
Управление альфа-линией линии может быть действительно полезным для такого рода графиков, но параметр alpha
в geom_smooth
контролирует непрозрачность стандартной ленты ошибок. Чтобы установить альфа линии, используйте geom_line
с stat_smooth
:
point_plot +
stat_smooth(geom = 'line', method = lm, formula = y ~ splines::ns(x),
color = 'blue', alpha = 0.03)
В настоящее время сглаживание здесь не делает намного больше, чем OLS. Чтобы сделать его более гибким, установите степени свободы:
point_plot +
stat_smooth(geom = 'line', method = lm, formula = y ~ splines::ns(x, df = 5),
color = 'blue', alpha = 0.03)
Учитывая, что ответом является Пуассон, возможно, стоит прибегнуть к регрессии Пуассона с помощью glm
. Наибольшее влияние здесь заключается в том, что когда х мало, у не падает до 0:
point_plot +
stat_smooth(geom = 'line', method = glm, method.args = list(family = 'poisson'),
formula = y ~ splines::ns(x, df = 5), color = 'blue', alpha = 0.03)
Отрегулируйте дальше, как вам нравится.