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

时间:2010-06-04 21:42:38

标签: r machine-learning ggplot2 gaussian

我正在使用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

我可以使用以下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))

问题在于平滑度不是我喜欢的 - 95%的置信区间是远离的。我想使用高斯过程(GP)来获得更好的回归和估计我的时间序列的协方差。

我可以使用类似

的东西来安装GP
library(tgp) 
out <- bgp(X, Y, XX = seq(0, 200, length = 100))

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

问题是我不是如何包装此函数以使其与ggplot2::stat_smooth()接口。任何有关如何进行的想法或指示将不胜感激!

2 个答案:

答案 0 :(得分:6)

看起来bgp不符合标准R样式的建模功能。这意味着您无法在geom_smooth内使用它,并且您需要在ggplot2调用之外调整模型。您可能还希望通过电子邮件发送tgp软件包作者,并鼓励他们遵循R标准。

答案 1 :(得分:-3)

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)),但我还没有尝试过。