R:每两个月创建一次股价历史记录

R:每两个月创建一次股价历史记录,r,stock,autocorrelation,R,Stock,Autocorrelation,我需要根据每天的观察,每两个月计算一次收益自相关。我不知道如何每两个月对一只股票的每日价格历史进行细分。我的数据集有多个股票,不同股票的历史记录不同 下面是一只股票的例子 data = data.frame(date = c("2000-01-27", "2000-01-28", "2000-01-29", "2000-01-30", "2000-02-27",

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

下面是一只股票的例子

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将日期划分为两个月段,然后使用tapply将自动更正应用于每个段的收益

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

使用cut将日期划分为两个月段,然后使用tapply将自动更正应用于每个段的收益

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