R + ggplot:如何使用自定义平滑器(高斯过程)

Mik*_*war 10 r machine-learning gaussian ggplot2

我正在使用R.我在15个时间点有25个变量,每个时间点每个变量有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
Run Code Online (Sandbox Code Playgroud)

我可以使用以下ggplot2命令获得所有时间序列的精美绘图,以及拟合样条曲线和95%置信区间:

p <- ggplot(lis, aes(x=time, y=value)) + facet_wrap(~variable)
p <- p + geom_point() + stat_smooth(method = "lm", formula = y ~ ns(x,3))
Run Code Online (Sandbox Code Playgroud)

麻烦的是,更顺畅的是不是我喜欢的 - 95%的置信区间是远离的.我想使用高斯过程(GP)来获得更好的回归和估计我的时间序列的协方差.

我可以使用类似的东西来适应GP

library(tgp) 
out <- bgp(X, Y, XX = seq(0, 200, length = 100))
Run Code Online (Sandbox Code Playgroud)

需要时间X,观察Y并在每个点进行预测XX.该对象out包含一系列关于这些预测的东西,包括我可以使用的协方差矩阵代替我得到的95%置信区间(我认为?)ns().

麻烦的是我不是如何包装这个函数来使它与它接口ggplot2::stat_smooth().任何有关如何进行的想法或指示将不胜感激!

had*_*ley 6

它看起来bgp不符合标准R风格的建模功能.这意味着你不能在里面使用它geom_smooth,你需要在ggplot2调用之外拟合模型.您可能还希望通过电子邮件发送tgp包作者并鼓励他们遵循R标准.


Joh*_*son -2

Stat_smooth 具有yyminymax美学,您可以将它们与自定义平滑器一起使用,如下所示: http: //had.co.nz/ggplot2/stat_smooth.html。您可以使用自定义平滑器中的预测和 CI 创建一个数据框,并直接使用它stat_smooth(指定新的数据参数)。你也许可以使用stat_smooth(method="tgp::bgp",XX=seq(0,200,length=100)),但我还没有尝试过。