我是R的新手(我以前用过Stata) . 我目前正在重新做一些涉及的金融理论测试:
-
宣布时间序列
-
计算相关变量,如每日回报
-
股票表现(横截面)
-
表单组合
-
运行回归 .
我的问题是:
-
我应该使用 wide dataset 或 long dataset 来更方便地编写脚本并节省更多时间吗?
-
我应该使用哪些相应的命令?
我的意思是广泛的数据集是900个股票的900列价格 . 长数据意味着1个价格列和900个行 . 该数据包括过去10年的每日数据 . 所以这是一个大规模的数据处理 . 这就是为什么你分享给我的任何经验都是宝贵的 .
Wide data example:
dateyyyymmdd price.AAA price.BBB
1 2015-10-02 10.1 10.7
2 2015-10-01 10.3 10.4
3 2015-09-30 10.4 10.4
4 2015-09-29 10.6 10.6
5 2015-09-28 10.7 11.0
6 2015-09-25 10.4 10.8
7 2015-09-24 9.8 10.2
8 2015-09-23 9.9 10.1
9 2015-09-22 9.9 9.9
10 2015-09-21 10.1 10.1
Long data example:
dateyyyymmdd id price
1 2015-10-02 AAA 10.7
2 2015-10-01 AAA 10.4
3 2015-09-30 AAA 10.4
4 2015-09-29 AAA 10.6
5 2015-09-28 AAA 11.0
6 2015-10-02 BBB 10.8
7 2015-10-01 BBB 10.2
8 2015-09-30 BBB 10.1
9 2015-09-29 BBB 9.9
10 2015-09-38 BBB 10.1
这是我工作中的障碍:
-
声明时间序列并计算每日回报:我发现声明时间序列并使用它与Stata相比要困难得多 . 我尝试了
ts()
和其他一些但最终我不知道如何计算"smart way"中每只股票的每日回报 . 我尝试了diff()
但它需要应用正确的日期顺序 . -
排名股票回报 . 我还没到达这个部分 . 但是,如果有人可以帮我,如果我应该使用宽或长的数据来节省时间 . 我必须在一天内对股票的回报进行排名,然后对它们进行分组并计算每个组的参数 .
-
运行回归和投资组合分析 . 我查看了投资组合分析包并猜测它使用了大量数据,因为给定的示例显示了许多代码作为数据帧的名称(每个股票的1个价格列) .
1 回答
解决您的问题:
R有许多表示时间序列的方法 .
xts
包经常用于财务数据,由于缺少周末和假期而形成不规则的时间序列 .xts
包中包含diff
的版本,该版本使用正确的日期排序来计算回报 . 下面的代码在示例数据上使用xts
包和diff
来正确计算回报 .rank
函数用于对每天的回报进行排名 . 由于rank
仅适用于单个数据向量,因此apply
函数用于选择每一行,对返回进行排名,然后将排名组合成矩阵 . 结果矩阵需要恢复为xts
时间序列,该序列使用Reclass
完成 . 最后,出于示例的目的,将数据和结果组合成一个使用merge
完成的时间序列可能会有所帮助 .您表示您对使用
PerformanceAnalytics
包感兴趣 .xts
每个资产在其自己的列中的时间序列与PerformanceAnalytics
配合良好 . 例如,代码使用计算的回报并假设等权重投资组合,使用PerformanceAnalytics
包中的Return.portfolio
函数计算投资组合回报的时间序列 .您提到您有900年资产的10年每日数据 . R的行数并不大,但列数可能是 . 我尝试使用类似下面的代码,看看是否有任何性能问题 . 如果是这样,你可以尝试几种选择 .