2010-06-04 48 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標準。