2013-03-11 75 views
0

我正在尝试计算来自FRED的GDPC96时间序列的历年GDP增​​长(即对于xts对象)。我正在寻找一个没有循环的简单函数,它计算变量是数据对象(此处为GDPC96),频率(此处为季度)以及是否显示已弃用期间(如2013)的日历年增长率。日历年份回报计算

例如:

library(quantmod) 
getSymbols("GDPC96",src="FRED") 
a <- annualReturn(GDPC96,leading=FALSE) 
tail(a) 

我想它是这样的,改变是每个日历年度,即应该从计算到1947年1月1日和1948年1月1日等。然后,2012年,只有10月份才能提供数据,则应该省略。

据我所看到的没有在PerformanceAnalytics功能和相关的软件包可以正常做到这一点。

+0

你能给你已经试过什么一个例子,你想什么,输出是一个例子吗? – 2013-04-02 01:54:38

+0

我尝试过一年一次,通过更改“领先”条目来从量化mod返回。但是,结果是错误的。 – user2157086 2013-04-04 16:46:15

+0

这是怎么回事?你想输出什么? – 2013-04-04 16:47:46

回答

1

看来你想要的东西像年复一年的回报计算。我没有意识到会自动执行此操作的功能,但使用TTR软件包中的ROC函数很容易。

library(quantmod) 
getSymbols("GDPC96",src="FRED") 
ROC(GDPC96, 4) # 4-period returns for quarterly data 
getSymbols("SPY") 
spy <- to.monthly(SPY) 
ROC(spy, 12) # 12-period returns for monthly data 

基于评论更新:

first.obs.by.year <- lapply(split(GDPC96, "years"),first) 
last.obs.by.year <- lapply(split(GDPC96, "years"),last) 
ROC(do.call(rbind, first.obs.by.year)) 
ROC(do.call(rbind, last.obs.by.year)) 
+0

不,我寻找一个日历年的变化,即01-01-1948的值除以01-01-1947的值等等(每个日历年只有一个变化)。就伪代码而言,这意味着:查找每年的最后一个值(或者新年的第一个值,取决于数据的存储方式)并将其除以前一年的相同值。没有每季度左右滚动。您建议的代码不会那样做。希望这个澄清事项 – user2157086 2013-04-05 09:02:12

+0

Thx。为了这。当我执行上面的代码,我得到的还是不同的东西:2006-10-01 0.0235019504 2007-10-01 0.0218121684 2008-10-01 -0.0337643335 2009-10-01 -0.0008136949 2010-10-01 0.0236561206 2011-10-01 0.0195210535 2012-10-01 0.0165570024,所以看来还是有问题。 – user2157086 2013-04-08 12:37:50

+0

说“有什么不对”完全没有帮助。如果你想要人们帮助你解决问题,你需要更加明确你想要的结果(因为我已经问了你几次)。 – 2013-04-08 12:46:50