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

R: subset a stock price history every two months

我需要根据日常观察每两个月计算一次 return 自相关。我不知道如何每两个月对一只股票的每日价格历史进行子集化。我的数据集有多只股票,不同股票的历史记录不同。

一只股票的例子如下

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 应用于每个段的 returns。

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