2016-11-25 95 views
0

我正在嘗試使用短重來執行股票投資組合分析。錯誤:維數不正確

爲了能夠這樣做,我必須創建一個循環,只要相應的權重是「短」(負號),就會將我的「正常」返回轉換爲相反的符號(+/-)。

mat_weights包含的34個不同組合的optimazed weigths的矩陣,每一個含有取決於優化過程(「Markovitz」)種羣的越來越多的:

  • 第一組合:4股
  • 第二組合:5股
  • 第三組合:6股
  • ........
  • 34組合:3 4股

矩陣mat_returns_adjusted是應包含環,這應該是corrisponding各股票的回報改變標誌的,如果corrisponding porfolio重量爲否定的結果的矩陣。 因此,最終我應該能夠獲得填充了「調整後」回報的1040(行)x 34(列)矩陣。

矩陣mat_returns_raw含有與稱爲能美另一矩陣連接正確的股票返回與對應的股票的名稱的每個股票的回報

這是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. 任何幫助將非常驚人!

回答

0

最可能的問題是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()之類的東西來尋找你不期望的東西。祝你好運

+0

我試圖爲每個代碼行運行循環,顯然問題是** mat_weights-short **,當我運行dim()給了我一個** NULL **結果,它給了我**錯誤(「越界」)**。有關如何解決問題的任何建議? – Mattias

+0

我會確保'length(mat_weights_short)> = 34',它是一個向量,所以你想用'length'而不是'dim'來檢查它。我猜你的if語句是錯誤的,因爲它尋找超過其實際長度的'i'迭代(例如'i = 21',但是'length(mat_weights_short)= 20',所以它看着21因爲它的長度只有20,所以第21個元素不存在)。聽起來像「超越界限」給我。 – TBSRounder

+0

我只是運行'長度(mat_weights_short)',它等於34.它的實際長度是31,這就是爲什麼我添加** + 3 ** – Mattias