%% Portfolio optimalizalas fokomponens analizissel % %% % Kovariancia matrix a piac es szektor modellben N = 16; M = 4; K = N / M; a = 1; b_min=0.2; b_max=0.6; c = 0.05; B=cell(1,K); for k = 1:K b = b_min + (k - 1) * (b_max - b_min) / (K - 1); B{k} = (b - c) * (ones(M) - eye(M)); end Cov = (1-c)*eye(N) + blkdiag(B{:}) + c*ones(N); abrazol = inline('blkdiag(M,zeros(1))'); pcolor(abrazol(Cov)); title('Piac es szektor modell blokkdiagonalis kovariancia matrixa'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % A kovariancia matrix sajatertekei [sajatvektorok, sajatertekek] = eig(Cov); plot(diag(sajatertekek), 's'); title('A kovariancia matrix sajatertekei'); xlabel('i'); ylabel('sajatertekek'); grid on; %% % Sajatertekek hisztogramja d = 60; [h, x] = hist(diag(sajatertekek), 0:4/d:4); bar(x, h, 1); title('A kovariancia matrix sajatertekei (hisztogram)'); xlabel('Sajatertekek'); ylabel('Gyakorisag'); axis([0, 4, 0, 4]); %% % Sajatvektorok pcolor(abrazol(sajatvektorok)); title('A kovariancia matrix sajatvektorai (oszlopvektorok)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % A kovariancia matrix spektralis felbontasa Spekt = horzcat(sajatvektorok, sajatertekek, sajatvektorok'); pcolor(abrazol(Spekt)); title('A kovariancia matrix spektralis felbontasa'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % A kovariancia matrix spektralis eloallitasa SpektCov = sajatvektorok * (sajatertekek * sajatvektorok'); pcolor(abrazol(SpektCov)); title('A kovariancia matrix spektralis eloallitasa'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % A kovariancia matrix inverzenek spektralis felbontasa SpektInv = horzcat(sajatvektorok, inv(sajatertekek), sajatvektorok'); pcolor(abrazol(SpektInv)); title('A kovariancia matrix inverzenek spektralis felbontasa'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % A kovariancia matrix inverze (spektralis felbontassal) SpektCovInv = sajatvektorok * (inv(sajatertekek) * sajatvektorok'); pcolor(abrazol(SpektCovInv)); title('A kovariancia matrix inverzenek spektralis eloallitasa'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Ellenorzes: A kovariancia matrix inverze matrix invertalassal CovInv = inv(Cov); pcolor(abrazol(CovInv)); title('A kovariancia matrix inverze (szamitas matrix invertalassal)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Optimalis portfolio, ha a kockazat merteke a variancia norm = sum(sum(CovInv)); w = sum(SpektCovInv) / norm; plot(w, 's'); title('Optimalis sulyok, ha a kockazat merteke a variancia'); xlabel('i'); ylabel('w_i'); axis([0, N+1, 0, 0.16]); grid on; R = w * (Cov * w') %% % Cholesky-transformacio: C'*C=Cov C = chol(Cov); pcolor(abrazol(C')); title('A kovariancia matrix C^T Cholesky-transzformaltja: C^T*C=Cov'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Korrelalt szintetikus idosorok eloallitasa: szorzas a Cholesky-transzformalttal T = 20; randn('state', 1); X = randn([N, T]); Y = C' * X; plot(Y'); title('Szintetikus idosor'); xlabel('T'); grid on; %% % Ugyanezek az adatok matrixkent abrazolva pcolor(abrazol(Y)); title('Szintetikus idosor'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Minta kovariancia matrix MintaCov = Y*Y'/T; pcolor(abrazol(MintaCov)); cim = sprintf('Y*Y^T/T minta kovariancia matrix, T=%d', T); title(cim); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Minta kovariancia matrix sajatertekei es sajatvektorai [MintaSajatvektorok, MintaSajatertekek] = eig(MintaCov); plot(diag(MintaSajatertekek), 's'); title('A minta kovariancia matrix sajatertekei'); xlabel('i'); ylabel('sajatertekek'); grid on; %% % Sajatertekek hisztogramja d = 60; [h, x] = hist(diag(MintaSajatertekek), 0:4/d:4); bar(x, h, 1); title('A minta kovariancia matrix sajatertekei (hisztogram)'); xlabel('Sajatertekek'); ylabel('Gyakorisag'); axis([0, 4, 0, 4]); %% % Sajatvektorok pcolor(abrazol(MintaSajatvektorok)); title('A minta kovariancia matrix sajatvektorai (oszlopvektorok)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % A minta kovariancia matrix spektralis felbontasa MintaCovSpekt = horzcat(MintaSajatvektorok, MintaSajatertekek, MintaSajatvektorok'); pcolor(abrazol(MintaCovSpekt)); title('A minta kovariancia matrix spektralis felbontasa'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % A minta kovariancia matrix inverze MintaCovInv = inv(MintaCov); pcolor(abrazol(MintaCovInv)); title('A minta kovariancia matrix inverze'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Optimalis portfolio a minta kovariancia matrix alapjan norm = sum(sum(MintaCovInv)); w = sum(MintaCovInv) / norm; plot(w, 's'); title('Optimalis sulyok a minta kovariancia matrix alapjan'); xlabel('i'); ylabel('w_i'); grid on; R = w * (Cov * w') %% % Fokomponens analizis d = diag(MintaSajatertekek); MintaSajatertekekFokomp=cell(1,N-1); MintaCovFokomp=cell(1,N-1); MintaCovInvFokomp=cell(1,N-1); for K = 1:(N-1) MintaSajatertekekFokomp{K} = MintaSajatertekek; atlag = sum(d(1:(N-K))) / (N-K); for i = 1:(N-K) MintaSajatertekekFokomp{K}(i, i) = atlag; end MintaCovFokomp{K} = MintaSajatvektorok * (MintaSajatertekekFokomp{K} * MintaSajatvektorok'); MintaCovInvFokomp{K} = inv(MintaCovFokomp{K}); end plot(diag(MintaSajatertekekFokomp{4}), 's'); title('Fokomponens analizis: A minta kovariancia matrix modositott sajatertekei (K = 4)'); xlabel('i'); ylabel('sajatertekek'); grid on; %% % Modositott minta kovariancia matrix pcolor(abrazol(MintaCovFokomp{4})); title('Fokomponens analizis: Modositott minta kovariancia matrix (K = 4)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Modositott minta kovariancia matrix inverze pcolor(abrazol(MintaCovInvFokomp{4})); title('Fokomponens analizis: Modositott minta kovariancia matrix inverze (K = 4)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Optimalis portfolio a modositott minta kovariancia matrix alapjan norm = sum(sum(MintaCovInvFokomp{4})); w = sum(MintaCovInvFokomp{4}) / norm; plot(w, 's'); title('Optimalis sulyok a modositott minta kovariancia matrix inverze alapjan (K = 4)'); xlabel('i'); ylabel('w_i'); grid on; R = w * (Cov * w') %% % Nagyobb kovariancia matrix (N = 100) N = 100; M = 10; K = N / M; a = 1; b_min=0.2; b_max=0.6; c = 0.05; B=cell(1,K); for k = 1:K b = b_min + (k - 1) * (b_max - b_min) / (K - 1); B{k} = (b - c) * (ones(M) - eye(M)); end Cov = (1-c)*eye(N) + blkdiag(B{:}) + c*ones(N); abrazol = inline('blkdiag(M,zeros(1))'); pcolor(abrazol(Cov)); title('Piac es szektor modell blokkdiagonalis kovariancia matrixa (N = 100, M = 10)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; shading flat; %% % Sajatertekek hisztogramja [Sajatvektorok, Sajatertekek] = eig(Cov); d = 60; [h, x] = hist(diag(Sajatertekek), 0:15/d:15); bar(x, h, 1); title('A kovariancia matrix sajatertekei (hisztogram)'); xlabel('Sajatertekek'); ylabel('Gyakorisag'); axis([0, 10, 0, 60]); %% % Sajatvektorok pcolor(abrazol(Sajatvektorok)); title('A kovariancia matrix sajatvektorai (oszlopvektorok)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; shading flat; %% % A kovariancia matrix inverze CovInv = inv(Cov); pcolor(abrazol(CovInv)); title('A kovariancia matrix inverze'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; shading flat; %% % Optimalis portfolio, ha a kockazat merteke a variancia norm = sum(sum(CovInv)); w = sum(CovInv) / norm; plot(w, 's'); title('Optimalis sulyok, ha a kockazat merteke a variancia'); xlabel('i'); ylabel('w_i'); grid on; R = w * (Cov * w') %% % Korrelalt szintetikus idosorok eloallitasa: szorzas a Cholesky-transzformalttal T = 120; randn('state', 1); X = randn([N, T]); C = chol(Cov); Y = C' * X; pcolor(abrazol(Y)); title('Szintetikus idosor'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; %% % Minta kovariancia matrix MintaCov = Y*Y'/T; pcolor(abrazol(MintaCov)); cim = sprintf('Y*Y^T/T minta kovariancia matrix, T=%d', T); title(cim); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; shading flat; %% % Sajatertekek hisztogramja [MintaSajatvektorok, MintaSajatertekek] = eig(MintaCov); d = 60; [h, x] = hist(diag(MintaSajatertekek), 0:15/d:15); bar(x, h, 1); title('A minta kovariancia matrix sajatertekei (hisztogram)'); xlabel('Sajatertekek'); ylabel('Gyakorisag'); axis([0, 10, 0, 60]); %% % A minta kovariancia matrix inverze MintaCovInv = inv(MintaCov); pcolor(abrazol(MintaCovInv)); title('A minta kovariancia matrix inverze'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; shading flat; %% % Optimalis portfolio a minta kovariancia matrix alapjan norm = sum(sum(MintaCovInv)); w = sum(MintaCovInv) / norm; plot(w, 's'); title('Optimalis sulyok a minta kovariancia matrix alapjan'); xlabel('i'); ylabel('w_i'); grid on; R = w * (Cov * w') %% % Fokomponens analizis d = diag(MintaSajatertekek); for K = 1:(N-1) MintaSajatertekekFokomp{K} = MintaSajatertekek; atlag = sum(d(1:(N-K))) / (N-K); for i = 1:(N-K) MintaSajatertekekFokomp{K}(i, i) = atlag; end MintaCovFokomp{K} = MintaSajatvektorok * (MintaSajatertekekFokomp{K} * MintaSajatvektorok'); MintaCovInvFokomp{K} = inv(MintaCovFokomp{K}); end plot(diag(MintaSajatertekekFokomp{10}), 's'); title('Fokomponens analizis: A minta kovariancia matrix modositott sajatertekei (K = 10)'); xlabel('i'); ylabel('sajatertekek'); grid on; %% % Modositott minta kovariancia matrix pcolor(abrazol(MintaCovFokomp{10})); title('Fokomponens analizis: Modositott minta kovariancia matrix (K = 10)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; shading flat; %% % Modositott minta kovariancia matrix inverze pcolor(abrazol(MintaCovInvFokomp{10})); title('Fokomponens analizis: Modositott minta kovariancia matrix inverze (K = 10)'); axis ij; axis equal; axis off; caxis([-1,1]); colorbar; shading flat; %% % Optimalis portfolio a modositott minta kovariancia matrix alapjan norm = sum(sum(MintaCovInvFokomp{10})); w = sum(MintaCovInvFokomp{10}) / norm; plot(w, 's'); title('Optimalis sulyok a modositott minta kovariancia matrix inverze alapjan (K = 10)'); xlabel('i'); ylabel('w_i'); grid on; R = w * (Cov * w')