Я пытаюсь провести анализ портфеля акций с использованием коротких весов.Ошибка: неверный номер измерения
Для этого мне нужно было создать цикл, который преобразует мои «нормальные» значения в обратный знак (+/-), когда соответствующий вес «короткий» (отрицательный знак).
Матрица mat_weights содержит optimazed weigths из 34 различных портфелей, каждый из которых содержит большее количество акций, которые изменяются в зависимости от процесса оптимизации («Марковица»):
- первого портфель: 4 запасов
- второй портфель: 5 акций
- третий портфель: 6 акций
- ........
- тридцать четвёртую портфель: 3 4 акции
Матрица mat_returns_adjusted представляет собой матрицу, которая должна содержать результат контура, который должен быть возвращается corrisponding к каждой акции изменен знак, если вес corrisponding Порфолио является отрицательным. Итак, в конце концов, я смогу получить матрицу размером 1040 (строк) x 34 (столбцов), заполненную «скорректированными» результатами.
Матрица 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]]
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. Любая помощь была бы чрезвычайно оценена !!!
Я попытался запустить цикл для каждой строки кода, и, по-видимому, проблема связана с ** mat_weights-short **, который, как я запускаю dim(), дает мне результат ** NULL **, и это дает мне ** ошибка («вне границ») **. Любые предложения по устранению проблемы? – Mattias
Я бы удостоверился, что 'length (mat_weights_short)> = 34', это вектор, поэтому вы хотите проверить его с помощью' length' вместо 'dim'.Я предполагаю, что ваш оператор 'if' прослушивается, потому что он ищет итерацию' i' за ее фактическую длину (пример 'i = 21', но' length (mat_weights_short) = 20', поэтому его взгляд на 21 Элемент st и 21-й элемент не существуют, поскольку его длина составляет всего 20). звучит как «вне поля» для меня. – TBSRounder
Я просто запускаю 'length (mat_weights_short)' и равен 34. Фактическая длина - 31, поэтому я добавил ** + 3 ** – Mattias