我有很长一段时间的日常数据系列和101列.每个月我都要计算前101列中每列的第101列的cov.这将根据每日数据为100列中的每一列生成每月协方差的第101列.似乎聚合对于使用单个向量的函数(例如均值)执行了我想要的操作,但我无法使用cov(或prod).
如果几个月的投入会有所帮助,请告诉我.
> library("zoo") > data <- read.zoo("100Size-BM.csv",header=TRUE,sep=",",format="%Y%m%d") > head(data[,c("R1","R2","R3","R100","Mkt.RF")]) R1 R2 R3 R100 Mkt.RF 1963-07-01 -0.00212 0.00398 -0.00472 -0.00362 -0.0066 1963-07-02 -0.00242 0.00678 0.00068 -0.00012 0.0078 1963-07-03 0.00528 0.01078 0.00598 0.00338 0.0063 1963-07-05 0.01738 -0.00932 -0.00072 -0.00012 0.0040 1963-07-08 0.01048 -0.01262 -0.01332 -0.01392 -0.0062 1963-07-09 -0.01052 0.01048 0.01738 0.01388 0.0045
意思是很好,并给我我想要的月度数据.
> mean.temp <- aggregate(data[,1:100],as.yearmon,mean) > head(mean.temp[,1:3]) R1 R2 R3 Jul 1963 0.0003845455 7.545455e-05 0.0004300000 Aug 1963 -0.0006418182 2.412727e-03 0.0022263636 Sep 1963 0.0016250000 1.025000e-03 -0.0002600000 Oct 1963 -0.0007952174 2.226522e-03 0.0004873913 Nov 1963 0.0006555556 -5.211111e-03 -0.0013888889 Dec 1963 -0.0027066667 -1.249524e-03 -0.0005828571
但是我无法使用两个不同的列/向量来运行.
> cov.temp <- aggregate(data[,cov(x,data[,"Mkt.RF"])) Error in inherits(x,"data.frame") : object 'x' not found
我也不能让它制作一个cov包装器.
> f <- function(x) cov(x,"Mkt.RF"]) > cov.temp <- aggregate(data[,f) Error in cov(x,"Mkt.RF"]) : incompatible dimensions
我应该用for循环吗?我希望有更多的R方式.谢谢!