Inverse of a covariance matrix (loop)

3 ビュー (過去 30 日間)
Kevin van Berkel
Kevin van Berkel 2013 年 4 月 25 日
Hi all,
I am stuck to create a loop which yields inverse of covariance matrices.
Data description:
I have the returns of three risky assets: mkt, hml and mom, from nov 3, 1926 up to dec 31, 2012.
For each year (so starting from Nov 3, 1927)I want the inverse covariance matrix for the three risky assets.
The dates are described (thanks Andrei) by the following code:
d = [19261103; 20121231];
ddte = datenum(num2str(d),'yyyymmdd');
ndte = (ddte(1):ddte(2))';
t = weekday(ndte);
ndte = ndte(t ~= 1 & t ~= 7);
yourdata = [date,mkt,hml,mom];
[yy,mm,dd] = datevec(yourdata(:,1));
ymd = [yy,mm,dd];
im = mm == 11 & dd >= 3;
ii = strfind([~im(1),im(:)'],[0 1]);
So I am stuck what do I have to add to retrieve the inverse covariance matrices per year.
Hopefully someone can help me out.
Thanks!
I adjusted the code with cov in it, but it does not yield the desired results:
d = [19261103; 20121231];
ddte = datenum(num2str(d),'yyyymmdd');
ndte = (ddte(1):ddte(2))';
t = weekday(ndte);
ndte = ndte(t ~= 1 & t ~= 7);
yourdata = [date,mkt,hml,mom];
[yy,mm,dd] = datevec(yourdata(:,1));
ymd = [yy,mm,dd];
im = mm == 11 & dd >= 3;
ii = strfind([~im(1),im(:)'],[0 1]);
sb = zeros(numel(ndte),1);
sb(ii) = 1;
sbc = cumsum(sb);
t = sbc > 0 & sbc ~= max(sbc);
sbb = sbc(t);
sb1 = find(sb(t));
wdta = yourdata(t,:);
[r, c] = ndgrid(sbb,1:size(wdta,2)-1);
out1 = accumarray([r(:) c(:)],reshape(wdta(:,2:4),[],1),[],@cov);
out = [ymd(ii(1:end-1),:),out1] ;
What do I do wrong?

回答 (0 件)

カテゴリ

Help Center および File ExchangePortfolio Optimization and Asset Allocation についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by