R中时间序列分析的数据结构
Data structure for time-series analysis in R
这是一个基本问题,但我尝试搜索但无法得到答案。
我有超过 1 万条时间序列记录,涉及 420 家不同的公司。对于每家公司,我都有一个时间戳 (month/year) 和一些变量。时间序列的长度不同。
在这个阶段,所有记录都在一个 dataframe
中,看起来像这样
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
我稍后需要进行互相关、时间序列聚类并构建向量自回归模型。
问题:
使用此类数据的准则是什么:
- 按原样使用 dataframe
- 将其转换为每个公司的单独时间序列。
很高兴接受任何其他建议!
没有黑白分明的答案:两种对象类型在不同用途上都有各自的优势(尽管我在问你的问题时几乎总是使用 data.table
而不是 data.frame
,因为你走得太远了更多功能。)。我个人在研究中交替使用两者,但通常以 xts
格式保留原始原始基础数据(xts
对象中的报价或 OHLC 柱数据)。
两种对象类型都很快,计算密集型代码用 C 语言编写。
如果你的时间序列的维度(长或宽)不大,可以方便的在安全级别来回传输(比如data.table("index" = index(xtsobj), coredata(xtsobj)
),然后合并data.tables
如果您希望结合证券进行横截面类型的建模。对于我使用的时间序列,我通常在两种对象类型之间来回切换
xts
对象必须使用相同类型的所有列(numeric
或 character
是常见类型),如果您将分类变量与数值混合,这可能是一个限制数据(您可以将分类变量映射到数值来解决这个问题,但这是额外的工作,并且会降低数据建模时的清晰度)。
xts
使得合并时间序列数据(使用 merge
)非常简单,尤其是在不同的时间频率上。它也非常适合在 TTR
和 quantmod
中构建移动 window 技术指标。您还可以利用 quantmod
(chart_Series
和 add_TA
)和 xts
绘图工具(参见 ?plot.xts
)来可视化开箱即用的 candlestick/OHLC 柱数据。 xts
将分时数据聚合到 OHLC 柱数据中,并通过 to.period
等有用的函数非常简单地更改柱数据系列的频率(例如,从 5 分钟柱到 1 小时柱,或到每日柱) period.apply
和 endpoints
(使用 C 代码可以快速完成)。
如果您要构建预测模型(许多线性回归或更复杂的模型),并且预测模型中有许多您不想映射到数字的分类变量(例如安全部门、情绪类别),使用 data.table
可能会更好。 R 中的许多预测模型(以及聚类等无监督方法)要求数据采用 data.frame
格式,在这种情况下 storing/saving/loading 如果您的最终目标是 data.table/data.frame
格式的数据可能更有意义预测建模。 VAR
var
/urca
R 包中的模型也使用 data.frame
格式。尽管注意到许多预测模型(通过 caret
等)要求数据为数字 matrix
格式,您可以使用 coredata(xtsobj)
从 xts
对象中轻松提取(转换data.frame
数据到 matrix
格式通常也很简单)。
如果您的数据集非常大(每个证券在内存中保存 n
GB 的价格数据用于大 n
),并且您想按组重复聚合(例如计算 [= returns 的 65=] 按月和符号或月和扇区,您可能会发现 data.table 使用起来更自然),您可能会发现 data.table
它的设计效率更高在 memory/RAM 中处理大量数据,并且往往比 xts
操作进行更少的复制。
这是一个基本问题,但我尝试搜索但无法得到答案。
我有超过 1 万条时间序列记录,涉及 420 家不同的公司。对于每家公司,我都有一个时间戳 (month/year) 和一些变量。时间序列的长度不同。
在这个阶段,所有记录都在一个 dataframe
中,看起来像这样
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
我稍后需要进行互相关、时间序列聚类并构建向量自回归模型。
问题:
使用此类数据的准则是什么:
- 按原样使用 dataframe
- 将其转换为每个公司的单独时间序列。
很高兴接受任何其他建议!
没有黑白分明的答案:两种对象类型在不同用途上都有各自的优势(尽管我在问你的问题时几乎总是使用 data.table
而不是 data.frame
,因为你走得太远了更多功能。)。我个人在研究中交替使用两者,但通常以 xts
格式保留原始原始基础数据(xts
对象中的报价或 OHLC 柱数据)。
两种对象类型都很快,计算密集型代码用 C 语言编写。
如果你的时间序列的维度(长或宽)不大,可以方便的在安全级别来回传输(比如data.table("index" = index(xtsobj), coredata(xtsobj)
),然后合并data.tables
如果您希望结合证券进行横截面类型的建模。对于我使用的时间序列,我通常在两种对象类型之间来回切换
xts
对象必须使用相同类型的所有列(numeric
或 character
是常见类型),如果您将分类变量与数值混合,这可能是一个限制数据(您可以将分类变量映射到数值来解决这个问题,但这是额外的工作,并且会降低数据建模时的清晰度)。
xts
使得合并时间序列数据(使用 merge
)非常简单,尤其是在不同的时间频率上。它也非常适合在 TTR
和 quantmod
中构建移动 window 技术指标。您还可以利用 quantmod
(chart_Series
和 add_TA
)和 xts
绘图工具(参见 ?plot.xts
)来可视化开箱即用的 candlestick/OHLC 柱数据。 xts
将分时数据聚合到 OHLC 柱数据中,并通过 to.period
等有用的函数非常简单地更改柱数据系列的频率(例如,从 5 分钟柱到 1 小时柱,或到每日柱) period.apply
和 endpoints
(使用 C 代码可以快速完成)。
如果您要构建预测模型(许多线性回归或更复杂的模型),并且预测模型中有许多您不想映射到数字的分类变量(例如安全部门、情绪类别),使用 data.table
可能会更好。 R 中的许多预测模型(以及聚类等无监督方法)要求数据采用 data.frame
格式,在这种情况下 storing/saving/loading 如果您的最终目标是 data.table/data.frame
格式的数据可能更有意义预测建模。 VAR
var
/urca
R 包中的模型也使用 data.frame
格式。尽管注意到许多预测模型(通过 caret
等)要求数据为数字 matrix
格式,您可以使用 coredata(xtsobj)
从 xts
对象中轻松提取(转换data.frame
数据到 matrix
格式通常也很简单)。
如果您的数据集非常大(每个证券在内存中保存 n
GB 的价格数据用于大 n
),并且您想按组重复聚合(例如计算 [= returns 的 65=] 按月和符号或月和扇区,您可能会发现 data.table 使用起来更自然),您可能会发现 data.table
它的设计效率更高在 memory/RAM 中处理大量数据,并且往往比 xts
操作进行更少的复制。