2016-10-05 34 views
1

私はmFilterパッケージからhpfilterで作業しています。私はのリストを変換する簡単な方法を見つけることができません。オブジェクトby hpfilterをggplot2で使用できる形式に変換します。私はそれをすべて取って一緒に戻すことができることを理解していますが、私は見落とした簡単な方法があると思いますか?私はSOの議論で提案されたコードを試しましたR list to data frame。しかし、時系列のリストのオブジェクトをdata.frameに簡単に変換する方法を見つけることができませんでした。最終的な目標は、私はプロットを見るために「<Return>ヒット」するよう求められていますなぜ、ggplot2でプロットする "mF​​ilter"オブジェクト(時系列のリスト)

ここではいくつかのサンプルコードも

# install.packages(c("mFilter"), dependencies = TRUE) 
library(mFilter) 
data(unemp) 
unemp.hp <- hpfilter(unemp, type=c("lambda"), freq = 1606) 
# str(unemp.hp) 
class(unemp.hp) 
# [1] "mFilter" 
plot(unemp.hp) 
Hit <Return> to see next plot: 

だ(下記参照)mFilterオブジェクトによって生成されるデフォルトのプロットを再現するのですか?

default plot produced by the <code>mFilter</code> object

答えて

1

plot関数は、パラメータask=interactive()を持ってplot.mFilterを呼び出し、あなたがplot

plot(unemp.hp,ask=FALSE) 

データのためのコールにask=FALSEことで、これを無効にすることができ、インタラクティブセッションのためのTRUE、 のように設定されます。

オブジェクト unemp.hp

names(unemp.hp) 
# [1] "cycle" "trend" "fmatrix" "title" "xname" "call" "type" "lambda" "method" 
#[10] "x" 

のスロットに関連するオブジェクトを確認する

x(主unempシリーズ)、trendcycleあります。すべての3つのオブジェクトは、私たちが最初にdata.frameにTSからカスタム関数とプロット(grid.arrange用)ggplotgridExtraを使用して

objectList = list(unemp.hp$x,unemp.hp$trend,unemp.hp$cycle) 
names(objectList) = c("unemp","trend","cycle") 


sapply(objectList,class) 
#unemp trend cycle 
# "ts" "ts" "ts" 

変換を使用して data.frameに変換し、クラスtsである:

fn_ts_to_DF = function(x) { 

DF = data.frame(date=zoo::as.Date(time(objectList[[x]])),tseries=as.matrix(objectList[[x]])) 
colnames(DF)[2]=names(objectList)[x] 
return(DF) 
} 


DFList=lapply(seq_along(objectList),fn_ts_to_DF) 
names(DFList) = c("unemp","trend","cycle") 

seriesTrend = merge(DFList$unemp,DFList$trend,by="date") 
cycleSeries = DFList$cycle 

プロット:

gSeries = ggplot(melt(seriesTrend,"date"),aes(x=date,y=value,color=variable)) + geom_line() + 
      ggtitle('Hodrick-Prescot Filter for unemp') + 
      theme(legend.title = element_blank(),legend.justification = c(0.1, 0.8), legend.position = c(0, 1), 
      legend.direction = "horizontal",legend.background = element_rect(fill="transparent",size=.5, linetype="dotted")) 
gCycle = ggplot(cycleSeries,aes(x=date,y=cycle)) + geom_line(color="#619CFF") + ggtitle("Cyclical component (deviations from trend)") 

gComb = grid.arrange(gSeries,gCycle,nrow=2) 

enter image description here

+0

印象的!本当に素晴らしい見えた!私はあなたの機能を実行するとエラーメッセージが表示されます。具体的には、私は実行時に 'time(objectList [[x]]) 'をクラス" Date "'に変換する方法を知らないので、 'Error in as.Date.default(time(objectList [[x]])): 'DFList = lapply(seq_along(objectList)、fn_ts_to_DF)'の行です。私は何か見落としましたか?私は疲れにくいときにもう一度見ていきます。もう一度、ありがとう! –

+0

Rセッションの 'time'の出力を確認してください。それは、それが参照するパッケージです。デフォルトでは、 'stats'パッケージから参照されます。[manual page](https://stat.ethz.ch/R-manual/R-devel/library/stats/html/time.html) – OdeToMyFiddle

+0

はい、それは'名前空間:stats'それは何でしょうか?また、あなたの迅速な対応に感謝します! –

関連する問題