R 中多个时间段的多个证券的日志 returns

Log returns of multiple securities for multiple time period in R

我有包含 2000 年至 2014 年 5413 家公司每日收盘价的数据集。我想根据日期计算股票的每日日志 returns 作为日志(昨天的价格 today/Price)。我将数据集说明如下:

Date       A G L    ABA    ABB ABBEY 
2000-1-3    NA      NA      NA  NA
2000-1-4    79.5    325     NA  961  
2000-1-5    79.5    322.5   NA  945
2000-1-6    79.5    327.5   NA  952
2000-1-7    NA      327.5   NA  941  
2000-1-10   79.5    327.5   NA  946
2000-1-11   79.5    327.5   NA  888

如何计算每日日志 returns 并另外处理 NA。我的样本期是从2000年到2014年,所以有一些公司是2001年上市的,所以2000年全年都没有,这应该怎么处理。非常感谢您的帮助。

根据this topic我将尝试描述我的命题:

据我所知,我们有一个包含日期和数千家公司的数据框。这是我们的示例数据框 prices:

> prices
    newdates nsp1  nsp2 nsp3 nsp4
1 2000-01-03   NA    NA   NA   NA
2 2000-01-04 79.5 325.0   NA  961
3 2000-01-05 79.5 322.5   NA  945
4 2000-01-06 79.5 327.5   NA  952
5 2000-01-07   NA 327.5   NA  941
6 2000-01-10 79.5 327.5   NA  946
7 2000-01-11 79.5 327.5   NA  888

要创建 log-returns 的新数据框,我使用了以下代码:

logs=data.frame(
+   cbind.data.frame(
+     newdates[-1],
+     diff(as.matrix(log(prices[,-1])))
+     )
+   )
> logs
  newdates..1. nsp1         nsp2 nsp3         nsp4
1   2000-01-04   NA           NA   NA           NA
2   2000-01-05    0 -0.007722046   NA -0.016789481
3   2000-01-06    0  0.015384919   NA  0.007380107
4   2000-01-07   NA  0.000000000   NA -0.011621895
5   2000-01-10   NA  0.000000000   NA  0.005299429
6   2000-01-11    0  0.000000000   NA -0.063270826

为了阐明这段代码中发生了什么,让我们从内到外对其进行分析:

第 1 步:计算 log-returns

  • 你知道log(a/b) = log(a)-log(b),所以我们可以计算 对数的差异。函数diff(x,lag=1)计算 给定滞后的差异。这里是 lag=1 所以它首先给出 差异。
  • 我们的 x 是数据框中的价格。从中挑选 data.frame 我们使用的没有第一个(有日期)的每一列 prices[,-1].
  • 我们需要对数,所以log(prices[,-1])
  • 函数diff()适用于向量或矩阵,所以我们需要处理 计算对数作为矩阵,因此 `as.matrix(log(价格[-1]))
  • 现在我们可以将 diff()lag=1 一起使用,所以 diff(as.matrix(log(prices[,-1])))

第 2 步:创建 log-returns 和日期

的数据框
  • 我们不能只使用 cbind()。首先,因为长度不同(returns 短了 1 条记录)。我们需要删除第一个日期,所以 newdates[-1]

  • 其次,使用cbind()将日期转换为数值,如160027或其他。
    这里要用cbind.data.frame(x,y),如上所示

  • 现在数据已准备就绪,我们可以创建使用 data.frame() 并将其命名为日志,因此 logs=data.frame(...) 如上所述。

如果您的数据集看起来像数据框 prices,它应该 运行。最重要的是使用diff(log(x))可以轻松计算出log-returns.

如果您有任何疑问或问题,请尽管提问。