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.
如果您有任何疑问或问题,请尽管提问。
我有包含 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.
如果您有任何疑问或问题,请尽管提问。