怎么做&在R中对财务数据xts对象绘制简单且滚动的线性回归?

时间:2013-07-21 06:17:57

标签: r time-series regression xts

使用30分钟的数据,我已在网上提供样本。这是ES与2份NQ合约(ES-2 * NQ)之间价差的名义美元价值。样本很小,但如果您愿意,应该足够长,可以直接在演示中使用。 R代码抓住它并在我尝试时使用它:

demo.xts <- as.xts(read.zoo('http://dl.dropboxusercontent.com/u/31394273/demo.csv', sep=',', tz = '', header = TRUE, format = '%Y-%m-%d %H:%M:%S'))

头(demo.xts):

                        [,1]
2013-05-27 00:00:00 -37295.0
2013-05-27 00:30:00 -37292.5
2013-05-27 01:00:00 -37300.0
2013-05-27 01:30:00 -37280.0
2013-05-27 02:00:00 -37190.0
2013-05-27 02:30:00 -37245.0

我主要追求的是滚动窗口回归(或linear regression curve,正如我的交易平台所说的那样) - 保存它,然后绘制它。并且,我想要指出我应该能够在指定的时间段内绘制单个简单回归。在窗口回归之后,我会添加标准偏差“波段”,但我想我可以在滚动回归中使用TTR的“runSD”来计算出那个。我所追求的样本:

chart with hand drawn lines

我认为这一点 - Rolling regression xts object in R - 让我最接近我的想法。它似乎适用于我的数据,但我无法弄清楚如何将得到的“系数”转换为我想要使用的名义美元价值图中的线或曲线。

引用任何包(如TTR)都会很棒;很高兴加载任何使这更简单或更容易的东西。

2 个答案:

答案 0 :(得分:8)

您可以使用predict计算回归线上的点数 和tail提取最新的。

# Sample data
library(quantmod)
getSymbols("^GSPC", from="2009-01-01")

# Rolling regression (unweighted), with prediction intervals
x <- rollapplyr( 
  as.zoo(Ad(GSPC)), 
  width=300, by.column = FALSE, 
  FUN = function(x) {
    r <- lm( x ~ index(x) )
    tail(predict(r, interval="prediction"),1)
  } 
)

# Plots
plot( index(GSPC), Ad(GSPC), type="l", lwd=3, las=1 )
lines( index(x), x$fit, col="purple", lwd=3 )
lines( index(x), x$lwr, col="purple", lwd=3, lty=3 )
lines( index(x), x$upr, col="purple", lwd=3, lty=3 )
abline( lm( Ad(GSPC) ~ index(GSPC) ), col="light blue", lwd=3 )  

Moving regression

答案 1 :(得分:5)

我最近在TTR中添加了rollSFM(滚动单因素模型)功能。以下是运行24期滚动回归的示例:

reg <- rollSFM(demo.xts, .index(demo.xts), 24)
rma <- reg$alpha + reg$beta*.index(demo.xts)
chart_Series(demo.xts, TA="add_TA(rma,on=1)")

enter image description here

基本理念是按时回归价格。 .index返回POSIXct索引demo.xts的数字表示(即自纪元以来的秒数),因此第二个参数是时间。 rma包含每个时间点的线性回归的拟合值(reg对象也包含R平方)。