2016-11-25 243 views
0

私は短期的なウェイトを使って株式ポートフォリオを分析しようとしています。エラー:次元数が正しくありません

これを可能にするには、対応するウェイトが「短く」(マイナス記号)になるたびに「ノーマル」戻り値を反対記号(+/-)に変換するループを作成する必要がありました。

マトリックスmat_weights 34の異なるポートフォリオ、最適化プロセス(「Markovitz」)に応じて変化株式数の増加を含むそれぞれのoptimazed weigths含ま​​:

  • 1ポートフォリオ:4株を
  • 第二のポートフォリオ:5社の株式
  • 第三ポートフォリオ:6つの銘柄
  • ........
  • 第34回ポートフォリオ:3 4社の株式

をmat_returns_adjustedマトリックスはcorrispondingのにポートフォリオの重みが負である場合には、各ストックにcorrisponding戻る符号で変更すべきループの結果を含むべきである行列です。 最後に、私は1040(行)×34(列)のマトリックスを "調整された"リターンで満たしているはずです。

mat_returns_rawは、対応するストックの名前の右株式リターンを接続能美と呼ばれる別のマトリックスに連結された各株式のリターンを含むマトリックス

これは、上述のforループである:

Error in mat_returns_raw[, i] : incorrect number of dimensions 
:私はRコンソールにこれを入力すると
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] 
}} 

iは、エラーメッセージが表示されます。

私は問題を解決しようとしましたが、これまで解決できませんでした。 質問が明確でない場合は事前にお詫び申し上げますが、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'であることを確認します。これはベクトルなので、' dim'ではなく 'length'でチェックしたいと思うでしょう。私はあなたの 'if'ステートメントが実際の長さ(例えば' i = 21'ではなく 'length(mat_weights_short)= 20')を過ぎて' i'の繰り返しを探しているので悩んでいると推測しています。 'st要素、21要素は存在しません)。私には「範囲外」のように聞こえる。 – TBSRounder

+0

私はちょうど 'length(mat_weights_short)'を実行し、それは34に等しくなります。実際の長さは31です。そのため、私は** + 3 **を追加しました。 – Mattias

関連する問題