R中时间序列分析的数据结构

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

这是一个基本的问题,但我试着搜索,却找不到答案

我有超过10000条时间序列记录,涉及420家不同的公司。对于每个公司,我都有一个时间戳(月/年)和一些变量。时间序列的长度不同

在此阶段,所有记录都在一个数据帧中,看起来像这样

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
)非常简单,尤其是在不同的时间频率下合并。它