我的数据集包含了2000年至2014年间5413家公司的每日收盘价。我想根据日期作为日志(今日价格/昨日价格)计算股票的每日日志收益。我按如下方式说明了数据集:
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
如何计算每日日志回报并另外解决NA问题。我的样本期是从2000年到2014年,因此有些公司在2001年上市,因此,2000年全年都有NA,应该如何处理。非常感谢您的帮助。
答案 0 :(得分:2)
根据this topic,我会尝试描述我的命题:
据我所知,我们拥有日期和数千家公司的数据框。这是我们的示例数据框,名为 price :
> 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
要创建一个新的日志返回数据框,我在代码下面使用了
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(a/b) = log(a)-log(b)
,所以我们可以计算出来
对数差异。函数diff(x,lag=1)
计算
给定滞后的差异。这是lag=1
所以它首先给出
差异。x
是数据框中的价格。选择一个
data.frame
我们使用的每一列没有第一列(有日期)
prices[,-1]
。log(prices[,-1])
diff()
适用于向量或矩阵,因此我们需要处理
因此,计算的对数为矩阵
`as.matrix(日志(价格[, - 1]))diff()
与lag=1
一起使用,diff(as.matrix(log(prices[,-1])))
第2步:创建日志返回和日期的数据框
我们不能仅使用cbind()
。首先,因为长度不同(回报短1个记录)。我们需要删除第一个日期,因此newdates[-1]
其次,使用cbind()日期将转换为数值160027或其他。
在这里,我们必须使用cbind.data.frame(x,y)
,如上所示。
现在数据准备就绪,我们可以创建使用data.frame()
并将其命名为日志logs=data.frame(...)
,如上所述。
如果您的数据集看起来像数据框价格,它应该运行。最重要的是使用diff(log(x))
来轻松计算日志返回。
如果您有任何疑问或问题,请随便询问。