R + ggplot: как использовать пользовательский сглаживатель (процесс Гаусса) - PullRequest
9 голосов
/ 05 июня 2010

Я использую 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(). Будем весьма благодарны за любые идеи или указания относительно того, как действовать дальше!

Ответы [ 2 ]

6 голосов
/ 05 июня 2010

Похоже, bgp не соответствует стандартному стилю R. для функций моделирования. Это означает, что вы не можете использовать его внутри geom_smooth, и вам нужно будет подогнать модель вне вызова ggplot2. Вы также можете отправить электронное письмо автору пакета tgp и рекомендовать ему следовать стандартам R.

0 голосов
/ 05 июня 2010

Stat_smooth имеет эстетику y, ymin и ymax, которую вы можете использовать с пользовательским сглаживателем, как описано здесь: http://had.co.nz/ggplot2/stat_smooth.html. Вы создаете фрейм данных с предсказаниями и CI из своего пользовательского сгладить и использовать это непосредственно в stat_smooth (указав новый аргумент данных). Возможно, вы сможете использовать stat_smooth(method="tgp::bgp",XX=seq(0,200,length=100)), но я не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...