我试图对股票投资组合进行分析,利用短期权重。
要做到这一点,我必须创建一个循环,将我的“正常”返回到相反的符号(+/-),只要相应的权重是“短”(负号)。
矩阵mat_weights包含34个不同投资组合的优化曲线,每个投资组合包含越来越多的股票,这些股票的数量取决于优化过程("Markovitz"):
矩阵mat_returns_adjusted是一个包含循环结果的矩阵,如果相关系数为负值,则该矩阵应是对应于每只股票变化的符号的回报。因此,在最后,我应该能够得到一个1040(行)x34(列)矩阵填充“调整”返回。
矩阵mat_returns_raw包含链接到另一个名为nomi的矩阵的股票回报,该矩阵将正确的股票回报与相应股票的名称连接起来。
这是上面讨论的for循环:
for(i in 1:34) {
mat_weights_short <- (mat_weights[i,1:i+3])
mat_returns_adjusted <- matrix (NA,1040,i+3)
mat_returns_raw <- returns[,nomi[i,1:i+3]]
if(mat_weights_short[i]<0) {
mat_returns_adjusted[,i]<- -(mat_returns_raw[,i])
} else {
mat_returns_adjusted[,i]<- mat_returns_raw[,i]
}}
当我将它输入R控制台时,我会收到一条错误消息:
Error in mat_returns_raw[, i] : incorrect number of dimensions
我试图解决这个问题,但到目前为止我还没能解决它。如果问题不那么清楚,我会提前道歉,但这是我第一次不得不使用R。任何帮助都会被极大地接受!
发布于 2016-11-25 15:31:43
最有可能的问题是mat_returns_raw不是正确的对象/大小。试着让这个问题变得更明显。
for(i in 1:34) {
mat_weights_short <- (mat_weights[i,1:i+3])
mat_returns_adjusted <- matrix (NA,1040,i+3)
mat_returns_raw <- returns[,nomi[i,1:i+3]]
## print updates
print(paste0("You're trying to pull column ", i " out of a ", class(mat_returns_raw), " which has ", ncol(mat_returns_raw), " columns"))
flush.console()
if(mat_weights_short[i]<0) {
mat_returns_adjusted[,i]<- -(mat_returns_raw[,i])
} else {
mat_returns_adjusted[,i]<- mat_returns_raw[,i]
}
}
此外,我建议运行for
循环,在控制台中键入i
以查找错误发生在哪个迭代中,然后在for
循环中逐行运行代码,手动确定问题所在,经常使用dim()
和class()
之类的东西查找您不希望看到的内容。祝好运
https://stackoverflow.com/questions/40807626
复制相似问题