【发布时间】:2013-12-24 00:30:14
【问题描述】:
好的,我有以下问题:
我在 r 的矩阵中有几个等级。 (我通过对资产回报进行排名来获得这一点。Ranks>=3 获得 NA,Ranks
ranks<-matrix(c(1,1,2,NA,NA, 1,2,NA,NA,NA),nrow=2,ncol=5)
returns<-matrix(c(0.3,0.1,-0.5,-0.7,0.2,0.1,0.4,0.05,-0.7,-0.3),nrow=2,ncol=5)
现在,如果我们的投资组合的所有资产均等购买,我可以计算平均回报:
Mat.Ret<-returns*ranks
Mean.Ret<-rowMeans(Mat.Ret,na.rm=TRUE)
但是,我希望可以选择为两个排名提供权重向量,这些权重表明该特定排名在我的投资组合中应占多大的百分比。作为一个例子,我们有一个
的向量weights<-c(0.7,0.3)
现在我将如何在我的代码中使用它?我想基本上计算排名*回报*权重。如果表中只有一个等级 1 和一个等级 2,则代码有效。但是我该怎么做这个变量呢?我的意思是一个解决方案是为每个等级计算它在特定行中存在的次数,然后将权重除以该计数。然后我将乘以这个“净重”*排名*回报。 但我不知道如何在代码中做到这一点..有什么帮助吗?
第一条评论后更新 好的,我想保持灵活,可以根据给出某个等级的次数来调整权重。用户可以选择排名前 5 的资产,因此没有一个或多个资产可以共享排名。所以权重的分配必须非常灵活。我编写了一个还不能工作的公式,因为我显然对我猜想的整个矩阵和向量选择语法还没有足够的经验。这是我到目前为止得到的:
ranks<-apply(ranks,1,function(x)distributeWeightsPerMatrixRow(x,weights))
distributeWeightsPerMatrixRow<-function(MatrixRow,Weights){
if(length(Weights)==length(MatrixRow[!is.na(MatrixRow)])){
MatrixRow <- Weights[MatrixRow]
} else {
for(i in 1:length(MatrixRow)){
if(!is.na(MatrixRow[i])){
EqWeights<-length(MatrixRow[MatrixRow==MatrixRow[i]])
MatrixRow[i]<-sum(Weights[MatrixRow[i]:(MatrixRow[i]+EqWeights-1)])/EqWeights
}
}
}
return(MatrixRow)
}
EDIT2: 函数似乎可以工作,但是现在生成的排名对象是原始矩阵的转置版本,没有列名..
【问题讨论】: