У меня есть игровые сглаживания для нескольких кластеров, полученные из кода кластеризации на основе модели, объединяющего временные ряды разной длины, и я хотел бы отобразить их вместе с данными.
Пакет mgcViz обеспечивает отличную визуализацию для отдельных кластеров, но я не вижу, как их объединить. Возможно, это потому, что он направлен на визуализацию нескольких эффектов, а не нескольких кластеров. Тем не менее, его возможности очень близки к тому, что мне нужно, поэтому вот воспроизводимый пример (адаптировано из https://mfasiolo.github.io/mgcViz/articles/mgcviz.html):
library(mgcViz)
n = 1e3
z = rnorm(n)
dat = data.frame(x = rep(z, times = 2),
y = rep(c(1,2), each = n) + c(sin(z), 0.5*z^2) + rnorm(2*n)/4,
g = factor(rep(1:2, each = n)))
b <- lapply(1:2, function(i, dat) gam(y ~ s(x), data = dat[dat$g == i, ]),
dat = dat)
plot(getViz(b[[1]])) + l_points() + l_fitLine() + l_ciLine() # First
plot(getViz(b[[2]])) + l_points() + l_fitLine() + l_ciLine() # Second
plot(getViz(b)) # Third
ggplot(dat, aes(x, y, color = g)) + geom_point(pch = ".") + theme_bw() # Fourth
Я хотел бы объединить первые два сюжета в один, как это частично сделано в третьем сюжете. Включение третьего графика в данные, показанные в четвертом, поможет. Это также требует различных сдвигов перехвата в третьем графике. Добавление l_points()
к третьему графику делает его пустым.
Скрытое ограничение заключается в том, что сглаживания gam
являются отдельными компонентами списка (как показано выше), потому что они фактически исходят из пользовательского кода кластеризации для фрагментов временных рядов разной длины и интервалов с использованием bam
mgcv для очень больших данных. Таким образом, график предпочтительно должен получать всю информацию из b
, список результатов gam
для каждого кластера.