2010-06-04 49 views
9

我正在使用R.我有超过15个时间点的25个变量,每个时间点每个变量有3个或更多个重复。我有melt编辑成data.frame,我可以愉快地使用(除其他外)ggplot的facet_wrap()命令。我熔化的数据帧被称为lis;这里是它的头部和尾部,所以你得到的数据的一个想法:R + ggplot:如何使用自定义平滑器(高斯过程)

> 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()接口。任何想法或指示如何进行将不胜感激!

回答

-3

Stat_smooth有y,yminymax美学,您可以使用自定义平滑器,如此处所述:http://had.co.nz/ggplot2/stat_smooth.html。您可以使用自定义平滑器中的预测和CI创建数据框,并直接在stat_smooth(指定新的数据参数)中使用该数据框。您可能可以使用stat_smooth(method="tgp::bgp",XX=seq(0,200,length=100)),但我没有尝试过。

6

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