Inverse of a covariance matrix (loop)
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Andrei Bobrov
le 25 Avr 2013
Try this is code:
d = [19261103; 20121231];
ddte = datenum(num2str(d),'yyyymmdd');
ndte = (ddte(1):ddte(2))';
t = weekday(ndte);
ndte = ndte(t ~= 1 & t ~= 7);
yourdata = [ndte,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(size(yourdata,1),1);
sb(ii) = 1;
sbc = cumsum(sb);
t = sbc > 0 & sbc ~= max(sbc);
sb1 = diff(find([sb(t);1]));
wdta = yourdata(t,:);
s = size(wdta,2) - 1;
ydcell = mat2cell(wdta(:,2:end),sb1,s);
out = cellfun(@(x)cov(x)\eye(s),ydcell,'un',0);
0 commentaires
Plus de réponses (1)
Voir également
Catégories
En savoir plus sur Structures dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!