R:每两个月对股票价格历史进行子集

问题描述

我需要根据日常观察每两个月计算一次回报自相关。我无法弄清楚如何每两个月对股票的每日价格历史进行子集。我的数据集有多只股票,不同股票的历史不同。

下面是一只股票的示例

data = data.frame(date = c("2000-01-27","2000-01-28","2000-01-29","2000-01-30","2000-02-27","2000-02-28","2000-03-27","2000-03-28","2000-03-29","2000-03-30","2000-04-27","2000-04-28","2000-04-29","2000-04-30","2000-05-27","2000-05-28","2000-05-29","2000-05-30"),return = sample(-3:15,18,replace = T))

在上面的 MWE 中,结果应该包括 3 个自相关系数:第一个使用第 1 个月和第 2 个月的观察值,第二个使用第 3 个月和第 4 个月的观察值,第三个使用第 5 个月的观察值。当然,对于某些股票月数可能被 2 整除。自相关低于

autocorr = function(x,k){ # x is the return vector,k is the autocorrelation order (assumed 1)
  x = x - mean(x)
  n = length(x)
  var = x %*% x / (n-1)
  gamk = x[1:(n-k)] %*% x[(k+1):n] / (n-k-1)
  rho = gamk/var
  return(rho[1,1])
}

解决方法

使用 cut 将日期划分为 2 个月段,然后使用 tapply 将 autocorr 应用于每个段的返回。

with(data,tapply(return,cut(as.Date(date),"2 months"),autocorr,1))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...