我正在使用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)来获得更好的回归和估计我的时间序列的协方差。
我可以使用类似
的东西来安装GPlibrary(tgp)
out <- bgp(X, Y, XX = seq(0, 200, length = 100))
需要时间X
,观察Y
并在XX
的每个点进行预测。对象out
包含一系列有关这些预测的内容,包括我可以使用的协方差矩阵代替我ns()
得到的95%置信区间(我认为?)。
问题是我不是如何包装此函数以使其与ggplot2::stat_smooth()
接口。任何有关如何进行的想法或指示将不胜感激!
答案 0 :(得分:6)
看起来bgp
不符合标准R样式的建模功能。这意味着您无法在geom_smooth
内使用它,并且您需要在ggplot2调用之外调整模型。您可能还希望通过电子邮件发送tgp
软件包作者,并鼓励他们遵循R标准。
答案 1 :(得分:-3)
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))
,但我还没有尝试过。