2016-01-26 6 views
0

Я пытаюсь сохранить матрицу дисперсии-ковариации 10 портфелей акций. Данные представлены столбцом доходностей для 10 акций. То естьКак получить матрицу дисперсии-ковариации в Matlab?

Stock A Stock B 

Return 1 Return 1 

Return 2 Return 2 

Etc Etc 

Когда я загрузить мои данные, которые я попробовал функцию cov(data), но он не будет работать. Я продолжаю получать это сообщение:.

«Неопределенная функция„сумма“для входных аргументов„набора данных“типа

Ошибка в соу (строка 154) хс = bsxfun (@ минус, х, сумма (х , 1)/m);% Удалить meanUndefined function «sum» для входных аргументов типа «набор данных».

Ошибка в cov (строка 154) xc = bsxfun (@ минус, x, сумма (x, 1)/м),% Удалить среднее значение "

Вопрос: как я могу продолжить поиск средней доходности каждого запаса и переменной ance-ковариационная матрица?

+0

Пожалуйста, добавьте код, создающий эти ошибки. – Adriaan

+0

Источником ошибки является то, что 'data' является набором данных вместо матрицы. –

+0

Я нашел способ обойти его, указав мой ввод данных как числовую матрицу, а не векторы столбцов. Проблема в том, что Matlab не будет читать мою первую строку в каждом столбце (то есть имена акций). Что мне теперь делать? – Calum

ответ

0

Объекты набора данных устарели, поэтому вместо этого вы должны использовать таблицы. Но с набором данных вы хотите

>> dataAsMatrix = double(NameOfYourDataSetVariable); 
>> cov(dataAsMatrix) 
>> mean(dataAsMatrix) 

Для преобразования в использовании таблицы `dataset2table»,

>> dataAsTable = dataset2table(NameOfYourDataSetVariable); 

Тогда для некоторых операций, которые вы можете сделать что-то вроде

>> varfun(@mean,dataAsTable) 

Хотя для cov I подумайте, что вам все еще необходимо извлечь данные

>> cov(dataAsTable{:,:}) 
Смежные вопросы