10

我正在使用 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) 为我的时间序列获得更好的回归和协方差估计。

我可以使用类似的东西来安装全科医生

library(tgp) 
out <- bgp(X, Y, XX = seq(0, 200, length = 100))

这需要时间X,观察Y并在每个点进行预测XX。该对象out包含一堆关于这些预测的东西,包括一个协方差矩阵,我可以用它来代替我从ns().

问题是我不知道如何包装这个函数以使其与ggplot2::stat_smooth(). 任何关于如何进行的想法或指示将不胜感激!

4

2 回答 2

5

看起来bgp不遵循建模函数的标准 R 风格。这意味着您不能在内部使用它geom_smooth,您需要在 ggplot2 调用之外拟合模型。你可能还想给tgp包作者发邮件,鼓励他们遵循 R 标准。

于 2010-06-05T01:01:17.553 回答
-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)),但我还没有尝试过。

于 2010-06-05T00:28:15.987 回答