Я использую R. У меня 25 переменных в 15 временных точках, с 3 или более повторениями на переменную в каждой временной точке. Я melt
преобразовал это в data.frame
, который я могу с радостью построить, используя (среди прочего) команду ggplot facet_wrap()
. Мой расплавленный фрейм данных называется lis
; вот его голова и хвост, так что вы получите представление о данных:
> head(lis)
time variable value
1 10 SELL 8.170468
2 10 SELL 8.215892
3 10 SELL 8.214246
4 15 SELL 8.910654
5 15 SELL 7.928537
6 15 SELL 8.777784
> tail(lis)
time variable value
145 1 GAS5 10.92248
146 1 GAS5 11.37983
147 1 GAS5 10.95310
148 1 GAS5 11.60476
149 1 GAS5 11.69092
150 1 GAS5 11.70777
Я могу получить красивый график всех временных рядов вместе с подогнанным сплайном и 95% доверительными интервалами, используя следующие команды ggplot2:
p <- ggplot(lis, aes(x=time, y=value)) + facet_wrap(~variable)
p <- p + geom_point() + stat_smooth(method = "lm", formula = y ~ ns(x,3))
Беда в том, что сглаживатель мне не по вкусу - 95% доверительные интервалы далеко. Я хотел бы использовать Гауссовские процессы (GP), чтобы получить лучшую регрессию и оценку ковариации для моих временных рядов.
Я могу установить GP, используя что-то вроде
library(tgp)
out <- bgp(X, Y, XX = seq(0, 200, length = 100))
, который занимает время X
, наблюдения Y
и делает прогнозы в каждой точке XX
. Объект out
содержит кучу вещей об этих предсказаниях, включая ковариационную матрицу, которую я могу использовать вместо 95% доверительного интервала, который я получаю (я думаю?) Из ns()
.
Проблема в том, что я не знаю, как обернуть эту функцию, чтобы она взаимодействовала с ggplot2::stat_smooth()
. Будем весьма благодарны за любые идеи или указания относительно того, как действовать дальше!