如何在 R 中对财务数据 xts 对象进行简单和滚动线性回归?

Posted

技术标签:

【中文标题】如何在 R 中对财务数据 xts 对象进行简单和滚动线性回归?【英文标题】:How to do & plot simple and rolling linear regression on financial data xts object in R? 【发布时间】:2013-07-20 03:06:42 【问题描述】:

使用 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”来计算出那个。我所追求的样本:

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

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

【问题讨论】:

我不知道如何计算“标准偏差带”。你能提供一个公式吗? @JoshuaUlrich 我理解它的方式是线性回归曲线±标准偏差数乘以价格。因此,使用下面的示例代码,rma + 2*runSD(demo.xts, n=20) 似乎可以添加“上限”,例如。此外,vincent 的另一个答案似乎与预测函数输出的“lwr”和“upr”的预期结果相似。 【参考方案1】:

您可以使用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 )  

【讨论】:

这很好用。我没有遇到过 predict 函数,可能也没有想过要探索它。它还包括标准偏差,这很棒。谢谢!【参考方案2】:

我最近向 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)")

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

【讨论】:

这也回答了我的问题,但我不能同时勾选。我不得不承认我不知道单因素模型是什么,所以它完全不在我的雷达上。效果很好!顺便说一句,你的包裹非常有用。如果它们不存在,我什至不会尝试尝试在 R 中进行回测。谢谢。

以上是关于如何在 R 中对财务数据 xts 对象进行简单和滚动线性回归?的主要内容,如果未能解决你的问题,请参考以下文章

xts 变量带“-”

将 XTS 对象作为数据帧存储在 R 的列表中

如何在 R 中更改时间序列(XTS 或 ZOO)?

R语言时间序列数据应用xts

关于如何在 xts 对象中获取特定元素的简单问题

xts 格式的时间戳和高频包的列名