加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用聚合与使用两列数据的函数(例如cov或prod)

发布时间:2020-12-14 04:53:54 所属栏目:百科 来源:网络整理
导读:我有很长一段时间的日常数据系列和101列.每个月我都要计算前101列中每列的第101列的cov.这将根据每日数据为100列中的每一列生成每月协方差的第101列.似乎聚合对于使用单个向量的函数(例如均值)执行了我想要的操作,但我无法使用cov(或prod). 如果几个月的投入
我有很长一段时间的日常数据系列和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.222222e-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方式.谢谢!

解决方法

您忘记了函数(x)声明,并且需要确保获得正确的每月数据子集(顺便说一下,它会踩数据函数).试试这个:

> aggregate(data,function(x) cov(x,data[index(x),"Mkt.RF"]))
                  R1         R2        R3        R100     Mkt.RF
Jul 1963  1.3265e-05 2.0340e-05 3.464e-05  2.2575e-05  6.267e-05
Aug 1963 -7.1295e-05 2.8875e-05 1.000e-06 -9.9700e-06 -2.608e-05

*请注意,我将示例数据中的最后三个观察结果更改为8月份,因此输出将超过一个月.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读