R中时间序列分析的数据结构
这是一个基本的问题,但我试着搜索,却找不到答案 我有超过10000条时间序列记录,涉及420家不同的公司。对于每个公司,我都有一个时间戳(月/年)和一些变量。时间序列的长度不同 在此阶段,所有记录都在一个数据帧中,看起来像这样R中时间序列分析的数据结构,r,dataframe,time-series,xts,cross-correlation,R,Dataframe,Time Series,Xts,Cross Correlation,这是一个基本的问题,但我试着搜索,却找不到答案 我有超过10000条时间序列记录,涉及420家不同的公司。对于每个公司,我都有一个时间戳(月/年)和一些变量。时间序列的长度不同 在此阶段,所有记录都在一个数据帧中,看起来像这样 Date Code Var1 Var2 Var3 Var3 01/01/2010 AAA 01/02/2010 AAA 01/03/2010 AAA
Date Code Var1 Var2 Var3 Var3
01/01/2010 AAA
01/02/2010 AAA
01/03/2010 AAA
01/01/2010 BBB
01/02/2010 BBB
01/03/2010 BBB
01/04/2010 BBB
01/01/2010 CCC
01/02/2010 CCC
01/03/2010 CCC
稍后我将需要做互相关、时间序列聚类和构建向量自回归模型
问题:
处理此类数据的指导原则是什么:
-按原样使用数据帧
-将其转换为每个公司的单个时间序列
很高兴接受任何其他建议 没有非黑即白的答案:两种对象类型都有各自的优点,用于不同的目的(尽管我在提问时几乎总是使用
data.table
而不是data.frame
,因为你可以获得更多的功能)。我个人在研究中可以互换使用这两种方法,但通常会以xts
格式保留原始基础数据(在xts
对象中勾选或OHLC条形数据)
这两种对象类型都很快,计算密集型代码都是用C编写的
如果时间序列的维度(长度或宽度)不大,则可以轻松地来回传输(例如,data.table(“index”=index(xtsobj)、coredata(xtsobj)
)在安全级别,然后合并数据。如果希望为横截面类型的建模组合安全性,请合并表。我通常在处理的时间序列的两种对象类型之间来回切换
xts
对象必须使用相同类型的所有列(numeric
或character
是常见类型),如果将分类变量与数字数据混合,这可能是一个限制(您可以将分类变量映射为数字值来解决这个问题,但这是额外的工作,并且在建模数据时会降低清晰度)
xts
使得合并时间序列数据(使用merge
)非常简单,尤其是在不同的时间频率下。它还可以很好地与在TTR
和quantmod
中构建移动窗口技术指标配合使用。您还可以利用quantmod
(chart_Series
和add_TA
)和xts
绘图工具(请参见?plot.xts
)以可视化开箱即用的烛台/OHLC条形图数据。xts
将勾号数据聚合为OHLC条形图数据,并更改条形图数据系列的频率(例如从5分钟条形图更改为1小时条形图,或更改为每日条形图)非常简单,具有有用的函数,如to.period
、period.apply
和端点
(使用C代码可以快速完成)
如果您要建立预测模型(许多线性回归,或更复杂的模型),在您的预测模型中有许多不想映射到数字的分类变量(例如,安全部门、情绪类别),那么最好使用数据。table
。R中的许多预测模型(和无监督的方法,如聚类)要求数据采用data.frame
格式,在这种情况下,如果您的最终目标是预测建模,则以data.table/data.frame
格式存储/保存/加载数据可能更有意义。VAR
/urca
R包中的VAR
模型也使用data.frame
格式。尽管它不是ed指出,许多预测模型(通过插入符号等)要求数据为数值矩阵格式,您可以使用coredata(xtsobj)
(将data.frame
数据转换为matrix
格式)轻松地从xts
对象中提取数据
如果您的数据集非常大(每个证券在内存中存储大的n
GBs价格数据n
),并且您希望按组进行重复聚合(例如,按月份和符号或月份和部门计算收益的平均值/sd,您可能会发现data.table更适合使用),您可能会发现数据。table
效率更高。它被设计用于处理内存/RAM中的大量数据,并且与xts
操作相比,它的复制操作更少。没有黑白答案:两种对象类型在不同用途上都有各自的优势(尽管我在提问时几乎总是使用data.table
而不是data.frame
,因为你可以获得更多的功能。)我个人在研究中可以互换使用这两种方法,但通常都是以xts
格式保留原始基础数据(在xts
对象中勾选或OHLC条数据)
这两种对象类型都很快,计算密集型代码都是用C编写的
如果时间序列的维度(长度或宽度)不大,则可以轻松地来回传输(例如,data.table(“index”=index(xtsobj)、coredata(xtsobj)
)在安全级别,然后合并数据。如果希望为横截面类型的建模组合安全性,请合并表。我通常在处理的时间序列的两种对象类型之间来回切换
xts
对象必须使用相同类型的所有列(numeric
或character
是常见类型),如果将分类变量与数字数据混合,这可能是一个限制(您可以将分类变量映射为数字值来解决这个问题,但这是额外的工作,并且在建模数据时会降低清晰度)
xts
使得合并时间序列数据(使用merge
)非常简单,尤其是在不同的时间频率下合并。它