私は短期的なウェイトを使って株式ポートフォリオを分析しようとしています。エラー:次元数が正しくありません
これを可能にするには、対応するウェイトが「短く」(マイナス記号)になるたびに「ノーマル」戻り値を反対記号(+/-)に変換するループを作成する必要がありました。
マトリックス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を初めて使用する必要があります。 どんな助力も非常に評価されます!!!
私は各コード行のループを実行しようとしました。明らかに問題は** mat_weights-short **です。これはdim()を実行すると** NULL **の結果になります。 **エラー(「範囲外」)**。どのように問題に対処するための任意の提案? – Mattias
私は 'length(mat_weights_short)> = 34'であることを確認します。これはベクトルなので、' dim'ではなく 'length'でチェックしたいと思うでしょう。私はあなたの 'if'ステートメントが実際の長さ(例えば' i = 21'ではなく 'length(mat_weights_short)= 20')を過ぎて' i'の繰り返しを探しているので悩んでいると推測しています。 'st要素、21要素は存在しません)。私には「範囲外」のように聞こえる。 – TBSRounder
私はちょうど 'length(mat_weights_short)'を実行し、それは34に等しくなります。実際の長さは31です。そのため、私は** + 3 **を追加しました。 – Mattias