From 753aa48a49da128f7ac7b9cacca411fa5c2b767d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Thu, 17 Mar 2011 15:32:22 +0100 Subject: [PATCH] GSA: remove tags for older Dynare versions --- GSA_distrib/4.0.3/GSA.zip | Bin 130030 -> 0 bytes GSA_distrib/4.0.3/LPTAU.m | 512 ------- GSA_distrib/4.0.3/Morris_Measure_Groups.m | 130 -- GSA_distrib/4.0.3/Sampling_Function_2.m | 174 --- GSA_distrib/4.0.3/beta_inv.m | 38 - GSA_distrib/4.0.3/beta_pdf.m | 32 - GSA_distrib/4.0.3/cumplot.m | 14 - GSA_distrib/4.0.3/dat_fil_.m | 30 - GSA_distrib/4.0.3/dynare_MC.m | 142 -- GSA_distrib/4.0.3/filt_mc_.m | 708 ---------- GSA_distrib/4.0.3/gamm_cdf.m | 27 - GSA_distrib/4.0.3/gamm_inv.m | 50 - GSA_distrib/4.0.3/gamm_pdf.m | 27 - GSA_distrib/4.0.3/ghx2transition.m | 41 - GSA_distrib/4.0.3/log_trans_.m | 54 - GSA_distrib/4.0.3/lptauSEQ.m | 25 - GSA_distrib/4.0.3/map_ident_.m | 1211 ---------------- GSA_distrib/4.0.3/mc_moments.m | 21 - GSA_distrib/4.0.3/myboxplot.m | 158 --- GSA_distrib/4.0.3/myprctilecol.m | 20 - GSA_distrib/4.0.3/norm_inv.m | 44 - GSA_distrib/4.0.3/prior_draw_gsa.m | 125 -- GSA_distrib/4.0.3/priorcdf.m | 45 - GSA_distrib/4.0.3/read_data.m | 39 - GSA_distrib/4.0.3/redform_map.m | 342 ----- GSA_distrib/4.0.3/redform_screen.m | 165 --- GSA_distrib/4.0.3/set_shocks_param.m | 30 - GSA_distrib/4.0.3/skewness.m | 7 - GSA_distrib/4.0.3/smirnov.m | 73 - GSA_distrib/4.0.3/speed.m | 52 - GSA_distrib/4.0.3/stab_map_.m | 511 ------- GSA_distrib/4.0.3/stab_map_1.m | 87 -- GSA_distrib/4.0.3/stab_map_2.m | 97 -- GSA_distrib/4.0.3/stand_.m | 25 - GSA_distrib/4.0.3/teff.m | 38 - GSA_distrib/4.0.3/th_moments.m | 56 - GSA_distrib/4.0.3/trank.m | 25 - GSA_distrib/4.1/GSA_manual.pdf | Bin 84760 -> 0 bytes GSA_distrib/4.1/LPTAU.m | 512 ------- GSA_distrib/4.1/Morris_Measure_Groups.m | 130 -- GSA_distrib/4.1/Sampling_Function_2.m | 174 --- GSA_distrib/4.1/beta_inv.m | 38 - GSA_distrib/4.1/beta_pdf.m | 32 - GSA_distrib/4.1/cumplot.m | 14 - GSA_distrib/4.1/dat_fil_.m | 30 - GSA_distrib/4.1/dynare_MC.m | 149 -- GSA_distrib/4.1/fdjac.m | 37 - GSA_distrib/4.1/filt_mc_.m | 708 ---------- GSA_distrib/4.1/gamm_cdf.m | 27 - GSA_distrib/4.1/gamm_inv.m | 50 - GSA_distrib/4.1/gamm_pdf.m | 27 - GSA_distrib/4.1/gsa.zip | Bin 131651 -> 0 bytes GSA_distrib/4.1/log_trans_.m | 54 - GSA_distrib/4.1/lptauSEQ.m | 25 - GSA_distrib/4.1/map_ident_.m | 1531 --------------------- GSA_distrib/4.1/mc_moments.m | 25 - GSA_distrib/4.1/myboxplot.m | 158 --- GSA_distrib/4.1/myprctilecol.m | 20 - GSA_distrib/4.1/norm_inv.m | 49 - GSA_distrib/4.1/optget.m | 39 - GSA_distrib/4.1/prior_draw_gsa.m | 105 -- GSA_distrib/4.1/priorcdf.m | 50 - GSA_distrib/4.1/read_data.m | 39 - GSA_distrib/4.1/redform_map.m | 351 ----- GSA_distrib/4.1/redform_screen.m | 165 --- GSA_distrib/4.1/set_shocks_param.m | 30 - GSA_distrib/4.1/skewness.m | 7 - GSA_distrib/4.1/smirnov.m | 73 - GSA_distrib/4.1/speed.m | 52 - GSA_distrib/4.1/stab_map_.m | 556 -------- GSA_distrib/4.1/stab_map_1.m | 87 -- GSA_distrib/4.1/stab_map_2.m | 97 -- GSA_distrib/4.1/stand_.m | 25 - GSA_distrib/4.1/teff.m | 51 - GSA_distrib/4.1/th_moments.m | 66 - GSA_distrib/4.1/thet2tau.m | 45 - GSA_distrib/4.1/trank.m | 25 - GSA_distrib/4.2/LPTAU.m | 512 ------- GSA_distrib/4.2/Morris_Measure_Groups.m | 130 -- GSA_distrib/4.2/Sampling_Function_2.m | 174 --- GSA_distrib/4.2/beta_inv.m | 38 - GSA_distrib/4.2/beta_pdf.m | 32 - GSA_distrib/4.2/cumplot.m | 14 - GSA_distrib/4.2/dat_fil_.m | 30 - GSA_distrib/4.2/dynare_MC.m | 133 -- GSA_distrib/4.2/fdjac.m | 37 - GSA_distrib/4.2/filt_mc_.m | 687 --------- GSA_distrib/4.2/gamm_cdf.m | 27 - GSA_distrib/4.2/gamm_inv.m | 50 - GSA_distrib/4.2/gamm_pdf.m | 27 - GSA_distrib/4.2/ghx2transition.m | 54 - GSA_distrib/4.2/log_trans_.m | 54 - GSA_distrib/4.2/lptauSEQ.m | 25 - GSA_distrib/4.2/map_ident_.m | 1531 --------------------- GSA_distrib/4.2/mc_moments.m | 25 - GSA_distrib/4.2/myboxplot.m | 158 --- GSA_distrib/4.2/myprctilecol.m | 20 - GSA_distrib/4.2/norm_inv.m | 49 - GSA_distrib/4.2/optget.m | 39 - GSA_distrib/4.2/prior_draw_gsa.m | 105 -- GSA_distrib/4.2/priorcdf.m | 50 - GSA_distrib/4.2/read_data.m | 39 - GSA_distrib/4.2/redform_map.m | 351 ----- GSA_distrib/4.2/redform_screen.m | 165 --- GSA_distrib/4.2/set_shocks_param.m | 30 - GSA_distrib/4.2/skewness.m | 7 - GSA_distrib/4.2/smirnov.m | 73 - GSA_distrib/4.2/speed.m | 52 - GSA_distrib/4.2/stab_map_.m | 548 -------- GSA_distrib/4.2/stab_map_1.m | 87 -- GSA_distrib/4.2/stab_map_2.m | 97 -- GSA_distrib/4.2/stand_.m | 25 - GSA_distrib/4.2/teff.m | 51 - GSA_distrib/4.2/th_moments.m | 66 - GSA_distrib/4.2/thet2tau.m | 45 - GSA_distrib/4.2/trank.m | 25 - 116 files changed, 16490 deletions(-) delete mode 100644 GSA_distrib/4.0.3/GSA.zip delete mode 100644 GSA_distrib/4.0.3/LPTAU.m delete mode 100644 GSA_distrib/4.0.3/Morris_Measure_Groups.m delete mode 100644 GSA_distrib/4.0.3/Sampling_Function_2.m delete mode 100644 GSA_distrib/4.0.3/beta_inv.m delete mode 100644 GSA_distrib/4.0.3/beta_pdf.m delete mode 100644 GSA_distrib/4.0.3/cumplot.m delete mode 100644 GSA_distrib/4.0.3/dat_fil_.m delete mode 100644 GSA_distrib/4.0.3/dynare_MC.m delete mode 100644 GSA_distrib/4.0.3/filt_mc_.m delete mode 100644 GSA_distrib/4.0.3/gamm_cdf.m delete mode 100644 GSA_distrib/4.0.3/gamm_inv.m delete mode 100644 GSA_distrib/4.0.3/gamm_pdf.m delete mode 100644 GSA_distrib/4.0.3/ghx2transition.m delete mode 100644 GSA_distrib/4.0.3/log_trans_.m delete mode 100644 GSA_distrib/4.0.3/lptauSEQ.m delete mode 100644 GSA_distrib/4.0.3/map_ident_.m delete mode 100644 GSA_distrib/4.0.3/mc_moments.m delete mode 100644 GSA_distrib/4.0.3/myboxplot.m delete mode 100644 GSA_distrib/4.0.3/myprctilecol.m delete mode 100644 GSA_distrib/4.0.3/norm_inv.m delete mode 100644 GSA_distrib/4.0.3/prior_draw_gsa.m delete mode 100644 GSA_distrib/4.0.3/priorcdf.m delete mode 100644 GSA_distrib/4.0.3/read_data.m delete mode 100644 GSA_distrib/4.0.3/redform_map.m delete mode 100644 GSA_distrib/4.0.3/redform_screen.m delete mode 100644 GSA_distrib/4.0.3/set_shocks_param.m delete mode 100644 GSA_distrib/4.0.3/skewness.m delete mode 100644 GSA_distrib/4.0.3/smirnov.m delete mode 100644 GSA_distrib/4.0.3/speed.m delete mode 100644 GSA_distrib/4.0.3/stab_map_.m delete mode 100644 GSA_distrib/4.0.3/stab_map_1.m delete mode 100644 GSA_distrib/4.0.3/stab_map_2.m delete mode 100644 GSA_distrib/4.0.3/stand_.m delete mode 100644 GSA_distrib/4.0.3/teff.m delete mode 100644 GSA_distrib/4.0.3/th_moments.m delete mode 100644 GSA_distrib/4.0.3/trank.m delete mode 100644 GSA_distrib/4.1/GSA_manual.pdf delete mode 100644 GSA_distrib/4.1/LPTAU.m delete mode 100644 GSA_distrib/4.1/Morris_Measure_Groups.m delete mode 100644 GSA_distrib/4.1/Sampling_Function_2.m delete mode 100644 GSA_distrib/4.1/beta_inv.m delete mode 100644 GSA_distrib/4.1/beta_pdf.m delete mode 100644 GSA_distrib/4.1/cumplot.m delete mode 100644 GSA_distrib/4.1/dat_fil_.m delete mode 100644 GSA_distrib/4.1/dynare_MC.m delete mode 100644 GSA_distrib/4.1/fdjac.m delete mode 100644 GSA_distrib/4.1/filt_mc_.m delete mode 100644 GSA_distrib/4.1/gamm_cdf.m delete mode 100644 GSA_distrib/4.1/gamm_inv.m delete mode 100644 GSA_distrib/4.1/gamm_pdf.m delete mode 100644 GSA_distrib/4.1/gsa.zip delete mode 100644 GSA_distrib/4.1/log_trans_.m delete mode 100644 GSA_distrib/4.1/lptauSEQ.m delete mode 100644 GSA_distrib/4.1/map_ident_.m delete mode 100644 GSA_distrib/4.1/mc_moments.m delete mode 100644 GSA_distrib/4.1/myboxplot.m delete mode 100644 GSA_distrib/4.1/myprctilecol.m delete mode 100644 GSA_distrib/4.1/norm_inv.m delete mode 100644 GSA_distrib/4.1/optget.m delete mode 100644 GSA_distrib/4.1/prior_draw_gsa.m delete mode 100644 GSA_distrib/4.1/priorcdf.m delete mode 100644 GSA_distrib/4.1/read_data.m delete mode 100644 GSA_distrib/4.1/redform_map.m delete mode 100644 GSA_distrib/4.1/redform_screen.m delete mode 100644 GSA_distrib/4.1/set_shocks_param.m delete mode 100644 GSA_distrib/4.1/skewness.m delete mode 100644 GSA_distrib/4.1/smirnov.m delete mode 100644 GSA_distrib/4.1/speed.m delete mode 100644 GSA_distrib/4.1/stab_map_.m delete mode 100644 GSA_distrib/4.1/stab_map_1.m delete mode 100644 GSA_distrib/4.1/stab_map_2.m delete mode 100644 GSA_distrib/4.1/stand_.m delete mode 100644 GSA_distrib/4.1/teff.m delete mode 100644 GSA_distrib/4.1/th_moments.m delete mode 100644 GSA_distrib/4.1/thet2tau.m delete mode 100644 GSA_distrib/4.1/trank.m delete mode 100644 GSA_distrib/4.2/LPTAU.m delete mode 100644 GSA_distrib/4.2/Morris_Measure_Groups.m delete mode 100644 GSA_distrib/4.2/Sampling_Function_2.m delete mode 100644 GSA_distrib/4.2/beta_inv.m delete mode 100644 GSA_distrib/4.2/beta_pdf.m delete mode 100644 GSA_distrib/4.2/cumplot.m delete mode 100644 GSA_distrib/4.2/dat_fil_.m delete mode 100644 GSA_distrib/4.2/dynare_MC.m delete mode 100644 GSA_distrib/4.2/fdjac.m delete mode 100644 GSA_distrib/4.2/filt_mc_.m delete mode 100644 GSA_distrib/4.2/gamm_cdf.m delete mode 100644 GSA_distrib/4.2/gamm_inv.m delete mode 100644 GSA_distrib/4.2/gamm_pdf.m delete mode 100644 GSA_distrib/4.2/ghx2transition.m delete mode 100644 GSA_distrib/4.2/log_trans_.m delete mode 100644 GSA_distrib/4.2/lptauSEQ.m delete mode 100644 GSA_distrib/4.2/map_ident_.m delete mode 100644 GSA_distrib/4.2/mc_moments.m delete mode 100644 GSA_distrib/4.2/myboxplot.m delete mode 100644 GSA_distrib/4.2/myprctilecol.m delete mode 100644 GSA_distrib/4.2/norm_inv.m delete mode 100644 GSA_distrib/4.2/optget.m delete mode 100644 GSA_distrib/4.2/prior_draw_gsa.m delete mode 100644 GSA_distrib/4.2/priorcdf.m delete mode 100644 GSA_distrib/4.2/read_data.m delete mode 100644 GSA_distrib/4.2/redform_map.m delete mode 100644 GSA_distrib/4.2/redform_screen.m delete mode 100644 GSA_distrib/4.2/set_shocks_param.m delete mode 100644 GSA_distrib/4.2/skewness.m delete mode 100644 GSA_distrib/4.2/smirnov.m delete mode 100644 GSA_distrib/4.2/speed.m delete mode 100644 GSA_distrib/4.2/stab_map_.m delete mode 100644 GSA_distrib/4.2/stab_map_1.m delete mode 100644 GSA_distrib/4.2/stab_map_2.m delete mode 100644 GSA_distrib/4.2/stand_.m delete mode 100644 GSA_distrib/4.2/teff.m delete mode 100644 GSA_distrib/4.2/th_moments.m delete mode 100644 GSA_distrib/4.2/thet2tau.m delete mode 100644 GSA_distrib/4.2/trank.m diff --git a/GSA_distrib/4.0.3/GSA.zip b/GSA_distrib/4.0.3/GSA.zip deleted file mode 100644 index 77d88674d13025fe11a51951e163b67207c05708..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130030 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 J&cSg4{D0DKy|(}W diff --git a/GSA_distrib/4.0.3/LPTAU.m b/GSA_distrib/4.0.3/LPTAU.m deleted file mode 100644 index 7427de885..000000000 --- a/GSA_distrib/4.0.3/LPTAU.m +++ /dev/null @@ -1,512 +0,0 @@ -function VECTOR = LPTAU(I, N) -% -% I.M. SOBOL', V.I. TURCHANINOV, Yu.L. LEVITAN, B.V. SHUKHMAN -% KELDYSH INSTITUTE OF APPLIED MATHEMATICS -% RUSSIAN ACADEMY OF SCIENCES -% -% QUASIRANDOM SEQUENCE GENERATORS -% ------------------------------- -% -% 28.11.1991 -% -% NOTE TO THE USER BY the NEA Data Bank: -% This quasi random number generator has been made available to -% you on condition that its identity is preserved when used -% in computer programs. If its use leads to scientific publication -% of results you should cite it in the references, in addition -% no commercial use should be made unless agreed upon with the -% main author (Prof. I.M. Sobol') -% -% ABSTRACT -% ........ -% -% POINTS BELONGING TO LP-TAU SEQUENCES UNIFORMLY DISTRIBUTED IN THE -% N-DIMENSIONAL UNIT CUBE ARE OFTEN USED IN NUMERICAL MATHEMATICS: -% -% - AS NODES FOR MULTIDIMENSIONAL INTEGRATION; -% - AS SEARCHING POINTS IN GLOBAL OPTIMIZATION; -% - AS TRIAL POINTS IN MULTI-CRITERIA DECISION MAKING; -% - AS QUASIRANDOM POINTS FOR QUASI-MONTECARLO ALGORITHMS; -% - ETC. -% -% THIS SUBROUTINE CONTAINS THE ALGORITHM FOR FAST GENERATION OF -% LP-TAU SEQUENCES THAT ARE SUITABLE FOR MULTI-PROCESSOR COMPUTATIONS. -% THE DIMENSIONS N.LE.51, THE NUMBER OF POINTS N.LT.2**30. -% THE PROGRAMMING LANGUAGE IS FORTRAN-77. THIS SUBROUTINE IS AVAILABLE -% ALSO IN %-LANGUAGE. -% THE REPORT DESCRIBING THE ALGORITHM CONTAINS THE DESCRIPTION OF THE -% ALGORITHM AND CERTAIN IMPORTANT PROPERTIES OF LP-TAU SEQUENCES AND -% THEIR GENERALIZATIONS ARE DISCUSSED. -% -% REFERENCE: -% I.M. SOBOL', V.I. TURCHANINOV, Yu.L. LEVITAN, B.V. SHUKHMAN -% KELDYSH INSTITUTE OF APPLIED MATHEMATICS -% RUSSIAN ACADEMY OF SCIENCES -% -% QUASIRANDOM SEQUENCE GENERATORS -% MOSCOW 1992, IPM ZAK. NO.30 (100 COPIES) -% -% ------------------------------------------------------------------------ -% -% INPUT PARAMETERS: -% -% I - NUMBER OF THE POINT (I=(0,2**30-1)), -% N - DIMENSION OF THE POINT (0MAXNUM) | (N>MAXDIM)), - disp('LP-TAU CALL FAILED') - disp(' PRESS TO EXIT LPTAU') - pause - return -end -if ((PRVNUM+1==I) & (N<=PRVDIM)), - % - % RECURRENT GENERATION OF THE POINT - % - % - % SEARCH POSITION OF THE RIGHTMOST "1" - % IN THE BINARY REPRESENTATION OF I - % - L=0; - POS=0; - while L1e-010); - % If we deal with groups we can only estimate the new mu* - % measure since factors in the same groups can move in - % opposite direction and the definition of the standard - % Morris mu cannopt be applied. - % In the new version the elementary effect is defined with - % the absolute value. - %SAmeas(find(GroupMat(Change_factor(j,i),:)),i) = abs((Single_OutValues(j) - Single_OutValues(j+1) )/Delt); %(2/3)); - SAmeas(i,Change_factor') = abs((Single_OutValues(j) - Single_OutValues(j+1) )/Delt); - else - Change_factor(j,i) = find(Single_Sample(j+1,:)-Single_Sample(j,:)); - % If no groups --> we compute both the original and - % modified measure - if Delta(j) > 0 %=> +Delta - SAmeas(Change_factor(j,i),i) = (Single_OutValues(j+1) - Single_OutValues(j) )/Delt; %(2/3); - else %=> -Delta - SAmeas(Change_factor(j,i),i) = (Single_OutValues(j) - Single_OutValues(j+1) )/Delt; %(2/3); - end - end - end %for j=1:sizea - - end %for i=1:r - - if NumGroups ~ 0 - SAmeas = SAmeas'; - end - - % Compute Mu AbsMu and StDev - if any(any(isnan(SAmeas))) - for j=1:NumFact, - SAm = SAmeas(j,:); - SAm = SAm(find(~isnan(SAm))); - rr=length(SAm); - AbsMu(j,1) = sum(abs(SAm),2)/rr; - if NumGroups == 0 - Mu(j,1) = sum(SAm,2)/rr; - StDev(j,1) = sum((SAm - repmat(Mu(j),1,rr)).^2/(rr*(rr-1)),2).^0.5; - end - end - else - AbsMu = sum(abs(SAmeas),2)/r; - if NumGroups == 0 - Mu = sum(SAmeas,2)/r; - StDev = sum((SAmeas - repmat(Mu,1,r)).^2/(r*(r-1)),2).^0.5; - end - end - - % Define the output Matrix - if we have groups we cannot define the old - % measure mu, only mu* makes sense - if NumGroups > 0 - OutMatrix = [OutMatrix; AbsMu]; - else - OutMatrix = [OutMatrix; AbsMu, Mu, StDev]; - end -end % For Each Output diff --git a/GSA_distrib/4.0.3/Sampling_Function_2.m b/GSA_distrib/4.0.3/Sampling_Function_2.m deleted file mode 100644 index ccd3a87f9..000000000 --- a/GSA_distrib/4.0.3/Sampling_Function_2.m +++ /dev/null @@ -1,174 +0,0 @@ -function [Outmatrix, OutFact] = Sampling_Function_2(p, k, r, UB, LB, GroupMat) -%[Outmatrix, OutFact] = Sampling_Function_2(p, k, r, UB, LB, GroupMat) -% Inputs: k (1,1) := number of factors examined or number of groups examined. -% In case the groups are chosen the number of factors is stores in NumFact and -% sizea becomes the number of created groups. -% NumFact (1,1) := number of factors examined in the case when groups are chosen -% r (1,1) := sample size -% p (1,1) := number of intervals considered in [0, 1] -% UB(sizea,1) := Upper Bound for each factor -% LB(sizea,1) := Lower Bound for each factor -% GroupNumber(1,1) := Number of groups (eventually 0) -% GroupMat(NumFact,GroupNumber):= Matrix which describes the chosen groups. Each column represents a group and its elements -% are set to 1 in correspondence of the factors that belong to the fixed group. All -% the other elements are zero. -% Local Variables: -% sizeb (1,1) := sizea+1 -% sizec (1,1) := 1 -% randmult (sizea,1) := vector of random +1 and -1 -% perm_e(1,sizea) := vector of sizea random permutated indeces -% fact(sizea) := vector containing the factor varied within each traj -% DDo(sizea,sizea) := D* in Morris, 1991 -% A(sizeb,sizea) := Jk+1,k in Morris, 1991 -% B(sizeb,sizea) := B in Morris, 1991 -% Po(sizea,sizea) := P* in Morris, 1991 -% Bo(sizeb,sizea) := B* in Morris, 1991 -% Ao(sizeb,sizec) := Jk+1,1 in Morris, 1991 -% xo(sizec,sizea) := x* in Morris, 1991 (starting point for the trajectory) -% In(sizeb,sizea) := for each loop orientation matrix. It corresponds to a trajectory -% of k step in the parameter space and it provides a single elementary -% effect per factor -% MyInt() -% Fact(sizea,1) := for each loop vector indicating which factor or group of factors has been changed -% in each step of the trajectory -% AuxMat(sizeb,sizea) := Delta*0.5*((2*B - A) * DD0 + A) in Morris, 1991. The AuxMat is used as in Morris design -% for single factor analysis, while it constitutes an intermediate step for the group analysis. -% -% Output: Outmatrix(sizeb*r, sizea) := for the entire sample size computed In(i,j) matrices -% OutFact(sizea*r,1) := for the entire sample size computed Fact(i,1) vectors -% -% Note: B0 is constructed as in Morris design when groups are not considered. When groups are considered the routine -% follows the following steps: -% 1- Creation of P0 and DD0 matrices defined in Morris for the groups. This means that the dimensions of these -% 2 matrices are (GroupNumber,GroupNumber). -% 2- Creation of AuxMat matrix with (GroupNumber+1,GroupNumber) elements. -% 3- Definition of GroupB0 starting from AuxMat, GroupMat and P0. -% 4- The final B0 for groups is obtained as [ones(sizeb,1)*x0' + GroupB0]. The P0 permutation is present in GroupB0 -% and it's not necessary to permute the matrix (ones(sizeb,1)*x0') because it's already randomly created. -% Reference: -% A. Saltelli, K. Chan, E.M. Scott, "Sensitivity Analysis" on page 68 ss -% -% F. Campolongo, J. Cariboni, JRC - IPSC Ispra, Varese, IT -% Last Update: 15 November 2005 by J.Cariboni -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -% Parameters and initialisation of the output matrix -sizea = k; -Delta = p/(2*p-2); -%Delta = 1/3 -NumFact = sizea; -GroupNumber = size(GroupMat,2); - -if GroupNumber ~ 0; - sizea = size(GroupMat,2); -end - -sizeb = sizea + 1; -sizec = 1; -Outmatrix = []; -OutFact = []; - -% For each i generate a trajectory -for i=1:r - - % Construct DD0 - OLD VERSION - it does not need communication toolbox - % RAND(N,M) is an NXM matrix with random entries, chosen from a uniform distribution on the interval (0.0,1.0). - % Note that DD0 tells if the factor have to be increased or ddecreased - % by Delta. - randmult = ones(k,1); - v = rand(k,1); - randmult (find(v < 0.5))=-1; - randmult = repmat(randmult,1,k); - DD0 = randmult .* eye(k); - - % Construct DD0 - NEW VERSION - it needs communication toolbox - % randsrc(m) generates an m-by-m matrix, each of whose entries independently takes the value -1 with probability 1/2, - % and 1 with probability 1/2. - % DD0 = randsrc(NumFact) .* eye(NumFact); - - % Construct B (lower triangular) - B = ones(sizeb,sizea); - for j = 1:sizea - B(1:j,j)=0; - end - - % Construct A0, A - A0 = ones(sizeb,1); - A = ones(sizeb,NumFact); - - % Construct the permutation matrix P0. In each column of P0 one randomly chosen element equals 1 - % while all the others equal zero. - % P0 tells the order in which order factors are changed in each - % trajectory. P0 is created as it follows: - % 1) All the elements of P0 are set equal to zero ==> P0 = zeros (sizea, sizea); - % 2) The function randperm create a random permutation of integer 1:sizea, without repetitions ==> perm_e; - % 3) In each column of P0 the element indicated in perm_e is set equal to one. - % Note that P0 is then used reading it by rows. - P0 = zeros (sizea, sizea); - perm_e = randperm(sizea); % RANDPERM(n) is a random permutation of the integers from 1 to n. - for j = 1:sizea - P0(perm_e(j),j) = 1; - end - - % When groups are present the random permutation is done only on B. The effect is the same since - % the added part (A0*x0') is completely random. - if GroupNumber ~ 0 - B = B * (GroupMat*P0')'; - end - - % Compute AuxMat both for single factors and groups analysis. For Single factors analysis - % AuxMat is added to (A0*X0) and then permutated through P0. When groups are active AuxMat is - % used to build GroupB0. AuxMat is created considering DD0. If the element on DD0 diagonal - % is 1 then AuxMat will start with zero and add Delta. If the element on DD0 diagonal is -1 - % then DD0 will start Delta and goes to zero. - AuxMat = Delta*0.5*((2*B - A) * DD0 + A); - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % a --> Define the random vector x0 for the factors. Note that x0 takes value in the hypercube - % [0,...,1-Delta]*[0,...,1-Delta]*[0,...,1-Delta]*[0,...,1-Delta] - MyInt = repmat([0:(1/(p-1)):(1-Delta)],NumFact,1); % Construct all possible values of the factors - - % OLD VERSION - it needs communication toolbox - % w = randint(NumFact,1,[1,size(MyInt,2)]); - - % NEW VERSION - construct a version of random integers - % 1) create a vector of random integers - % 2) divide [0,1] into the needed steps - % 3) check in which interval the random numbers fall - % 4) generate the corresponding integer - v = repmat(rand(NumFact,1),1,size(MyInt,2)+1); % 1) - IntUsed = repmat([0:1/size(MyInt,2):1],NumFact,1); % 2) - DiffAuxVec = IntUsed - v; % 3) - - for ii = 1:size(DiffAuxVec,1) - w(1,ii) = max(find(DiffAuxVec(ii,:)<0)); % 4) - end - x0 = MyInt(1,w)'; % Define x0 - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % b --> Compute the matrix B*, here indicated as B0. Each row in B0 is a - % trajectory for Morris Calculations. The dimension of B0 is (Numfactors+1,Numfactors) - if GroupNumber ~ 0 - B0 = (A0*x0' + AuxMat); - else - B0 = (A0*x0' + AuxMat)*P0; - end - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % c --> Compute values in the original intervals - % B0 has values x(i,j) in [0, 1/(p -1), 2/(p -1), ... , 1]. - % To obtain values in the original intervals [LB, UB] we compute - % LB(j) + x(i,j)*(UB(j)-LB(j)) - In = repmat(LB,1,sizeb)' + B0 .* repmat((UB-LB),1,sizeb)'; - - % Create the Factor vector. Each component of this vector indicate which factor or group of factor - % has been changed in each step of the trajectory. - for j=1:sizea - Fact(1,j) = find(P0(j,:)); - end - Fact(1,sizea+1) = 0; - - Outmatrix = [Outmatrix; In]; - OutFact = [OutFact; Fact']; - -end \ No newline at end of file diff --git a/GSA_distrib/4.0.3/beta_inv.m b/GSA_distrib/4.0.3/beta_inv.m deleted file mode 100644 index d3c95836d..000000000 --- a/GSA_distrib/4.0.3/beta_inv.m +++ /dev/null @@ -1,38 +0,0 @@ -function x = beta_inv(p, a, b) -% PURPOSE: inverse of the cdf (quantile) of the beta(a,b) distribution -%-------------------------------------------------------------- -% USAGE: x = beta_inv(p,a,b) -% where: p = vector of probabilities -% a = beta distribution parameter, a = scalar -% b = beta distribution parameter b = scalar -% NOTE: mean [beta(a,b)] = a/(a+b), variance = ab/((a+b)*(a+b)*(a+b+1)) -%-------------------------------------------------------------- -% RETURNS: x at each element of p for the beta(a,b) distribution -%-------------------------------------------------------------- -% SEE ALSO: beta_d, beta_pdf, beta_inv, beta_rnd -%-------------------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to -% match the format of the econometrics toolbox - -if (nargin ~= 3) - error('Wrong # of arguments to beta_inv'); -end - -if any(any((a<=0)|(b<=0))) - error('beta_inv parameter a or b is nonpositive'); -end -if any(any(abs(2*p-1)>1)) - error('beta_inv: A probability should be 0<=p<=1'); -end - -x = a ./ (a+b); -dx = 1; -while any(any(abs(dx)>256*eps*max(x,1))) - dx = (betainc(x,a,b) - p) ./ beta_pdf(x,a,b); - x = x - dx; - x = x + (dx - x) / 2 .* (x<0); -end - \ No newline at end of file diff --git a/GSA_distrib/4.0.3/beta_pdf.m b/GSA_distrib/4.0.3/beta_pdf.m deleted file mode 100644 index 8412fbdce..000000000 --- a/GSA_distrib/4.0.3/beta_pdf.m +++ /dev/null @@ -1,32 +0,0 @@ -function pdf = beta_pdf(x, a, b) -% PURPOSE: pdf of the beta(a,b) distribution -%-------------------------------------------------------------- -% USAGE: pdf = beta_pdf(x,a,b) -% where: x = vector of components -% a = beta distribution parameter, a = scalar -% b = beta distribution parameter b = scalar -% NOTE: mean[(beta(a,b)] = a/(a+b), variance = ab/((a+b)*(a+b)*(a+b+1)) -%-------------------------------------------------------------- -% RETURNS: pdf at each element of x of the beta(a,b) distribution -%-------------------------------------------------------------- -% SEE ALSO: beta_d, beta_pdf, beta_inv, beta_rnd -%-------------------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to -% match the format of the econometrics toolbox - - -if (nargin ~=3) - error('Wrong # of arguments to beta_pdf'); -end - -if any(any((a<=0)|(b<=0))) - error('Parameter a or b is nonpositive'); -end - -I = find((x<0)|(x>1)); - -pdf = x.^(a-1) .* (1-x).^(b-1) ./ beta(a,b); -pdf(I) = 0*I; diff --git a/GSA_distrib/4.0.3/cumplot.m b/GSA_distrib/4.0.3/cumplot.m deleted file mode 100644 index a700d3784..000000000 --- a/GSA_distrib/4.0.3/cumplot.m +++ /dev/null @@ -1,14 +0,0 @@ -function h = cumplot(x); -%function h =cumplot(x) -% Copyright (C) 2005 Marco Ratto - - -n=length(x); -x=[-inf; sort(x); Inf]; -y=[0:n n]./n; -h0 = stairs(x,y); -grid on, - -if nargout, - h=h0; -end diff --git a/GSA_distrib/4.0.3/dat_fil_.m b/GSA_distrib/4.0.3/dat_fil_.m deleted file mode 100644 index 0b3ac8f8e..000000000 --- a/GSA_distrib/4.0.3/dat_fil_.m +++ /dev/null @@ -1,30 +0,0 @@ -function c = dat_fil_(data_file); -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -try - eval(data_file); -catch - load(data_file); -end -clear data_file; - -a=who; - -for j=1:length(a) - eval(['c.',a{j},'=',a{j},';']); -end \ No newline at end of file diff --git a/GSA_distrib/4.0.3/dynare_MC.m b/GSA_distrib/4.0.3/dynare_MC.m deleted file mode 100644 index 26a8135ea..000000000 --- a/GSA_distrib/4.0.3/dynare_MC.m +++ /dev/null @@ -1,142 +0,0 @@ -function dynare_MC(var_list_,OutDir) -% -% Adapted by M. Ratto from dynare_estimation.m and posteriorsmoother.m -% (dynare_estimation.m and posteriorsmoother.m are part of DYNARE, -% copyright M. Juillard) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global M_ options_ oo_ estim_params_ -global bayestopt_ - -if options_.filtered_vars ~= 0 & options_.filter_step_ahead == 0 - options_.filter_step_ahead = 1; -end -if options_.filter_step_ahead ~= 0 - options_.nk = max(options_.filter_step_ahead); -else - options_.nk = 0; -end - - -nvx = estim_params_.nvx; -nvn = estim_params_.nvn; -ncx = estim_params_.ncx; -ncn = estim_params_.ncn; -np = estim_params_.np ; -npar = nvx+nvn+ncx+ncn+np; - -if isempty(options_.datafile) - error('ESTIMATION: datafile option is missing') -end - -if isempty(options_.varobs) - error('ESTIMATION: VAROBS is missing') -end - -%% Read and demean data -rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range); - -options_ = set_default_option(options_,'nobs',size(rawdata,1)-options_.first_obs+1); -gend = options_.nobs; - -rawdata = rawdata(options_.first_obs:options_.first_obs+gend-1,:); -if options_.loglinear == 1 & ~options_.logdata - rawdata = log(rawdata); -end -if options_.prefilter == 1 - bayestopt_.mean_varobs = mean(rawdata,1); - data = transpose(rawdata-ones(gend,1)*bayestopt_.mean_varobs); -else - data = transpose(rawdata); -end - -if ~isreal(rawdata) - error(['There are complex values in the data. Probably a wrong' ... - ' transformation']) -end - -offset = npar-np; -fname_=M_.fname; - -options_ = set_default_option(options_,'opt_gsa',1); -options_gsa_ = options_.opt_gsa; - -if options_gsa_.pprior, - namfile=[fname_,'_prior']; -else - namfile=[fname_,'_mc']; -end -load([OutDir,'\',namfile],'lpmat', 'lpmat0', 'istable') -% load(options_.mode_file) -%% -%% -%% -x=[lpmat0(istable,:) lpmat(istable,:)]; -clear lpmat lpmat0 istable %iunstable egg yys T -B = size(x,1); -[atT,innov,measurement_error,filtered_state_vector,ys,trend_coeff, aK] = DsgeSmoother(x(1,:)',gend,data); -n1=size(atT,1); - -nfil=B/40; -stock_smooth = zeros(M_.endo_nbr,gend,40); -stock_filter = zeros(M_.endo_nbr,gend+1,40); -stock_ys = zeros(40, M_.endo_nbr); -logpo2=zeros(B,1); -%% -h = waitbar(0,'MC smoother ...'); -delete([OutDir,'\',namfile,'_*.mat']) -ib=0; -ifil=0; -opt_gsa=options_.opt_gsa; -for b=1:B - ib=ib+1; - deep = x(b,:)'; - set_all_parameters(deep); - dr = resol(oo_.steady_state,0); - %deep(1:offset) = xparam1(1:offset); - logpo2(b,1) = DsgeLikelihood(deep,gend,data); - if opt_gsa.lik_only==0, - [atT,innov,measurement_error,filtered_state_vector,ys,trend_coeff, aK] = DsgeSmoother(deep,gend,data); - stock_smooth(:,:,ib)=atT(1:M_.endo_nbr,:); -% stock_filter(:,:,ib)=filtered_state_vector(1:M_.endo_nbr,:); - stock_filter(:,:,ib)=aK(1,1:M_.endo_nbr,:); - stock_ys(ib,:)=ys'; - if ib==40, - ib=0; - ifil=ifil+1; - save([OutDir,'\',namfile,'_',num2str(ifil)],'stock_smooth','stock_filter','stock_ys') - stock_smooth = zeros(M_.endo_nbr,gend,40); - stock_filter = zeros(M_.endo_nbr,gend+1,40); - stock_ys = zeros(40, M_.endo_nbr); - end - end - waitbar(b/B,h,['MC smoother ...',num2str(b),'/',num2str(B)]); -end -close(h) -if opt_gsa.lik_only==0, -if ib>0, - ifil=ifil+1; - stock_smooth = stock_smooth(:,:,1:ib); - stock_filter = stock_filter(:,:,1:ib); - stock_ys = stock_ys(1:ib,:); - save([OutDir,'\',namfile,'_',num2str(ifil)],'stock_smooth','stock_filter','stock_ys') -end -end -stock_gend=gend; -stock_data=data; -save([OutDir,'\',namfile],'x','logpo2','stock_gend','stock_data','-append') diff --git a/GSA_distrib/4.0.3/filt_mc_.m b/GSA_distrib/4.0.3/filt_mc_.m deleted file mode 100644 index 41d5e7ae8..000000000 --- a/GSA_distrib/4.0.3/filt_mc_.m +++ /dev/null @@ -1,708 +0,0 @@ -function [rmse_MC, ixx] = filt_mc_(OutDir) -% function [rmse_MC, ixx] = filt_mc_(OutDir) -% copyright Marco Ratto 2006 -% inputs (from opt_gsa structure) -% vvarvecm = options_gsa_.var_rmse; -% loadSA = options_gsa_.load_rmse; -% pfilt = options_gsa_.pfilt_rmse; -% alpha = options_gsa_.alpha_rmse; -% alpha2 = options_gsa_.alpha2_rmse; -% istart = options_gsa_.istart_rmse; -% alphaPC = 0.5; -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global bayestopt_ estim_params_ M_ options_ oo_ - -options_gsa_=options_.opt_gsa; -vvarvecm = options_gsa_.var_rmse; -loadSA = options_gsa_.load_rmse; -pfilt = options_gsa_.pfilt_rmse; -alpha = options_gsa_.alpha_rmse; -alpha2 = options_gsa_.alpha2_rmse; -istart = options_gsa_.istart_rmse; -alphaPC = 0.5; - -fname_ = M_.fname; -lgy_ = M_.endo_names; -dr_ = oo_.dr; - -disp(' ') -disp(' ') -disp('Starting sensitivity analysis') -disp('for the fit of EACH observed series ...') -disp(' ') -disp('Deleting old SA figures...') -a=dir([OutDir,'\*.*']); -tmp1='0'; -if options_.opt_gsa.ppost, - tmp=['_rmse_post']; -else - if options_.opt_gsa.pprior - tmp=['_rmse_prior']; - else - tmp=['_rmse_mc']; - end - if options_gsa_.lik_only, - tmp1 = [tmp,'_post_SA']; - tmp = [tmp,'_lik_SA']; - end -end -for j=1:length(a), - if strmatch([fname_,tmp],a(j).name), - disp(a(j).name) - delete([OutDir,'\',a(j).name]) - end, - if strmatch([fname_,tmp1],a(j).name), - disp(a(j).name) - delete([OutDir,'\',a(j).name]) - end, -end -disp('done !') - - -nshock=estim_params_.nvx + estim_params_.nvn + estim_params_.ncx + estim_params_.ncn; -npar=estim_params_.np; -if ~isempty(options_.mode_file), - load(options_.mode_file,'xparam1'), -end -if options_.opt_gsa.ppost, - c=load([fname_,'_mean'],'xparam1'); - xparam1_mean=c.xparam1; - clear c -elseif ~isempty(options_.mode_file) & ~isempty(ls([fname_,'_mean.mat'])) - c=load([fname_,'_mean'],'xparam1'); - xparam1_mean=c.xparam1; - clear c -end - -if options_.opt_gsa.ppost, - fnamtmp=[fname_,'_post']; - DirectoryName = CheckPath('metropolis'); -else - if options_.opt_gsa.pprior - fnamtmp=[fname_,'_prior']; - else - fnamtmp=[fname_,'_mc']; - end -end -if ~loadSA, - if exist('xparam1','var') - set_all_parameters(xparam1); - steady_; - ys_mode=oo_.steady_state; - end - if exist('xparam1_mean','var') - set_all_parameters(xparam1_mean); - steady_; - ys_mean=oo_.steady_state; - end -% eval(options_.datafile) - obs = dat_fil_(options_.datafile); - if ~options_.opt_gsa.ppost - load([OutDir,'\',fnamtmp],'x','logpo2','stock_gend','stock_data'); - logpo2=-logpo2; - else - %load([DirectoryName '/' M_.fname '_data.mat']); - [stock_gend, stock_data] = read_data; - filfilt = dir([DirectoryName '/' M_.fname '_filter*.mat']); - filparam = dir([DirectoryName '/' M_.fname '_param*.mat']); - x=[]; - logpo2=[]; - sto_ys=[]; - for j=1:length(filparam), - %load([DirectoryName '/' M_.fname '_param',int2str(j),'.mat']); - if isempty(strmatch([M_.fname '_param_irf'],filparam(j).name)) - load([DirectoryName '/' filparam(j).name]); - x=[x; stock]; - logpo2=[logpo2; stock_logpo]; - sto_ys=[sto_ys; stock_ys]; - clear stock stock_logpo stock_ys; - end - end - end - nruns=size(x,1); - nfilt=floor(pfilt*nruns); - if options_.opt_gsa.ppost | (options_.opt_gsa.ppost==0 & options_.opt_gsa.lik_only==0) - disp(' ') - disp('Computing RMSE''s...') - fobs = options_.first_obs; - nobs=options_.nobs; - for i=1:size(vvarvecm,1), - vj=deblank(vvarvecm(i,:)); - eval(['vobs =obs.',vj,'(fobs:fobs-1+nobs);']) - if options_.prefilter == 1 - %eval([vj,'=',vj,'-bayestopt_.mean_varobs(i);']) - %eval([vj,'=',vj,'-mean(',vj,',1);']) - vobs = vobs-mean(vobs,1); - end - - jxj = strmatch(vj,lgy_(dr_.order_var,:),'exact'); - js = strmatch(vj,lgy_,'exact'); - if exist('xparam1','var') -% if isfield(oo_,'FilteredVariables') -% eval(['rmse_mode(i) = sqrt(mean((vobs(istart:end)-oo_.steady_state(js)-oo_.FilteredVariables.',vj,'(istart:end-1)).^2));']) -% else - [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK] = DsgeSmoother(xparam1,stock_gend,stock_data); - y0 = squeeze(aK(1,jxj,:)) + ... - kron(ys_mode(js,:),ones(size(aK,3),1)); -% y0 = ahat(jxj,:)' + ... -% kron(ys_mode(js,:),ones(size(ahat,2),1)); - rmse_mode(i) = sqrt(mean((vobs(istart:end)-y0(istart:length(vobs))).^2)); -% end - end - y0=zeros(nobs+1,nruns); - if options_.opt_gsa.ppost - %y0=zeros(nobs+max(options_.filter_step_ahead),nruns); - nbb=0; - for j=1:length(filfilt), - load([DirectoryName '/' M_.fname '_filter_step_ahead',num2str(j),'.mat']); - nb = size(stock,4); -% y0(:,nbb+1:nbb+nb)=squeeze(stock(1,js,:,:)) + ... -% kron(sto_ys(nbb+1:nbb+nb,js)',ones(size(stock,3),1)); - y0(:,nbb+1:nbb+nb)=squeeze(stock(1,js,1:nobs+1,:)) + ... - kron(sto_ys(nbb+1:nbb+nb,js)',ones(nobs+1,1)); - %y0(:,:,size(y0,3):size(y0,3)+size(stock,3))=stock; - nbb=nbb+nb; - clear stock; - end - else - filfilt=ls([OutDir,'\',fnamtmp,'_*.mat']); - nbb=0; - for j=1:size(filfilt,1), - load([OutDir,'\',fnamtmp,'_',num2str(j),'.mat'],'stock_filter','stock_ys'); - nb = size(stock_filter,3); - y0(:,nbb+1:nbb+nb) = squeeze(stock_filter(jxj,:,:)) + ... - kron(stock_ys(:,js)',ones(nobs+1,1)); - %y0(:,:,size(y0,3):size(y0,3)+size(stock,3))=stock; - nbb=nbb+nb; - clear stock_filter; - end - -% y0 = squeeze(stock_filter(:,jxj,:)) + ... -% kron(stock_ys(js,:),ones(size(stock_filter,1),1)); - end - y0M=mean(y0,2); - for j=1:nruns, - rmse_MC(j,i) = sqrt(mean((vobs(istart:end)-y0(istart:end-1,j)).^2)); - end - if exist('xparam1_mean','var') - %eval(['rmse_pmean(i) = sqrt(mean((',vj,'(fobs-1+istart:fobs-1+nobs)-y0M(istart:end-1)).^2));']) - [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK] = DsgeSmoother(xparam1_mean,stock_gend,stock_data); - y0 = squeeze(aK(1,jxj,:)) + ... - kron(ys_mean(js,:),ones(size(aK,3),1)); -% y0 = ahat(jxj,:)' + ... -% kron(ys_mean(js,:),ones(size(ahat,2),1)); - rmse_pmean(i) = sqrt(mean((vobs(istart:end)-y0(istart:length(vobs))).^2)); - end - end - clear stock_filter; - end - for j=1:nruns, - lnprior(j,1) = priordens(x(j,:),bayestopt_.pshape,bayestopt_.p1,bayestopt_.p2,bayestopt_.p3,bayestopt_.p4); - end - likelihood=logpo2(:)-lnprior(:); - disp('... done!') - - if options_.opt_gsa.ppost - save([OutDir,'\',fnamtmp], 'x', 'logpo2', 'likelihood', 'rmse_MC', 'rmse_mode','rmse_pmean') - else - if options_.opt_gsa.lik_only - save([OutDir,'\',fnamtmp], 'likelihood', '-append') - else - save([OutDir,'\',fnamtmp], 'likelihood', 'rmse_MC','-append') - if exist('xparam1_mean','var') - save([OutDir,'\',fnamtmp], 'rmse_pmean','-append') - end - if exist('xparam1','var') - save([OutDir,'\',fnamtmp], 'rmse_mode','-append') - end - end - end -else - if options_.opt_gsa.lik_only & options_.opt_gsa.ppost==0 - load([OutDir,'\',fnamtmp],'x','logpo2','likelihood'); - else - load([OutDir,'\',fnamtmp],'x','logpo2','likelihood','rmse_MC','rmse_mode','rmse_pmean'); - end - lnprior=logpo2(:)-likelihood(:); - nruns=size(x,1); - nfilt=floor(pfilt*nruns); -end -% smirnov tests -nfilt0=nfilt*ones(size(vvarvecm,1),1); -logpo2=logpo2(:); -if ~options_.opt_gsa.ppost - [dum, ipost]=sort(-logpo2); - [dum, ilik]=sort(-likelihood); -end -if ~options_.opt_gsa.ppost & options_.opt_gsa.lik_only - if options_.opt_gsa.pprior - anam='rmse_prior_post'; - else - anam='rmse_mc_post'; - end - stab_map_1(x, ipost(1:nfilt), ipost(nfilt+1:end), anam, 1,[],OutDir); - stab_map_2(x(ipost(1:nfilt),:),alpha2,anam, OutDir); - if options_.opt_gsa.pprior - anam='rmse_prior_lik'; - else - anam='rmse_mc_lik'; - end - stab_map_1(x, ilik(1:nfilt), ilik(nfilt+1:end), anam, 1,[],OutDir); - stab_map_2(x(ilik(1:nfilt),:),alpha2,anam, OutDir); -else - for i=1:size(vvarvecm,1), - [dum, ixx(:,i)]=sort(rmse_MC(:,i)); - if options_.opt_gsa.ppost, - %nfilt0(i)=length(find(rmse_MC(:,i)0.0001 ); -vvarvecm=vvarvecm(ivar,:); -rmse_MC=rmse_MC(:,ivar); - -disp(' ') -% if options_.opt_gsa.ppost==0 & options_.opt_gsa.pprior, - disp(['Sample filtered the ',num2str(pfilt*100),'% best RMSE''s for each observed series ...' ]) -% else -% disp(['Sample filtered the best RMSE''s smaller than RMSE at the posterior mean ...' ]) -% end -% figure, boxplot(rmse_MC) -% set(gca,'xticklabel',vvarvecm) -% saveas(gcf,[fname_,'_SA_RMSE']) - -disp(' ') -disp(' ') -disp('RMSE ranges after filtering:') -if options_.opt_gsa.ppost==0 & options_.opt_gsa.pprior, - disp([' best ',num2str(pfilt*100),'% filtered remaining 90%']) - disp([' min max min max posterior mode']) -else - disp([' best filtered remaining ']) - disp([' min max min max posterior mean']) -end -for j=1:size(vvarvecm,1), - disp([vvarvecm(j,:), sprintf('%15.5g',[min(rmse_MC(ixx(1:nfilt0(j),j),j)) ... - max(rmse_MC(ixx(1:nfilt0(j),j),j)) ... - min(rmse_MC(ixx(nfilt0(j)+1:end,j),j)) ... - max(rmse_MC(ixx(nfilt0(j)+1:end,j),j)) ... - rmse_txt(j)])]) - % disp([vvarvecm(j,:), sprintf('%15.5g',[min(logpo2(ixx(1:nfilt,j))) ... - % max(logpo2(ixx(1:nfilt,j))) ... - % min(logpo2(ixx(nfilt+1:end,j))) ... - % max(logpo2(ixx(nfilt+1:end,j)))])]) -end - -SP=zeros(npar+nshock,size(vvarvecm,1)); -for j=1:size(vvarvecm,1), - ns=find(PP(:,j)1),:); -snam=param_names(find(nsp>0),:); -% snam0=bayestopt_.name(find(nsp==0)); -% snam1=bayestopt_.name(find(nsp==1)); -% snam2=bayestopt_.name(find(nsp>1)); -% snam=bayestopt_.name(find(nsp>0)); -nsnam=(find(nsp>1)); - -disp(' ') -disp(' ') -disp('These parameters do not affect significantly the fit of ANY observed series:') -disp(snam0) -disp(' ') -disp('These parameters affect ONE single observed series:') -disp(snam1) -disp(' ') -disp('These parameters affect MORE THAN ONE observed series: trade off exists!') -disp(snam2) - - -%pnam=bayestopt_.name(end-estim_params_.np+1:end); -pnam=bayestopt_.name; - -% plot trade-offs -a00=jet(size(vvarvecm,1)); -for ix=1:ceil(length(nsnam)/5), - figure, - for j=1+5*(ix-1):min(size(snam2,1),5*ix), - subplot(2,3,j-5*(ix-1)) - %h0=cumplot(x(:,nsnam(j)+nshock)); - h0=cumplot(x(:,nsnam(j))); - set(h0,'color',[0 0 0]) - hold on, - np=find(SP(nsnam(j),:)); - %a0=jet(nsp(nsnam(j))); - a0=a00(np,:); - for i=1:nsp(nsnam(j)), %size(vvarvecm,1), - %h0=cumplot(x(ixx(1:nfilt,np(i)),nsnam(j)+nshock)); - h0=cumplot(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j))); - set(h0,'color',a0(i,:)) - end - ydum=get(gca,'ylim'); - %xdum=xparam1(nshock+nsnam(j)); - if exist('xparam1') - xdum=xparam1(nsnam(j)); - h1=plot([xdum xdum],ydum); - set(h1,'color',[0.85 0.85 0.85],'linewidth',2) - end - xlabel('') - title([pnam{nsnam(j)}],'interpreter','none') - end - %subplot(3,2,6) - h0=legend(str2mat('base',vvarvecm(np,:)),0); - set(h0,'fontsize',6,'position',[0.7 0.1 0.2 0.3],'interpreter','none') - %h0=legend({'base',vnam{np}}',0); - %set(findobj(get(h0,'children'),'type','text'),'interpreter','none') - if options_.opt_gsa.ppost - saveas(gcf,[OutDir,'\',fname_,'_rmse_post_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '\' fname_ '_rmse_post_' int2str(ix)]); - eval(['print -dpdf ' OutDir '\' fname_ '_rmse_post_' int2str(ix)]); - else - if options_.opt_gsa.pprior - saveas(gcf,[OutDir,'\',fname_,'_rmse_prior_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '\' fname_ '_rmse_prior_' int2str(ix)]); - eval(['print -dpdf ' OutDir '\' fname_ '_rmse_prior_' int2str(ix)]); - else - saveas(gcf,[OutDir,'\',fname_,'_rmse_mc_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '\' fname_ '_rmse_mc_' int2str(ix)]); - eval(['print -dpdf ' OutDir '\' fname_ '_rmse_mc_' int2str(ix)]); - end - end -end -close all - -for j=1:size(SP,2), - nsx(j)=length(find(SP(:,j))); -end - -number_of_grid_points = 2^9; % 2^9 = 512 !... Must be a power of two. -bandwidth = 0; % Rule of thumb optimal bandwidth parameter. -kernel_function = 'gaussian'; % Gaussian kernel for Fast Fourrier Transform approximaton. -%kernel_function = 'uniform'; % Gaussian kernel for Fast Fourrier Transform approximaton. - -for ix=1:ceil(length(nsnam)/5), - figure, - for j=1+5*(ix-1):min(size(snam2,1),5*ix), - subplot(2,3,j-5*(ix-1)) - optimal_bandwidth = mh_optimal_bandwidth(x(:,nsnam(j)),size(x,1),bandwidth,kernel_function); - [x1,f1] = kernel_density_estimate(x(:,nsnam(j)),number_of_grid_points,... - size(x,1),optimal_bandwidth,kernel_function); - h0 = plot(x1, f1,'k'); - hold on, - np=find(SP(nsnam(j),:)); - %a0=jet(nsp(nsnam(j))); - a0=a00(np,:); - for i=1:nsp(nsnam(j)), %size(vvarvecm,1), - optimal_bandwidth = mh_optimal_bandwidth(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)),nfilt,bandwidth,kernel_function); - [x1,f1] = kernel_density_estimate(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)),number_of_grid_points,... - nfilt,optimal_bandwidth,kernel_function); - h0 = plot(x1, f1); - set(h0,'color',a0(i,:)) - end - ydum=get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]); - if exist('xparam1') - %xdum=xparam1(nshock+nsnam(j)); - xdum=xparam1(nsnam(j)); - h1=plot([xdum xdum],[0 ydum(2)]); - set(h1,'color',[0.85 0.85 0.85],'linewidth',2) - end - xlabel('') - title([pnam{nsnam(j)}],'interpreter','none') - end - h0=legend(str2mat('base',vvarvecm(np,:)),0); - set(h0,'fontsize',6,'position',[0.7 0.1 0.2 0.3],'interpreter','none') - %h0=legend({'base',vnam{np}}',0); - %set(findobj(get(h0,'children'),'type','text'),'interpreter','none') - if options_.opt_gsa.ppost - saveas(gcf,[OutDir,'\',fname_,'_rmse_post_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '\' fname_ '_rmse_post_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '\' fname_ '_rmse_post_dens_' int2str(ix)]); - else - if options_.opt_gsa.pprior - saveas(gcf,[OutDir,'\',fname_,'_rmse_prior_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '\' fname_ '_rmse_prior_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '\' fname_ '_rmse_prior_dens_' int2str(ix)]); - else - saveas(gcf,[OutDir,'\',fname_,'_rmse_mc_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '\' fname_ '_rmse_mc_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '\' fname_ '_rmse_mc_dens_' int2str(ix)]); - end - end -end -close all - -% for j=1:size(SP,2), -% nfig=0; -% np=find(SP(:,j)); -% for i=1:nsx(j), %size(vvarvecm,1), -% if mod(i,12)==1, -% nfig=nfig+1; -% %figure('name',['Sensitivity of fit of ',vnam{j}]), -% figure('name',['Sensitivity of fit of ',deblank(vvarvecm(j,:)),' ',num2str(nfig)]), -% end -% -% subplot(3,4,i-12*(nfig-1)) -% optimal_bandwidth = mh_optimal_bandwidth(x(ixx(1:nfilt,j),np(i)),nfilt,bandwidth,kernel_function); -% [x1,f1] = kernel_density_estimate(x(ixx(1:nfilt,j),np(i)),number_of_grid_points,... -% optimal_bandwidth,kernel_function); -% plot(x1, f1,':k','linewidth',2) -% optimal_bandwidth = mh_optimal_bandwidth(x(ixx(nfilt+1:end,j),np(i)),nruns-nfilt,bandwidth,kernel_function); -% [x1,f1] = kernel_density_estimate(x(ixx(nfilt+1:end,j),np(i)),number_of_grid_points,... -% optimal_bandwidth,kernel_function); -% hold on, plot(x1, f1,'k','linewidth',2) -% ydum=get(gca,'ylim'); -% %xdum=xparam1(nshock+np(i)); -% xdum=xparam1(np(i)); -% h1=plot([xdum xdum],ydum); -% set(h1,'color',[0.85 0.85 0.85],'linewidth',2) -% %xdum1=mean(x(ixx(1:nfilt,j),np(i)+nshock)); -% xdum1=mean(x(ixx(1:nfilt,j),np(i))); -% h2=plot([xdum1 xdum1],ydum); -% set(h2,'color',[0 1 0],'linewidth',2) -% % h0=cumplot(x(nfilt+1:end,np(i)+nshock)); -% % set(h0,'color',[1 1 1]) -% % hold on, -% % h0=cumplot(x(ixx(1:nfilt,j),np(i)+nshock)); -% % set(h0,'linestyle',':','color',[1 1 1]) -% %title([pnam{np(i)}]) -% title([pnam{np(i)},'. K-S prob ', num2str(PP(np(i),j))],'interpreter','none') -% xlabel('') -% if mod(i,12)==0 | i==nsx(j), -% saveas(gcf,[fname_,'_rmse_',deblank(vvarvecm(j,:)),'_',int2str(nfig)]) -% close(gcf) -% end -% end -% end - - -disp(' ') -disp(' ') -disp('Sensitivity table (significance and direction):') -vav=char(zeros(1, size(param_names,2)+3 )); -ibl = 12-size(vvarvecm,2); -for j=1:size(vvarvecm,1), - vav = [vav, char(zeros(1,ibl)),vvarvecm(j,:)]; -end -disp(vav) -for j=1:npar+nshock, %estim_params_.np, - %disp([param_names(j,:), sprintf('%8.5g',SP(j,:))]) - disp([param_names(j,:),' ', sprintf('%12.3g',PP(j,:))]) - disp([char(zeros(1, size(param_names,2)+3 )),sprintf(' (%6g)',SS(j,:))]) -end - - -disp(' ') -disp(' ') -disp('Starting bivariate analysis:') - -for i=1:size(vvarvecm,1) - if options_.opt_gsa.ppost - fnam = ['rmse_post_',deblank(vvarvecm(i,:))]; - else - if options_.opt_gsa.pprior - fnam = ['rmse_prior_',deblank(vvarvecm(i,:))]; - else - fnam = ['rmse_mc_',deblank(vvarvecm(i,:))]; - end - end - stab_map_2(x(ixx(1:nfilt0(i),i),:),alpha2,fnam, OutDir); - - % [pc,latent,explained] = pcacov(c0); - % %figure, bar([explained cumsum(explained)]) - % ifig=0; - % j2=0; - % for j=1:npar+nshock, - % i2=find(abs(pc(:,j))>alphaPC); - % if ~isempty(i2), - % j2=j2+1; - % if mod(j2,12)==1, - % ifig=ifig+1; - % figure('name',['PCA of the filtered sample ',deblank(vvarvecm(i,:)),' ',num2str(ifig)]), - % end - % subplot(3,4,j2-(ifig-1)*12) - % bar(pc(i2,j)), - % set(gca,'xticklabel',bayestopt_.name(i2)), - % set(gca,'xtick',[1:length(i2)]) - % title(['PC ',num2str(j),'. Explained ',num2str(explained(j)),'%']) - % end - % if (mod(j2,12)==0 | j==(npar+nshock)) & j2, - % saveas(gcf,[fname_,'_SA_PCA_',deblank(vvarvecm(i,:)),'_',int2str(ifig)]) - % end - % end - % close all -end - -end \ No newline at end of file diff --git a/GSA_distrib/4.0.3/gamm_cdf.m b/GSA_distrib/4.0.3/gamm_cdf.m deleted file mode 100644 index a11d0962a..000000000 --- a/GSA_distrib/4.0.3/gamm_cdf.m +++ /dev/null @@ -1,27 +0,0 @@ -function cdf = gamm_cdf (x, a) -% PURPOSE: returns the cdf at x of the gamma(a) distribution -%--------------------------------------------------- -% USAGE: cdf = gamm_cdf(x,a) -% where: x = a vector -% a = a scalar gamma(a) -%--------------------------------------------------- -% RETURNS: -% a vector of cdf at each element of x of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_d, gamm_pdf, gamm_rnd, gamm_inv -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg - -if nargin ~= 2 -error('Wrong # of arguments to gamm_cdf'); -end; - -if any(any(a<=0)) - error('gamm_cdf: parameter a is wrong') -end - -cdf = gammainc(x,a); -I0 = find(x<0); -cdf(I0) = zeros(size(I0)); diff --git a/GSA_distrib/4.0.3/gamm_inv.m b/GSA_distrib/4.0.3/gamm_inv.m deleted file mode 100644 index 3bede95ba..000000000 --- a/GSA_distrib/4.0.3/gamm_inv.m +++ /dev/null @@ -1,50 +0,0 @@ -function x = gamm_inv(p,a,b) -% PURPOSE: returns the inverse of the cdf at p of the gamma(a,b) distribution -%--------------------------------------------------- -% USAGE: x = gamm_inv(p,a) -% where: p = a vector of probabilities -% a = a scalar parameter gamma(a) -% b = scaling factor for gamma -%--------------------------------------------------- -% RETURNS: -% a vector x of the quantile at each element of p of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_d, gamm_pdf, gamm_rnd, gamm_cdf -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to fit the format -% of the econometrics toolbox - - if (nargin < 2 | isempty(b)) - b=1; - end - - if (nargin > 3) - error('Wrong # of arguments to gamm_inv'); - end - - -if any(any(abs(2*p-1)>1)) - error('gamm_inv: a probability should be 0<=p<=1') -end -if any(any(a<=0)) - error('gamma_inv: parameter a is wrong') -end - -x = max(a-1,0.1); -dx = 1; -while any(any(abs(dx)>256*eps*max(x,1))) - dx = (gamm_cdf(x,a) - p) ./ gamm_pdf(x,a); - x = x - dx; - x = x + (dx - x) / 2 .* (x<0); -end - -I0 = find(p==0); -x(I0) = zeros(size(I0)); -I1 = find(p==1); -x(I1) = zeros(size(I0)) + Inf; - - -x=x.*b; diff --git a/GSA_distrib/4.0.3/gamm_pdf.m b/GSA_distrib/4.0.3/gamm_pdf.m deleted file mode 100644 index 86f4ffb1d..000000000 --- a/GSA_distrib/4.0.3/gamm_pdf.m +++ /dev/null @@ -1,27 +0,0 @@ -function f = gamm_pdf (x, a) -% PURPOSE: returns the pdf at x of the gamma(a) distribution -%--------------------------------------------------- -% USAGE: pdf = gamm_pdf(x,a) -% where: x = a vector -% a = a scalar for gamma(a) -%--------------------------------------------------- -% RETURNS: -% a vector of pdf at each element of x of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_cdf, gamm_rnd, gamm_inv -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg - -if nargin ~= 2 -error('Wrong # of arguments to gamm_cdf'); -end; - -if any(any(a<=0)) - error('gamm_pdf: parameter a is wrong') -end - -f = x .^ (a-1) .* exp(-x) ./ gamma(a); -I0 = find(x<0); -f(I0) = zeros(size(I0)); diff --git a/GSA_distrib/4.0.3/ghx2transition.m b/GSA_distrib/4.0.3/ghx2transition.m deleted file mode 100644 index 2f10a5f3b..000000000 --- a/GSA_distrib/4.0.3/ghx2transition.m +++ /dev/null @@ -1,41 +0,0 @@ -function [A,B] = ghx2transition(mm,iv,ic,aux) -% [A,B] = ghx2transition(mm,iv,ic,aux) -% -% Adapted by M. Ratto from kalman_transition_matrix.m -% (kalman_transition_matrix.m is part of DYNARE, copyright M. Juillard) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global M_ - - [nr1, nc1] = size(mm); - ghx = mm(:, [1:(nc1-M_.exo_nbr)]); - ghu = mm(:, [(nc1-M_.exo_nbr+1):end] ); - n_iv = length(iv); - n_ir1 = size(aux,1); - nr = n_iv + n_ir1; - - A = zeros(nr,nr); - B = zeros(nr,M_.exo_nbr); - - i_n_iv = 1:n_iv; - A(i_n_iv,ic) = ghx(iv,:); - if n_ir1 > 0 - A(n_iv+1:end,:) = sparse(aux(:,1),aux(:,2),ones(n_ir1,1),n_ir1,nr); - end - - B(i_n_iv,:) = ghu(iv,:); diff --git a/GSA_distrib/4.0.3/log_trans_.m b/GSA_distrib/4.0.3/log_trans_.m deleted file mode 100644 index b0ff26ddf..000000000 --- a/GSA_distrib/4.0.3/log_trans_.m +++ /dev/null @@ -1,54 +0,0 @@ -function [yy, xdir, isig, lam]=log_trans_(y0,xdir0) - -if nargin==1, - xdir0=''; -end -f=inline('skewness(log(y+lam))','lam','y'); -isig=1; -if ~(max(y0)<0 | min(y0)>0) - if skewness(y0)<0, - isig=-1; - y0=-y0; - end - n=hist(y0,10); - if n(1)>20*n(end), - try lam=fzero(f,[-min(y0)+10*eps -min(y0)+abs(median(y0))],[],y0); - catch - yl(1)=f(-min(y0)+10*eps,y0); - yl(2)=f(-min(y0)+abs(median(y0)),y0); - if abs(yl(1))0 - %yy=log(y0); - xdir=[xdir0,'_log']; - end - try lam=fzero(f,[-min(y0)+10*eps -min(y0)+median(y0)],[],y0); - catch - yl(1)=f(-min(y0)+10*eps,y0); - yl(2)=f(-min(y0)+abs(median(y0)),y0); - if abs(yl(1))1.e-10, -% j0=j0+1; -% y1=ones(size(lpmat,1),1)*NaN; -% y1(istable,1)=y0; -% yt(:,j0)=y1; -% end -% end -% end -% yt = yt(:,j0); - -if opt_gsa.morris==1, - %OutputDir = CheckPath('GSA\SCREEN'); - SAMorris = []; - for i=1:size(vdec,2), - [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], vdec(:,i),nliv); - end - SAvdec = squeeze(SAMorris(:,1,:))'; - save([OutputDirectoryName,'\',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec') - - figure, -% boxplot(SAvdec,'whis',10,'symbol','r.') - myboxplot(SAvdec,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('All variance decomposition') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_vdec']) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_vdec']); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_vdec']); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['EET variance decomposition observed variables']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_vdec==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAvdec(iv,:),[],'.',[],3) - else - plot(SAvdec(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:npT, - text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(options_.varobs(j,:),'interpreter','none') - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_vdec_varobs_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_vdec_varobs_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_vdec_varobs_',int2str(ifig)]); - end - end - - ifig = 0; - for j=1:M_.exo_nbr, - if mod(j,6)==1 - figure('name',['EET variance decomposition shocks']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ic_vdec==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAvdec(iv,:),[],'.',[],3) - else - plot(SAvdec(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:npT, - text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(M_.exo_names(j,:),'interpreter','none') - if mod(j,6)==0 | j==M_.exo_nbr, - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_vdec_exo_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_vdec_exo_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_vdec_exo_',int2str(ifig)]); - end - end - - - SAMorris = []; - for i=1:size(cc,2), - [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], cc(:,i),nliv); - end - SAcc = squeeze(SAMorris(:,1,:))'; - save([OutputDirectoryName,'\',fname_,'_morris_IDE'],'SAcc','cc','ir_cc','ic_cc','-append') - - figure, -% boxplot(SAcc,'whis',10,'symbol','r.') - myboxplot(SAcc,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('EET All cross-correlation matrix') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_cc']) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_cc']); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_cc']); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['EET cross-correlations']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_cc==j); - iv = [iv; find(ic_cc==j)]; - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAcc(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAcc(iv,:),[],'.',[],3) - else - plot(SAcc(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(options_.varobs(j,:),'interpreter','none') - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_cc_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_cc_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_cc_',int2str(ifig)]); - end - end - - - SAMorris = []; - for i=1:size(ac,2), - [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], ac(:,i),nliv); - end - %end - SAac = squeeze(SAMorris(:,1,:))'; - save([OutputDirectoryName,'\',fname_,'_morris_IDE'],'SAac','ac','ir_ac','ic_ac','-append') - - figure, -% boxplot(SAac,'whis',10,'symbol','r.') - myboxplot(SAac,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('EET All auto-correlations') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_ac']) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_ac']); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_ac']); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['EET auto-correlations']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_ac==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAac(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAac(iv,:),[],'.',[],3) - else - plot(SAac(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(options_.varobs(j,:),'interpreter','none') - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_ac_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_ac_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_ac_',int2str(ifig)]); - end - end - - js=0; - %for j=1:size(tadj,1), - SAMorris = []; - for i=1:size(tadj,2), - js=js+1; - [SAmeas, SAMorris(:,:,js)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], tadj(:,i),nliv); - end - %end - SAM = squeeze(SAMorris(nshock+1:end,1,:)); - for j=1:js, - SAtadj(:,j)=SAM(:,j)./(max(SAM(:,j))+eps); - end - SAtadj = SAtadj'; - save([OutputDirectoryName,'\',fname_,'_morris_IDE'],'SAtadj','tadj','ir_tadj','ic_tadj','-append') - - js=0; - SAMorris = []; - for i=1:size(iff,2), - js=js+1; - [SAmeas, SAMorriss(:,:,js)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], iff(:,i),nliv); - end - SAM = squeeze(SAMorriss(nshock+1:end,1,:)); - for j=1:js, - SAIF(:,j)=SAM(:,j)./(max(SAM(:,j))+eps); - end - SAIF = SAIF'; - save([OutputDirectoryName,'\',fname_,'_morris_IDE'],'SAIF','iff','ir_if','ic_if','-append') - - figure, - %bar(SAtadj), -% boxplot(SAtadj,'whis',10,'symbol','r.') - myboxplot(SAtadj,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('All half-life') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_tadj']) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_tadj']); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_tadj']); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['EET speed of adjustment observed variables']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_tadj==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAtadj(iv,:),[],'.',[],3) - else - plot(SAtadj(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(options_.varobs(j,:),'interpreter','none') - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_tadj_varobs_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_tadj_varobs_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_tadj_varobs_',int2str(ifig)]); - end - end - - ifig = 0; - for j=1:M_.exo_nbr, - if mod(j,6)==1 - figure('name',['EET speed of adjustment shocks']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ic_tadj==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAtadj(iv,:),[],'.',[],3) - else - plot(SAtadj(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(M_.exo_names(j,:),'interpreter','none') - if mod(j,6)==0 | j==M_.exo_nbr, - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_tadj_exo_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_tadj_exo_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_tadj_exo_',int2str(ifig)]); - end - end - - figure, - %bar(SAIF), -% boxplot(SAIF,'whis',10,'symbol','r.') - myboxplot(SAIF,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - ylabel('Elementary Effects') - title('Steady state gains (impact factors)') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_gain']) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_gain']); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_gain']); - %figure, bar(SAIF'), title('All Gain Relationships') - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['EET steady state gain observed series']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_if==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAIF(iv,:),'whis',10,'symbol','r.'); - myboxplot(SAIF(iv,:),[],'.',[],10) - else - plot(SAIF(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(options_.varobs(j,:),'interpreter','none') - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_gain_varobs_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_gain_varobs_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_gain_varobs_',int2str(ifig)]); - end - end - - ifig = 0; - for j=1:M_.exo_nbr, - if mod(j,6)==1 - figure('name',['EET steady state gain shocks']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ic_if==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAIF(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAIF(iv,:),[],'.',[],3) - else - plot(SAIF(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(M_.exo_names(j,:),'interpreter','none') - if mod(j,6)==0 | j==M_.exo_nbr, - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_gain_exo_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_gain_exo_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_gain_exo_',int2str(ifig)]); - end - end - - - SAMorris = []; - for j=1:j0, - [SAmeas, SAMorris(:,:,j)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], yt(:,j),nliv); - end - - SAM = squeeze(SAMorris(nshock+1:end,1,:)); - for j=1:j0 - SAnorm(:,j)=SAM(:,j)./max(SAM(:,j)); - irex(j)=length(find(SAnorm(:,j)>0.01)); - end - [dum, irel]=sort(irex); - - SAMmu = squeeze(SAMorris(:,2,:)); - for j=1:j0 - SAmunorm(:,j)=SAMmu(:,j)./max(SAM(:,j)); % normalised w.r.t. mu* - end - SAMsig = squeeze(SAMorris(:,3,:)); - for j=1:j0 - SAsignorm(:,j)=SAMsig(:,j)./max(SAMsig(:,j)); - end - - figure, %bar(SAnorm(:,irel)) -% boxplot(SAnorm','whis',10,'symbol','r.') - myboxplot(SAnorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('Elementary effects parameters') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_par']) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_par']); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_par']); - - figure, %bar(SAmunorm(:,irel)) -% boxplot(SAmunorm','whis',10,'symbol','r.') - myboxplot(SAmunorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - set(gca,'ylim',[-1 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('\mu parameters') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morrismu_par']) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morrismu_par']); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morrismu_par']); - figure, %bar(SAsignorm(:,irel)) -% boxplot(SAsignorm','whis',10,'symbol','r.') - myboxplot(SAsignorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('\sigma parameters') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_morrissig_par']) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morrissig_par']); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morrissig_par']); - - % figure, bar(SAnorm(:,irel)') - % set(gca,'xtick',[1:j0]) - % set(gca,'xlim',[0.5 j0+0.5]) - % title('Elementary effects relationships') - % saveas(gcf,[OutputDirectoryName,'\',fname_,'_morris_redform']) - % eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_morris_redform']); - % eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_morris_redform']); - -elseif opt_gsa.morris==2, - np=estim_params_.np; - na=(4*np+1)*opt_gsa.Nsam; - for j=1:j0, - [idex(j,:), yd(j,:)] = spop_ide(lpmat, yt(:,j), opt_gsa.Nsam, 5-1); - end - iok=find(~isnan(yt(1:opt_gsa.Nsam,1))); - yr=NaN*ones(size(lpmat,1),j0); - for j=1:j0, - ys(j,:)=yd(j,:)./max(yd(j,:)); - [dum, is]=sort(yt(iok,j)); - yr(iok(is),j)=[1:length(iok)]'./length(iok); - yr(istable(length(iok)+1:end),j) = interp1(yt(iok,j),yr(iok,j),yt(istable(length(iok)+1:end),j),'','extrap'); - ineg=find(yr(:,j)<0); - if any(ineg), - [dum, is]=sort(yr(ineg,j)); - yr(ineg(is),j)=-[length(ineg):-1:1]./length(iok); - - end - [idex_r(j,:), yd_r(j,:)] = spop_ide(lpmat, yr(:,j), opt_gsa.Nsam, 5-1); - ys_r(j,:)=yd_r(j,:)./max(yd_r(j,:)); - - end, - figure, bar((idex.*ys)./opt_gsa.Nsam), title('Relationships') - figure, bar((idex.*ys)'./opt_gsa.Nsam), title('Parameters') - figure, bar((idex_r.*ys_r)./opt_gsa.Nsam), title('Relationships rank') - figure, bar((idex_r.*ys_r)'./opt_gsa.Nsam), title('Parameters rank') - [v0,d0]=eig(corrcoef(yt(iok,:))); - ee=diag(d0); - ee=ee([end:-1:1])./j0; - i0=length(find(ee>0.01)); - v0=v0(:,[end:-1:1]); - for j=1:i0, - [idex_pc(j,:), yd_pc(j,:)] = spop_ide(lpmat, yt*v0(:,j), opt_gsa.Nsam, 5-1); - end - for j=1:i0, - ys_pc(j,:)=yd_pc(j,:)./max(yd_pc(j,:)); - end, - figure, bar((idex_pc.*ys_pc)./opt_gsa.Nsam), title('Relationships PCA') - figure, bar((idex_pc.*ys_pc)'./opt_gsa.Nsam), title('Parameters PCA') - - [vr,dr]=eig(corrcoef(yr(iok,:))); - er=diag(dr); - er=er([end:-1:1])./j0; - ir0=length(find(er>0.01)); - vr=vr(:,[end:-1:1]); - for j=1:ir0, - [idex_pcr(j,:), yd_pcr(j,:)] = spop_ide(lpmat, yr*vr(:,j), opt_gsa.Nsam, 5-1); - end - for j=1:ir0, - ys_pcr(j,:)=yd_pcr(j,:)./max(yd_pcr(j,:)); - end, - figure, bar((idex_pcr.*ys_pcr)./opt_gsa.Nsam), title('Relationships rank PCA') - figure, bar((idex_pcr.*ys_pcr)'./opt_gsa.Nsam), title('Parameters rank PCA') -else, - - if itrans==0, - fsuffix = ''; - elseif itrans==1, - fsuffix = '_log'; - else - fsuffix = '_rank'; - end - - imap=[1:npT]; - - x0=[lpmat0(istable,:), lpmat(istable,:)]; - nrun=length(istable); - nest=min(250,nrun); - nfit=min(1000,nrun); - try - EET=load([OutputDirectoryName,'\SCREEN\',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec'); - catch - EET=[]; - end - - SAvdec=zeros(size(vdec,2),npT); - - for j=1:size(vdec,2), - if itrans==0, - y0 = vdec(istable,j); - elseif itrans==1, - y0 = log_trans_(vdec(istable,j)); - else - y0 = trank(vdec(istable,j)); - end - if ~isempty(EET), -% imap=find(EET.SAvdec(j,:)); -% [dum, isort]=sort(-EET.SAvdec(j,:)); - imap=find(EET.SAvdec(j,:) >= (0.1.*max(EET.SAvdec(j,:))) ); - end - gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... - 2, [],[],[],0,[OutputDirectoryName,'/map_vdec',fsuffix,int2str(j)], pnames); - if nfit>nest, - gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... - -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_vdec',fsuffix,int2str(j)], pnames); - end - - SAvdec(j,imap)=gsa_(j).si; - imap_vdec{j}=imap; - end - save([OutputDirectoryName,'\',fname_,'_main_eff'],'imap_vdec','SAvdec','vdec','ir_vdec','ic_vdec') - - figure, -% boxplot(SAvdec,'whis',10,'symbol','r.') - myboxplot(SAvdec,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title(['Main effects variance decomposition ',fsuffix],'interpreter','none') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_vdec',fsuffix]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_vdec',fsuffix]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_vdec',fsuffix]); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['Main effects observed variance decomposition ',fsuffix]); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_vdec==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAvdec(iv,:),'whis',10,'symbol','r.'); - myboxplot(SAvdec(iv,:),[],'.',[],10) - else - plot(SAvdec(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(options_.varobs(j,:),'interpreter','none') - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_vdec',fsuffix,'_varobs_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_vdec',fsuffix,'_varobs_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_vdec',fsuffix,'_varobs_',int2str(ifig)]); - end - end - - ifig = 0; - for j=1:M_.exo_nbr, - if mod(j,6)==1 - figure('name',['Main effects shocks variance decomposition ',fsuffix]); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ic_vdec==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAvdec(iv,:),[],'.',[],10) - else - plot(SAvdec(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',3,'xtick',[1:np]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - set(gca,'fontsize',10) - end - title(M_.exo_names(j,:),'interpreter','none','fontsize',10) - if mod(j,6)==0 | j==M_.exo_nbr - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_vdec',fsuffix,'_exo_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_vdec',fsuffix,'_exo_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_vdec',fsuffix,'_exo_',int2str(ifig)]); - end - end - - try - EET=load([OutputDirectoryName,'\SCREEN\',fname_,'_morris_IDE'],'SAcc','ir_cc','ic_cc'); - catch - EET=[]; - end - SAcc=zeros(size(cc,2),npT); - for j=1:size(cc,2), - if itrans==0, - y0 = cc(istable,j); - elseif itrans==1, - y0 = log_trans_(cc(istable,j)); - else - y0 = trank(cc(istable,j)); - end - if ~isempty(EET), -% imap=find(EET.SAvdec(j,:)); -% [dum, isort]=sort(-EET.SAvdec(j,:)); - imap=find(EET.SAcc(j,:) >= (0.1.*max(EET.SAcc(j,:))) ); - end - gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... - 2, [],[],[],0,[OutputDirectoryName,'/map_cc',fsuffix,int2str(j)], pnames); - if nfit>nest, - gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... - -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_cc',fsuffix,int2str(j)], pnames); - end - SAcc(j,imap)=gsa_(j).si; - imap_cc{j}=imap; - - end - save([OutputDirectoryName,'\',fname_,'_main_eff'],'imap_cc','SAcc','cc','ir_cc','ic_cc') - - figure, -% boxplot(SAcc,'whis',10,'symbol','r.') - myboxplot(SAcc,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - ylabel(' ') - title(['Main effects cross-covariances ',fsuffix],'interpreter','none') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_cc',fsuffix]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_cc',fsuffix]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_cc',fsuffix]); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['Main effects cross-covariances ',fsuffix]); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_cc==j); - iv = [iv; find(ic_cc==j)]; - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAcc(iv,:),'whis',10,'symbol','r.'); - myboxplot(SAcc(iv,:),[],'.',[],10) - else - plot(SAcc(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - set(gca,'fontsize',10) - end - title(options_.varobs(j,:),'interpreter','none','fontsize',10) - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_cc',fsuffix,'_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_cc',fsuffix,'_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_cc',fsuffix,'_',int2str(ifig)]); - end - end - - try - EET=load([OutputDirectoryName,'\SCREEN\',fname_,'_morris_IDE'],'SAac','ir_ac','ic_ac'); - catch - EET=[]; - end - SAac=zeros(size(ac,2),npT); - for j=1:size(ac,2), - if itrans==0, - y0 = ac(istable,j); - elseif itrans==1, - y0 = log_trans_(ac(istable,j)); - else - y0 = trank(ac(istable,j)); - end - if ~isempty(EET), - imap=find(EET.SAac(j,:) >= (0.1.*max(EET.SAac(j,:))) ); - end -% gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); - gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... - 2, [],[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); - if nfit>nest, - gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... - -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); - end - SAac(j,imap)=gsa_(j).si; - imap_ac{j}=imap; - - end - save([OutputDirectoryName,'\',fname_,'_main_eff'],'imap_ac','SAac','ac','ir_ac','ic_ac') - - figure, -% boxplot(SAac,'whis',10,'symbol','r.') - myboxplot(SAac,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title(['Main effects 1 lag auto-covariances ',fsuffix],'interpreter','none') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_ac',fsuffix]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_ac',fsuffix]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_ac',fsuffix]); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['Main effects auto-covariances ',fsuffix]); - ifig=ifig+1; - iplo = 0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_ac==j); - %iv = [iv; find(ic_ac==j)]; - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAac(iv,:),'whis',10,'symbol','r.'); - myboxplot(SAac(iv,:),[],'.',[],10) - else - plot(SAac(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - set(gca,'fontsize',10) - end - title(options_.varobs(j,:),'interpreter','none','fontsize',10) - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_ac',fsuffix,'_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_ac',fsuffix,'_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_ac',fsuffix,'_',int2str(ifig)]); - end - end - - x0=x0(:,nshock+1:end); - imap=[1:np]; - - try - EET=load([OutputDirectoryName,'\SCREEN\',fname_,'_morris_IDE'],'SAtadj','ir_tadj','ic_tadj'); - ny=size(EET.SAtadj,1); - catch - EET=[]; - end - SAtadj=zeros(size(tadj,2),np); - for j=1:size(tadj,2), - if itrans==0, - y0 = tadj(istable,j); - elseif itrans==1, - y0 = log_trans_(tadj(istable,j)); - else - y0 = trank(tadj(istable,j)); - end - if ~isempty(EET), - if size(tadj,2)~=ny, - jj=find(EET.ir_tadj==ir_tadj(j)); - jj=jj(find(EET.ic_tadj(jj)==ic_tadj(j))); - if ~isempty(jj), - imap=find(EET.SAtadj(jj,:) >= (0.1.*max(EET.SAtadj(jj,:))) ); - else - imap=[1:np]; - end - else - imap=find(EET.SAtadj(j,:) >= (0.1.*max(EET.SAtadj(j,:))) ); - end - end -% gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); - gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... - 2, [],[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); - if nfit>nest, - gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... - -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); - end - SAtadj(j,imap)=gsa_(j).si; - imap_tadj{j}=imap; - - end - save([OutputDirectoryName,'\',fname_,'_main_eff'],'imap_tadj','SAtadj','tadj','ir_tadj','ic_tadj') - - figure, -% boxplot(SAtadj,'whis',10,'symbol','r.') - myboxplot(SAtadj,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title(['Main effects speed of adjustment ',fsuffix],'interpreter','none') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_tadj',fsuffix]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_tadj',fsuffix]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_tadj',fsuffix]); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['Main effects observed speed adjustment ',fsuffix]); - ifig=ifig+1; - iplo = 0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_tadj==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAtadj(iv,:),[],'.',[],10) - else - plot(SAtadj(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(options_.varobs(j,:),'interpreter','none') - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_tadj',fsuffix,'_varobs_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_tadj',fsuffix,'_varobs_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_tadj',fsuffix,'_varobs_',int2str(ifig)]); - end - end - - ifig = 0; - for j=1:M_.exo_nbr, - if mod(j,6)==1 - figure('name',['Main effects shocks speed of adjustment ',fsuffix]); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ic_tadj==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAtadj(iv,:),[],'.',[],10) - else - plot(SAtadj(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(M_.exo_names(j,:),'interpreter','none') - if mod(j,6)==0 | j==M_.exo_nbr, - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_tadj',fsuffix,'_exo_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_tadj',fsuffix,'_exo_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_tadj',fsuffix,'_exo_',int2str(ifig)]); - end - end - - - try - EET=load([OutputDirectoryName,'\SCREEN\',fname_,'_morris_IDE'],'SAIF','ir_if','ic_if'); - catch - EET=[]; - end - SAif=zeros(size(iff,2),np); - for j=1:size(iff,2), - if itrans==0, - y0 = iff(istable,j); - elseif itrans==1, - y0 = log_trans_(iff(istable,j)); - else - y0 = trank(iff(istable,j)); - end - if ~isempty(EET), - imap=find(EET.SAIF(j,:) >= (0.1.*max(EET.SAIF(j,:))) ); - end -% gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); - gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... - 2, [],[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); - if nfit>nest, - gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... - -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); - end - SAif(j,imap)=gsa_(j).si; - imap_if{j}=imap; - - end - save([OutputDirectoryName,'\',fname_,'_main_eff'],'imap_if','SAif','iff','ir_if','ic_if') - - figure, -% boxplot(SAif,'whis',10,'symbol','r.') - myboxplot(SAif,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title(['Main effects impact factors ',fsuffix],'interpreter','none') - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_if',fsuffix]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_if',fsuffix]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_if',fsuffix]); - - ifig = 0; - for j=1:size(options_.varobs,1) - if mod(j,6)==1 - figure('name',['Main effects observed impact factors ',fsuffix]); - ifig=ifig+1; - iplo = 0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ir_if==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAif(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAif(iv,:),[],'.',[],10) - else - plot(SAif(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(options_.varobs(j,:),'interpreter','none') - if mod(j,6)==0 | j==size(options_.varobs,1) - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_if',fsuffix,'_varobs_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_if',fsuffix,'_varobs_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_if',fsuffix,'_varobs_',int2str(ifig)]); - end - end - - ifig = 0; - for j=1:M_.exo_nbr, - if mod(j,6)==1 - figure('name',['Main effects shocks impact factors ',fsuffix]); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(3,2,iplo) - iv = find(ic_if==j); - if ~isempty(iv) - if length(iv)>1 -% boxplot(SAif(iv,:),'whis',3,'symbol','r.'); - myboxplot(SAif(iv,:),[],'.',[],10) - else - plot(SAif(iv,:),'r.'); - end - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) - set(gca,'xlim',[0.5 np+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - end - title(M_.exo_names(j,:),'interpreter','none') - if mod(j,6)==0 | j==M_.exo_nbr - saveas(gcf,[OutputDirectoryName,'\',fname_,'_map_if',fsuffix,'_exo_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '\' fname_ '_map_if',fsuffix,'_exo_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '\' fname_ '_map_if',fsuffix,'_exo_',int2str(ifig)]); - end - end - -end diff --git a/GSA_distrib/4.0.3/mc_moments.m b/GSA_distrib/4.0.3/mc_moments.m deleted file mode 100644 index 5431a14b5..000000000 --- a/GSA_distrib/4.0.3/mc_moments.m +++ /dev/null @@ -1,21 +0,0 @@ -function [vdec, cc, ac] = mc_moments(mm, ss, dr) -global options_ M_ - - [nr1, nc1, nsam] = size(mm); - disp('Computing theoretical moments ...') - h = waitbar(0,'Theoretical moments ...'); - - for j=1:nsam, - dr.ghx = mm(:, [1:(nc1-M_.exo_nbr)],j); - dr.ghu = mm(:, [(nc1-M_.exo_nbr+1):end], j); - if ~isempty(ss), - set_shocks_param(ss(j,:)); - end - [vdec(:,:,j), corr, autocorr, z, zz] = th_moments(dr,options_.varobs); - cc(:,:,j)=tril(corr,-1); - ac(:,:,j)=autocorr{1}; - waitbar(j/nsam,h) - end - close(h) - disp(' ') - disp('... done !') diff --git a/GSA_distrib/4.0.3/myboxplot.m b/GSA_distrib/4.0.3/myboxplot.m deleted file mode 100644 index 17f752ff8..000000000 --- a/GSA_distrib/4.0.3/myboxplot.m +++ /dev/null @@ -1,158 +0,0 @@ - -function sout = myboxplot (data,notched,symbol,vertical,maxwhisker) - -% sout = myboxplot (data,notched,symbol,vertical,maxwhisker) - -% % % % endif -if nargin < 5 | isempty(maxwhisker), maxwhisker = 1.5; end -if nargin < 4 | isempty(vertical), vertical = 1; end -if nargin < 3 | isempty(symbol), symbol = ['+','o']; end -if nargin < 2 | isempty(notched), notched = 0; end - -if length(symbol)==1, symbol(2)=symbol(1); end - -if notched==1, notched=0.25; end -a=1-notched; - -% ## figure out how many data sets we have -if iscell(data), - nc = length(data); -else -% if isvector(data), data = data(:); end - nc = size(data,2); -end - -% ## compute statistics -% ## s will contain -% ## 1,5 min and max -% ## 2,3,4 1st, 2nd and 3rd quartile -% ## 6,7 lower and upper confidence intervals for median -s = zeros(7,nc); -box = zeros(1,nc); -whisker_x = ones(2,1)*[1:nc,1:nc]; -whisker_y = zeros(2,2*nc); -outliers_x = []; -outliers_y = []; -outliers2_x = []; -outliers2_y = []; - -for i=1:nc - % ## Get the next data set from the array or cell array - if iscell(data) - col = data{i}(:); - else - col = data(:,i); - end -% ## Skip missing data -% % % % % % % col(isnan(col) | isna (col)) = []; - col(isnan(col)) = []; - - % ## Remember the data length - nd = length(col); - box(i) = nd; - if (nd > 1) -% ## min,max and quartiles -% s(1:5,i) = statistics(col)(1:5); -s(1,i)=min(col); -s(5,i)=max(col); -s(2,i)=myprctilecol(col,25); -s(3,i)=myprctilecol(col,50); -s(4,i)=myprctilecol(col,75); - - - - - - - - -% ## confidence interval for the median - est = 1.57*(s(4,i)-s(2,i))/sqrt(nd); - s(6,i) = max([s(3,i)-est, s(2,i)]); - s(7,i) = min([s(3,i)+est, s(4,i)]); -% ## whiskers out to the last point within the desired inter-quartile range - IQR = maxwhisker*(s(4,i)-s(2,i)); - whisker_y(:,i) = [min(col(col >= s(2,i)-IQR)); s(2,i)]; - whisker_y(:,nc+i) = [max(col(col <= s(4,i)+IQR)); s(4,i)]; -% ## outliers beyond 1 and 2 inter-quartile ranges - outliers = col((col < s(2,i)-IQR & col >= s(2,i)-2*IQR) | (col > s(4,i)+IQR & col <= s(4,i)+2*IQR)); - outliers2 = col(col < s(2,i)-2*IQR | col > s(4,i)+2*IQR); - outliers_x = [outliers_x; i*ones(size(outliers))]; - outliers_y = [outliers_y; outliers]; - outliers2_x = [outliers2_x; i*ones(size(outliers2))]; - outliers2_y = [outliers2_y; outliers2]; - elseif (nd == 1) -% ## all statistics collapse to the value of the point - s(:,i) = col; -% ## single point data sets are plotted as outliers. - outliers_x = [outliers_x; i]; - outliers_y = [outliers_y; col]; - else -% ## no statistics if no points - s(:,i) = NaN; - end -end -% % % % if isempty(outliers2_y) -% % % % outliers2_y= -% ## Note which boxes don't have enough stats -chop = find(box <= 1); - -% ## Draw a box around the quartiles, with width proportional to the number of -% ## items in the box. Draw notches if desired. -box = box*0.23/max(box); -quartile_x = ones(11,1)*[1:nc] + [-a;-1;-1;1;1;a;1;1;-1;-1;-a]*box; -quartile_y = s([3,7,4,4,7,3,6,2,2,6,3],:); - -% ## Draw a line through the median -median_x = ones(2,1)*[1:nc] + [-a;+a]*box; -% median_x=median(col); -median_y = s([3,3],:); - -% ## Chop all boxes which don't have enough stats -quartile_x(:,chop) = []; -quartile_y(:,chop) = []; -whisker_x(:,[chop,chop+nc]) = []; -whisker_y(:,[chop,chop+nc]) = []; -median_x(:,chop) = []; -median_y(:,chop) = []; -% % % % -% ## Add caps to the remaining whiskers -cap_x = whisker_x; -cap_x(1,:) =cap_x(1,:)- 0.05; -cap_x(2,:) =cap_x(2,:)+ 0.05; -cap_y = whisker_y([1,1],:); - -% #quartile_x,quartile_y -% #whisker_x,whisker_y -% #median_x,median_y -% #cap_x,cap_y -% -% ## Do the plot - -mm=min(min(data)); -MM=max(max(data)); - -if vertical - plot (quartile_x, quartile_y, 'b', ... - whisker_x, whisker_y, 'b--', ... - cap_x, cap_y, 'k', ... - median_x, median_y, 'r', ... - outliers_x, outliers_y, [symbol(1),'r'], ... - outliers2_x, outliers2_y, [symbol(2),'r']); - set(gca,'XTick',1:nc); - set(gca, 'XLim', [0.5, nc+0.5]); - set(gca, 'YLim', [mm-(MM-mm)*0.05, MM+(MM-mm)*0.05]); - -else -% % % % % plot (quartile_y, quartile_x, "b;;", -% % % % % whisker_y, whisker_x, "b;;", -% % % % % cap_y, cap_x, "b;;", -% % % % % median_y, median_x, "r;;", -% % % % % outliers_y, outliers_x, [symbol(1),"r;;"], -% % % % % outliers2_y, outliers2_x, [symbol(2),"r;;"]); -end - -if nargout, - sout=s; -end -% % % endfunction \ No newline at end of file diff --git a/GSA_distrib/4.0.3/myprctilecol.m b/GSA_distrib/4.0.3/myprctilecol.m deleted file mode 100644 index d99d5ad50..000000000 --- a/GSA_distrib/4.0.3/myprctilecol.m +++ /dev/null @@ -1,20 +0,0 @@ -function y = myprctilecol(x,p); -xx = sort(x); -[m,n] = size(x); - -if m==1 | n==1 - m = max(m,n); - if m == 1, - y = x*ones(length(p),1); - return; - end - n = 1; - q = 100*(0.5:m - 0.5)./m; - xx = [min(x); xx(:); max(x)]; -else - q = 100*(0.5:m - 0.5)./m; - xx = [min(x); xx; max(x)]; -end - -q = [0 q 100]; -y = interp1(q,xx,p); \ No newline at end of file diff --git a/GSA_distrib/4.0.3/norm_inv.m b/GSA_distrib/4.0.3/norm_inv.m deleted file mode 100644 index fc0f7356d..000000000 --- a/GSA_distrib/4.0.3/norm_inv.m +++ /dev/null @@ -1,44 +0,0 @@ -function invp = norm_inv(x, m, sd) -% PURPOSE: computes the quantile (inverse of the CDF) -% for each component of x with mean m, standard deviation sd -%--------------------------------------------------- -% USAGE: invp = norm_inv(x,m,v) -% where: x = variable vector (nx1) -% m = mean vector (default=0) -% sd = standard deviation vector (default=1) -%--------------------------------------------------- -% RETURNS: invp (nx1) vector -%--------------------------------------------------- -% SEE ALSO: norm_d, norm_rnd, norm_inv, norm_cdf -%--------------------------------------------------- - -% Written by KH (Kurt.Hornik@ci.tuwien.ac.at) on Oct 26, 1994 -% Copyright Dept of Probability Theory and Statistics TU Wien -% Converted to MATLAB by JP LeSage, jpl@jpl.econ.utoledo.edu - - if nargin > 3 - error ('Wrong # of arguments to norm_inv'); - end - - [r, c] = size (x); - s = r * c; - - if (nargin == 1) - m = zeros(1,s); - sd = ones(1,s); - end - - - - x = reshape(x,1,s); - m = reshape(m,1,s); - sd = reshape(sd,1,s); - - invp = zeros (1,s); - - invp = m + sd .* (sqrt(2) * erfinv(2 * x - 1)); - - - - invp = reshape (invp, r, c); - diff --git a/GSA_distrib/4.0.3/prior_draw_gsa.m b/GSA_distrib/4.0.3/prior_draw_gsa.m deleted file mode 100644 index 7000a6dc0..000000000 --- a/GSA_distrib/4.0.3/prior_draw_gsa.m +++ /dev/null @@ -1,125 +0,0 @@ -function pdraw = prior_draw_gsa(init,rdraw,cc) -% Draws from the prior distributions -% Adapted by M. Ratto from prior_draw (of DYNARE, copyright M. Juillard), -% for use with Sensitivity Toolbox for DYNARE -% -% -% INPUTS -% o init [integer] scalar equal to 1 (first call) or 0. -% o rdraw -% o cc [double] two columns matrix (same as in -% metropolis.m), constraints over the -% parameter space (upper and lower bounds). -% -% OUTPUTS -% o pdraw [double] draw from the joint prior density. -% -% ALGORITHM -% ... -% -% SPECIAL REQUIREMENTS -% MATLAB Statistics Toolbox -% -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global M_ options_ estim_params_ bayestopt_ -persistent fname npar bounds pshape pmean pstd a b p1 p2 p3 p4 condition - -if init - nvx = estim_params_.nvx; - nvn = estim_params_.nvn; - ncx = estim_params_.ncx; - ncn = estim_params_.ncn; - np = estim_params_.np ; - npar = nvx+nvn+ncx+ncn+np; - MhDirectoryName = CheckPath('metropolis'); - fname = [ MhDirectoryName '/' M_.fname]; - pshape = bayestopt_.pshape; - pmean = bayestopt_.pmean; - pstd = bayestopt_.pstdev; - p1 = bayestopt_.p1; - p2 = bayestopt_.p2; - p3 = bayestopt_.p3; - p4 = bayestopt_.p4; - a = zeros(npar,1); - b = zeros(npar,1); - if nargin == 2 - bounds = cc; - else - bounds = kron(ones(npar,1),[-Inf Inf]); - end - for i = 1:npar - switch pshape(i) - case 3% Gaussian prior - b(i) = pstd(i)^2/(pmean(i)-p3(i)); - a(i) = (pmean(i)-p3(i))/b(i); - case 1% Beta prior - mu = (p1(i)-p3(i))/(p4(i)-p3(i)); - stdd = p2(i)/(p4(i)-p3(i)); - a(i) = (1-mu)*mu^2/stdd^2 - mu; - b(i) = a(i)*(1/mu - 1); - case 2;%Gamma prior - mu = p1(i)-p3(i); - b(i) = p2(i)^2/mu; - a(i) = mu/b(i); - case {5,4,6} - % Nothing to do here - % - % 4: Inverse gamma, type 1, prior - % p2(i) = nu - % p1(i) = s - % 6: Inverse gamma, type 2, prior - % p2(i) = nu - % p1(i) = s - % 5: Uniform prior - % p3(i) and p4(i) are used. - otherwise - disp('prior_draw :: Error!') - disp('Unknown prior shape.') - return - end - pdraw = zeros(npar,1); - end - condition = 1; - pdraw = zeros(npar,1); - return -end - - -for i = 1:npar - switch pshape(i) - case 5% Uniform prior. - pdraw(:,i) = rdraw(:,i)*(p4(i)-p3(i)) + p3(i); - case 3% Gaussian prior. - pdraw(:,i) = norm_inv(rdraw(:,i),pmean(i),pstd(i)); - case 2% Gamma prior. - pdraw(:,i) = gamm_inv(rdraw(:,i),a(i),b(i))+p3(i); - case 1% Beta distribution (TODO: generalized beta distribution) - pdraw(:,i) = beta_inv(rdraw(:,i),a(i),b(i))*(p4(i)-p3(i))+p3(i); - case 4% INV-GAMMA1 distribution - % TO BE CHECKED - pdraw(:,i) = sqrt(1./gamm_inv(rdraw(:,i),p2(i)/2,2/p1(i))); - case 6% INV-GAMMA2 distribution - % TO BE CHECKED - pdraw(:,i) = 1./gamm_inv(rdraw(:,i),p2(i)/2,2/p1(i)); - otherwise - % Nothing to do here. - end -end - - diff --git a/GSA_distrib/4.0.3/priorcdf.m b/GSA_distrib/4.0.3/priorcdf.m deleted file mode 100644 index 06151ccfe..000000000 --- a/GSA_distrib/4.0.3/priorcdf.m +++ /dev/null @@ -1,45 +0,0 @@ -function [xcum] = priorcdf(para, pshape, p1, p2, p3, p4) -% This procedure transforms x vectors into cumulative values -% pshape: 0 is point mass, both para and p2 are ignored -% 1 is BETA(mean,stdd) -% 2 is GAMMA(mean,stdd) -% 3 is NORMAL(mean,stdd) -% 4 is INVGAMMA(s^2,nu) -% 5 is UNIFORM [p1,p2] -% Adapted by M. Ratto from MJ priordens.m - -nprio = length(pshape); - -i = 1; -while i <= nprio; - a = 0; - b = 0; - if pshape(i) == 1; % (generalized) BETA Prior - mu = (p1(i)-p3(i))/(p4(i)-p3(i)); - stdd = p2(i)/(p4(i)-p3(i)); - a = (1-mu)*mu^2/stdd^2 - mu; - b = a*(1/mu - 1); - %lnprior = lnprior + lpdfgbeta(para(i),a,b,p3(i),p4(i)) ; - para(:,i) = (para(:,i)-p3(i))./(p4(i)-p3(i)); - xcum(:,i) = betacdf(para(:,i),a,b) ; - elseif pshape(i) == 2; % GAMMA PRIOR - b = p2(i)^2/(p1(i)-p3(i)); - a = (p1(i)-p3(i))/b; - %lnprior = lnprior + lpdfgam(para(i)-p3(i),a,b); - xcum(:,i) = gamcdf(para(:,i)-p3(i),a,b); - elseif pshape(i) == 3; % GAUSSIAN PRIOR - %lnprior = lnprior + lpdfnorm(para(i),p1(i),p2(i)); - xcum(:,i) = normcdf(para(:,i),p1(i),p2(i)); - elseif pshape(i) == 4; % INVGAMMA1 PRIOR - %lnprior = lnprior + lpdfig1(para(i),p1(i),p2(i)); - xcum(:,i) = gamcdf(1/para(:,i).^2,p2(i)/2,2/p1(i)); - elseif pshape(i) == 5; % UNIFORM PRIOR - %lnprior = lnprior + log(1/(p2(i)-p1(i))); - xcum(:,i) = (para(:,i)-p1(i))./(p2(i)-p1(i)); - elseif pshape(i) == 6; % INVGAMMA2 PRIOR -% lnprior = lnprior + lpdfig2(para(i),p1(i),p2(i)); - xcum(:,i) = gamcdf(1/para(:,i),p2(i)/2,2/p1(i)); - end; - i = i+1; -end; - diff --git a/GSA_distrib/4.0.3/read_data.m b/GSA_distrib/4.0.3/read_data.m deleted file mode 100644 index f54f66cb6..000000000 --- a/GSA_distrib/4.0.3/read_data.m +++ /dev/null @@ -1,39 +0,0 @@ -function [gend, data] = read_data -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global options_ bayestopt_ - -rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range); - -options_ = set_default_option(options_,'nobs',size(rawdata,1)-options_.first_obs+1); -gend = options_.nobs; - -rawdata = rawdata(options_.first_obs:options_.first_obs+gend-1,:); -if options_.loglinear == 1 & ~options_.logdata - rawdata = log(rawdata); -end -if options_.prefilter == 1 - bayestopt_.mean_varobs = mean(rawdata,1); - data = transpose(rawdata-ones(gend,1)*bayestopt_.mean_varobs); -else - data = transpose(rawdata); -end - -if ~isreal(rawdata) - error(['There are complex values in the data. Probably a wrong' ... - ' transformation']) -end diff --git a/GSA_distrib/4.0.3/redform_map.m b/GSA_distrib/4.0.3/redform_map.m deleted file mode 100644 index c5022a19c..000000000 --- a/GSA_distrib/4.0.3/redform_map.m +++ /dev/null @@ -1,342 +0,0 @@ -function redform_map(dirname) -%function redform_map(dirname) -% inputs (from opt_gsa structure -% anamendo = options_gsa_.namendo; -% anamlagendo = options_gsa_.namlagendo; -% anamexo = options_gsa_.namexo; -% iload = options_gsa_.load_redform; -% pprior = options_gsa_.pprior; -% ilog = options_gsa_.logtrans_redform; -% threshold = options_gsa_.threshold_redform; -% ksstat = options_gsa_.ksstat_redform; -% alpha2 = options_gsa_.alpha2_redform; -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global M_ oo_ estim_params_ options_ bayestopt_ - -options_gsa_ = options_.opt_gsa; - -anamendo = options_gsa_.namendo; -anamlagendo = options_gsa_.namlagendo; -anamexo = options_gsa_.namexo; -iload = options_gsa_.load_redform; -pprior = options_gsa_.pprior; -ilog = options_gsa_.logtrans_redform; -threshold = options_gsa_.threshold_redform; -ksstat = options_gsa_.ksstat_redform; -alpha2 = options_gsa_.alpha2_redform; - -pnames = M_.param_names(estim_params_.param_vals(:,1),:); -if nargin==0, - dirname=''; -end - -if pprior - load([dirname,'\',M_.fname,'_prior']); - adir=[dirname '\redform_stab']; -else - load([dirname,'\',M_.fname,'_mc']); - adir=[dirname '\redform_mc']; -end -if ~exist('T') - stab_map_(dirname); -if pprior - load([dirname,'\',M_.fname,'_prior'],'T'); -else - load([dirname,'\',M_.fname,'_mc'],'T'); -end -end -if isempty(dir(adir)) - mkdir(adir) -end -adir0=pwd; -%cd(adir) - -nspred=size(T,2)-M_.exo_nbr; -x0=lpmat(istable,:); -[kn, np]=size(x0); -offset = length(bayestopt_.pshape)-np; -if options_gsa_.prior_range, - pshape=5*(ones(np,1)); - pd = [NaN(np,1) NaN(np,1) bayestopt_.lb(offset+1:end) bayestopt_.ub(offset+1:end)]; -else - pshape = bayestopt_.pshape(offset+1:end); - pd = [bayestopt_.p1(offset+1:end) bayestopt_.p2(offset+1:end) bayestopt_.p3(offset+1:end) bayestopt_.p4(offset+1:end)]; -end - -nsok = length(find(M_.lead_lag_incidence(M_.maximum_lag,:))); -clear lpmat lpmat0 egg iunstable yys -js=0; -for j=1:size(anamendo,1) - namendo=deblank(anamendo(j,:)); - iendo=strmatch(namendo,M_.endo_names(oo_.dr.order_var,:),'exact'); - ifig=0; - iplo=0; - for jx=1:size(anamexo,1) - namexo=deblank(anamexo(jx,:)); - iexo=strmatch(namexo,M_.exo_names,'exact'); - - if ~isempty(iexo), - %y0=squeeze(T(iendo,iexo+nspred,istable)); - y0=squeeze(T(iendo,iexo+nspred,:)); - if (max(y0)-min(y0))>1.e-10, - if mod(iplo,9)==0, - ifig=ifig+1; - figure('name',[namendo,' vs. shocks ',int2str(ifig)]), - iplo=0; - end - iplo=iplo+1; - js=js+1; - xdir0 = [adir,'\',namendo,'_vs_', namexo]; - if ilog==0, - if isempty(threshold) - si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namexo, xdir0); - else - iy=find( (y0>threshold(1)) & (y0=threshold(2))); - xdir = [xdir0,'_cut']; - if ~isempty(iy), - si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namexo, xdir); - end - if ~isempty(iy) & ~isempty(iyc) - delete([xdir, '\*cut*.*']) - [proba, dproba] = stab_map_1(x0, iy, iyc, 'cut',0); - indsmirnov = find(dproba>ksstat); - stab_map_1(x0, iy, iyc, 'cut',1,indsmirnov,xdir); - stab_map_2(x0(iy,:),alpha2,'cut',xdir) - stab_map_2(x0(iyc,:),alpha2,'trim',xdir) - end - end - else - [yy, xdir] = log_trans_(y0,xdir0); - silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namexo, xdir); - end - - subplot(3,3,iplo), - if ilog, - [saso, iso] = sort(-silog(:,js)); - bar([silog(iso(1:min(np,10)),js)]) - logflag='log'; - else - [saso, iso] = sort(-si(:,js)); - bar(si(iso(1:min(np,10)),js)) - logflag=''; - end - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - title([logflag,' ',namendo,' vs. ',namexo],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'\',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'\',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'\',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - close(gcf) - end - - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'\',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'\',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'\',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - close(gcf) - end - ifig=0; - iplo=0; - for je=1:size(anamlagendo,1) - namlagendo=deblank(anamlagendo(je,:)); - ilagendo=strmatch(namlagendo,M_.endo_names(oo_.dr.order_var(oo_.dr.nstatic+1:oo_.dr.nstatic+nsok),:),'exact'); - - if ~isempty(ilagendo), - %y0=squeeze(T(iendo,ilagendo,istable)); - y0=squeeze(T(iendo,ilagendo,:)); - if (max(y0)-min(y0))>1.e-10, - if mod(iplo,9)==0, - ifig=ifig+1; - figure('name',[namendo,' vs. lags ',int2str(ifig)]), - iplo=0; - end - iplo=iplo+1; - js=js+1; - xdir0 = [adir,'\',namendo,'_vs_', namlagendo]; - if ilog==0, - if isempty(threshold) - si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namlagendo, xdir0); - else - iy=find( (y0>threshold(1)) & (y0=threshold(2))); - xdir = [xdir0,'_cut']; - if ~isempty(iy) - si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namlagendo, xdir); - end - if ~isempty(iy) & ~isempty(iyc), - delete([xdir, '\*cut*.*']) - [proba, dproba] = stab_map_1(x0, iy, iyc, 'cut',0); - indsmirnov = find(dproba>ksstat); - stab_map_1(x0, iy, iyc, 'cut',1,indsmirnov,xdir); - stab_map_2(x0(iy,:),alpha2,'cut',xdir) - stab_map_2(x0(iyc,:),alpha2,'trim',xdir) - end - end - else - [yy, xdir] = log_trans_(y0,xdir0); - silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namlagendo, xdir); - end - - subplot(3,3,iplo), - if ilog, - [saso, iso] = sort(-silog(:,js)); - bar([silog(iso(1:min(np,10)),js)]) - logflag='log'; - else - [saso, iso] = sort(-si(:,js)); - bar(si(iso(1:min(np,10)),js)) - logflag=''; - end - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - title([logflag,' ',namendo,' vs. ',namlagendo,'(-1)'],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'\',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'\',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'\',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - close(gcf) - end - - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'\',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'\',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'\',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - close(gcf) - end -end - -if ilog==0, -figure, %bar(si) -% boxplot(si','whis',10,'symbol','r.') -myboxplot(si',[],'.',[],10) -xlabel(' ') -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -title('Reduced form GSA') - -saveas(gcf,[dirname,'\',M_.fname,'_redform_gsa']) -eval(['print -depsc2 ' dirname,'\',M_.fname,'_redform_gsa']); -eval(['print -dpdf ' dirname,'\',M_.fname,'_redform_gsa']); - -else -figure, %bar(silog) -% boxplot(silog','whis',10,'symbol','r.') -myboxplot(silog',[],'.',[],10) -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -xlabel(' ') -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -title('Reduced form GSA - Log-transformed elements') - -saveas(gcf,[dirname,'\',M_.fname,'_redform_gsa_log']) -eval(['print -depsc2 ' dirname,'\',M_.fname,'_redform_gsa_log']); -eval(['print -dpdf ' dirname,'\',M_.fname,'_redform_gsa_log']); - -end -function si = redform_private(x0, y0, pshape, pd, iload, pnames, namy, namx, xdir) -global bayestopt_ options_ - -opt_gsa=options_.opt_gsa; -np=size(x0,2); - if opt_gsa.prior_range, - for j=1:np, - x0(:,j)=(x0(:,j)-pd(j,3))./(pd(j,4)-pd(j,3)); - end - else - x0=priorcdf(x0,pshape, pd(:,1), pd(:,2), pd(:,3), pd(:,4)); - end - -fname=[xdir,'\map']; -if iload==0, - figure, hist(y0,30), title([namy,' vs. ', namx]) - if isempty(dir(xdir)) - mkdir(xdir) - end - saveas(gcf,[xdir,'\', namy,'_vs_', namx]) - eval(['print -depsc2 ' xdir,'\', namy,'_vs_', namx]); - eval(['print -dpdf ' xdir,'\', namy,'_vs_', namx]); - close(gcf) -% gsa_ = gsa_sdp_dyn(y0, x0, -2, [],[],[],1,fname, pnames); - nrun=length(y0); - nest=min(250,nrun); - nfit=min(1000,nrun); - gsa_ = gsa_sdp(y0(1:nest), x0(1:nest,:), 2, [],[],[],0,[fname,'_est'], pnames); - if nfit>nest, - gsa_ = gsa_sdp(y0(1:nfit), x0(1:nfit,:), -2, gsa_.nvr*nest^3/nfit^3,[],[],1,fname, pnames); - else - copyfile([fname,'_est.mat'],[fname,'.mat']) - end - figure, - plot(y0(1:nfit),[gsa_.fit y0(1:nfit)],'.'), - title([namy,' vs. ', namx,' fit']) - saveas(gcf,[xdir,'\', namy,'_vs_', namx,'_fit']) - eval(['print -depsc2 ' xdir,'\', namy,'_vs_', namx,'_fit']); - eval(['print -dpdf ' xdir,'\', namy,'_vs_', namx,'_fit']); - close(gcf) - if nfit0 & ifig, - saveas(gcf,[dirname,'\',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'\',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'\',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]); - close(gcf) - end - - iplo=0; - ifig=0; - for je=1:size(anamlagendo,1) - namlagendo=deblank(anamlagendo(je,:)); - ilagendo=strmatch(namlagendo,M_.endo_names(oo_.dr.order_var(oo_.dr.nstatic+1:oo_.dr.nstatic+nsok),:),'exact'); - - if ~isempty(ilagendo), - y0=teff(T(iendo,ilagendo,:),kn,istable); - if ~isempty(y0), - if mod(iplo,9)==0, - ifig=ifig+1; - figure('name',[namendo,' vs. lagged endogenous ',int2str(ifig)]), - iplo=0; - end - iplo=iplo+1; - js=js+1; - subplot(3,3,iplo), - [SAmeas, SAMorris] = Morris_Measure_Groups(np+nshock, [lpmat0 lpmat], y0,nliv); - SAM = squeeze(SAMorris(nshock+1:end,1)); - SA(:,js)=SAM./(max(SAM)+eps); - [saso, iso] = sort(-SA(:,js)); - bar(SA(iso(1:min(np,10)),js)) - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - - title([namendo,' vs. ',namlagendo,'(-1)'],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'\',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'\',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'\',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - close(gcf) - end - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'\',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'\',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'\',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - close(gcf) - end -end - -figure, -%bar(SA) -% boxplot(SA','whis',10,'symbol','r.') -myboxplot(SA',[],'.',[],10) -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -xlabel(' ') -ylabel('Elementary Effects') -title('Reduced form screening') - -saveas(gcf,[dirname,'\',M_.fname,'_redform_screen']) -eval(['print -depsc2 ' dirname,'\',M_.fname,'_redform_screen']); -eval(['print -dpdf ' dirname,'\',M_.fname,'_redform_screen']); - diff --git a/GSA_distrib/4.0.3/set_shocks_param.m b/GSA_distrib/4.0.3/set_shocks_param.m deleted file mode 100644 index f84247d29..000000000 --- a/GSA_distrib/4.0.3/set_shocks_param.m +++ /dev/null @@ -1,30 +0,0 @@ -function set_shocks_param(xparam1) - global estim_params_ M_ - - nvx = estim_params_.nvx; - ncx = estim_params_.ncx; - np = estim_params_.np; - Sigma_e = M_.Sigma_e; - offset = 0; - if nvx - offset = offset + nvx; - var_exo = estim_params_.var_exo; - for i=1:nvx - k = var_exo(i,1); - Sigma_e(k,k) = xparam1(i)^2; - end - end - - if ncx - offset = offset + estim_params_.nvn; - corrx = estim_params_.corrx; - for i=1:ncx - k1 = corrx(i,1); - k2 = corrx(i,2); - Sigma_e(k1,k2) = xparam1(i+offset)*sqrt(Sigma_e_(k1,k1)*Sigma_e_(k2,k2)); - Sigma_e(k2,k1) = Sigma_e_(k1,k2); - end - end - - - M_.Sigma_e = Sigma_e; \ No newline at end of file diff --git a/GSA_distrib/4.0.3/skewness.m b/GSA_distrib/4.0.3/skewness.m deleted file mode 100644 index 19ce487ab..000000000 --- a/GSA_distrib/4.0.3/skewness.m +++ /dev/null @@ -1,7 +0,0 @@ -function s=skewness(y), - -% y=stand_(y); -% s=mean(y.^3); - m2=mean((y-mean(y)).^2); - m3=mean((y-mean(y)).^3); - s=m3/m2^1.5; \ No newline at end of file diff --git a/GSA_distrib/4.0.3/smirnov.m b/GSA_distrib/4.0.3/smirnov.m deleted file mode 100644 index bc068aeb1..000000000 --- a/GSA_distrib/4.0.3/smirnov.m +++ /dev/null @@ -1,73 +0,0 @@ -function [H,prob,d] = smirnov(x1 , x2 , alpha, iflag ) -% Smirnov test for 2 distributions -% [H,prob,d] = smirnov(x1 , x2 , alpha, iflag ) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - - - -if nargin<3 - alpha = 0.05; -end -if nargin<4, - iflag=0; -end - -% empirical cdfs. -xmix= [x1;x2]; -bin = [-inf ; sort(xmix) ; inf]; - -ncount1 = histc (x1 , bin); -ncount1 = ncount1(:); -ncount2 = histc (x2 , bin); -ncount2 = ncount2(:); - -cum1 = cumsum(ncount1)./sum(ncount1); -cum1 = cum1(1:end-1); - -cum2 = cumsum(ncount2)./sum(ncount2); -cum2 = cum2(1:end-1); - -n1= length(x1); -n2= length(x2); -n = n1*n2 /(n1+n2); - -% Compute the d(n1,n2) statistics. - -if iflag==0, - d = max(abs(cum1 - cum2)); -elseif iflag==-1 - d = max(cum2 - cum1); -elseif iflag==1 - d = max(cum1 - cum2); -end -% -% Compute P-value check H0 hypothesis -% - -lam = max((sqrt(n) + 0.12 + 0.11/sqrt(n)) * d , 0); -if iflag == 0 - j = [1:101]'; - prob = 2 * sum((-1).^(j-1).*exp(-2*lam*lam*j.^2)); - - prob=max(prob,0); - prob=min(1,prob); -else - prob = exp(-2*lam*lam); -end - -H = (alpha >= prob); diff --git a/GSA_distrib/4.0.3/speed.m b/GSA_distrib/4.0.3/speed.m deleted file mode 100644 index faaa1de86..000000000 --- a/GSA_distrib/4.0.3/speed.m +++ /dev/null @@ -1,52 +0,0 @@ -function [tadj, iff] = speed(A,B,mf,p), -% [tadj, iff] = speed(A,B,mf,p), -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -nvar=length(mf); -nstate= size(A,1); -nshock = size(B,2); -nrun=size(B,3); - -iff=zeros(nvar,nshock,nrun); -tadj=iff; -disp('Computing speed of adjustement ...') -h = waitbar(0,'Speed of adjustement...'); - -for i=1:nrun, - irf=zeros(nvar,nshock); - a=squeeze(A(:,:,i)); - b=squeeze(B(:,:,i)); - IFF=inv(eye(nstate)-a)*b; - iff(:,:,i)=IFF(mf,:); - IF=IFF-b; - - t=0; - while any(any(irf<0.5)) - t=t+1; - IFT=((eye(nstate)-a^(t+1))*inv(eye(nstate)-a))*b-b; - irf=IFT(mf,:)./(IF(mf,:)+eps); - irf = irf.*(abs(IF(mf,:))>1.e-7)+(abs(IF(mf,:))<=1.e-7); - %irf=ft(mf,:); - tt=(irf>0.5).*t; - tadj(:,:,i)=((tt-tadj(:,:,i))==tt).*tt+tadj(:,:,i); - end - waitbar(i/nrun,h) -end -disp(' ') -disp('.. done !') -close(h) diff --git a/GSA_distrib/4.0.3/stab_map_.m b/GSA_distrib/4.0.3/stab_map_.m deleted file mode 100644 index 7bfa4cb15..000000000 --- a/GSA_distrib/4.0.3/stab_map_.m +++ /dev/null @@ -1,511 +0,0 @@ -function x0 = stab_map_(OutputDirectoryName) -% -% function x0 = stab_map_(OutputDirectoryName) -% -% Mapping of stability regions in the prior ranges applying -% Monte Carlo filtering techniques. -% -% INPUTS (from opt_gsa structure) -% Nsam = MC sample size -% fload = 0 to run new MC; 1 to load prevoiusly generated analysis -% alpha2 = significance level for bivariate sensitivity analysis -% [abs(corrcoef) > alpha2] -% prepSA = 1: save transition matrices for mapping reduced form -% = 0: no transition matrix saved (default) -% pprior = 1: sample from prior ranges (default): sample saved in -% _prior.mat file -% = 0: sample from posterior ranges: sample saved in -% _mc.mat file -% OUTPUT: -% x0: one parameter vector for which the model is stable. -% -% GRAPHS -% 1) Pdf's of marginal distributions under the stability (dotted -% lines) and unstability (solid lines) regions -% 2) Cumulative distributions of: -% - stable subset (dotted lines) -% - unacceptable subset (solid lines) -% 3) Bivariate plots of significant correlation patterns -% ( abs(corrcoef) > alpha2) under the stable and unacceptable subsets -% -% USES lptauSEQ, -% stab_map_1, stab_map_2 -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -%global bayestopt_ estim_params_ dr_ options_ ys_ fname_ -global bayestopt_ estim_params_ options_ oo_ M_ - -opt_gsa=options_.opt_gsa; - -Nsam = opt_gsa.Nsam; -fload = opt_gsa.load_stab; -ksstat = opt_gsa.ksstat; -alpha2 = opt_gsa.alpha2_stab; -prepSA = (opt_gsa.redform | opt_gsa.identification); -pprior = opt_gsa.pprior; -ilptau = opt_gsa.ilptau; -nliv = opt_gsa.morris_nliv; -ntra = opt_gsa.morris_ntra; - -dr_ = oo_.dr; -%if isfield(dr_,'ghx'), - ys_ = oo_.dr.ys; - nspred = dr_.nspred; %size(dr_.ghx,2); - nboth = dr_.nboth; - nfwrd = dr_.nfwrd; -%end -fname_ = M_.fname; - -np = estim_params_.np; -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; -lpmat0=[]; - -pshape = bayestopt_.pshape(nshock+1:end); -p1 = bayestopt_.p1(nshock+1:end); -p2 = bayestopt_.p2(nshock+1:end); -p3 = bayestopt_.p3(nshock+1:end); -p4 = bayestopt_.p4(nshock+1:end); - -if nargin==0, - OutputDirectoryName=''; -end - -opt=options_; - options_.periods=0; - options_.nomoments=1; - options_.irf=0; - options_.noprint=1; - options_.simul=0; -if fload==0, -% if prepSA -% T=zeros(size(dr_.ghx,1),size(dr_.ghx,2)+size(dr_.ghu,2),Nsam/2); -% end - - if isfield(dr_,'ghx'), - egg=zeros(length(dr_.eigval),Nsam); - end - yys=zeros(length(dr_.ys),Nsam); - - if opt_gsa.morris - if opt_gsa.morris == 1 - [lpmat, OutFact] = Sampling_Function_2(nliv, np+nshock, ntra, ones(np+nshock, 1), zeros(np+nshock,1), []); - lpmat = lpmat.*(nliv-1)/nliv+1/nliv/2; - Nsam=size(lpmat,1); - lpmat0 = lpmat(:,1:nshock); - lpmat = lpmat(:,nshock+1:end); - elseif opt_gsa.morris==2 - lpmat = prep_ide(Nsam,np,5); - Nsam=size(lpmat,1); - end - else - if np<52 & ilptau>0, - [lpmat] = lptauSEQ(Nsam,np); % lptau - if np>30 | ilptau==2, % scrambled lptau - for j=1:np, - lpmat(:,j)=lpmat(randperm(Nsam),j); - end - end - else ilptau==0 - %[lpmat] = rand(Nsam,np); - for j=1:np, - lpmat(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - end - - end - end - try - dummy=prior_draw_gsa(1); - catch - if pprior, - if opt_gsa.prior_range==0; - error('Some unknown prior is specified or ML estimation,: use prior_range=1 option!!'); - end - end - - end - if pprior, - for j=1:nshock, - if opt_gsa.morris~=1, - lpmat0(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - end - if opt_gsa.prior_range - lpmat0(:,j)=lpmat0(:,j).*(bayestopt_.ub(j)-bayestopt_.lb(j))+bayestopt_.lb(j); - end - end - if opt_gsa.prior_range - for j=1:np, - lpmat(:,j)=lpmat(:,j).*(bayestopt_.ub(j+nshock)-bayestopt_.lb(j+nshock))+bayestopt_.lb(j+nshock); - end - else - xx=prior_draw_gsa(0,[lpmat0 lpmat]); - lpmat0=xx(:,1:nshock); - lpmat=xx(:,nshock+1:end); - clear xx; - end - else - % for j=1:nshock, - % xparam1(j) = oo_.posterior_mode.shocks_std.(bayestopt_.name{j}); - % sd(j) = oo_.posterior_std.shocks_std.(bayestopt_.name{j}); - % lpmat0(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - % lb = max(bayestopt_.lb(j), xparam1(j)-2*sd(j)); - % ub1=xparam1(j)+(xparam1(j) - lb); % define symmetric range around the mode! - % ub = min(bayestopt_.ub(j),ub1); - % if ub30 & np<52 - % lpmat(:,j) = lpmat(randperm(Nsam),j).*(ub-lb)+lb; - % else - % lpmat(:,j) = lpmat(:,j).*(ub-lb)+lb; - % end - % end - %load([fname_,'_mode']) - eval(['load ' options_.mode_file ';']'); - d = chol(inv(hh)); - lp=randn(Nsam*2,nshock+np)*d+kron(ones(Nsam*2,1),xparam1'); - for j=1:Nsam*2, - lnprior(j) = any(lp(j,:)'<=bayestopt_.lb | lp(j,:)'>=bayestopt_.ub); - end - ireal=[1:2*Nsam]; - ireal=ireal(find(lnprior==0)); - lp=lp(ireal,:); - Nsam=min(Nsam, length(ireal)); - lpmat0=lp(1:Nsam,1:nshock); - lpmat=lp(1:Nsam,nshock+1:end); - clear lp lnprior ireal; - end - % - h = waitbar(0,'Please wait...'); - istable=[1:Nsam]; - jstab=0; - iunstable=[1:Nsam]; - iindeterm=zeros(1,Nsam); - iwrong=zeros(1,Nsam); - for j=1:Nsam, - M_.params(estim_params_.param_vals(:,1)) = lpmat(j,:)'; - %try stoch_simul([]); - try - [Tt,Rr,SteadyState,info] = dynare_resolve(bayestopt_.restrict_var_list,... - bayestopt_.restrict_columns,... - bayestopt_.restrict_aux); - - if ~exist('T') - T=zeros(size(dr_.ghx,1),size(dr_.ghx,2)+size(dr_.ghu,2),Nsam); - end - catch - if isfield(oo_.dr,'eigval'), - oo_.dr=rmfield(oo_.dr,'eigval'); - end - if isfield(oo_.dr,'ghx'), - oo_.dr=rmfield(oo_.dr,'ghx'); - end - disp('No solution could be found'), - end - dr_ = oo_.dr; - if isfield(dr_,'ghx'), - egg(:,j) = sort(dr_.eigval); - iunstable(j)=0; - if prepSA - jstab=jstab+1; - T(:,:,jstab) = [dr_.ghx dr_.ghu]; - [A,B] = ghx2transition(squeeze(T(:,:,jstab)), ... - bayestopt_.restrict_var_list, ... - bayestopt_.restrict_columns, ... - bayestopt_.restrict_aux); - end - if ~exist('nspred'), - nspred = dr_.nspred; %size(dr_.ghx,2); - nboth = dr_.nboth; - nfwrd = dr_.nfwrd; - end - else - istable(j)=0; - if isfield(dr_,'eigval') - egg(:,j) = sort(dr_.eigval); - if exist('nspred') - if any(isnan(egg(1:nspred,j))) - iwrong(j)=j; - else - if (nboth | nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium, - iindeterm(j)=j; - end - end - end - else - if exist('egg'), - egg(:,j)=ones(size(egg,1),1).*NaN; - end - iwrong(j)=j; - end - end - ys_=real(dr_.ys); - yys(:,j) = ys_; - ys_=yys(:,1); - waitbar(j/Nsam,h,['MC iteration ',int2str(j),'/',int2str(Nsam)]) - end - close(h) - if prepSA, - T=T(:,:,1:jstab); - end - istable=istable(find(istable)); % stable params - iunstable=iunstable(find(iunstable)); % unstable params - iindeterm=iindeterm(find(iindeterm)); % indeterminacy - iwrong=iwrong(find(iwrong)); % dynare could not find solution - - % % map stable samples - % istable=[1:Nsam]; - % for j=1:Nsam, - % if any(isnan(egg(1:nspred,j))) - % istable(j)=0; - % else - % if abs(egg(nspred,j))>=options_.qz_criterium; %(1-(options_.qz_criterium-1)); %1-1.e-5; - % istable(j)=0; - % %elseif (dr_.nboth | dr_.nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium; %1+1.e-5; - % elseif (nboth | nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium; %1+1.e-5; - % istable(j)=0; - % end - % end - % end - % istable=istable(find(istable)); % stable params - % - % % map unstable samples - % iunstable=[1:Nsam]; - % for j=1:Nsam, - % %if abs(egg(dr_.npred+1,j))>1+1.e-5 & abs(egg(dr_.npred,j))<1-1.e-5; - % %if (dr_.nboth | dr_.nfwrd), - % if ~any(isnan(egg(1:5,j))) - % if (nboth | nfwrd), - % if abs(egg(nspred+1,j))>options_.qz_criterium & abs(egg(nspred,j))0 & length(iunstable)ksstat); - disp('Smirnov statistics in driving acceptable behaviour') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indstab) - stab_map_1(lpmat, istable, iunstable, aname, 1, indstab, OutputDirectoryName); - end - ixun=iunstable(find(~ismember(iunstable,[iindeterm,iwrong]))); - if ~isempty(iindeterm), - [proba, dproba] = stab_map_1(lpmat, [1:Nsam], iindeterm, [aname, '_indet'],0); - indindet=find(dproba>ksstat); - disp('Smirnov statistics in driving indeterminacy') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indindet) - stab_map_1(lpmat, istable, iindeterm, [aname, '_indet'], 1, indindet, OutputDirectoryName); - end - end - - if ~isempty(ixun), - [proba, dproba] = stab_map_1(lpmat, [1:Nsam], ixun, [aname, '_unst'],0); - indunst=find(dproba>ksstat); - disp('Smirnov statistics in driving instability') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indunst) - stab_map_1(lpmat, istable, ixun, [aname, '_unst'], 1, indunst, OutputDirectoryName); - end - end - - disp(' ') - disp('Starting bivariate analysis:') - - c0=corrcoef(lpmat(istable,:)); - c00=tril(c0,-1); - - stab_map_2(lpmat(istable,:),alpha2, asname, OutputDirectoryName); - if length(iunstable)>3, - stab_map_2(lpmat(iunstable,:),alpha2, auname, OutputDirectoryName); - end - if length(iindeterm)>3, - stab_map_2(lpmat(iindeterm,:),alpha2, aindname, OutputDirectoryName); - end - if length(ixun)>3, - stab_map_2(lpmat(ixun,:),alpha2, aunstname, OutputDirectoryName); - end - - x0=0.5.*(bayestopt_.ub(1:nshock)-bayestopt_.lb(1:nshock))+bayestopt_.lb(1:nshock); - x0 = [x0; lpmat(istable(1),:)']; - if istable(end)~=Nsam - M_.params(estim_params_.param_vals(:,1)) = lpmat(istable(1),:)'; - [oo_.dr, info] = resol(oo_.steady_state,0); -% stoch_simul([]); - end -else - if length(iunstable)==0, - disp('All parameter values in the specified ranges are stable!') - x0=0.5.*(bayestopt_.ub(1:nshock)-bayestopt_.lb(1:nshock))+bayestopt_.lb(1:nshock); - x0 = [x0; lpmat(istable(1),:)']; - else - disp('All parameter values in the specified ranges are not acceptable!') - x0=[]; - end - -end - - -options_.periods=opt.periods; -if isfield(opt,'nomoments'), - options_.nomoments=opt.nomoments; -end -options_.irf=opt.irf; -options_.noprint=opt.noprint; -if isfield(opt,'simul'), - options_.simul=opt.simul; -end - - - diff --git a/GSA_distrib/4.0.3/stab_map_1.m b/GSA_distrib/4.0.3/stab_map_1.m deleted file mode 100644 index 17aeaa794..000000000 --- a/GSA_distrib/4.0.3/stab_map_1.m +++ /dev/null @@ -1,87 +0,0 @@ -function [proba, dproba] = stab_map_1(lpmat, ibehaviour, inonbehaviour, aname, iplot, ipar, dirname) -%function [proba, dproba] = stab_map_1(lpmat, ibehaviour, inonbehaviour, aname, iplot, ipar, dirname) -% -% lpmat = Monte Carlo matrix -% ibehaviour = index of behavioural runs -% inonbehaviour = index of non-behavioural runs -% aname = label of the analysis -% iplot = 1 plot cumulative distributions (default) -% iplot = 0 no plots -% ipar = index array of parameters to plot -% dirname = (OPTIONAL) path of the directory where to save -% (default: current directory) -% -% Plots: dotted lines for BEHAVIOURAL -% solid lines for NON BEHAVIOURAL -% USES smirnov -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global estim_params_ bayestopt_ M_ options_ - -if nargin<5, - iplot=1; -end -fname_ = M_.fname; -if nargin<7, - dirname='';; -end - -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; - -npar=size(lpmat,2); -ishock= npar>estim_params_.np; - -if nargin<6 | isempty(ipar), - ipar=[1:npar]; -end -nparplot=length(ipar); - -% Smirnov test for Blanchard; -for j=1:npar, - [H,P,KSSTAT] = smirnov(lpmat(ibehaviour,j),lpmat(inonbehaviour,j)); - proba(j)=P; - dproba(j)=KSSTAT; -end -if iplot - lpmat=lpmat(:,ipar); - ftit=bayestopt_.name(ipar+nshock*(1-ishock)); - -for i=1:ceil(nparplot/12), - figure('name',aname), - for j=1+12*(i-1):min(nparplot,12*i), - subplot(3,4,j-12*(i-1)) - if ~isempty(ibehaviour), - h=cumplot(lpmat(ibehaviour,j)); - set(h,'color',[0 0 0], 'linestyle',':') - end - hold on, - if ~isempty(inonbehaviour), - h=cumplot(lpmat(inonbehaviour,j)); - set(h,'color',[0 0 0]) - end - title([ftit{j},'. D-stat ', num2str(dproba(ipar(j)),2)],'interpreter','none') - end - saveas(gcf,[dirname,'\',fname_,'_',aname,'_SA_',int2str(i)]) - eval(['print -depsc2 ' dirname '\' fname_ '_' aname '_SA_' int2str(i)]); - eval(['print -dpdf ' dirname '\' fname_ '_' aname '_SA_' int2str(i)]); - if options_.nograph, close(gcf), end -end -end diff --git a/GSA_distrib/4.0.3/stab_map_2.m b/GSA_distrib/4.0.3/stab_map_2.m deleted file mode 100644 index 3941132a2..000000000 --- a/GSA_distrib/4.0.3/stab_map_2.m +++ /dev/null @@ -1,97 +0,0 @@ -%function stab_map_2(x,alpha2,istab,fnam) -function stab_map_2(x,alpha2,fnam, dirname) -% function stab_map_2(x,alpha2,fnam, dirname) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -%global bayestopt_ estim_params_ dr_ options_ ys_ fname_ -global bayestopt_ estim_params_ options_ oo_ M_ - -npar=size(x,2); -ishock= npar>estim_params_.np; -if nargin<3, - fnam=''; -end -if nargin<4, - dirname=''; -end - -ys_ = oo_.dr.ys; -dr_ = oo_.dr; -fname_ = M_.fname; -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; - -c0=corrcoef(x); -c00=tril(c0,-1); -fig_nam_=[fname_,'_',fnam,'_corr_']; - -ifig=0; -j2=0; -if ishock==0 - npar=estim_params_.np; -else - npar=estim_params_.np+nshock; -end -for j=1:npar, - i2=find(abs(c00(:,j))>alpha2); - if length(i2)>0, - for jx=1:length(i2), - j2=j2+1; - if mod(j2,12)==1, - ifig=ifig+1; - figure('name',['Correlations in the ',fnam,' sample ', num2str(ifig)]), - end - subplot(3,4,j2-(ifig-1)*12) - % bar(c0(i2,j)), - % set(gca,'xticklabel',bayestopt_.name(i2)), - % set(gca,'xtick',[1:length(i2)]) - %plot(stock_par(ixx(nfilt+1:end,i),j),stock_par(ixx(nfilt+1:end,i),i2(jx)),'.k') - %hold on, - plot(x(:,j),x(:,i2(jx)),'.') - % xlabel(deblank(estim_params_.param_names(j,:)),'interpreter','none'), - % ylabel(deblank(estim_params_.param_names(i2(jx),:)),'interpreter','none'), - if ishock, - xlabel(bayestopt_.name{j},'interpreter','none'), - ylabel(bayestopt_.name{i2(jx)},'interpreter','none'), - else - xlabel(bayestopt_.name{j+nshock},'interpreter','none'), - ylabel(bayestopt_.name{i2(jx)+nshock},'interpreter','none'), - end - title(['cc = ',num2str(c0(i2(jx),j))]) - if (mod(j2,12)==0) & j2>0, - saveas(gcf,[dirname,'\',fig_nam_,int2str(ifig)]) - eval(['print -depsc2 ' dirname '\' fig_nam_ int2str(ifig)]); - eval(['print -dpdf ' dirname '\' fig_nam_ int2str(ifig)]); - if options_.nograph, close(gcf), end - end - end - end - if (j==(npar)) & j2>0, - saveas(gcf,[dirname,'\',fig_nam_,int2str(ifig)]) - eval(['print -depsc2 ' dirname '\' fig_nam_ int2str(ifig)]); - eval(['print -dpdf ' dirname '\' fig_nam_ int2str(ifig)]); - if options_.nograph, close(gcf), end - end - -end -if ifig==0, - disp(['No correlation term >', num2str(alpha2),' found for ',fnam]) -end -%close all diff --git a/GSA_distrib/4.0.3/stand_.m b/GSA_distrib/4.0.3/stand_.m deleted file mode 100644 index 2b19a7405..000000000 --- a/GSA_distrib/4.0.3/stand_.m +++ /dev/null @@ -1,25 +0,0 @@ -function [y, meany, stdy] = stand_(x) -% STAND_ Standardise a matrix by columns -% -% [x,my,sy]=stand(y) -% -% y: Time series (column matrix) -% -% x: standardised equivalent of y -% my: Vector of mean values for each column of y -% sy: Vector of standard deviations for each column of y -% -% Copyright (c) 2006 by JRC, European Commission, United Kingdom -% Author : Marco Ratto - - -if nargin==0, - return; -end - -meany=mean(x); -stdy=std(x); -for j=1:size(x,2); - y(:,j)=(x(:,j)-meany(j))./stdy(j); -end -% end of m-file \ No newline at end of file diff --git a/GSA_distrib/4.0.3/teff.m b/GSA_distrib/4.0.3/teff.m deleted file mode 100644 index 57b1beb3e..000000000 --- a/GSA_distrib/4.0.3/teff.m +++ /dev/null @@ -1,38 +0,0 @@ -function [yt, j0, ir, ic]=teff(T,Nsam,istable) -% -% [yt, j0, ir, ic]=teff(T,Nsam,istable) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -if nargin==1, - Nsam=size(T,3); - istable = [1:Nsam]'; -end -tmax=max(T,[],3); -tmin=min(T,[],3); -[ir, ic]=(find( (tmax-tmin)>1.e-8)); -j0 = length(ir); -yt=zeros(Nsam, j0); - -for j=1:j0, - y0=squeeze(T(ir(j),ic(j),:)); - %y1=ones(size(lpmat,1),1)*NaN; - y1=ones(Nsam,1)*NaN; - y1(istable,1)=y0; - yt(:,j)=y1; -end -%clear y0 y1; diff --git a/GSA_distrib/4.0.3/th_moments.m b/GSA_distrib/4.0.3/th_moments.m deleted file mode 100644 index 1e7f3405a..000000000 --- a/GSA_distrib/4.0.3/th_moments.m +++ /dev/null @@ -1,56 +0,0 @@ -% Copyright (C) 2001 Michel Juillard -% -function [vdec, corr, autocorr, z, zz] = th_moments(dr,var_list) - global M_ oo_ options_ - - nvar = size(var_list,1); - if nvar == 0 - nvar = length(dr.order_var); - ivar = [1:nvar]'; - else - ivar=zeros(nvar,1); - for i=1:nvar - i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); - if isempty(i_tmp) - error (['One of the variable specified does not exist']) ; - else - ivar(i) = i_tmp; - end - end - end - - [gamma_y,ivar] = th_autocovariances(dr,ivar); - m = dr.ys(ivar); - - - i1 = find(abs(diag(gamma_y{1})) > 1e-12); - s2 = diag(gamma_y{1}); - sd = sqrt(s2); - - - z = [ m sd s2 ]; - mean = m; - var = gamma_y{1}; - - -%'THEORETICAL MOMENTS'; -%'MEAN','STD. DEV.','VARIANCE'); -z; - -%'VARIANCE DECOMPOSITION (in percent)'; - -vdec = 100*gamma_y{options_.ar+2}(i1,:); - -%'MATRIX OF CORRELATIONS'; - corr = gamma_y{1}(i1,i1)./(sd(i1)*sd(i1)'); - - if options_.ar > 0 -%'COEFFICIENTS OF AUTOCORRELATION'; - for i=1:options_.ar - autocorr{i} = gamma_y{i+1}; - zz(:,i) = diag(gamma_y{i+1}(i1,i1)); - end - end - - - \ No newline at end of file diff --git a/GSA_distrib/4.0.3/trank.m b/GSA_distrib/4.0.3/trank.m deleted file mode 100644 index a0c5bda99..000000000 --- a/GSA_distrib/4.0.3/trank.m +++ /dev/null @@ -1,25 +0,0 @@ -function yr = trank(y); -% yr = trank(y); -% yr is the rank transformation of y -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -[nr, nc] = size(y); -for j=1:nc, - [dum, is]=sort(y(:,j)); - yr(is,j)=[1:nr]'./nr; -end diff --git a/GSA_distrib/4.1/GSA_manual.pdf b/GSA_distrib/4.1/GSA_manual.pdf deleted file mode 100644 index 49c70a59207f99634f0d889f0bd9b91399fa2625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84760 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 | (N>MAXDIM)), - disp('LP-TAU CALL FAILED') - disp(' PRESS TO EXIT LPTAU') - pause - return -end -if ((PRVNUM+1==I) & (N<=PRVDIM)), - % - % RECURRENT GENERATION OF THE POINT - % - % - % SEARCH POSITION OF THE RIGHTMOST "1" - % IN THE BINARY REPRESENTATION OF I - % - L=0; - POS=0; - while L1e-010); - % If we deal with groups we can only estimate the new mu* - % measure since factors in the same groups can move in - % opposite direction and the definition of the standard - % Morris mu cannopt be applied. - % In the new version the elementary effect is defined with - % the absolute value. - %SAmeas(find(GroupMat(Change_factor(j,i),:)),i) = abs((Single_OutValues(j) - Single_OutValues(j+1) )/Delt); %(2/3)); - SAmeas(i,Change_factor') = abs((Single_OutValues(j) - Single_OutValues(j+1) )/Delt); - else - Change_factor(j,i) = find(Single_Sample(j+1,:)-Single_Sample(j,:)); - % If no groups --> we compute both the original and - % modified measure - if Delta(j) > 0 %=> +Delta - SAmeas(Change_factor(j,i),i) = (Single_OutValues(j+1) - Single_OutValues(j) )/Delt; %(2/3); - else %=> -Delta - SAmeas(Change_factor(j,i),i) = (Single_OutValues(j) - Single_OutValues(j+1) )/Delt; %(2/3); - end - end - end %for j=1:sizea - - end %for i=1:r - - if NumGroups ~ 0 - SAmeas = SAmeas'; - end - - % Compute Mu AbsMu and StDev - if any(any(isnan(SAmeas))) - for j=1:NumFact, - SAm = SAmeas(j,:); - SAm = SAm(find(~isnan(SAm))); - rr=length(SAm); - AbsMu(j,1) = sum(abs(SAm),2)/rr; - if NumGroups == 0 - Mu(j,1) = sum(SAm,2)/rr; - StDev(j,1) = sum((SAm - repmat(Mu(j),1,rr)).^2/(rr*(rr-1)),2).^0.5; - end - end - else - AbsMu = sum(abs(SAmeas),2)/r; - if NumGroups == 0 - Mu = sum(SAmeas,2)/r; - StDev = sum((SAmeas - repmat(Mu,1,r)).^2/(r*(r-1)),2).^0.5; - end - end - - % Define the output Matrix - if we have groups we cannot define the old - % measure mu, only mu* makes sense - if NumGroups > 0 - OutMatrix = [OutMatrix; AbsMu]; - else - OutMatrix = [OutMatrix; AbsMu, Mu, StDev]; - end -end % For Each Output diff --git a/GSA_distrib/4.1/Sampling_Function_2.m b/GSA_distrib/4.1/Sampling_Function_2.m deleted file mode 100644 index ccd3a87f9..000000000 --- a/GSA_distrib/4.1/Sampling_Function_2.m +++ /dev/null @@ -1,174 +0,0 @@ -function [Outmatrix, OutFact] = Sampling_Function_2(p, k, r, UB, LB, GroupMat) -%[Outmatrix, OutFact] = Sampling_Function_2(p, k, r, UB, LB, GroupMat) -% Inputs: k (1,1) := number of factors examined or number of groups examined. -% In case the groups are chosen the number of factors is stores in NumFact and -% sizea becomes the number of created groups. -% NumFact (1,1) := number of factors examined in the case when groups are chosen -% r (1,1) := sample size -% p (1,1) := number of intervals considered in [0, 1] -% UB(sizea,1) := Upper Bound for each factor -% LB(sizea,1) := Lower Bound for each factor -% GroupNumber(1,1) := Number of groups (eventually 0) -% GroupMat(NumFact,GroupNumber):= Matrix which describes the chosen groups. Each column represents a group and its elements -% are set to 1 in correspondence of the factors that belong to the fixed group. All -% the other elements are zero. -% Local Variables: -% sizeb (1,1) := sizea+1 -% sizec (1,1) := 1 -% randmult (sizea,1) := vector of random +1 and -1 -% perm_e(1,sizea) := vector of sizea random permutated indeces -% fact(sizea) := vector containing the factor varied within each traj -% DDo(sizea,sizea) := D* in Morris, 1991 -% A(sizeb,sizea) := Jk+1,k in Morris, 1991 -% B(sizeb,sizea) := B in Morris, 1991 -% Po(sizea,sizea) := P* in Morris, 1991 -% Bo(sizeb,sizea) := B* in Morris, 1991 -% Ao(sizeb,sizec) := Jk+1,1 in Morris, 1991 -% xo(sizec,sizea) := x* in Morris, 1991 (starting point for the trajectory) -% In(sizeb,sizea) := for each loop orientation matrix. It corresponds to a trajectory -% of k step in the parameter space and it provides a single elementary -% effect per factor -% MyInt() -% Fact(sizea,1) := for each loop vector indicating which factor or group of factors has been changed -% in each step of the trajectory -% AuxMat(sizeb,sizea) := Delta*0.5*((2*B - A) * DD0 + A) in Morris, 1991. The AuxMat is used as in Morris design -% for single factor analysis, while it constitutes an intermediate step for the group analysis. -% -% Output: Outmatrix(sizeb*r, sizea) := for the entire sample size computed In(i,j) matrices -% OutFact(sizea*r,1) := for the entire sample size computed Fact(i,1) vectors -% -% Note: B0 is constructed as in Morris design when groups are not considered. When groups are considered the routine -% follows the following steps: -% 1- Creation of P0 and DD0 matrices defined in Morris for the groups. This means that the dimensions of these -% 2 matrices are (GroupNumber,GroupNumber). -% 2- Creation of AuxMat matrix with (GroupNumber+1,GroupNumber) elements. -% 3- Definition of GroupB0 starting from AuxMat, GroupMat and P0. -% 4- The final B0 for groups is obtained as [ones(sizeb,1)*x0' + GroupB0]. The P0 permutation is present in GroupB0 -% and it's not necessary to permute the matrix (ones(sizeb,1)*x0') because it's already randomly created. -% Reference: -% A. Saltelli, K. Chan, E.M. Scott, "Sensitivity Analysis" on page 68 ss -% -% F. Campolongo, J. Cariboni, JRC - IPSC Ispra, Varese, IT -% Last Update: 15 November 2005 by J.Cariboni -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -% Parameters and initialisation of the output matrix -sizea = k; -Delta = p/(2*p-2); -%Delta = 1/3 -NumFact = sizea; -GroupNumber = size(GroupMat,2); - -if GroupNumber ~ 0; - sizea = size(GroupMat,2); -end - -sizeb = sizea + 1; -sizec = 1; -Outmatrix = []; -OutFact = []; - -% For each i generate a trajectory -for i=1:r - - % Construct DD0 - OLD VERSION - it does not need communication toolbox - % RAND(N,M) is an NXM matrix with random entries, chosen from a uniform distribution on the interval (0.0,1.0). - % Note that DD0 tells if the factor have to be increased or ddecreased - % by Delta. - randmult = ones(k,1); - v = rand(k,1); - randmult (find(v < 0.5))=-1; - randmult = repmat(randmult,1,k); - DD0 = randmult .* eye(k); - - % Construct DD0 - NEW VERSION - it needs communication toolbox - % randsrc(m) generates an m-by-m matrix, each of whose entries independently takes the value -1 with probability 1/2, - % and 1 with probability 1/2. - % DD0 = randsrc(NumFact) .* eye(NumFact); - - % Construct B (lower triangular) - B = ones(sizeb,sizea); - for j = 1:sizea - B(1:j,j)=0; - end - - % Construct A0, A - A0 = ones(sizeb,1); - A = ones(sizeb,NumFact); - - % Construct the permutation matrix P0. In each column of P0 one randomly chosen element equals 1 - % while all the others equal zero. - % P0 tells the order in which order factors are changed in each - % trajectory. P0 is created as it follows: - % 1) All the elements of P0 are set equal to zero ==> P0 = zeros (sizea, sizea); - % 2) The function randperm create a random permutation of integer 1:sizea, without repetitions ==> perm_e; - % 3) In each column of P0 the element indicated in perm_e is set equal to one. - % Note that P0 is then used reading it by rows. - P0 = zeros (sizea, sizea); - perm_e = randperm(sizea); % RANDPERM(n) is a random permutation of the integers from 1 to n. - for j = 1:sizea - P0(perm_e(j),j) = 1; - end - - % When groups are present the random permutation is done only on B. The effect is the same since - % the added part (A0*x0') is completely random. - if GroupNumber ~ 0 - B = B * (GroupMat*P0')'; - end - - % Compute AuxMat both for single factors and groups analysis. For Single factors analysis - % AuxMat is added to (A0*X0) and then permutated through P0. When groups are active AuxMat is - % used to build GroupB0. AuxMat is created considering DD0. If the element on DD0 diagonal - % is 1 then AuxMat will start with zero and add Delta. If the element on DD0 diagonal is -1 - % then DD0 will start Delta and goes to zero. - AuxMat = Delta*0.5*((2*B - A) * DD0 + A); - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % a --> Define the random vector x0 for the factors. Note that x0 takes value in the hypercube - % [0,...,1-Delta]*[0,...,1-Delta]*[0,...,1-Delta]*[0,...,1-Delta] - MyInt = repmat([0:(1/(p-1)):(1-Delta)],NumFact,1); % Construct all possible values of the factors - - % OLD VERSION - it needs communication toolbox - % w = randint(NumFact,1,[1,size(MyInt,2)]); - - % NEW VERSION - construct a version of random integers - % 1) create a vector of random integers - % 2) divide [0,1] into the needed steps - % 3) check in which interval the random numbers fall - % 4) generate the corresponding integer - v = repmat(rand(NumFact,1),1,size(MyInt,2)+1); % 1) - IntUsed = repmat([0:1/size(MyInt,2):1],NumFact,1); % 2) - DiffAuxVec = IntUsed - v; % 3) - - for ii = 1:size(DiffAuxVec,1) - w(1,ii) = max(find(DiffAuxVec(ii,:)<0)); % 4) - end - x0 = MyInt(1,w)'; % Define x0 - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % b --> Compute the matrix B*, here indicated as B0. Each row in B0 is a - % trajectory for Morris Calculations. The dimension of B0 is (Numfactors+1,Numfactors) - if GroupNumber ~ 0 - B0 = (A0*x0' + AuxMat); - else - B0 = (A0*x0' + AuxMat)*P0; - end - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % c --> Compute values in the original intervals - % B0 has values x(i,j) in [0, 1/(p -1), 2/(p -1), ... , 1]. - % To obtain values in the original intervals [LB, UB] we compute - % LB(j) + x(i,j)*(UB(j)-LB(j)) - In = repmat(LB,1,sizeb)' + B0 .* repmat((UB-LB),1,sizeb)'; - - % Create the Factor vector. Each component of this vector indicate which factor or group of factor - % has been changed in each step of the trajectory. - for j=1:sizea - Fact(1,j) = find(P0(j,:)); - end - Fact(1,sizea+1) = 0; - - Outmatrix = [Outmatrix; In]; - OutFact = [OutFact; Fact']; - -end \ No newline at end of file diff --git a/GSA_distrib/4.1/beta_inv.m b/GSA_distrib/4.1/beta_inv.m deleted file mode 100644 index d3c95836d..000000000 --- a/GSA_distrib/4.1/beta_inv.m +++ /dev/null @@ -1,38 +0,0 @@ -function x = beta_inv(p, a, b) -% PURPOSE: inverse of the cdf (quantile) of the beta(a,b) distribution -%-------------------------------------------------------------- -% USAGE: x = beta_inv(p,a,b) -% where: p = vector of probabilities -% a = beta distribution parameter, a = scalar -% b = beta distribution parameter b = scalar -% NOTE: mean [beta(a,b)] = a/(a+b), variance = ab/((a+b)*(a+b)*(a+b+1)) -%-------------------------------------------------------------- -% RETURNS: x at each element of p for the beta(a,b) distribution -%-------------------------------------------------------------- -% SEE ALSO: beta_d, beta_pdf, beta_inv, beta_rnd -%-------------------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to -% match the format of the econometrics toolbox - -if (nargin ~= 3) - error('Wrong # of arguments to beta_inv'); -end - -if any(any((a<=0)|(b<=0))) - error('beta_inv parameter a or b is nonpositive'); -end -if any(any(abs(2*p-1)>1)) - error('beta_inv: A probability should be 0<=p<=1'); -end - -x = a ./ (a+b); -dx = 1; -while any(any(abs(dx)>256*eps*max(x,1))) - dx = (betainc(x,a,b) - p) ./ beta_pdf(x,a,b); - x = x - dx; - x = x + (dx - x) / 2 .* (x<0); -end - \ No newline at end of file diff --git a/GSA_distrib/4.1/beta_pdf.m b/GSA_distrib/4.1/beta_pdf.m deleted file mode 100644 index 8412fbdce..000000000 --- a/GSA_distrib/4.1/beta_pdf.m +++ /dev/null @@ -1,32 +0,0 @@ -function pdf = beta_pdf(x, a, b) -% PURPOSE: pdf of the beta(a,b) distribution -%-------------------------------------------------------------- -% USAGE: pdf = beta_pdf(x,a,b) -% where: x = vector of components -% a = beta distribution parameter, a = scalar -% b = beta distribution parameter b = scalar -% NOTE: mean[(beta(a,b)] = a/(a+b), variance = ab/((a+b)*(a+b)*(a+b+1)) -%-------------------------------------------------------------- -% RETURNS: pdf at each element of x of the beta(a,b) distribution -%-------------------------------------------------------------- -% SEE ALSO: beta_d, beta_pdf, beta_inv, beta_rnd -%-------------------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to -% match the format of the econometrics toolbox - - -if (nargin ~=3) - error('Wrong # of arguments to beta_pdf'); -end - -if any(any((a<=0)|(b<=0))) - error('Parameter a or b is nonpositive'); -end - -I = find((x<0)|(x>1)); - -pdf = x.^(a-1) .* (1-x).^(b-1) ./ beta(a,b); -pdf(I) = 0*I; diff --git a/GSA_distrib/4.1/cumplot.m b/GSA_distrib/4.1/cumplot.m deleted file mode 100644 index a700d3784..000000000 --- a/GSA_distrib/4.1/cumplot.m +++ /dev/null @@ -1,14 +0,0 @@ -function h = cumplot(x); -%function h =cumplot(x) -% Copyright (C) 2005 Marco Ratto - - -n=length(x); -x=[-inf; sort(x); Inf]; -y=[0:n n]./n; -h0 = stairs(x,y); -grid on, - -if nargout, - h=h0; -end diff --git a/GSA_distrib/4.1/dat_fil_.m b/GSA_distrib/4.1/dat_fil_.m deleted file mode 100644 index 0b3ac8f8e..000000000 --- a/GSA_distrib/4.1/dat_fil_.m +++ /dev/null @@ -1,30 +0,0 @@ -function c = dat_fil_(data_file); -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -try - eval(data_file); -catch - load(data_file); -end -clear data_file; - -a=who; - -for j=1:length(a) - eval(['c.',a{j},'=',a{j},';']); -end \ No newline at end of file diff --git a/GSA_distrib/4.1/dynare_MC.m b/GSA_distrib/4.1/dynare_MC.m deleted file mode 100644 index 05c83da2e..000000000 --- a/GSA_distrib/4.1/dynare_MC.m +++ /dev/null @@ -1,149 +0,0 @@ -function dynare_MC(var_list_,OutDir) -% -% Adapted by M. Ratto from dynare_estimation.m and posteriorsmoother.m -% (dynare_estimation.m and posteriorsmoother.m are part of DYNARE, -% copyright M. Juillard) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global M_ options_ oo_ estim_params_ -global bayestopt_ - -% if options_.filtered_vars ~= 0 & options_.filter_step_ahead == 0 -% options_.filter_step_ahead = 1; -% end -% if options_.filter_step_ahead ~= 0 -% options_.nk = max(options_.filter_step_ahead); -% else -% options_.nk = 0; -% end -% -options_.filter_step_ahead=1; -options_.nk = 1; - - - -nvx = estim_params_.nvx; -nvn = estim_params_.nvn; -ncx = estim_params_.ncx; -ncn = estim_params_.ncn; -np = estim_params_.np ; -npar = nvx+nvn+ncx+ncn+np; - -if isempty(options_.datafile) - error('ESTIMATION: datafile option is missing') -end - -if isempty(options_.varobs) - error('ESTIMATION: VAROBS is missing') -end - -%% Read and demean data -rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range); - -options_ = set_default_option(options_,'nobs',size(rawdata,1)-options_.first_obs+1); -gend = options_.nobs; -n_varobs = size(options_.varobs,1); - -rawdata = rawdata(options_.first_obs:options_.first_obs+gend-1,:); -if options_.loglinear == 1 & ~options_.logdata - rawdata = log(rawdata); -end -if options_.prefilter == 1 - bayestopt_.mean_varobs = mean(rawdata,1); - data = transpose(rawdata-ones(gend,1)*bayestopt_.mean_varobs); -else - data = transpose(rawdata); -end -[data_index,number_of_observations,no_more_missing_observations] = describe_missing_data(data,gend,n_varobs); - -if ~isreal(rawdata) - error(['There are complex values in the data. Probably a wrong' ... - ' transformation']) -end - -offset = npar-np; -fname_=M_.fname; - -options_ = set_default_option(options_,'opt_gsa',1); -options_gsa_ = options_.opt_gsa; - -if options_gsa_.pprior, - namfile=[fname_,'_prior']; -else - namfile=[fname_,'_mc']; -end -load([OutDir,'/',namfile],'lpmat', 'lpmat0', 'istable') -% load(options_.mode_file) -%% -%% -%% -x=[lpmat0(istable,:) lpmat(istable,:)]; -clear lpmat lpmat0 istable %iunstable egg yys T -B = size(x,1); -[atT,innov,measurement_error,filtered_state_vector,ys,trend_coeff, aK] = DsgeSmoother(x(1,:)',gend,data,{},0); -n1=size(atT,1); - -nfil=B/40; -stock_smooth = zeros(M_.endo_nbr,gend,40); -stock_filter = zeros(M_.endo_nbr,gend+1,40); -stock_ys = zeros(40, M_.endo_nbr); -logpo2=zeros(B,1); -%% -h = waitbar(0,'MC smoother ...'); -delete([OutDir,'/',namfile,'_*.mat']) -ib=0; -ifil=0; -opt_gsa=options_.opt_gsa; - -for b=1:B - ib=ib+1; - deep = x(b,:)'; - set_all_parameters(deep); - dr = resol(oo_.steady_state,0); - %deep(1:offset) = xparam1(1:offset); - logpo2(b,1) = DsgeLikelihood(deep,gend,data,data_index,number_of_observations,no_more_missing_observations); - if opt_gsa.lik_only==0, - [atT,innov,measurement_error,filtered_state_vector,ys,trend_coeff, aK] = DsgeSmoother(deep,gend,data,data_index,0); - stock_smooth(:,:,ib)=atT(1:M_.endo_nbr,:); -% stock_filter(:,:,ib)=filtered_state_vector(1:M_.endo_nbr,:); - stock_filter(:,:,ib)=aK(1,1:M_.endo_nbr,:); - stock_ys(ib,:)=ys'; - if ib==40, - ib=0; - ifil=ifil+1; - save([OutDir,'/',namfile,'_',num2str(ifil)],'stock_smooth','stock_filter','stock_ys') - stock_smooth = zeros(M_.endo_nbr,gend,40); - stock_filter = zeros(M_.endo_nbr,gend+1,40); - stock_ys = zeros(40, M_.endo_nbr); - end - end - waitbar(b/B,h,['MC smoother ...',num2str(b),'/',num2str(B)]); -end -close(h) -if opt_gsa.lik_only==0, -if ib>0, - ifil=ifil+1; - stock_smooth = stock_smooth(:,:,1:ib); - stock_filter = stock_filter(:,:,1:ib); - stock_ys = stock_ys(1:ib,:); - save([OutDir,'/',namfile,'_',num2str(ifil)],'stock_smooth','stock_filter','stock_ys') -end -end -stock_gend=gend; -stock_data=data; -save([OutDir,'/',namfile],'x','logpo2','stock_gend','stock_data','-append') diff --git a/GSA_distrib/4.1/fdjac.m b/GSA_distrib/4.1/fdjac.m deleted file mode 100644 index 2ff746531..000000000 --- a/GSA_distrib/4.1/fdjac.m +++ /dev/null @@ -1,37 +0,0 @@ -% FDJAC Computes two-sided finite difference Jacobian -% USAGE -% fjac = fdjac(f,x,P1,P2,...) -% INPUTS -% f : name of function of form fval = f(x) -% x : evaluation point -% P1,P2,... : additional arguments for f (optional) -% OUTPUT -% fjac : finite differnce Jacobian -% -% USER OPTIONS (SET WITH OPSET) -% tol : a factor used in setting the step size -% increase if f is inaccurately computed - -% Copyright (c) 1997-2002, Paul L. Fackler & Mario J. Miranda -% paul_fackler@ncsu.edu, miranda.4@osu.edu - -function fjac = fdjac(f,x,varargin) - -tol = optget(mfilename,'tol',eps.^(1/3)); - -h = tol.*max(abs(x),1); -xh1=x+h; xh0=x-h; -h=xh1-xh0; -for j=1:length(x); - xx = x; - xx(j) = xh1(j); f1=feval(f,xx,varargin{:}); - xx(j) = xh0(j); f0=feval(f,xx,varargin{:}); - fjac(:,j) = (f1-f0)/h(j); -% v = (f1-f0); -% k = find(abs(v) < 1e-8); -% v(k) = 0; -% -% fjac(:,j) = v/h(j); -end - -feval(f,x,varargin{:}); \ No newline at end of file diff --git a/GSA_distrib/4.1/filt_mc_.m b/GSA_distrib/4.1/filt_mc_.m deleted file mode 100644 index 45c1caf60..000000000 --- a/GSA_distrib/4.1/filt_mc_.m +++ /dev/null @@ -1,708 +0,0 @@ -function [rmse_MC, ixx] = filt_mc_(OutDir) -% function [rmse_MC, ixx] = filt_mc_(OutDir) -% copyright Marco Ratto 2006 -% inputs (from opt_gsa structure) -% vvarvecm = options_gsa_.var_rmse; -% loadSA = options_gsa_.load_rmse; -% pfilt = options_gsa_.pfilt_rmse; -% alpha = options_gsa_.alpha_rmse; -% alpha2 = options_gsa_.alpha2_rmse; -% istart = options_gsa_.istart_rmse; -% alphaPC = 0.5; -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global bayestopt_ estim_params_ M_ options_ oo_ - -options_gsa_=options_.opt_gsa; -vvarvecm = options_gsa_.var_rmse; -loadSA = options_gsa_.load_rmse; -pfilt = options_gsa_.pfilt_rmse; -alpha = options_gsa_.alpha_rmse; -alpha2 = options_gsa_.alpha2_rmse; -istart = options_gsa_.istart_rmse; -alphaPC = 0.5; - -fname_ = M_.fname; -lgy_ = M_.endo_names; -dr_ = oo_.dr; - -disp(' ') -disp(' ') -disp('Starting sensitivity analysis') -disp('for the fit of EACH observed series ...') -disp(' ') -disp('Deleting old SA figures...') -a=dir([OutDir,'/*.*']); -tmp1='0'; -if options_.opt_gsa.ppost, - tmp=['_rmse_post']; -else - if options_.opt_gsa.pprior - tmp=['_rmse_prior']; - else - tmp=['_rmse_mc']; - end - if options_gsa_.lik_only, - tmp1 = [tmp,'_post_SA']; - tmp = [tmp,'_lik_SA']; - end -end -for j=1:length(a), - if strmatch([fname_,tmp],a(j).name), - disp(a(j).name) - delete([OutDir,'/',a(j).name]) - end, - if strmatch([fname_,tmp1],a(j).name), - disp(a(j).name) - delete([OutDir,'/',a(j).name]) - end, -end -disp('done !') - - -nshock=estim_params_.nvx + estim_params_.nvn + estim_params_.ncx + estim_params_.ncn; -npar=estim_params_.np; -if ~isempty(options_.mode_file), - load(options_.mode_file,'xparam1'), -end -if options_.opt_gsa.ppost, - c=load([fname_,'_mean'],'xparam1'); - xparam1_mean=c.xparam1; - clear c -elseif ~isempty(options_.mode_file) & ~isempty(ls([fname_,'_mean.mat'])) - c=load([fname_,'_mean'],'xparam1'); - xparam1_mean=c.xparam1; - clear c -end - -if options_.opt_gsa.ppost, - fnamtmp=[fname_,'_post']; - DirectoryName = CheckPath('metropolis'); -else - if options_.opt_gsa.pprior - fnamtmp=[fname_,'_prior']; - else - fnamtmp=[fname_,'_mc']; - end -end -if ~loadSA, - if exist('xparam1','var') - set_all_parameters(xparam1); - steady_; - ys_mode=oo_.steady_state; - end - if exist('xparam1_mean','var') - set_all_parameters(xparam1_mean); - steady_; - ys_mean=oo_.steady_state; - end -% eval(options_.datafile) - obs = dat_fil_(options_.datafile); - if ~options_.opt_gsa.ppost - load([OutDir,'/',fnamtmp],'x','logpo2','stock_gend','stock_data'); - logpo2=-logpo2; - else - %load([DirectoryName '/' M_.fname '_data.mat']); - [stock_gend, stock_data] = read_data; - filfilt = dir([DirectoryName '/' M_.fname '_filter_step_ahead*.mat']); - filparam = dir([DirectoryName '/' M_.fname '_param*.mat']); - x=[]; - logpo2=[]; - sto_ys=[]; - for j=1:length(filparam), - %load([DirectoryName '/' M_.fname '_param',int2str(j),'.mat']); - if isempty(strmatch([M_.fname '_param_irf'],filparam(j).name)) - load([DirectoryName '/' filparam(j).name]); - x=[x; stock]; - logpo2=[logpo2; stock_logpo]; - sto_ys=[sto_ys; stock_ys]; - clear stock stock_logpo stock_ys; - end - end - end - nruns=size(x,1); - nfilt=floor(pfilt*nruns); - if options_.opt_gsa.ppost | (options_.opt_gsa.ppost==0 & options_.opt_gsa.lik_only==0) - disp(' ') - disp('Computing RMSE''s...') - fobs = options_.first_obs; - nobs=options_.nobs; - for i=1:size(vvarvecm,1), - vj=deblank(vvarvecm(i,:)); - eval(['vobs =obs.',vj,'(fobs:fobs-1+nobs);']) - if options_.prefilter == 1 - %eval([vj,'=',vj,'-bayestopt_.mean_varobs(i);']) - %eval([vj,'=',vj,'-mean(',vj,',1);']) - vobs = vobs-mean(vobs,1); - end - - jxj = strmatch(vj,lgy_(dr_.order_var,:),'exact'); - js = strmatch(vj,lgy_,'exact'); - if exist('xparam1','var') -% if isfield(oo_,'FilteredVariables') -% eval(['rmse_mode(i) = sqrt(mean((vobs(istart:end)-oo_.steady_state(js)-oo_.FilteredVariables.',vj,'(istart:end-1)).^2));']) -% else - [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK] = DsgeSmoother(xparam1,stock_gend,stock_data,{},0); - y0 = squeeze(aK(1,jxj,:)) + ... - kron(ys_mode(js,:),ones(size(aK,3),1)); -% y0 = ahat(jxj,:)' + ... -% kron(ys_mode(js,:),ones(size(ahat,2),1)); - rmse_mode(i) = sqrt(mean((vobs(istart:end)-y0(istart:end-1)).^2)); -% end - end - y0=zeros(nobs+1,nruns); - if options_.opt_gsa.ppost - %y0=zeros(nobs+max(options_.filter_step_ahead),nruns); - nbb=0; - for j=1:length(filfilt), - load([DirectoryName '/' M_.fname '_filter_step_ahead',num2str(j),'.mat']); - nb = size(stock,4); -% y0(:,nbb+1:nbb+nb)=squeeze(stock(1,js,:,:)) + ... -% kron(sto_ys(nbb+1:nbb+nb,js)',ones(size(stock,3),1)); - y0(:,nbb+1:nbb+nb)=squeeze(stock(1,js,1:nobs+1,:)) + ... - kron(sto_ys(nbb+1:nbb+nb,js)',ones(nobs+1,1)); - %y0(:,:,size(y0,3):size(y0,3)+size(stock,3))=stock; - nbb=nbb+nb; - clear stock; - end - else - filfilt=dir([OutDir,'/',fnamtmp,'_*.mat']); - nbb=0; - for j=1:size(filfilt,1), - load([OutDir,'/',fnamtmp,'_',num2str(j),'.mat'],'stock_filter','stock_ys'); - nb = size(stock_filter,3); - y0(:,nbb+1:nbb+nb) = squeeze(stock_filter(jxj,:,:)) + ... - kron(stock_ys(:,js)',ones(nobs+1,1)); - %y0(:,:,size(y0,3):size(y0,3)+size(stock,3))=stock; - nbb=nbb+nb; - clear stock_filter; - end - -% y0 = squeeze(stock_filter(:,jxj,:)) + ... -% kron(stock_ys(js,:),ones(size(stock_filter,1),1)); - end - y0M=mean(y0,2); - for j=1:nruns, - rmse_MC(j,i) = sqrt(mean((vobs(istart:end)-y0(istart:end-1,j)).^2)); - end - if exist('xparam1_mean','var') - %eval(['rmse_pmean(i) = sqrt(mean((',vj,'(fobs-1+istart:fobs-1+nobs)-y0M(istart:end-1)).^2));']) - [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK] = DsgeSmoother(xparam1_mean,stock_gend,stock_data,{},0); - y0 = squeeze(aK(1,jxj,:)) + ... - kron(ys_mean(js,:),ones(size(aK,3),1)); -% y0 = ahat(jxj,:)' + ... -% kron(ys_mean(js,:),ones(size(ahat,2),1)); - rmse_pmean(i) = sqrt(mean((vobs(istart:end)-y0(istart:end-1)).^2)); - end - end - clear stock_filter; - end - for j=1:nruns, - lnprior(j,1) = priordens(x(j,:)',bayestopt_.pshape,bayestopt_.p1,bayestopt_.p2,bayestopt_.p3,bayestopt_.p4); - end - likelihood=logpo2(:)-lnprior(:); - disp('... done!') - - if options_.opt_gsa.ppost - save([OutDir,'/',fnamtmp], 'x', 'logpo2', 'likelihood', 'rmse_MC', 'rmse_mode','rmse_pmean') - else - if options_.opt_gsa.lik_only - save([OutDir,'/',fnamtmp], 'likelihood', '-append') - else - save([OutDir,'/',fnamtmp], 'likelihood', 'rmse_MC','-append') - if exist('xparam1_mean','var') - save([OutDir,'/',fnamtmp], 'rmse_pmean','-append') - end - if exist('xparam1','var') - save([OutDir,'/',fnamtmp], 'rmse_mode','-append') - end - end - end -else - if options_.opt_gsa.lik_only & options_.opt_gsa.ppost==0 - load([OutDir,'/',fnamtmp],'x','logpo2','likelihood'); - else - load([OutDir,'/',fnamtmp],'x','logpo2','likelihood','rmse_MC','rmse_mode','rmse_pmean'); - end - lnprior=logpo2(:)-likelihood(:); - nruns=size(x,1); - nfilt=floor(pfilt*nruns); -end -% smirnov tests -nfilt0=nfilt*ones(size(vvarvecm,1),1); -logpo2=logpo2(:); -if ~options_.opt_gsa.ppost - [dum, ipost]=sort(-logpo2); - [dum, ilik]=sort(-likelihood); -end -if ~options_.opt_gsa.ppost & options_.opt_gsa.lik_only - if options_.opt_gsa.pprior - anam='rmse_prior_post'; - else - anam='rmse_mc_post'; - end - stab_map_1(x, ipost(1:nfilt), ipost(nfilt+1:end), anam, 1,[],OutDir); - stab_map_2(x(ipost(1:nfilt),:),alpha2,anam, OutDir); - if options_.opt_gsa.pprior - anam='rmse_prior_lik'; - else - anam='rmse_mc_lik'; - end - stab_map_1(x, ilik(1:nfilt), ilik(nfilt+1:end), anam, 1,[],OutDir); - stab_map_2(x(ilik(1:nfilt),:),alpha2,anam, OutDir); -else - for i=1:size(vvarvecm,1), - [dum, ixx(:,i)]=sort(rmse_MC(:,i)); - if options_.opt_gsa.ppost, - %nfilt0(i)=length(find(rmse_MC(:,i)0.0001 ); -vvarvecm=vvarvecm(ivar,:); -rmse_MC=rmse_MC(:,ivar); - -disp(' ') -% if options_.opt_gsa.ppost==0 & options_.opt_gsa.pprior, - disp(['Sample filtered the ',num2str(pfilt*100),'% best RMSE''s for each observed series ...' ]) -% else -% disp(['Sample filtered the best RMSE''s smaller than RMSE at the posterior mean ...' ]) -% end -% figure, boxplot(rmse_MC) -% set(gca,'xticklabel',vvarvecm) -% saveas(gcf,[fname_,'_SA_RMSE']) - -disp(' ') -disp(' ') -disp('RMSE ranges after filtering:') -if options_.opt_gsa.ppost==0 & options_.opt_gsa.pprior, - disp([' best ',num2str(pfilt*100),'% filtered remaining 90%']) - disp([' min max min max posterior mode']) -else - disp([' best filtered remaining ']) - disp([' min max min max posterior mean']) -end -for j=1:size(vvarvecm,1), - disp([vvarvecm(j,:), sprintf('%15.5g',[min(rmse_MC(ixx(1:nfilt0(j),j),j)) ... - max(rmse_MC(ixx(1:nfilt0(j),j),j)) ... - min(rmse_MC(ixx(nfilt0(j)+1:end,j),j)) ... - max(rmse_MC(ixx(nfilt0(j)+1:end,j),j)) ... - rmse_txt(j)])]) - % disp([vvarvecm(j,:), sprintf('%15.5g',[min(logpo2(ixx(1:nfilt,j))) ... - % max(logpo2(ixx(1:nfilt,j))) ... - % min(logpo2(ixx(nfilt+1:end,j))) ... - % max(logpo2(ixx(nfilt+1:end,j)))])]) -end - -SP=zeros(npar+nshock,size(vvarvecm,1)); -for j=1:size(vvarvecm,1), - ns=find(PP(:,j)1),:); -snam=param_names(find(nsp>0),:); -% snam0=bayestopt_.name(find(nsp==0)); -% snam1=bayestopt_.name(find(nsp==1)); -% snam2=bayestopt_.name(find(nsp>1)); -% snam=bayestopt_.name(find(nsp>0)); -nsnam=(find(nsp>1)); - -disp(' ') -disp(' ') -disp('These parameters do not affect significantly the fit of ANY observed series:') -disp(snam0) -disp(' ') -disp('These parameters affect ONE single observed series:') -disp(snam1) -disp(' ') -disp('These parameters affect MORE THAN ONE observed series: trade off exists!') -disp(snam2) - - -%pnam=bayestopt_.name(end-estim_params_.np+1:end); -pnam=bayestopt_.name; - -% plot trade-offs -a00=jet(size(vvarvecm,1)); -for ix=1:ceil(length(nsnam)/5), - figure, - for j=1+5*(ix-1):min(size(snam2,1),5*ix), - subplot(2,3,j-5*(ix-1)) - %h0=cumplot(x(:,nsnam(j)+nshock)); - h0=cumplot(x(:,nsnam(j))); - set(h0,'color',[0 0 0]) - hold on, - np=find(SP(nsnam(j),:)); - %a0=jet(nsp(nsnam(j))); - a0=a00(np,:); - for i=1:nsp(nsnam(j)), %size(vvarvecm,1), - %h0=cumplot(x(ixx(1:nfilt,np(i)),nsnam(j)+nshock)); - h0=cumplot(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j))); - set(h0,'color',a0(i,:)) - end - ydum=get(gca,'ylim'); - %xdum=xparam1(nshock+nsnam(j)); - if exist('xparam1') - xdum=xparam1(nsnam(j)); - h1=plot([xdum xdum],ydum); - set(h1,'color',[0.85 0.85 0.85],'linewidth',2) - end - xlabel('') - title([pnam{nsnam(j)}],'interpreter','none') - end - %subplot(3,2,6) - h0=legend(str2mat('base',vvarvecm(np,:)),0); - set(h0,'fontsize',6,'position',[0.7 0.1 0.2 0.3],'interpreter','none') - %h0=legend({'base',vnam{np}}',0); - %set(findobj(get(h0,'children'),'type','text'),'interpreter','none') - if options_.opt_gsa.ppost - saveas(gcf,[OutDir,'/',fname_,'_rmse_post_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_post_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_post_' int2str(ix)]); - else - if options_.opt_gsa.pprior - saveas(gcf,[OutDir,'/',fname_,'_rmse_prior_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_prior_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_prior_' int2str(ix)]); - else - saveas(gcf,[OutDir,'/',fname_,'_rmse_mc_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_mc_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_mc_' int2str(ix)]); - end - end -end -close all - -for j=1:size(SP,2), - nsx(j)=length(find(SP(:,j))); -end - -number_of_grid_points = 2^9; % 2^9 = 512 !... Must be a power of two. -bandwidth = 0; % Rule of thumb optimal bandwidth parameter. -kernel_function = 'gaussian'; % Gaussian kernel for Fast Fourrier Transform approximaton. -%kernel_function = 'uniform'; % Gaussian kernel for Fast Fourrier Transform approximaton. - -for ix=1:ceil(length(nsnam)/5), - figure, - for j=1+5*(ix-1):min(size(snam2,1),5*ix), - subplot(2,3,j-5*(ix-1)) - optimal_bandwidth = mh_optimal_bandwidth(x(:,nsnam(j)),size(x,1),bandwidth,kernel_function); - [x1,f1] = kernel_density_estimate(x(:,nsnam(j)),number_of_grid_points,... - size(x,1),optimal_bandwidth,kernel_function); - h0 = plot(x1, f1,'k'); - hold on, - np=find(SP(nsnam(j),:)); - %a0=jet(nsp(nsnam(j))); - a0=a00(np,:); - for i=1:nsp(nsnam(j)), %size(vvarvecm,1), - optimal_bandwidth = mh_optimal_bandwidth(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)),nfilt,bandwidth,kernel_function); - [x1,f1] = kernel_density_estimate(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)),number_of_grid_points,... - nfilt, optimal_bandwidth,kernel_function); - h0 = plot(x1, f1); - set(h0,'color',a0(i,:)) - end - ydum=get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]); - if exist('xparam1') - %xdum=xparam1(nshock+nsnam(j)); - xdum=xparam1(nsnam(j)); - h1=plot([xdum xdum],[0 ydum(2)]); - set(h1,'color',[0.85 0.85 0.85],'linewidth',2) - end - xlabel('') - title([pnam{nsnam(j)}],'interpreter','none') - end - h0=legend(str2mat('base',vvarvecm(np,:)),0); - set(h0,'fontsize',6,'position',[0.7 0.1 0.2 0.3],'interpreter','none') - %h0=legend({'base',vnam{np}}',0); - %set(findobj(get(h0,'children'),'type','text'),'interpreter','none') - if options_.opt_gsa.ppost - saveas(gcf,[OutDir,'/',fname_,'_rmse_post_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_post_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_post_dens_' int2str(ix)]); - else - if options_.opt_gsa.pprior - saveas(gcf,[OutDir,'/',fname_,'_rmse_prior_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_prior_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_prior_dens_' int2str(ix)]); - else - saveas(gcf,[OutDir,'/',fname_,'_rmse_mc_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_mc_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_mc_dens_' int2str(ix)]); - end - end -end -close all - -% for j=1:size(SP,2), -% nfig=0; -% np=find(SP(:,j)); -% for i=1:nsx(j), %size(vvarvecm,1), -% if mod(i,12)==1, -% nfig=nfig+1; -% %figure('name',['Sensitivity of fit of ',vnam{j}]), -% figure('name',['Sensitivity of fit of ',deblank(vvarvecm(j,:)),' ',num2str(nfig)]), -% end -% -% subplot(3,4,i-12*(nfig-1)) -% optimal_bandwidth = mh_optimal_bandwidth(x(ixx(1:nfilt,j),np(i)),nfilt,bandwidth,kernel_function); -% [x1,f1] = kernel_density_estimate(x(ixx(1:nfilt,j),np(i)),number_of_grid_points,... -% nfilt, optimal_bandwidth,kernel_function); -% plot(x1, f1,':k','linewidth',2) -% optimal_bandwidth = mh_optimal_bandwidth(x(ixx(nfilt+1:end,j),np(i)),nruns-nfilt,bandwidth,kernel_function); -% [x1,f1] = kernel_density_estimate(x(ixx(nfilt+1:end,j),np(i)),number_of_grid_points,... -% nruns-nfilt,optimal_bandwidth,kernel_function); -% hold on, plot(x1, f1,'k','linewidth',2) -% ydum=get(gca,'ylim'); -% %xdum=xparam1(nshock+np(i)); -% xdum=xparam1(np(i)); -% h1=plot([xdum xdum],ydum); -% set(h1,'color',[0.85 0.85 0.85],'linewidth',2) -% %xdum1=mean(x(ixx(1:nfilt,j),np(i)+nshock)); -% xdum1=mean(x(ixx(1:nfilt,j),np(i))); -% h2=plot([xdum1 xdum1],ydum); -% set(h2,'color',[0 1 0],'linewidth',2) -% % h0=cumplot(x(nfilt+1:end,np(i)+nshock)); -% % set(h0,'color',[1 1 1]) -% % hold on, -% % h0=cumplot(x(ixx(1:nfilt,j),np(i)+nshock)); -% % set(h0,'linestyle',':','color',[1 1 1]) -% %title([pnam{np(i)}]) -% title([pnam{np(i)},'. K-S prob ', num2str(PP(np(i),j))],'interpreter','none') -% xlabel('') -% if mod(i,12)==0 | i==nsx(j), -% saveas(gcf,[fname_,'_rmse_',deblank(vvarvecm(j,:)),'_',int2str(nfig)]) -% close(gcf) -% end -% end -% end - - -disp(' ') -disp(' ') -disp('Sensitivity table (significance and direction):') -vav=char(zeros(1, size(param_names,2)+3 )); -ibl = 12-size(vvarvecm,2); -for j=1:size(vvarvecm,1), - vav = [vav, char(zeros(1,ibl)),vvarvecm(j,:)]; -end -disp(vav) -for j=1:npar+nshock, %estim_params_.np, - %disp([param_names(j,:), sprintf('%8.5g',SP(j,:))]) - disp([param_names(j,:),' ', sprintf('%12.3g',PP(j,:))]) - disp([char(zeros(1, size(param_names,2)+3 )),sprintf(' (%6g)',SS(j,:))]) -end - - -disp(' ') -disp(' ') -disp('Starting bivariate analysis:') - -for i=1:size(vvarvecm,1) - if options_.opt_gsa.ppost - fnam = ['rmse_post_',deblank(vvarvecm(i,:))]; - else - if options_.opt_gsa.pprior - fnam = ['rmse_prior_',deblank(vvarvecm(i,:))]; - else - fnam = ['rmse_mc_',deblank(vvarvecm(i,:))]; - end - end - stab_map_2(x(ixx(1:nfilt0(i),i),:),alpha2,fnam, OutDir); - - % [pc,latent,explained] = pcacov(c0); - % %figure, bar([explained cumsum(explained)]) - % ifig=0; - % j2=0; - % for j=1:npar+nshock, - % i2=find(abs(pc(:,j))>alphaPC); - % if ~isempty(i2), - % j2=j2+1; - % if mod(j2,12)==1, - % ifig=ifig+1; - % figure('name',['PCA of the filtered sample ',deblank(vvarvecm(i,:)),' ',num2str(ifig)]), - % end - % subplot(3,4,j2-(ifig-1)*12) - % bar(pc(i2,j)), - % set(gca,'xticklabel',bayestopt_.name(i2)), - % set(gca,'xtick',[1:length(i2)]) - % title(['PC ',num2str(j),'. Explained ',num2str(explained(j)),'%']) - % end - % if (mod(j2,12)==0 | j==(npar+nshock)) & j2, - % saveas(gcf,[fname_,'_SA_PCA_',deblank(vvarvecm(i,:)),'_',int2str(ifig)]) - % end - % end - % close all -end - -end \ No newline at end of file diff --git a/GSA_distrib/4.1/gamm_cdf.m b/GSA_distrib/4.1/gamm_cdf.m deleted file mode 100644 index a11d0962a..000000000 --- a/GSA_distrib/4.1/gamm_cdf.m +++ /dev/null @@ -1,27 +0,0 @@ -function cdf = gamm_cdf (x, a) -% PURPOSE: returns the cdf at x of the gamma(a) distribution -%--------------------------------------------------- -% USAGE: cdf = gamm_cdf(x,a) -% where: x = a vector -% a = a scalar gamma(a) -%--------------------------------------------------- -% RETURNS: -% a vector of cdf at each element of x of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_d, gamm_pdf, gamm_rnd, gamm_inv -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg - -if nargin ~= 2 -error('Wrong # of arguments to gamm_cdf'); -end; - -if any(any(a<=0)) - error('gamm_cdf: parameter a is wrong') -end - -cdf = gammainc(x,a); -I0 = find(x<0); -cdf(I0) = zeros(size(I0)); diff --git a/GSA_distrib/4.1/gamm_inv.m b/GSA_distrib/4.1/gamm_inv.m deleted file mode 100644 index 3bede95ba..000000000 --- a/GSA_distrib/4.1/gamm_inv.m +++ /dev/null @@ -1,50 +0,0 @@ -function x = gamm_inv(p,a,b) -% PURPOSE: returns the inverse of the cdf at p of the gamma(a,b) distribution -%--------------------------------------------------- -% USAGE: x = gamm_inv(p,a) -% where: p = a vector of probabilities -% a = a scalar parameter gamma(a) -% b = scaling factor for gamma -%--------------------------------------------------- -% RETURNS: -% a vector x of the quantile at each element of p of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_d, gamm_pdf, gamm_rnd, gamm_cdf -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to fit the format -% of the econometrics toolbox - - if (nargin < 2 | isempty(b)) - b=1; - end - - if (nargin > 3) - error('Wrong # of arguments to gamm_inv'); - end - - -if any(any(abs(2*p-1)>1)) - error('gamm_inv: a probability should be 0<=p<=1') -end -if any(any(a<=0)) - error('gamma_inv: parameter a is wrong') -end - -x = max(a-1,0.1); -dx = 1; -while any(any(abs(dx)>256*eps*max(x,1))) - dx = (gamm_cdf(x,a) - p) ./ gamm_pdf(x,a); - x = x - dx; - x = x + (dx - x) / 2 .* (x<0); -end - -I0 = find(p==0); -x(I0) = zeros(size(I0)); -I1 = find(p==1); -x(I1) = zeros(size(I0)) + Inf; - - -x=x.*b; diff --git a/GSA_distrib/4.1/gamm_pdf.m b/GSA_distrib/4.1/gamm_pdf.m deleted file mode 100644 index 86f4ffb1d..000000000 --- a/GSA_distrib/4.1/gamm_pdf.m +++ /dev/null @@ -1,27 +0,0 @@ -function f = gamm_pdf (x, a) -% PURPOSE: returns the pdf at x of the gamma(a) distribution -%--------------------------------------------------- -% USAGE: pdf = gamm_pdf(x,a) -% where: x = a vector -% a = a scalar for gamma(a) -%--------------------------------------------------- -% RETURNS: -% a vector of pdf at each element of x of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_cdf, gamm_rnd, gamm_inv -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg - -if nargin ~= 2 -error('Wrong # of arguments to gamm_cdf'); -end; - -if any(any(a<=0)) - error('gamm_pdf: parameter a is wrong') -end - -f = x .^ (a-1) .* exp(-x) ./ gamma(a); -I0 = find(x<0); -f(I0) = zeros(size(I0)); diff --git a/GSA_distrib/4.1/gsa.zip b/GSA_distrib/4.1/gsa.zip deleted file mode 100644 index 8a40d3f8f26095d1f0bbccf82d6d41a4a22a4544..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131651 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

p 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%0Db;Yl?|t2WroXWA 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�*p+A+IBaqt{YH$x7HmGD z+ib?2bb=pJ3orr=1(peL^EolZ0wrDKP>Q${<%;OM?7Y5`jBLKhM~pJgAi4JV_Tqhg zvv!&DDx#T|b+gnQnK%%6>|(48CAXP}s;#2f8E5Aly(^%3DXPXzi3&{Hf3+%`!u+ws zsH?5puK%9y(^sxr{`V$rmyYqMZuOKqy(S=wt#y@Uf>Hp0MI`cI$)!j771p8S_cSRO{uTLK6t?%<%_~M)PNkIcfxKitSR%FyaN(p1&}d9hAw@~{B%P? zdK8A3@bHZ_5PJlp4mJ(@BoHUED_T)LPNd!%ds9LSwX4ibajpTgH0sN&Ypj)JIp&ry zAv)e{kH~Uqf2FKd)y^b4O8PS7YG33U-J~hxYCTCV1C0s`N0(j+#iG-=ooe7o%0(>+ zID3O>(ZH4-c4P|O110<*!(F)`TfA$xN(!_)t1PxsTHPN5iu5wdqw7kdb4U4h-XI3N z{&~Y>?PFNa=Ax9oYO}UtBFxtB{iWmsRm&{x5W$27<%66gicRkdQp9h^LyyJx(7mNs z>E|eU9;ncmd;}_r4^M%)=3CaR7xo~*+Yqcs3Bz^D&KJapLiEu`@vBOpA!KR@MMCQc zb@s(=ETI#dl7jd^3WOmaYl>uf);|i~wf}Jw~s) zyN#RD_Sw3oqn_2$B>(#3U%qDMNb2D$QA44)`sSC;y~dV*ukVuF-3&JfypDE>1j?UU z@M@5~zsP|Kczbim+uj4}N`LC$Qo2h?z+r*4FKHF=BBh&x7KDh?#FrJb#&Z)8(W^qX zJCZ+NR~6I+Mw@LCRqD4Ul9$r07`$JM2w5!Vpw@s#vOIvR?+XSuHBrBQ{kyVId{sZ~W%f@h_;l<583Y&IUj zogiA=_Yhn*?6KQA6H*4Q0!mZs+VS%0cfPimh@FdZDV@f`hn~jZ_#M-WI~^tE-1b` zd_1A7cW$h1CqsSr=yMbruNKVOrs$H(KEKrd@> zVA|#P_j7o|kOAe*57hTNVWmiFo!4w2)`=Z5X6ygm1-5m0FIf%IM{XV{#6Ipkar}W% z%k`jq4R|1P%&UFL;lnp}K$8}Uyt2MC^F>&@mf4EauwIM&J;>{34*3=BvRI>zkMGx) zzt_{y-xA=*Jk+le?}&BXN(lAOLt}#i0VB0dcv6IEKl<>6CE`!*9#)Q4ZU zIoA?Mo@5JM0q)55Se{FKudzapJ-U7y*9qB`zY|v6+VqS03PagEOKjNf9rM1YY-+rw z6HuUt*9}okv-S;!-2FE4Umf`-vg{;Y-zRAEm|^3PyNSdN;t$2e2<^W+Dk8yo?y>r2 zAF#Pwy-#jz3#s64T<3fb0F#4TfNQzXry(Cothl7Nv`tDGWAUrA{5;O3grr6uH2iX^ zgji~m**nb`a0|ByVU8+qZ2)kFb}^&H3#5fm<23m7uP?o$eAcT;ne*!BS4_3Q+R3b2 zIDPJWVqb&9A@ARSiAFr~=jWov3q+UsJ3Je68C5l2=N|o zO*;Ks28u{kwBE^P25koSG%MkHVIYI$G^zv3VWnsiiN58iF}BcBW{$_TlbrR>eV_-t z1OMJGQ*$S0(}B6~=KKFMlvI_{02RYTzeazCk;%{NC(8dnlpLK+T&--)OdM<(>~a+Q z5dxXu_+$nI9spCSKQjOIG$aIwDh4C)5y{Zo1H1kx4G$}Wo%7AjE7q3zM=)5;n@J=r zx3#AnX>Y1ZUYUr93PdIHfR@#zv7v6qtiz1Xpg${pxZyInz=VwMtHqiOg*lde+Dw_i z_s)77&%sG&@dUROp~6{e6SjQ-NECn9O}Ge5*_Owm2eWpKqg&rwN1)o_+r!=moc5s%(pT)zZvb=wIcb!okmM#>b0a#1x@JrB24rwN zt^tmSiAC#T+Nbx7{DK%9G_#CdU5`)h@s)F0S84{jbYT2B3`)Fon!p%BD{?Y276Je7 zCzR6rtW!5`{s7q&HM@C#dZa6BiW*H~Ffc(oB-JbYV@yI3$F|S$6bMtTJ?LanE4>R0 zjsXlsk|g~pmhp^#eNOc0vlEVmTyNh8L&v8ls3jk5^(@-&l^o#KyajY9nymC|fznzg z=G3c#_K-$(fr-YxnK^kTGiNDs`p-phW%a$Pw@^pz-+IGE2hH{)O|R3d&Gb{08+QUZ ztoU(8Y*KX!nH;y}ugi^1l2t7%xdLjV)LYg@^wOFayJskYRoa^`%2w2VIc6lSkK*~! zS{SUjAZ}OOO-#O+{ktzOH9>h*)@8$u^^O54c?A{fu&qe6MjlMGil_LB-^49T-X>z^ zh8$r!#&)~*iuBI)Fg?-cN%N3tk>xTtP6w(TPx!%Q2>ywjsynV=>mHnp`?(yJn{DuV zmVn@?ZyWL;bylf9czMpa=kgS2hy<(r%a?iQM+O}(mI#XwXRD}uxFk~~ukfOI&6Ft! zv!wvuQcQ(wf4)AMW~jk${};IhOBi+Hnsxq&MvqUTMJM)WMAM!VbBkXgNDp{E8qjrk zLcUM|?TZ{(p-b#b?VC5m89IPM^N_N+{7i?F%#JdvqfgxG$UeTLdb>}D|5l);9|F$@ zQt>F)PX*5YnEt~3?;p>>(bdB2XBBi)QL@=&Lh@U!d(meZjn8n06UPL>FQUag*S5S< zl~%fNAt{v>O3VTu@$*qoz9@yikE-sx?&*BLVjFmz{!4Djc1mTFyO}^~f z?!Rxjl*LbGw=7S|LGVoMAVp*z*ngTl0?+f`3O3EXMRbWaiBE`Q+w=KNA;@L+@oc~u z^=b!m5%3c2y5=sqhD!M!kS7PJZ!Y#=Zo?4!Yc-1N*b^4UMtF-$!hA>kFlr>16(fzF zStm$6!9Jfi8a{p_!PZ>~%B(y?5ZpFpMN?UsMib#0H^*>2WG}QO8ZW=Kgj?_kFN3ec z+nPcXB|}ofXpcJfBvoRlsA6@Y8tTrHKcQH5m+qgCc^=CR0$Wjx!^^f>>bt`j$U6!4n_Gvx<-` za}TZh27?!QWcKP-+SpFGg^tZ>;gk#ZSK*As)CM^Sb7#xhE4=c>7lvCOHH-ojl+-mP4{ zRx~3`f>`ohq+K)Q+stUcJi`;>za%zRmVPoycB52QM!V#4TXp)-Uy3fkh}U(C|MTi%Aq1^MN{0+3 z+vn!<%fnr_sy;CzuyeFt{@Mt}i@1p-+L-bf{F#W+gBSC~Cw3N`pVW7x_7@l@k5-`v zMr1hym@2r2SvI;AbleTm01d5leB}fX>MC^IVURy$?ouIGG>6wtAGKmC96s@p*=avT zmAjx1s0Q*O9DpKCCk35kpzR;3;@{3^PF6~ET`x0qv8&vSgx3SxhLeW4v7Rnndh@(a z{E+zFLIK#5C35#^)BJBwlQT*UzQ1R z;grFpR`i;_Okt9x)(tLkL=WRllq@9Ki))??B0yITh~;sFofBJ*Jl*ET3Fc6JZY&~US3uKO(gkFC(R}s9B9l3df zOpwIzxPyLC$Qi{Oo`}5Gl;f>TvQyOlqkz&j{De>3+(oaSp#cAKi4f_spK356xOej% zTwQGN5B;vUu?aoKIAE{C*2{Y|%0)JJDfk38Z5@up*E{O_VZPcHeZEEuTQDELXEr?< zHNLT1eCNOZM#?_nK2k^CTE=2jxG`UqdB^;3v7^>X@F+dLMnV5f^TZ!P)PJni|6`*5 zKgDif>TKj;@bi_yu0`GMKbY-Tt^u<_eD(?e%rd^5Mh^zL#4aCluTsSg)9ym5v8Ma{ zsO8JvL%p(bss@r$f}sbL_gX>T~t{L6IZ`g zhsRNR2cuLRbN3%seZ16pbhfIjNr2*~Y%&6C`rkpO0NTB5gju?F;suo-+IHb@_Hg3m zqwa*Jc9WM)>3{7^T0G{J)VCTKd-5Gzx+3@Mh*dKn+!d{D6AZNg$QiLM&-w+ytMx;DHoQ)#it$ zoYyO4)KYLI(%#@ATD@0G4U>5Bm%axB04~?F40SUS4xs@oQi+ghrfpwL0Iuuau&Vw% z&SQ0tmo>uf>)ucsO1zv9*-H|>E}ie+NF%`HIpEb4jdh}a4kdO|RD93#lE;d# zgJ=}Xd%PxVJDcb8PdbE?=-S28T-o`~5GGg&X+mbM5yJfu3@}#oDH5^@qAtf12l9{& zl1Z}^a`F6d=nu=L7Qq}dK7xo8l49PlwB5G$GWXKX~8 zr>LrHU`*W%=Teu5ok?8eKeluMRks*13hk~d8r(-(NdQoC{B+Styy6Zd1CYsT6mdo5 zq8Kgm1Z`_}3aSZRV~n8mlL;?=20Lf;q;uWKT~70A#THCsg=5ilZkRL~%7C~fyN(G~ zB=UwbWdK-$pVAw{sBLIAYJ5Sg`l7-H>s1c$uJDu?i*FQdF%ro!m= z%~cWx)^j4}4cwgUq9x}B*%rNz>=tz#R<>)OA3MVarA5_#W!ZXVp4t7zvzCuixJ1Y- z6tjGj)l&YO;VC78{GSs$vWi@aTb53q8=M?XA3lFeS1)fbI963lOO9X1e}d%{JGn?k zq*CnRsZN8HE7F8iFTm}i>LME7%%lk~iF-XhT6|Ur5#G029MyHN`%X~w5qA%#cMrFA zA1ad0-CLpGJ$knyo_L6_g%mBmPgQg&r+x>_jjriLIDP+)yXBO40pxr$cO_x0lC%>w zsj~XzjIkksU~Yxd*wpypx~3@6>$hsd56<-piH|mT4S% zt3Iw1ntS2`LL~UpGM1Uh^wlX<#!Oq_e;_8tNxi;Zb5o`4r###dPN-w;BjU94vQ2FD z4gBBMSsCld5&PRkMbj@F?N)D(}aDMz`UqJ>$;|*IV z1fG&=&|v8M#XvNYP-<#yJm+MfO$TNdc9}lAfAYGs>?ieHm5VQ;FR$-?zsy(k?og=u zmmyU21TTm52DwaKA15&42>AjO7+~jcOrvhFQ6Zr@g`RG>+uM%&ZbGQkU14n|Zk{&7 zR?{%G%~K3qkov)v2~rt+0%a(L!Mi-aK1zna3**5U5|oN`JcFcIFmA*m7&>I>JHQ;u ztw5SMv^2+EX%`se6_9Za{APPZKecKXdl$9x7O^xkV$M@azyd@>96;YsgoC^a=r*_) zwcQy=PdrF~uPU!kz=Qi#I%kcV&@EY^5xCn`b*v@3aqKjPcMD2KLR4{}yD+0{c04zY z)l113K(4jwso#_E`I=9C4#)V4O|Ed7zg!vqCd%i-%v02FavKfcPIW&CVR4HmWi@xh z)yOjtJriws9{9mAWzCqSfhEA6t0-aHFa?*!053z;7Rr0~<>j!}3b&g$f;t(sGvHgo zZ9AaPN9CrIzo7JxT$D$#x2f;_atz%4h!gD$e}s_3fC?%hh!yOtlNszBVmFs1z--k{ z^_cO(tWf5Q+n6KMjP z1?A1agaut~h`~!tbW!wRRJhvRD;xx?j&5C4ToKIr!d-=6lxrhN->^H<_bh zwwPF~iqLm;Yi{32+NSOb!NugkGeDrF+Dk&Is(S)LaL-sU2QjNa_ynZ@ZP)H_DxE&` zcF+I%KL=q>HJh`?YxDDY#OHWn@-%T9Y5`vOpOie7J*v8_5 z%Th0<1fzy9uu&4apLkK!RxJ&opjWwEdFWlz_`u=Yxg^rI(qX(z1lqY2WUkd5eo_TXkPt757fO(Y7dr;yPvGUnPaVXwT>DCg*jJOS(WxVPzZH zJ$$>NS>YIux>{tS6xy$t^KV6A^+WtsJavsjT!yMdl{*5gUw;_X`ZLIO%6T!hgW}PY zKGf9EEhs6okEJ}-D2T%Zg3WH+P_WYReq^+FZ@7Wsk$`|6bnfx=F)uF&T|w6xjAcl5 zXAqMLn!?q4+FaFQWiqAVQnX1mu}EdLza6Ye)PXQo%}UkB8IqEf&J?EMvSWzowLyQo z7(Ah~O@~4(zSQzANnG zL7ieLg_PMpp8G7E++&bqx z2M#1;WKN95lQWSKl#f{zF()6ZW1v|qa5eicf~mF?PetWV8dtdnnx$+UMz}c)*w?KM zN*le-uHcUD7JHUVQ5N^2o2MltOi9zC5K4&Cf)S1g*FfwwL3hESVxKZHpnENt|2Pk_ zT;|O?3C@E2-42vgX9$TtfVu-AuKgOyg{;aqFGdtpCxr4pyDvkC_NF8NuZ4YQVpZHG zSEdLCR{Sf7a$QXAQa|195pl>mjhHxRinNmxhR=X>3aNrd4%IKgcrbN&kI zE}HQ7m#96mVx>4+ftS82Zt~FR7MS?JN5?Psd_e5}zDVQ|xl~rmXk2lqY{H24$HeEe zD@wFKZQGmd%)G`q)l6izT2G&x#otU%Z+hy4;gaD>(rlHekbfru*lCm2M-D*%x`#+~ zUaawfvkF3t@)+!wuS8sjhQ8bTvYy0U$3~#h#t|AOl(7eT9~+Bt_a&p$>0h)HO}E$= zU4L4)wa&exk6`iap|?j*BNxCwy#+S+hw*L7JgR@O6V=8LRxCfNufh_m5MHD@jfuoh znhR5q4D-e|aaD=+%s2s0StMrwnMy^QU0R5~I72R9*5)j#$pe^J1Qx5vNWcM*j7vc+lx z!=WV`5W0yPK*+&t*9KzT9<0A~@$?2#J5s&`GxR+>9uVYkl-`ZSAV4Q)A8Mn<4RBe5 z;M^z3J7PaTx!Ib0WB z?UY5b*@5i}Oq2s#uCKuj6e{->R_qFDK`Cj6CM&Av?C$_5%0LBztMOn%o(mVPx%pMY z##KtXLct*<(-&Q*)9)+kcE|{Lw&vl44&-Mal5ah!+vorK4L|)N4?;zHwmJqQEw_^5 z(LPyx{x8e_NdvJQo{1?~$P40m8|E*1+p#$4Lcj`l+<0ur9$-R#Q#5m7x)x)CPrwPM!3>}yR1o}ve!ab}MC+yTExDmU zm5H!pgR{Oh)eWuf`Ck-h7_`ZxFxT1QD>L^5>Vu&;^{ooa! zF3R;5msOUfgv;7_Eq&U9=Lq6za{YK&rd$@_iN6Q525|ZO7y4FB@fJODnpLv=w0-68 z(FyvTTeeBuR-vD^`|pEx`w|Uj%>K_DQdeh|6-9k#pey9%-x;u0mwx%#gEseBuGr0h z(4vIXHv6K0uS9M5_)}PGw(L*@4qQl`7==|!Hu26a+lyQj{?hrEF^&Vrqz0F80c{P$ z3kGlP%?gH3(5rx}!sC-sc1*%`?Y~tGFXgTKUvk4D+L5_E?}!HSJPoS`FJGyJ2ROf< z(D+tU_oH%JZj7hW0vyqxaCx;HjmnMF53PHTQM5^q*Z%oGA14`jm zDI^r4vy-c04c|&%i)zFBtmoLW^Wd`dIG4N6I0r}kR>!VCjO?ryjbUE(!~DG=e#siG zW7D%SJhfm9tp{?NWpS=lpdAM)h;BuEJuecs)GQ?5s*?#^M*Dbl{d)xCXJKudaB}xb z498Twe=l3X{?2UT25QGcJ{RELYjp-W`BYiFFS@;>_ICCK6%K)NdYI1Z66d3$HO3aU zxnDbBOn(mPXn_6A%BeZu6|m&nO~)DP!Htew>Mbl2LdtzHe_3{~q-LtEZw=e!j)box z)619CAzwSEcW1JKD4X7;m6%6|Hwj&P3fhKd6E8h)DG4r_<_V$zuf8#dF8@HANtxD~ zDR1NI!dBb7>vY)}wA@)X^EoKGZ2G&>@ukgK2dD<;VFchk^67h1ZodK*K28r>ZZ*Dx zweB)_?xo2`X?65tD(srv{AMcvbI$t2RXIPIA*E;5sx`Z)6|vP-q3Xvq;cZpOl|Tdj z`yjk_>V#%@tQ3gGxMHL|oTb1&&>fi&K72k2shiKtTt!uco3)A}zc!!l`b|RWD_SO( z4g$a%^6BjBROx$cAvS~O8ACVJu4UrTRg!qB-H>}lgZ}XK4vZ4WyFxb;jKd$j#g!V& zE+{5Y{v!wCntRF}wnQ{!X1ggmh$AmnQ#pWR(oR~a)lb1?FKbJK#Sf6ujRdZ&J;qfi zr^|enUNMkO>mDo~1%;1Dlf)$1v{!_DB<&c)$iBHNTwu?2gK9y$ z;H?6Tp+JICf8;F@s!}uw??%19JkT!3YLi-RxNQYv)C)aFJHrsK#gyjDr=)7q1G?r) zGdHGy$^mKO5ip5ihy>`HG%4lp&J=1}fXV%VlgQHzxnp&vbJ?W!5g;q51+{kb7u+P6 z%%)-vxu8SK67|UT)el8_$(77GZ=X)M)|^zjmND$j60t<9HKfzTH^KoxDeOOtKK-B{ zY?1af^+Gek*{a0Mp_##=!>ld5`{n-6!D3SVT}{GFfN>Lf7F3dzJ5BatHa-HxPSS@4 zeTqq$A#e%o6J9cF-#V_V>jIWukm5yqEsYhu@L@BVK0qT50RgCzuA4~<<|WP*d>a9! zP9>pkDZVaGO02{GIHXyN+7#S8SRSc;IiwQ<0xLGfeTt(Ab_~xY)2u@uhsyw?D)nH%7~F(Y+vmAY9;$5;(6$0KQ;!oT7kD{9BB9K{!+I}{ReX(+xuSD0%J7MBdyEh%F(GHn$6J-q z@}^23EAA6e)=^OQdN8NG0X$y}x3M#2Gged}!aFia^a>jn-MH&BGz)|8Qd1wAiqqJv z#?DC>w94*l+CM5Xx+V@bo!cgNJ6$wV?yPl679bFEDcnI2JZA;^WC z$)$1QUYPcZf{D;%p;^EC)pBa zdeE35??8}P62|HvvD=~%kd<`e%KRe-(k@Bv3i^)j6#$jT*R_dfBp=vj;q{Oi1}78p z@^+me&ajLXcVcVFCpCP!^IUymH3HHRlz185xC+&bDQXO>R+O6R%t$av;RT`2`U7AD zDj>#@!GzIi2N#I_(?`c_I-I!Xana#fncQZG6ofCi1s_^#+K;3e8n;bN!J)88>Uu#23%kxVG&8ch+c zH#K;g28>Hm)lpTeVxpckWZu15jU0bPd*3>$N`<_wXfUyENRfMd?G_7`FBOqx-f zD~fkjY4c#HaG+^(!Q6#^&#^Wy$_GRKU6erW#7J%&c)==GSVLkw=EL7{KX)P=6!!;M z;)jy&5EciC^i0$ecx$1WgT**t1x~mQ<-vPCL~-18muiF^D9@lj%7C32h?fJ5uQ}4G zJ%=ev&_(%VahXqwX^FQZFT*{?eZH7g(lz+QM`tU$G7+T0d@;Zy7$e43X($eX>pEaimOSMiY;4DuUB0dSK*GclG@-KK6MjH16H}>TX$9VES#Nv4!LJ znCp$XY>;qRCw?7kkF(!Rdy&oOds9wJ|7G(}_D@f15C2GbkG`ag)C_57wRz^~o|e>n(ttTQ$DL6}#BBjakp;O3_B(G-}}))?|UD2(f9AJlh3}sc}R>axCOm)LjD)r|02Qv(LacVjy2u> zz+H)?KtS043wNm)**V%;*;^QhyV?J+f*kA(Sbi>P+Exymk|>{eKLNHez|rw6CGj(+ z4Ww}p@xFA~E%>Ante{xpbA{TqtTv2INyys0m|G@Nj8*6&M{C}cKHH+yo8mVWb7osEJ4aPKOH51jhXTm*S z8^c&z7yrKTL}`t&_TRPFCwtOp0u)$~tIF*7O-ERCp>&5YoLh+WmgLo*drWB~iIh?1kPvc{E!V&#Aa0~`^ z+Stb=diPW&Mkp4}B+Ao=G1m>dt@4lFhg3OsC2*CiljPyCiE6w?DsADrdw(tS`*&Vp zlV_5`G?bNde^m@wMZrm@$#J?3X%D?dO3ahqZ_y7SQN%LWYZP1su7$t|tjPuDM2ron z#>Sju{cibk7KRIxYStd2LziizK?q5C1i4eAaAG8BP-OI*av9fRNoe9V0>-A5RnD%L z-H!+t5gI^|S$V$Wn%(=SgfeRx=1tDI((Yr6B_`m`t0Z|tN&iY2`-Nd;9Qe%(?KRYM zt9s`|7H^}uw`}_CG{`reF^>Nf#7+9ZWLsxfEnP4@O!E`dz#pP!Q}7pjA|HG_@Dft` zdMh8Do$oI?$Vt=&DL<{q!;2?c2=7g_9GCR`(roRI2*Ez>ArMA;hJ zDtIsS&m~>e%QyFqhvZ{q0l+UG9Z&8w$9I+fyygjP5RV=B{AUM5{Vc~%q{TxQJ<0ud z*A8OW`_t9g%KTFe>HAkkjfP#S)%h|i?xRE_k;?rRNhH@j_i zhnMuUeCj3R#a znJ(vvssXGo-?%&K)K(07uL(>LGk-Ig*oT57RGrdsoJapeb%=RIE7|6I4Fa-Km3pz; zMm{$K-rV8##knafWG=J0KWrxZPm3!m?y6*{Pe}P4s%1 zAZFf?*n&!Z}Crzq>xI0!gEr6UWFMl#Et~x2nAeM_3)krKKaQlq zTqKK3gp8qlU~lJGCpuqkhwr!uN1`c#Xgf-&3rzK$utwCCr{87sUA;(8DB9Z-zF89l z^X5zlzkxGlJ-EuS^x6>ef*L!#AoB+}Q0RjP@C^of_YVCIRD~sA95?aS}tTp)`JN*^~b`BRkh3=U- zKsl6Rfb_)Y&e9+DruNj@mgineb}v>idZaUy&oxPjp-|HMVu#N?SoO3aX&XE@ObX%i z^Dd-|G|eVMps`>ate0u*&mn97*R4XT88@TG}(THqTZILWt|_>#Mbq zgeEKSdEQJ9MW};3@*Rf=fGTrbvZ(5b`eTN6#qiV)547aV4rI6 z;hXdmML2WsU>2e0{A)V;ww60ck**V42-)EuAM20$M23e-cKyYPmGh0tMj2thEP%}u z4=9z>mJlbvHYYR{-P`2?74b8`Mm-@u$l0!LaHz;Ja#bPY@$PW8Lu)*9{r+FENF$po zhW(z}M0M2FOGBrjJ60(k;{3DVO7n1W*VA1Bf1c8=9pWJ@WrRmGKAexbUJE<7GydEgPs_#+hb({yEnQb4!H`| zmXhbwvdL%s6F}%20n2)qFm*J-^KR)>WXDA0)AM9?7WP7G@accY4w}Z6*2~(iJS@zK?7Z9Io)lrTqsb;WssX!V|`^Wvc zkjR*2N>6GlhVpgP8CiVSFj3EtcM!dQk8K|Z5Acm=rl+;ADf+wkgPHMOwaXJX*{qvARGdxOEA;2utQB( zu(wWeC0?Z>r#@v|YGfLolo5g9?D4DYqZ%&Tt@HN@zk;gBP;>x?-~0xS#;F<#!uHvI z9c*ug*EHcC_MSD}1vY2T>iOgUSJzoU)sbv#70^|JJOMp7!I%wYCXA9J7SG{k~JKPA-!L zcumX?Ze{KkVWz-y#VqlZON;}I9FcIURb`C{LUeSRC>#3_n*S7`^M)cLd;Ha<@`qMSwQGS_<54q~}Z3pbf`h#gEx z?L+@ubW98Np2)MtBUkj>O$&+Ml>L(a*?xJTOq1G$cp3JESv5UvsC`x*QTHPv~Mo1i_k}KeJkD$_Z*5zSp zrNtP!s-+5_u7kg9vxN=CC`pO zIQfD+;}P{Zx??@B%SczLmC;6)>H#I??H70|YP{~_H`dYC8yr_)jyX`+%Tf$u0aWm= zv-yEFgWpDm-fpvaJ}9ZK0{wonisw&c*Gq(b)&TTWFyQAO$##1SBWG(Pdq6R{B-Mx{ z?ZEJuB6&T{s0_`RBn|ECm+9&C?Tu{(=_>BT-sQ3ri>8Za7>?3SD|K#`z8K-7Sg zVEBK&I4d(dYa2k>LxQrj%_2Ke8}6BRvSg(l-oQLdfH(b6_k!*@)3*Pi#M%&B`#h$fAs7MR?%iVPjoE@DP`(pGEx4&f5c~;Owz| z$!RMReYr*TBVE=E&5m7QP=bu0vZ`poqV$I1z2tEQh-Wq$QBRavzXjh4B;H)7!4k-A z#50w!hqZV=y1waveZkq=m*=OO9rN%<^MuNLx~|Cp6{Oh7VD5ldvO3-=@6_z|aGz)di%aYoNUC77}4cXd5+ z5ptZ2VGlpQiMS=^;_z@Saa17DI-q8Rs!mR}5R5|GJ^V zmZf7m$BOV!;r1gnsW*1qXZ?$}#+)%)aRCDRflKHS@im4YpKIL^hI1^%!N+P)MW2a8 zpTmg=Ib=E>If6z_n?%|!(a~{b%N^dlN-QnY*h(EwgF^5xZq8}TukH3GHC zn+|Z{!U0}N05)j;N<^}^H8L^;_&q4;$u5Z?JprnflD&c}JCEMy)K8K`!axgs*q;o2 zBdk0lad>^#s(Z@WVnCauvzk&T{+_1@1#&2@feCQkYBO;P&T`$wIe32fWR?0g%b)$t z?1Jz|wJT|ct={#{uon}keP?_q576m%9s-y&3y_jrjke8;!no_RKgut3vd@86Ue3=q zcFf!FIaJ>{$Q|pJ`JLP5hIjzejg5N6-c_t{`r?N7PhhNM=Y9fTvdb=ExC5^9b8bJi z3SW{{NUsy>wyWYlifD!vdHVwO;qr6uv@%_tQndP4s9uy|-<3sEPAhjf$?~qrTpQC8 zP>|0VWWffGL4lvRvG|UBmutZU&-~-^zs~>`v`q}*$|msB?Q^pf6d+Ww?1z07pb+I- zV$Mj;F_j;RYTBg3zPhW+P&kGgMCBlY^mSf>Q7#UE)t43QodXMAtSI<1t&Lpy!gN+6$x7{oe-d$evOH=%eSb4cCgYcJ_%-?jGJRDrJkNz#;&Ngf^5~#*8NLJ3R>QM(ynCDKon3% zAWy76Y}U}7kx)EqjZqb~CGYx-^Wz0}dviN&nR~x&(8892SMlX0C3sUsiY8-J8+Bq- z0~mXT>P7Yibw)$kvD_?K9O9veeF0!63K}{@W>iOZcjnqEg{R`dxo@4D@3{hRmT4~4 zZFeXRtFB+ArW_Sd|Cui6X?yj6eMCg0&w zrCI*lRq#b40sJ6i&J-EHcA`*MejJ%;b8xwg_Q+*J81sChmPCwM6#uLtCuOgWAi_GN zkJK)avB2vDKN~+KE>o1LS$crl3y5p&i#zkPJFcee9LRM7aqjSdSI_|CA^7nqo_A!*fXnFkS$Adj44VG!WZk-Wcu zvOjml452xrrrPV;$BMecBo96$jDrSyTi8r_aPXsXOD`d5G3x!GsE)TI*vtIExgf1? zPH+uwVg(eh%!c`pgcqnPSQwK^83)xMJDnP~A)6-sC)s*>Ux;0`-i04oQg-#BaiK}U z#T)CKVctbeSXA%$ydJMEXGrWn7-d$se!*aS2V`f2ui_|PS{e0D%x5?37LGR5p9%S8 z&`d_0KxmvvPkD5Z(*XM`WF>Z*KByxG$=9Jxbz%*tZYFIA^eEM6@Bx(`kdI*ERS2U% z(7J5{8_IYPYW-?mr!HM8^bJNHnDGqZ2EHcm$~U;s{37%Tr~`0!jIeh+SoCesM=g#( zA9}aB`1yDsPfpoO_*H_znPVW7v4h^Q5yw&LC2M(u^cYzeou2B9?2Vp%7)1)^-#&mGJS4_(vu zV`}V!F5)g+1=}aCv5r1plv0%OYA!~F*tsW8ggHZBGXkGt{r4iNwpOa%_m3x2I&|me zocf=05{Sm5r?Of@-aAu=cJ^-=X~nS2se$bwYZ&ZX$A8eJNnIx%ZN&1~Ao^6FC6w6{ zbE3TBV=yXmpj)PnRNe=UKu_}nau6SgZF(@HLl5u_cb>NLCx zLtJ|z9Ji(%3x`59vcn@32r8iiZo+n<5;=-92lzq(gvZN2_QzNfA*~vS*7bJK%SG}; z12l(XMH8>0A1}C3!0@{i$)S-I3O0ieu9?)A@I}u*UY_qxE+JViY>eP8`{(Uo&tZ~H zKI>^WeH$f>^X`529y3V3GofX_DqnEVR3^EdM@M>)OLFb>3vU~nV#WZ;+gL|()>7`h z->2BsO>Zz_-#J6n1HI$KN0th$?IW3dU;_)GD!_W+#n40Pp`aV{fk`!LFFx^$%?&Yj z4cKS~=jua3-|4Lnx0yw6G)Ab3LG!zaNCVQKi(@yG&xH8MO8W6xRgdp%gbn;o9Yztv z4@2Xu)j^60H=TLVS$EK%5h+K8;{uYD8m4kWb>a4j^NSF|gj};0oQN`P7}ComxLaa-Y$cf`z`APP=n+rLa3Mr; zNZ_P~E<)W`&G~wUpiaGL@};y3K$gbh9&@Q0Fz=}`U@brEtpOvcvOvDi%GmM?J(Ew~ z{Nf)-M4zTws-G!D>)<*%;g~;;>Bu zB_}8)7o>8ek0jvKN2uOj(o&fE_-J^2%pyFAR^>f*+&n=Xl3dA7YXzY6CiuxUz{wx* zlRtpcuR7_rA9sJcFH;ps@jI36M}U|#Uj3+BkjG{xx*3{hxS51ieJOSq=forwhbNeL zR(KrQsCli|NmpGAOQA2u28A(CGMBit0Rl%eNpbDwvHdbQq}fQrlo8n)xj>+C%d+H- z#UV40j*K{hp%qSkbcPMo(j>oylDVv8A<(~>*77C>E8m^magiRqrXsS6P)} zb>F$j(zd@0S^yqERr!IOVle5bTIX_~hTm#Kf6A0=b@l9P*JA|xnnAv$elXXQJ^aE9 zY@188@I?=LZ1DrCDl##_D&HlLm_L%>o09PFYvGA28iYa$F49Cy)s6V~7bw+{P#)AI zlSHPUS=I(S)RWj*obp_g_nvc&8H1}*f+4WB3fDy_&>%@FcR4m60mz zle>_1UOg;1*W{lCw!mwwobsJdUqXYw9lTuzdb!to@J#lw(OG6cJHn;--E4+_KGcxgR zv#3N(!`KjUY}q+>Y&oyV#&bGQ$m?KUMXSYVoWh+F1IEoTwOqvC*?DpQ;hkCpNVtX1 z7DSWnycyP=eP0iTXIA;KCFWZV@khIx*aG@t*|zit_@gQd@iVZqsX@YX<@8QgkF)|j zi_B{FeqY9lntrr%ZMa-fgigWc^(oMW&^;AX?q-*Jn2ATF-BDKfhMrMFiDxTnL zd}`wj{G2_bkLUyWlxTaiJ;S_yvXn9O5V;!-$vH<<;E~qdH=n_!lwqF=&nrN4CJt?H zJX)8#9axuZn?YuszT9+J7h|GuM;;R1b9Ny`_qj5}6&v51;&M1YqWmBOM;N<@vyvQY zK`fbRkY%eH!%$Wfmu*iPA03WpQpYbw2} zNyS8HA>ipLujArCGTg%jS!r>gsJXc1AtyL?QGdbbT$yIn?;h^k)KDtLvdB)_S7+rb%|i zRBM~N-P6`ndKHikHT!ox=wGMP{T$~39@(O_2D_y01_yd;oYe#n%b^un(6Ao;YFkXT ziCTEi;nJOmyk?4?pks@MW4h~PE7=Q)1Ew`L_v?Pff-anK*4KL0=wa0TnnFPf&>+CG z@>Ko>R(VT>#1# z@)s4)PojFM5zLlx@@oqwpx_#Aei-_G6brh8SdC|h4`r3ygD7JFnEo! z56t30maPL+E>(CA;wr1Vj}9GnoF&nDZH`AW04sbFs;Eu&XfS1yH9FPrwlZlNFbj6Q z3a$R)w2dtVq^NrFZ^}LPAE)g1pP4MuWoYZ(D{_`u+d4zJ7ISV8&AH(iT#S(R419b@ z6zP)lv_WK5Gc%yFt87;`ytYaQUr!VnOjkA&iOjZO;U^8DoZZaE0b{TL((ia-q+Zv{ z=)$YXnKI4U#~*Gq`as8L-L=$RzOXRtWDs0OrnIxX_*Bn>iu@J-MiR>ZRQ@zt-@pUiRG8mZQkJb&M*)eT^zT(+xC=Y90*~aH_ zboYD%&Ta^90~wKJ!pK}v=sHf%)uX_7c?f!Q6oLbZPsryt`eL&2hYnf7)T|g6TR(M-F<379Z3D6{-*?+2^`9X8tmtitxdVXw4IL6&_>60q}hvDKl zkH}i#-_vyS-CaXe(V08QoaVtD1XIM#Wm$9I5v{_k$)Q<{!R!LBUwW-#kbND*6Y=ZB ztpkL4p_cbWh$as=c1G{|>a1R3VG%X_kEus8`ANRWYrh!*9XCp?hAubfgekLnKN{Ov zmCIbYERUno6v}J(K$C^D&eYysJhsR(KUMaGzRW{&OnIuKovCro zUq`ie!I~hYS>it7L#%@7ZHHe$97JzijS7alM=~G~7%sWS#~hOr67tls7nD337scE$ zQl{QzXwR4t6rw~g=<+r*uWTi&MBwc(a`$F9p7RMydwd|dEOLvf#xLKyKD003WYxr; z8iu1^q$_^(gB9mGgy5ot^s57Hamy;bID7Cxxps6WsV#vrKd;QigE)=LB4?kKLk3x& z25d+%x~~J)Vrg&D7S9p!B@?spxqQP%r7#bo`77gTQKp?*o-$+hF_m$J=9iHikF`<# zjp%yyT67?c7bu$X#Pi(n<>3m~ff~jelavn#cTk(1n4mL2@hCCS+{qV%{Xhagcr!v= zW-XkX;@Do>Jx<1m&SuizU1%{qGjs>wMA4=4zzaTc=|-!&VxZ)=6Cg0!wUsB+jB0TA zj$3#d)E`};8D!2-xLTU1<@l}-?Hg{ifs8$WCVI+D_n4E*`XNo`sMG5QY6F++z79qy**+?pcgUb*^Cwd)8v1TjtGlsJu@OVev^9@1ymY+{M|&(i zU&2q%W(*G##z=G^oj+krx@#P-IJ3A8&xK$oZlZee29 ze<1P{GnVt9$sfW-^^QWuN^?_JUm3UHJ&t`S7;R2~UwgB?ADa|W;c9QNmdRXnIAQu} zySxG~$4v|6D%FmQxwwhl&dLXWRVa;%S#D8Ak$o6Ty}b~%)W={^w$5MhxMR??IdZuQ zVnel%OBOx18lidFfZ({SY@w9p=+iQ{`~dx=F`RU1uC}FHy;BUN8}cpU`0-oqXZGcd zcH@0#B>n!65yyDa%>BguBA=QnZ8j#mf|e`C2nC zP}evsscAznIxdj!S--;Oc*AaKcCEkIZXB*E*lNrGA;l46$dK|{)}pedyO5a|2EB~H zjk$sH+$Yu*-T=EBGba1VT&L9WLf6PF2pvEMGl!_qg)E8=34KUYDV^N^CfAMB9EIfO z=FUrb>J5i%=JlgrtfU$`7RB3grttyJ+Am}m>G0p#uh~V)Cm3<#dc>{Eh zgd3&_Y>E<>xk1Z@D(=xX>HQng&{#S-H{lQ2n1d1M$P-hf0l@yk6SHMoGD~lJbwk#2 zt~sis6C1b692V*)81CVn@X@?CdLq_wPow>XIe5wRH_K#YEyRW+-fw5Z{n*lR^%5knvsd*+gQ20W^En;U{`~CW zb$|14HG=VFM#0iTOH1 zfG-+t4!7wN{1(DS4afS@*f;1D4mAw=${bm_oAd-^#QO%IP?Rm#=OX8zcR-tlPp{PfFMeaO+i9)7O z0gao}SUag?G$M$OQh<8z&3F@vFv2O)i6fQd8hj_F@08(MuY3L}Ng~yi88EVjc?(!i z`!LT63+=w{7m%Q5v)J2=OTRn{Qs;(j*-n2<5rgc6@*?^=T6u-=xXXbBBg+!SmxrkmSR^F!mYoTR+*sb9maE#_MPk23ROK&Hc`hk6I=vWseH^zR9 zu4S*yycPmk3L?pTG!4KUI!24>fu4_U4Y8PbHexZ)%hXt_9mqpi)F&-F<&tJ{F}D3&MBY!RRiT z2nYt+T&oO}@8!|S4ZoA^n%bf$Hlmfx>ZZD6`3JOAECvs-W2JM;_O8FdofY6oWr_{` z0_oN4s`dc>Beo3D{fXLILC%{8w#+dKXw6>5swX;Qr!gJ#hv z8*JkB*^jv5OL2OW_izhvYpKS1b^U%b2aIOwaxR`Eunc&SFXTyH6YPA|0kg8pL zB|E(;<0++h$vy=SlI9snwHWegqm+rb!DGfpReggnR55~8dMKFY1wpxGSb2Y6t1lA> zr3ISLABc-(`S9%XKLoO&`w5tb@lJ;K?tS)pekIgZ2AC&dCS>F`0P|!WKnU(1{r~^W zlYngN{MYlOVJxP~$7y}SB?{FE3_-|7+-i_sBs37|46E-bMKKQgHuK)A_#|JMB^8`m zP~<1^33+eNPQKLa4}Qri118+cvozG$*;nsx&KS}(^`a;cVfCAeBjZ^R<zU)X-fupY95y@+N67?zf*{4k zk}Raw96~Dn66O-j-7E!9Yj6yZ6llbF0dZOWEgnVaPq`wh8SS1-3nrS{V6TC!CW!!7O(J(7PE! zA4>kpEX$UUZmfvooVb;!(y5_Zbs^@pCE{i1O7$_{4O^jFVJ*p48m%WLBuM*l9{V6I ztFadR-q*Av`s2OLzb%1CA!NTQ%g0aNOLbneruA!Z38OWy@C!;1O_U`;KWs^o!3;bByCeREfJ)cDpo~QYWUHrK0PNA8#Fgf~#hkhmEbL7}fllE1OgfTs zR9*D;WOP#Uyaq~{3c+V;q9TBdRE z%{d9U@g@gScdAmF$g3IPeoyXGQB@4zblzSUJGE0r}=Dwx_2|Dd}l2NKatA*eTcJg^tNC6*n?56q z)BTK)*1csOnTA6_18@6hLOT2KBu*GfhS~iP9E?FuN|W>g3l$moAYt2PnHf3mmMu0# z9;y&8wIv7SkUXhok;HiJ1}R=)a_Pw4XlqPYJh2`x+|ajSSZw<~ZCP+#qQ|@VFJ(vR zzF`}7J?$S&9JHnCiWE4`dt8zMLbLRZ2hB8bkmbHOBh$ETNqJogPHTU-#@sfuQWe}y28@J;%qBdrh;T1p+B?PB!u@w2&g`2flS!qCb zN*+Kz!WqwO@ixYvLwvsR(BE37sT-@Wf9pxB9W4Az-8@O_Dce&|YhrtsCMMb}=TaK> zDJX+G(4intY<5~Bu`XRVBiQrF2oI9Vffy*jDY_s(u5x7nYH|C#D279p#M(u~mrcD}7IGce|3hT!FWRP9E*- z-Wr{V&ORrYuY;bG1O!&g*}d=+6z}38yJeHtSR_j zIn_L_{v9@)UR8Sgk_`~XQhd2U1;1}%rylGnvV^;7?KzmyRq=?!u!kmQh8T`8UoZ!? zJk{A?_C<82S=%W1^p44CjWqZ{Zf6`fIcmo&5_XRGo^(Pdr}anMH$sB3EOqhJ&Yn4h zfiJy{dxH5g{5qa?LN#_H0Of@gj~E}L^a5G!e55YShofcLGvi2SAHo7g zxqKtaLNLwtyYpqOMYv*15d!-G9WM@0g95DE|H?FRFfs-xMrJ6U$^v9bpR|i!x;@_$ zD?-tTO-)lwA!UV#8=(pcplS!hphqEk~Ce@y~803?z$?zZ}c1xwa80NT|VzHpC1 zA9zm6VWn?8>%tZ%or&V3PXOM)tkB5O8PdeQ9jarghT{J;*T&88|AzN8Rcod(+$J~*o_6Sc4w%+s9| zo04yRU}HUJBV^%4j4$%2^JtNqt1FI1a(Y+UBu*5Im9YR#b-&AJ3%I5X0N9)B|i{TFBScGJ5sDH?d-jHzGb%=F_+Iol?TQ@7Tx8$Cu-MPJP0s64X>*8&# zASyaZv8OOeSQ8fM1LoQ%+M}4b7)QHlV{+8VRQR9=Ykr$yAG1Y%jcAsnMcGjk4i^1G--ns_B%sN+GeC5a;0Tq+m@>{> z83WJDyx%6~Hjz25mCkj~j+Z}?eH(CTg<3vorq{sHF^L|i0tMdrTtGtLvFB(-I$Swp zkt4)eoXHRve{D7NMBRBV7Cx^ug?-!5e@LqAW{ND#NI1;us#p6sdhz~6o2|_E8*`&B zZsC{YoyWEor6eAG$URr>-WscOyt3v2q&!O%OBasirj9u2yFy%1@0N)msYgUY)d?z0 z)gGAz>WVz;%v*PNp!({Y+HC?u@2sSUS2b_7Y9d_xi(i=G0OMU9umJlfGtEX~<#xOGXSZW4!2 zW<6bLyLI7K$yjI@#F-3@+{)wWzd?SU%(WG8mx-qsYaFcE&NCM(D@!c6*8H&4F?%^G zIZ@|ilVR{tiOq=&=Ry<7V%;5Xt35cET>+h;Yi4lEb#ODdgRIi;fORA@42%S}#-6Uk z0z*lVS16CdMm4kj?ZB`?JDwiu9@o8eeA2`Gje|9sg^5oQYorKWCWJQ}9NeNvYBSGx z7@gB+W4R6$@>>%$>{uTH7q4RVFaZR4USgjrr5u7(si~vHWRi*~%i7BT%Q-allz7^z z^7wLg=x;CZ^zHXhgY%NwH{(!h?E6;svHZ|L#K_b50H*dfOqi$4%yEQM#8 z{jP~`A)D2tAhj(|u(Z`TjqsjS`9P7)+&&(K^PsoSrTRuKg76|pUObn~bInK;a`FgQ zY`d34MQ~#t13wa4`Z=FLz@Rfnhh`MM>F-As-xdtb@aOS_wbId!1IwyDaN^tblONq<6W@xhsFm5sc^W;B^b_dhnrd<(A8aChQ(Y&m^dR^aFEiw~v z*XN)}C`J@TL#whtXOj~{P?NCM2r7ShSam+)hiWm6v->!@&6RYT?(imlv2Ei}8k{(9 z{Ll#$>)f&%=B|2EIHq`MpS>ibpOO}QSjRrmHCjBMTg*A3R2H%o0d`NYPFzBbQQj<; z>Xb!Uywgz_|C8g}Bs1V#u)H33i!}#dm{u^HoSGd-5gA@>{!{th5299t&36m)7*eGr z@DS(ugDDbn=EoDctjUnheGcn56jaO>@lT+N3aGg}5WuS9;H^3>s=%qF%1tb4%EeM8 zmQ#izjn1NN@*7MsLqd5ZQ<+06lcjc1rmR-wYE5M~Jsab>kD(L++5Jlq;Gj)ifeie* znY6GFZbOXi8`MFXjPL>~9V_%XEm^h#_4%49oKS_ynE^KO@0>?ZA429lG7^nak9ann z@`^~u0x_^_9I$C-w^@$n?Idcyv7WN5JH}Z^5oCGv3d>BAxLrC(N6N4GAxf+RgE-+{ zQTv}@hwDg{zGH)b&Zf+9hrj5o4APSiiG)o9l?0cNv@hT10mV+)bXZ#0CC?P9(PMWB zl;;lZtD&%4{U|!2d*pWFaI@EKaJ8{{Z$yuc(5Gj3$GL>N8wW&w^riUtPKx-Oq0Eo-Ry2|IDvxQ$wiK5 zRu~Njj&y9b+ukd6-fW<$UuU>pO!NC~)Wz#rkN7+v5BY8{T0_~#AnkS+wA%J`V7K=i zs_I-`z2uw_B@y#|ZzqU_u1`xnOFqN>K^6;3k3L@ZebgSw@tJCw1 z_0@z;#W{cbDg?ZYayM5*ic1Sk2C>p%N)Gwlk>lmGCp(D3(k_I*&S=0E`f-WD8UCy9 za^RuPD(xJb4cn=tQa;=W6cs?II-*#!^V{X6toF+w168Sbf3ZemPH6yTBfxSl+g3Jt zJybFD-A>U3RZW@s*W|Gfg)hz|(}sNCa-K%UNTuw`nj2?Lf`kIt1n1-hf*9o0l0(%n zSM~^CUC~m|4NaZU(Bj|P@+IEYD(}Hk0i@NJIGJ}SBD_qSv9h-P8Rlp~0KI)FUBQE{ zI2elGPcBiE$;tJ-cGo>`I|M~IQ0N2^MtqFbht!GJ=LthOS^JCBf+#wcKesijJGfh# zCUJ_`uuIo2=*ZM3Rx6U&K~J0#IoQ$Y2U-OUU{>xup*wf}xnil7FhI5qUf8{K-+uQj zmY@2!9ENFI*~;B)3t;zLMC1gZZu=ci(PLCsY9vIe>ldhDPYtfsR8}Q&NcB52<(I{D zI()Xo-3gW}C>1Oi#kJu9h`7f5Q8&%ya_e@&+44-*^{cJ7NicRUwIALBUcC?mFdZcl zVsOk80CU$077x#EDm3m{rqdKJr)+i*j8TVXBq9dVMx7qI(yC-FWoABt{~S6$*Ni|w zrjEv3fBoa{zW_JazgCiRlE5Hne+e{00ew+RVoy1V)%Yoc&kUGFf8Kq69)Okq-^Wi8 zXMH0Fy5aQ?Yi?sqo`^g$O0_xs>8Z*5{Sp*|k2N%xl5CIKD0IrCCpE48RL;OSmx~V$G zW|n}bmDjAC2Rqlmfk4&~AcZ^TZx5*7%~}I0GX7#+tpTRu*}v^j)Z`Q z5C6Utf5Sn5^Y{rH8=C7G{2Q!NXXmnRXC0^j)ah&+{P!7;0q$IXfo7HtIsnVbf3vKB zPA+Gc>NNrM49EX`+G4U_tcjkLmCj$1@~=OwD8OZ7mnb#p=U1WnKVL2n#VhtN&yCkC z6`&6?5JOdJv%j0Q1uRMx zh2{UvmVQ#=@^5i`^8m1{G+F)cQx35B#r{laHZuemivHIr|H**#_bHbJ{Y}5JBYoXn ze{#+IO|yplqW>Qc&DVkcMin zpMOW7&ifVNl@9c4_)prnzhTkBf8bY2xv%j*No@Vb`D*@+|0B5dI>MjSN`6ORZT=PE zkJ=@#!~Ch3@pl;QzF%Sfx3uwfj6aq4{f-g+?e7@>DfWBK{;4MKH;dW-H~UY8-fQ$v zRYAYe@u9!bUo}Fn!9SHf{07O#{sw;+LA-|l^jh~f9I)|UFyJNcYx++wJATt;yZ=Q4 zUVXf#|Fkvun{GS$5B=9h;cN0w`&z$A&XZr{uU)R!+@JObesh%Pe{=uYEqKlT=^61i ztAF_q`}>LUHT|ch_itMK=5PAfLi`u_|1Z3Lg1>GH{&&AXIZ1H9Dg+3K9PlRy8VINW J@c%$S{|Au>*^vMM diff --git a/GSA_distrib/4.1/log_trans_.m b/GSA_distrib/4.1/log_trans_.m deleted file mode 100644 index b0ff26ddf..000000000 --- a/GSA_distrib/4.1/log_trans_.m +++ /dev/null @@ -1,54 +0,0 @@ -function [yy, xdir, isig, lam]=log_trans_(y0,xdir0) - -if nargin==1, - xdir0=''; -end -f=inline('skewness(log(y+lam))','lam','y'); -isig=1; -if ~(max(y0)<0 | min(y0)>0) - if skewness(y0)<0, - isig=-1; - y0=-y0; - end - n=hist(y0,10); - if n(1)>20*n(end), - try lam=fzero(f,[-min(y0)+10*eps -min(y0)+abs(median(y0))],[],y0); - catch - yl(1)=f(-min(y0)+10*eps,y0); - yl(2)=f(-min(y0)+abs(median(y0)),y0); - if abs(yl(1))0 - %yy=log(y0); - xdir=[xdir0,'_log']; - end - try lam=fzero(f,[-min(y0)+10*eps -min(y0)+median(y0)],[],y0); - catch - yl(1)=f(-min(y0)+10*eps,y0); - yl(2)=f(-min(y0)+abs(median(y0)),y0); - if abs(yl(1))1, - ifig=0; - for j=1:M_.exo_nbr, - if mod(j,6)==1 - figure('name',['Variance decomposition shocks']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(2,3,iplo) - myboxplot(squeeze(vdec(:,j,:))',[],'.',[],10) - % boxplot(squeeze(vdec(:,j,:))','whis',10,'symbol','.r') - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:size(options_.varobs,1)]) - set(gca,'xlim',[0.5 size(options_.varobs,1)+0.5]) - set(gca,'ylim',[-2 102]) - for ip=1:size(options_.varobs,1), - text(ip,-4,deblank(options_.varobs(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - ylabel(' ') - title(M_.exo_names(j,:),'interpreter','none') - if mod(j,6)==0 | j==M_.exo_nbr, - saveas(gcf,[OutputDirectoryName,'/',fname_,'_vdec_exo_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_vdec_exo_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_vdec_exo_',int2str(ifig)]); - close(gcf), - end - end - end - for j=1:size(cc,1) - cc(j,j,:)=stand_(squeeze(log(cc(j,j,:))))./2; - end - [vdec, j0, ir_vdec, ic_vdec] = teff(vdec,Nsam,istable); - [cc, j0, ir_cc, ic_cc] = teff(cc,Nsam,istable); - [ac, j0, ir_ac, ic_ac] = teff(ac,Nsam,istable); - - [nr1, nc1, nnn] = size(T); - endo_nbr = M_.endo_nbr; - nstatic = oo_.dr.nstatic; - npred = oo_.dr.npred; - iv = (1:endo_nbr)'; - ic = [ nstatic+(1:npred) endo_nbr+(1:size(oo_.dr.ghx,2)-npred) ]'; - aux = oo_.dr.transition_auxiliary_variables; - k = find(aux(:,2) > npred); - aux(:,2) = aux(:,2) + nstatic; - aux(k,2) = aux(k,2) + oo_.dr.nfwrd; - - dr.ghx = T(:, [1:(nc1-M_.exo_nbr)],1); - dr.ghu = T(:, [(nc1-M_.exo_nbr+1):end], 1); - [Aa,Bb] = kalman_transition_matrix(dr, ... - iv, ic, aux, M_.exo_nbr); -% bayestopt_.restrict_var_list, ... -% bayestopt_.restrict_columns, ... -% bayestopt_.restrict_aux, M_.exo_nbr); - A = zeros(size(Aa,1),size(Aa,2)+size(Aa,1),length(istable)); - % Sig(estim_params_.var_exo(:,1))=lpmatx(1,:).^2; - set_shocks_param(lpmatx(1,:)); - A(:,:,1)=[Aa, triu(Bb*M_.Sigma_e*Bb')]; - for j=2:length(istable), - dr.ghx = T(:, [1:(nc1-M_.exo_nbr)],j); - dr.ghu = T(:, [(nc1-M_.exo_nbr+1):end], j); - [Aa,Bb] = kalman_transition_matrix(dr, ... - iv, ic, aux, M_.exo_nbr); -% bayestopt_.restrict_var_list, ... -% bayestopt_.restrict_columns, ... -% bayestopt_.restrict_aux, M_.exo_nbr); - set_shocks_param(lpmatx(j,:)); - A(:,:,j)=[Aa, triu(Bb*M_.Sigma_e*Bb')]; - end - clear T; - clear lpmatx; - - [nr,nc,nn]=size(A); - io=bayestopt_.mf2; - % T1=A(io,1:nr,:); - % ino=find(~ismember([1:nr],io)); - % T2=A(ino,1:nr,:); - R=A(:,nr+1:nc,:); -% [tadj, iff] = speed(A(1:nr,1:nr,:),R,io,0.5); -% [tadj, j0, ir_tadj, ic_tadj] = teff(tadj,Nsam,istable); -% [iff, j0, ir_if, ic_if] = teff(iff,Nsam,istable); - - - [yt, j0]=teff(A,Nsam,istable); - yt = [yys yt]; - if opt_gsa.morris==2, -% iii=find(std(yt(istable,:))>1.e-8); -% if max(max(abs(TAU-yt(istable,iii)')))<= 1.e-8, -% err = max(max(abs(TAU-yt(istable,iii)'))); -% disp(['Model check OK ',num2str(err)]), - clear TAU A -% end - else - clear A, - end - % [yt1, j01]=teff(T1,Nsam,istable); - % [yt2, j02]=teff(T2,Nsam,istable); - % [ytr, j0r]=teff(R,Nsam,istable); - % - % yt=[yt1 yt2 ytr]; - save([OutputDirectoryName,'/',fname_,'_main_eff'],'ac','cc','vdec','yt','mss') -else - if opt_gsa.morris==2, -% [pdraws, TAU, GAM] = dynare_identification([1:npT]); %,[lpmatx lpmat(istable,:)]); - [pdraws, TAU, GAM] = dynare_identification(options_.options_ident); - end - load([OutputDirectoryName,'/',fname_,'_main_eff'],'ac','cc','vdec','yt','mss') -end - -% for j=1:nr, -% for i=1:nc, -% y0=squeeze(A(j,i,:)); -% if max(y0)-min(y0)>1.e-10, -% j0=j0+1; -% y1=ones(size(lpmat,1),1)*NaN; -% y1(istable,1)=y0; -% yt(:,j0)=y1; -% end -% end -% end -% yt = yt(:,j0); - -if opt_gsa.morris==1, - %OutputDir = CheckPath('GSA/SCREEN'); - if ~isempty(vdec), - if opt_gsa.load_ident_files==0, - SAMorris = []; - for i=1:size(vdec,2), - [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], vdec(:,i),nliv); - end - SAvdec = squeeze(SAMorris(:,1,:))'; - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec') - else - load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec') - end - - figure, -% boxplot(SAvdec,'whis',10,'symbol','r.') - myboxplot(SAvdec,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('All variance decomposition') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_vdec']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_vdec']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_vdec']); - close(gcf) - else - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'vdec') - - end - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET variance decomposition observed variables']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_vdec==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAvdec(iv,:),[],'.',[],3) -% else -% plot(SAvdec(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_vdec_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_vdec_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_vdec_varobs_',int2str(ifig)]); -% close(gcf) -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['EET variance decomposition shocks']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_vdec==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAvdec(iv,:),[],'.',[],3) -% else -% plot(SAvdec(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr, -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_vdec_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_vdec_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_vdec_exo_',int2str(ifig)]); -% close(gcf), -% end -% end - - - if opt_gsa.load_ident_files==0, - SAMorris = []; - ccac = [mss cc ac]; - for i=1:size(ccac,2), - [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], [ccac(:,i)],nliv); - end - SAcc = squeeze(SAMorris(:,1,:))'; - SAcc = SAcc./(max(SAcc')'*ones(1,npT)); - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAcc','cc','ir_cc','ic_cc','-append') - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'ac','ir_ac','ic_ac','-append') - else - load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAcc','cc','ir_cc','ic_cc') - load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'ac','ir_ac','ic_ac') - end - - figure, -% boxplot(SAcc,'whis',10,'symbol','r.') - myboxplot(SAcc,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('EET All moments') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_moments']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_moments']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_moments']); -% close(gcf), - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% MORRIS FOR DERIVATIVES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% if opt_gsa.load_ident_files==0, -% for j=1:npT, -% SAMorris = []; -% ddd=NaN(size(lpmat,1),size(JJ,1)); -% ddd(istable,:) = squeeze(JJ(:,j,:))'; -% for i=1:size(ddd,2), -% [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], [ddd(:,i)],nliv); -% end -% SAddd(:,:,j) = squeeze(SAMorris(:,1,:))'; -% SAddd(:,:,j) = SAddd(:,:,j)./(max(SAddd(:,:,j)')'*ones(1,npT)); -% sad(:,j) = median(SAddd(find(~isnan(squeeze(SAddd(:,1,j)))),:,j))'; -% end -% save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAddd','sad','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAddd','sad') -% end -% figure, -% contourf(sad,10), colorbar -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'yticklabel',' ','fontsize',10,'ytick',[1:npT]) -% for ip=1:npT, -% text(ip,0.9,['D(',bayestopt_.name{ip},')'],'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(0.9,ip,[bayestopt_.name{ip}],'rotation',0,'HorizontalAlignment','right','interpreter','none') -% end -% [m,im]=max(sad); -% iii = find((im-[1:npT])==0); -% disp('Most identified params') -% disp(bayestopt_.name(iii)) - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% END OF MORRIS FOR DERIVATIVES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET cross-correlations']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_cc==j); -% iv = [iv; find(ic_cc==j)]; -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAcc(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAcc(iv,:),[],'.',[],3) -% else -% plot(SAcc(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_cc_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_cc_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_cc_',int2str(ifig)]); -% close(gcf), -% end -% end - - -% if opt_gsa.load_ident_files==0, -% SAMorris = []; -% for i=1:size(ac,2), -% [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], ac(:,i),nliv); -% end -% %end -% SAac = squeeze(SAMorris(:,1,:))'; -% save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAac','ac','ir_ac','ic_ac','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAac','ac','ir_ac','ic_ac') -% end -% figure, -% % boxplot(SAac,'whis',10,'symbol','r.') -% myboxplot(SAac,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title('EET All auto-correlations') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_ac']) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_ac']); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_ac']); -% close(gcf), - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET auto-correlations']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_ac==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAac(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAac(iv,:),[],'.',[],3) -% else -% plot(SAac(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_ac_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_ac_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_ac_',int2str(ifig)]); -% close(gcf), -% end -% end - -% if opt_gsa.load_ident_files==0, -% js=0; -% %for j=1:size(tadj,1), -% SAMorris = []; -% for i=1:size(tadj,2), -% js=js+1; -% [SAmeas, SAMorris(:,:,js)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], tadj(:,i),nliv); -% end -% %end -% SAM = squeeze(SAMorris(nshock+1:end,1,:)); -% for j=1:js, -% SAtadj(:,j)=SAM(:,j)./(max(SAM(:,j))+eps); -% end -% SAtadj = SAtadj'; -% save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAtadj','tadj','ir_tadj','ic_tadj','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAtadj','tadj','ir_tadj','ic_tadj') -% end -% if opt_gsa.load_ident_files==0, -% js=0; -% SAMorris = []; -% for i=1:size(iff,2), -% js=js+1; -% [SAmeas, SAMorriss(:,:,js)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], iff(:,i),nliv); -% end -% SAM = squeeze(SAMorriss(nshock+1:end,1,:)); -% for j=1:js, -% SAIF(:,j)=SAM(:,j)./(max(SAM(:,j))+eps); -% end -% SAIF = SAIF'; -% save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAIF','iff','ir_if','ic_if','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAIF','iff','ir_if','ic_if') -% end -% figure, -% %bar(SAtadj), -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAtadj,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% set(gca,'ylim',[0 1]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title('All half-life') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_tadj']) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_tadj']); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_tadj']); -% close(gcf), - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET speed of adjustment observed variables']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_tadj==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAtadj(iv,:),[],'.',[],3) -% else -% plot(SAtadj(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_tadj_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_tadj_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_tadj_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end - -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['EET speed of adjustment shocks']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_tadj==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAtadj(iv,:),[],'.',[],3) -% else -% plot(SAtadj(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr, -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_tadj_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_tadj_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_tadj_exo_',int2str(ifig)]); -% close(gcf), -% end -% end - -% figure, -% %bar(SAIF), -% % boxplot(SAIF,'whis',10,'symbol','r.') -% myboxplot(SAIF,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% set(gca,'ylim',[0 1]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% ylabel('Elementary Effects') -% title('Steady state gains (impact factors)') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_gain']) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_gain']); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_gain']); -% close(gcf), - %figure, bar(SAIF'), title('All Gain Relationships') -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET steady state gain observed series']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_if==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAIF(iv,:),'whis',10,'symbol','r.'); -% myboxplot(SAIF(iv,:),[],'.',[],10) -% else -% plot(SAIF(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_gain_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_gain_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_gain_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['EET steady state gain shocks']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_if==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAIF(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAIF(iv,:),[],'.',[],3) -% else -% plot(SAIF(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr, -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_gain_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_gain_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_gain_exo_',int2str(ifig)]); -% close(gcf), -% end -% end - - - if opt_gsa.load_ident_files==0, - SAMorris = []; - for j=1:j0, - [SAmeas, SAMorris(:,:,j)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], yt(:,j),nliv); - end - -% SAM = squeeze(SAMorris(nshock+1:end,1,:)); - SAM = squeeze(SAMorris(1:end,1,:)); - for j=1:j0 - SAnorm(:,j)=SAM(:,j)./max(SAM(:,j)); - irex(j)=length(find(SAnorm(:,j)>0.01)); - end - [dum, irel]=sort(irex); - -% SAMmu = squeeze(SAMorris(nshock+1:end,2,:)); - SAMmu = squeeze(SAMorris(1:end,2,:)); - for j=1:j0 - SAmunorm(:,j)=SAMmu(:,j)./max(SAM(:,j)); % normalised w.r.t. mu* - end -% SAMsig = squeeze(SAMorris(nshock+1:end,3,:)); - SAMsig = squeeze(SAMorris(1:end,3,:)); - for j=1:j0 - SAsignorm(:,j)=SAMsig(:,j)./max(SAMsig(:,j)); - end - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAnorm','SAmunorm','SAsignorm','-append') - else - load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAnorm','SAmunorm','SAsignorm') - end - figure, %bar(SAnorm(:,irel)) -% boxplot(SAnorm','whis',10,'symbol','r.') - myboxplot(SAnorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:npT, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('Elementary effects in the model') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_par']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_par']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_par']); - - figure, %bar(SAmunorm(:,irel)) -% boxplot(SAmunorm','whis',10,'symbol','r.') - myboxplot(SAmunorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - set(gca,'ylim',[-1 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('\mu in the model') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morrismu_par']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morrismu_par']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morrismu_par']); - close(gcf), - - figure, %bar(SAsignorm(:,irel)) -% boxplot(SAsignorm','whis',10,'symbol','r.') - myboxplot(SAsignorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('\sigma in the model') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morrissig_par']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morrissig_par']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morrissig_par']); - close(gcf), - - % figure, bar(SAnorm(:,irel)') - % set(gca,'xtick',[1:j0]) - % set(gca,'xlim',[0.5 j0+0.5]) - % title('Elementary effects relationships') - % saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_redform']) - % eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_redform']); - % eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_redform']); - -elseif opt_gsa.morris==3, - np=estim_params_.np; - na=(4*np+1)*opt_gsa.Nsam; - for j=1:j0, - [idex(j,:), yd(j,:)] = spop_ide(lpmat, yt(:,j), opt_gsa.Nsam, 5-1); - end - iok=find(~isnan(yt(1:opt_gsa.Nsam,1))); - yr=NaN*ones(size(lpmat,1),j0); - for j=1:j0, - ys(j,:)=yd(j,:)./max(yd(j,:)); - [dum, is]=sort(yt(iok,j)); - yr(iok(is),j)=[1:length(iok)]'./length(iok); - yr(istable(length(iok)+1:end),j) = interp1(yt(iok,j),yr(iok,j),yt(istable(length(iok)+1:end),j),'','extrap'); - ineg=find(yr(:,j)<0); - if any(ineg), - [dum, is]=sort(yr(ineg,j)); - yr(ineg(is),j)=-[length(ineg):-1:1]./length(iok); - - end - [idex_r(j,:), yd_r(j,:)] = spop_ide(lpmat, yr(:,j), opt_gsa.Nsam, 5-1); - ys_r(j,:)=yd_r(j,:)./max(yd_r(j,:)); - - end, - figure, bar((idex.*ys)./opt_gsa.Nsam), title('Relationships') - figure, bar((idex.*ys)'./opt_gsa.Nsam), title('Parameters') - figure, bar((idex_r.*ys_r)./opt_gsa.Nsam), title('Relationships rank') - figure, bar((idex_r.*ys_r)'./opt_gsa.Nsam), title('Parameters rank') - [v0,d0]=eig(corrcoef(yt(iok,:))); - ee=diag(d0); - ee=ee([end:-1:1])./j0; - i0=length(find(ee>0.01)); - v0=v0(:,[end:-1:1]); - for j=1:i0, - [idex_pc(j,:), yd_pc(j,:)] = spop_ide(lpmat, yt*v0(:,j), opt_gsa.Nsam, 5-1); - end - for j=1:i0, - ys_pc(j,:)=yd_pc(j,:)./max(yd_pc(j,:)); - end, - figure, bar((idex_pc.*ys_pc)./opt_gsa.Nsam), title('Relationships PCA') - figure, bar((idex_pc.*ys_pc)'./opt_gsa.Nsam), title('Parameters PCA') - - [vr,dr]=eig(corrcoef(yr(iok,:))); - er=diag(dr); - er=er([end:-1:1])./j0; - ir0=length(find(er>0.01)); - vr=vr(:,[end:-1:1]); - for j=1:ir0, - [idex_pcr(j,:), yd_pcr(j,:)] = spop_ide(lpmat, yr*vr(:,j), opt_gsa.Nsam, 5-1); - end - for j=1:ir0, - ys_pcr(j,:)=yd_pcr(j,:)./max(yd_pcr(j,:)); - end, - figure, bar((idex_pcr.*ys_pcr)./opt_gsa.Nsam), title('Relationships rank PCA') - figure, bar((idex_pcr.*ys_pcr)'./opt_gsa.Nsam), title('Parameters rank PCA') - -elseif opt_gsa.morris==2, % ISKREV staff - return, - - -else, % main effects analysis - - if itrans==0, - fsuffix = ''; - elseif itrans==1, - fsuffix = '_log'; - else - fsuffix = '_rank'; - end - - imap=[1:npT]; - - x0=[lpmat0(istable,:), lpmat(istable,:)]; - nrun=length(istable); - nest=min(250,nrun); - nfit=min(1000,nrun); - -% opt_gsa.load_ident_files=0; - -% if opt_gsa.load_ident_files==0, -% try -% EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec'); -% catch -% EET=[]; -% end -% SAvdec=zeros(size(vdec,2),npT); -% -% for j=1:size(vdec,2), -% if itrans==0, -% y0 = vdec(istable,j); -% elseif itrans==1, -% y0 = log_trans_(vdec(istable,j)); -% else -% y0 = trank(vdec(istable,j)); -% end -% if ~isempty(EET), -% % imap=find(EET.SAvdec(j,:)); -% % [dum, isort]=sort(-EET.SAvdec(j,:)); -% imap=find(EET.SAvdec(j,:) >= (0.1.*max(EET.SAvdec(j,:))) ); -% end -% gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... -% 2, [],[],[],0,[OutputDirectoryName,'/map_vdec',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_vdec',fsuffix,int2str(j)], pnames); -% end -% -% SAvdec(j,imap)=gsa_(j).si; -% imap_vdec{j}=imap; -% end -% save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_vdec','SAvdec','vdec','ir_vdec','ic_vdec','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_vdec','SAvdec','vdec','ir_vdec','ic_vdec') -% end -% figure, -% % boxplot(SAvdec,'whis',10,'symbol','r.') -% myboxplot(SAvdec,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects variance decomposition ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_vdec',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix]); -% close(gcf), -% -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects observed variance decomposition ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_vdec==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAvdec(iv,:),'whis',10,'symbol','r.'); -% myboxplot(SAvdec(iv,:),[],'.',[],10) -% else -% plot(SAvdec(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_vdec',fsuffix,'_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix,'_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix,'_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['Main effects shocks variance decomposition ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_vdec==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAvdec(iv,:),[],'.',[],10) -% else -% plot(SAvdec(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',3,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% set(gca,'fontsize',10) -% end -% title(M_.exo_names(j,:),'interpreter','none','fontsize',10) -% if mod(j,6)==0 | j==M_.exo_nbr -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_vdec',fsuffix,'_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix,'_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix,'_exo_',int2str(ifig)]); -% close(gcf), -% end -% end - - if opt_gsa.load_ident_files==0, - try - EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAcc','ir_cc','ic_cc'); - catch - EET=[]; - end - ccac = stand_([mss cc ac]); - [pcc, dd] = eig(cov(ccac(istable,:))); - [latent, isort] = sort(-diag(dd)); - latent = -latent; - figure, bar(latent) - title('Eigenvalues in PCA') - pcc=pcc(:,isort); - ccac = ccac*pcc; -% npca = min(40, max(find(cumsum(latent)./length(latent)<0.99))+1); - npca = max(find(cumsum(latent)./length(latent)<0.99))+1; - siPCA = (EET.SAcc'*abs(pcc'))'; -% siPCA = siPCA./(max(siPCA')'*ones(1,npT)).*(latent*ones(1,npT)); - siPCA = siPCA./(max(siPCA')'*ones(1,npT)); -% siPCA = sum(siPCA,1); -% siPCA = siPCA./max(siPCA); - SAcc=zeros(size(ccac,2),npT); - for j=1:npca, %size(ccac,2), - if itrans==0, - y0 = ccac(istable,j); - elseif itrans==1, - y0 = log_trans_(ccac(istable,j)); - else - y0 = trank(ccac(istable,j)); - end - if ~isempty(EET), -% imap=find(EET.SAvdec(j,:)); -% [dum, isort]=sort(-EET.SAvdec(j,:)); - imap=find(siPCA(j,:) >= (0.1.*max(siPCA(j,:))) ); -% imap=find(EET.SAcc(j,:) >= (0.1.*max(EET.SAcc(j,:))) ); - end - gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... - 2, [],[],[],0,[OutputDirectoryName,'/map_cc',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_cc',fsuffix,int2str(j)], pnames); -% end - SAcc(j,imap)=gsa_(j).si; - imap_cc{j}=imap; - - end - save([OutputDirectoryName,'/map_cc',fsuffix],'gsa_') - save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_cc','SAcc','ccac','-append') - else - load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_cc','SAcc','ccac') - - end -% figure, -% % boxplot(SAcc,'whis',10,'symbol','r.') -% myboxplot(SAcc,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% ylabel(' ') -% title(['Main effects moments''s PCA ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_cc',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_moments',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_moments',fsuffix]); -% close(gcf), - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects cross-covariances ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_cc==j); -% iv = [iv; find(ic_cc==j)]; -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAcc(iv,:),'whis',10,'symbol','r.'); -% myboxplot(SAcc(iv,:),[],'.',[],10) -% else -% plot(SAcc(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% set(gca,'fontsize',10) -% end -% title(options_.varobs(j,:),'interpreter','none','fontsize',10) -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_cc',fsuffix,'_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_cc',fsuffix,'_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_cc',fsuffix,'_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% if opt_gsa.load_ident_files==0, -% try -% EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAac','ir_ac','ic_ac'); -% catch -% EET=[]; -% end -% SAac=zeros(size(ac,2),npT); -% for j=1:size(ac,2), -% if itrans==0, -% y0 = ac(istable,j); -% elseif itrans==1, -% y0 = log_trans_(ac(istable,j)); -% else -% y0 = trank(ac(istable,j)); -% end -% if ~isempty(EET), -% imap=find(EET.SAac(j,:) >= (0.1.*max(EET.SAac(j,:))) ); -% end -% % gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% % gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); -% gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... -% 2, [],[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); -% end -% SAac(j,imap)=gsa_(j).si; -% imap_ac{j}=imap; -% -% end -% save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_ac','SAac','ac','ir_ac','ic_ac','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_ac','SAac','ac','ir_ac','ic_ac') -% end -% -% figure, -% % boxplot(SAac,'whis',10,'symbol','r.') -% myboxplot(SAac,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects 1 lag auto-covariances ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_ac',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_ac',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_ac',fsuffix]); -% close(gcf), -% -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects auto-covariances ',fsuffix]); -% ifig=ifig+1; -% iplo = 0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_ac==j); -% %iv = [iv; find(ic_ac==j)]; -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAac(iv,:),'whis',10,'symbol','r.'); -% myboxplot(SAac(iv,:),[],'.',[],10) -% else -% plot(SAac(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% set(gca,'fontsize',10) -% end -% title(options_.varobs(j,:),'interpreter','none','fontsize',10) -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_ac',fsuffix,'_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_ac',fsuffix,'_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_ac',fsuffix,'_',int2str(ifig)]); -% close(gcf), -% end -% end - -% x0=x0(:,nshock+1:end); - imap=[1:npT]; - -% if opt_gsa.load_ident_files==0, -% try -% EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAtadj','ir_tadj','ic_tadj'); -% ny=size(EET.SAtadj,1); -% catch -% EET=[]; -% end -% SAtadj=zeros(size(tadj,2),np); -% for j=1:size(tadj,2), -% if itrans==0, -% y0 = tadj(istable,j); -% elseif itrans==1, -% y0 = log_trans_(tadj(istable,j)); -% else -% y0 = trank(tadj(istable,j)); -% end -% if ~isempty(EET), -% if size(tadj,2)~=ny, -% jj=find(EET.ir_tadj==ir_tadj(j)); -% jj=jj(find(EET.ic_tadj(jj)==ic_tadj(j))); -% if ~isempty(jj), -% imap=find(EET.SAtadj(jj,:) >= (0.1.*max(EET.SAtadj(jj,:))) ); -% else -% imap=[1:np]; -% end -% else -% imap=find(EET.SAtadj(j,:) >= (0.1.*max(EET.SAtadj(j,:))) ); -% end -% end -% % gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% % gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); -% gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... -% 2, [],[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); -% end -% SAtadj(j,imap)=gsa_(j).si; -% imap_tadj{j}=imap; -% -% end -% save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_tadj','SAtadj','tadj','ir_tadj','ic_tadj','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_tadj','SAtadj','tadj','ir_tadj','ic_tadj') -% end -% -% figure, -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAtadj,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects speed of adjustment ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_tadj',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix]); -% close(gcf), -% -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects observed speed adjustment ',fsuffix]); -% ifig=ifig+1; -% iplo = 0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_tadj==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAtadj(iv,:),[],'.',[],10) -% else -% plot(SAtadj(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_tadj',fsuffix,'_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix,'_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix,'_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['Main effects shocks speed of adjustment ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_tadj==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAtadj(iv,:),[],'.',[],10) -% else -% plot(SAtadj(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr, -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_tadj',fsuffix,'_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix,'_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix,'_exo_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% -% if opt_gsa.load_ident_files==0, -% try -% EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAIF','ir_if','ic_if'); -% catch -% EET=[]; -% end -% SAif=zeros(size(iff,2),np); -% for j=1:size(iff,2), -% if itrans==0, -% y0 = iff(istable,j); -% elseif itrans==1, -% y0 = log_trans_(iff(istable,j)); -% else -% y0 = trank(iff(istable,j)); -% end -% if ~isempty(EET), -% imap=find(EET.SAIF(j,:) >= (0.1.*max(EET.SAIF(j,:))) ); -% end -% % gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% % gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); -% gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... -% 2, [],[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); -% end -% SAif(j,imap)=gsa_(j).si; -% imap_if{j}=imap; -% -% end -% save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_if','SAif','iff','ir_if','ic_if','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_if','SAif','iff','ir_if','ic_if') -% end -% -% figure, -% % boxplot(SAif,'whis',10,'symbol','r.') -% myboxplot(SAif,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects impact factors ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_if',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_if',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_if',fsuffix]); -% close(gcf), -% -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects observed impact factors ',fsuffix]); -% ifig=ifig+1; -% iplo = 0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_if==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAif(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAif(iv,:),[],'.',[],10) -% else -% plot(SAif(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_if',fsuffix,'_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_if',fsuffix,'_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_if',fsuffix,'_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['Main effects shocks impact factors ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_if==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAif(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAif(iv,:),[],'.',[],10) -% else -% plot(SAif(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_if',fsuffix,'_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_if',fsuffix,'_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_if',fsuffix,'_exo_',int2str(ifig)]); -% close(gcf), -% end -% end -% SAmom = [SAvdec' SAcc' SAac']'; -% SAdyn = [SAtadj' SAif']'; -% SAall = [SAmom(:,nshock+1:end)' SAdyn']'; -% -% figure, -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAmom,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:npT, -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects theoretical moments ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_moments',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_moments',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_moments',fsuffix]); -% % close(gcf), -% -% figure, -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAdyn,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects short-long term dynamics ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_dynamics',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_dynamics',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_dynamics',fsuffix]); -% % close(gcf), -% -% figure, -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAall,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects all ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_ALL',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_ALL',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_ALL',fsuffix]); -% % close(gcf), - -% for j=1:size(SAall,1), -% SAallN(j,:)=SAall(j,:)./max(SAall(j,:)); -% end -% SAmean=mean(SAallN); -% for j=1:size(SAmom,1), -% SAmomN(j,:)=SAmom(j,1:nshock)./max(SAmom(j,1:nshock)); -% end -% SAmomN(find(isnan(SAmomN)))=0; -% SAmeanexo=mean(SAmomN(:,1:nshock)); - -% figure, bar(latent'*SAcc), - figure, bar(sum(SAcc)), - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-0.02*(ydum(2)),bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - % text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title(['Identifiability indices in the ',fsuffix,' moments.'],'interpreter','none') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_ident_ALL',fsuffix]) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_ident_ALL',fsuffix]); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_ident_ALL',fsuffix]); - -% figure, bar(SAmeanexo), -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:nshock]) -% set(gca,'xlim',[0.5 nshock+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:nshock, -% % text(ip,-0.02*(ydum(2)),deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02*(ydum(2)),bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Identifiability indices for shocks',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_ident_SHOCKS',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_ident_SHOCKS',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_ident_SHOCKS',fsuffix]); -end - -return diff --git a/GSA_distrib/4.1/mc_moments.m b/GSA_distrib/4.1/mc_moments.m deleted file mode 100644 index 0f38ff6a6..000000000 --- a/GSA_distrib/4.1/mc_moments.m +++ /dev/null @@ -1,25 +0,0 @@ -function [vdec, cc, ac] = mc_moments(mm, ss, dr) -global options_ M_ - - [nr1, nc1, nsam] = size(mm); - disp('Computing theoretical moments ...') - h = waitbar(0,'Theoretical moments ...'); - - for j=1:nsam, - dr.ghx = mm(:, [1:(nc1-M_.exo_nbr)],j); - dr.ghu = mm(:, [(nc1-M_.exo_nbr+1):end], j); - if ~isempty(ss), - set_shocks_param(ss(j,:)); - end - [vdec(:,:,j), corr, autocorr, z, zz] = th_moments(dr,options_.varobs); - cc(:,:,j)=triu(corr); - dum=[]; - for i=1:options_.ar - dum=[dum, autocorr{i}]; - end - ac(:,:,j)=dum; - waitbar(j/nsam,h) - end - close(h) - disp(' ') - disp('... done !') diff --git a/GSA_distrib/4.1/myboxplot.m b/GSA_distrib/4.1/myboxplot.m deleted file mode 100644 index 096d1a854..000000000 --- a/GSA_distrib/4.1/myboxplot.m +++ /dev/null @@ -1,158 +0,0 @@ - -function sout = myboxplot (data,notched,symbol,vertical,maxwhisker) - -% sout = myboxplot (data,notched,symbol,vertical,maxwhisker) - -% % % % endif -if nargin < 5 | isempty(maxwhisker), maxwhisker = 1.5; end -if nargin < 4 | isempty(vertical), vertical = 1; end -if nargin < 3 | isempty(symbol), symbol = ['+','o']; end -if nargin < 2 | isempty(notched), notched = 0; end - -if length(symbol)==1, symbol(2)=symbol(1); end - -if notched==1, notched=0.25; end -a=1-notched; - -% ## figure out how many data sets we have -if iscell(data), - nc = length(data); -else -% if isvector(data), data = data(:); end - nc = size(data,2); -end - -% ## compute statistics -% ## s will contain -% ## 1,5 min and max -% ## 2,3,4 1st, 2nd and 3rd quartile -% ## 6,7 lower and upper confidence intervals for median -s = zeros(7,nc); -box = zeros(1,nc); -whisker_x = ones(2,1)*[1:nc,1:nc]; -whisker_y = zeros(2,2*nc); -outliers_x = []; -outliers_y = []; -outliers2_x = []; -outliers2_y = []; - -for i=1:nc - % ## Get the next data set from the array or cell array - if iscell(data) - col = data{i}(:); - else - col = data(:,i); - end -% ## Skip missing data -% % % % % % % col(isnan(col) | isna (col)) = []; - col(isnan(col)) = []; - - % ## Remember the data length - nd = length(col); - box(i) = nd; - if (nd > 1) -% ## min,max and quartiles -% s(1:5,i) = statistics(col)(1:5); -s(1,i)=min(col); -s(5,i)=max(col); -s(2,i)=myprctilecol(col,25); -s(3,i)=myprctilecol(col,50); -s(4,i)=myprctilecol(col,75); - - - - - - - - -% ## confidence interval for the median - est = 1.57*(s(4,i)-s(2,i))/sqrt(nd); - s(6,i) = max([s(3,i)-est, s(2,i)]); - s(7,i) = min([s(3,i)+est, s(4,i)]); -% ## whiskers out to the last point within the desired inter-quartile range - IQR = maxwhisker*(s(4,i)-s(2,i)); - whisker_y(:,i) = [min(col(col >= s(2,i)-IQR)); s(2,i)]; - whisker_y(:,nc+i) = [max(col(col <= s(4,i)+IQR)); s(4,i)]; -% ## outliers beyond 1 and 2 inter-quartile ranges - outliers = col((col < s(2,i)-IQR & col >= s(2,i)-2*IQR) | (col > s(4,i)+IQR & col <= s(4,i)+2*IQR)); - outliers2 = col(col < s(2,i)-2*IQR | col > s(4,i)+2*IQR); - outliers_x = [outliers_x; i*ones(size(outliers))]; - outliers_y = [outliers_y; outliers]; - outliers2_x = [outliers2_x; i*ones(size(outliers2))]; - outliers2_y = [outliers2_y; outliers2]; - elseif (nd == 1) -% ## all statistics collapse to the value of the point - s(:,i) = col; -% ## single point data sets are plotted as outliers. - outliers_x = [outliers_x; i]; - outliers_y = [outliers_y; col]; - else -% ## no statistics if no points - s(:,i) = NaN; - end -end -% % % % if isempty(outliers2_y) -% % % % outliers2_y= -% ## Note which boxes don't have enough stats -chop = find(box <= 1); - -% ## Draw a box around the quartiles, with width proportional to the number of -% ## items in the box. Draw notches if desired. -box = box*0.23/max(box); -quartile_x = ones(11,1)*[1:nc] + [-a;-1;-1;1;1;a;1;1;-1;-1;-a]*box; -quartile_y = s([3,7,4,4,7,3,6,2,2,6,3],:); - -% ## Draw a line through the median -median_x = ones(2,1)*[1:nc] + [-a;+a]*box; -% median_x=median(col); -median_y = s([3,3],:); - -% ## Chop all boxes which don't have enough stats -quartile_x(:,chop) = []; -quartile_y(:,chop) = []; -whisker_x(:,[chop,chop+nc]) = []; -whisker_y(:,[chop,chop+nc]) = []; -median_x(:,chop) = []; -median_y(:,chop) = []; -% % % % -% ## Add caps to the remaining whiskers -cap_x = whisker_x; -cap_x(1,:) =cap_x(1,:)- 0.05; -cap_x(2,:) =cap_x(2,:)+ 0.05; -cap_y = whisker_y([1,1],:); - -% #quartile_x,quartile_y -% #whisker_x,whisker_y -% #median_x,median_y -% #cap_x,cap_y -% -% ## Do the plot - -mm=min(min(data)); -MM=max(max(data)); - -if vertical - plot (quartile_x, quartile_y, 'b', ... - whisker_x, whisker_y, 'b--', ... - cap_x, cap_y, 'k', ... - median_x, median_y, 'r', ... - outliers_x, outliers_y, [symbol(1),'r'], ... - outliers2_x, outliers2_y, [symbol(2),'r']); - set(gca,'XTick',1:nc); - set(gca, 'XLim', [0.5, nc+0.5]); - set(gca, 'YLim', [mm-(MM-mm)*0.05-eps, MM+(MM-mm)*0.05+eps]); - -else -% % % % % plot (quartile_y, quartile_x, "b;;", -% % % % % whisker_y, whisker_x, "b;;", -% % % % % cap_y, cap_x, "b;;", -% % % % % median_y, median_x, "r;;", -% % % % % outliers_y, outliers_x, [symbol(1),"r;;"], -% % % % % outliers2_y, outliers2_x, [symbol(2),"r;;"]); -end - -if nargout, - sout=s; -end -% % % endfunction \ No newline at end of file diff --git a/GSA_distrib/4.1/myprctilecol.m b/GSA_distrib/4.1/myprctilecol.m deleted file mode 100644 index d99d5ad50..000000000 --- a/GSA_distrib/4.1/myprctilecol.m +++ /dev/null @@ -1,20 +0,0 @@ -function y = myprctilecol(x,p); -xx = sort(x); -[m,n] = size(x); - -if m==1 | n==1 - m = max(m,n); - if m == 1, - y = x*ones(length(p),1); - return; - end - n = 1; - q = 100*(0.5:m - 0.5)./m; - xx = [min(x); xx(:); max(x)]; -else - q = 100*(0.5:m - 0.5)./m; - xx = [min(x); xx; max(x)]; -end - -q = [0 q 100]; -y = interp1(q,xx,p); \ No newline at end of file diff --git a/GSA_distrib/4.1/norm_inv.m b/GSA_distrib/4.1/norm_inv.m deleted file mode 100644 index e676be94e..000000000 --- a/GSA_distrib/4.1/norm_inv.m +++ /dev/null @@ -1,49 +0,0 @@ -function invp = norm_inv(x, m, sd) -% PURPOSE: computes the quantile (inverse of the CDF) -% for each component of x with mean m, standard deviation sd -%--------------------------------------------------- -% USAGE: invp = norm_inv(x,m,v) -% where: x = variable vector (nx1) -% m = mean vector (default=0) -% sd = standard deviation vector (default=1) -%--------------------------------------------------- -% RETURNS: invp (nx1) vector -%--------------------------------------------------- -% SEE ALSO: norm_d, norm_rnd, norm_inv, norm_cdf -%--------------------------------------------------- - -% Written by KH (Kurt.Hornik@ci.tuwien.ac.at) on Oct 26, 1994 -% Copyright Dept of Probability Theory and Statistics TU Wien -% Converted to MATLAB by JP LeSage, jpl@jpl.econ.utoledo.edu - - if nargin > 3 - error ('Wrong # of arguments to norm_inv'); - end - - [r, c] = size (x); - s = r * c; - - if (nargin == 1) - m = zeros(1,s); - sd = ones(1,s); - end - - - if length(m)==1, - m = repmat(m,1,s); - end - if length(sd)==1, - sd = repmat(sd,1,s); - end - x = reshape(x,1,s); - m = reshape(m,1,s); - sd = reshape(sd,1,s); - - invp = zeros (1,s); - - invp = m + sd .* (sqrt(2) * erfinv(2 * x - 1)); - - - - invp = reshape (invp, r, c); - diff --git a/GSA_distrib/4.1/optget.m b/GSA_distrib/4.1/optget.m deleted file mode 100644 index b2893e2ce..000000000 --- a/GSA_distrib/4.1/optget.m +++ /dev/null @@ -1,39 +0,0 @@ -% OPTGET Utility to get previously set function default values -% USAGE -% optvalue=optget(funcname,optname,optvalue); -% INPUTS -% funcname : name of function -% optname : name of option -% optval : option value -% OUTPUT -% optval : the current value of the option -% -% If the named field is not already defined, it will be set to -% optvalue, but optvalue has no effect if the field has already -% been set. Use OPTSET to change a previously set field. -% -% optget(funcname) returns the current values of the options structure. - -% Copyright (c) 1997-2000, Paul L. Fackler & Mario J. Miranda -% paul_fackler@ncsu.edu, miranda.4@osu.edu - -function optvalue = optget(funcname,optname,optvalue) - -funcname = lower(funcname); -optvar=[funcname '_options']; -eval(['global ' optvar]) % declare a global variable - -if nargin==1 % return the whole option structure - optvalue=(eval(optvar)); - return -end - -optname = lower(optname); -% if structure is empty or the named field does not exist -% set to the value passed -if isempty(eval(optvar)) | ~isfield(eval(optvar),optname) - eval([optvar '.' optname '=optvalue;']); -% otherwise return the value in the field -else - optvalue = eval([optvar '.' optname]); -end diff --git a/GSA_distrib/4.1/prior_draw_gsa.m b/GSA_distrib/4.1/prior_draw_gsa.m deleted file mode 100644 index 278e1e237..000000000 --- a/GSA_distrib/4.1/prior_draw_gsa.m +++ /dev/null @@ -1,105 +0,0 @@ -function pdraw = prior_draw_gsa(init,rdraw) -% Draws from the prior distributions -% Adapted by M. Ratto from prior_draw (of DYNARE, copyright M. Juillard), -% for use with Sensitivity Toolbox for DYNARE -% -% -% INPUTS -% o init [integer] scalar equal to 1 (first call) or 0. -% o rdraw -% -% OUTPUTS -% o pdraw [double] draw from the joint prior density. -% -% ALGORITHM -% ... -% -% SPECIAL REQUIREMENTS -% MATLAB Statistics Toolbox -% -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -% global M_ options_ estim_params_ bayestopt_ -global bayestopt_ -persistent npar pshape p6 p7 p3 p4 lbcum ubcum - -if init - pshape = bayestopt_.pshape; - p6 = bayestopt_.p6; - p7 = bayestopt_.p7; - p3 = bayestopt_.p3; - p4 = bayestopt_.p4; - npar = length(p6); - pdraw = zeros(npar,1); - lbcum = zeros(npar,1); - ubcum = ones(npar,1); - - % set bounds for cumulative probabilities - for i = 1:npar - switch pshape(i) - case 5% Uniform prior. - p4(i) = min(p4(i),bayestopt_.ub(i)); - p3(i) = max(p3(i),bayestopt_.lb(i)); - case 3% Gaussian prior. - lbcum(i) = 0.5 * erfc(-(bayestopt_.lb(i)-p6(i))/p7(i) ./ sqrt(2));; - ubcum(i) = 0.5 * erfc(-(bayestopt_.ub(i)-p6(i))/p7(i) ./ sqrt(2));; - case 2% Gamma prior. - lbcum(i) = gamm_cdf((bayestopt_.lb(i)-p3(i))/p7(i),p6(i)); - ubcum(i) = gamm_cdf((bayestopt_.ub(i)-p3(i))/p7(i),p6(i)); - case 1% Beta distribution (TODO: generalized beta distribution) - lbcum(i) = betainc((bayestopt_.lb(i)-p3(i))./(p4(i)-p3(i)),p6(i),p7(i)); - ubcum(i) = betainc((bayestopt_.ub(i)-p3(i))./(p4(i)-p3(i)),p6(i),p7(i)); - case 4% INV-GAMMA1 distribution - % TO BE CHECKED - lbcum(i) = gamm_cdf((1/(bayestopt_.ub(i)-p3(i))^2)/(2/p6(i)),p7(i)/2); - ubcum(i) = gamm_cdf((1/(bayestopt_.lb(i)-p3(i))^2)/(2/p6(i)),p7(i)/2); - case 6% INV-GAMMA2 distribution - % TO BE CHECKED - lbcum(i) = gamm_cdf((1/(bayestopt_.ub(i)-p3(i)))/(2/p6(i)),p7(i)/2); - ubcum(i) = gamm_cdf((1/(bayestopt_.lb(i)-p3(i)))/(2/p6(i)),p7(i)/2); - otherwise - % Nothing to do here. - end - end - return -end - - -for i = 1:npar - rdraw(:,i) = rdraw(:,i).*(ubcum(i)-lbcum(i))+lbcum(i); - switch pshape(i) - case 5% Uniform prior. - pdraw(:,i) = rdraw(:,i)*(p4(i)-p3(i)) + p3(i); - case 3% Gaussian prior. - pdraw(:,i) = norm_inv(rdraw(:,i),p6(i),p7(i)); - case 2% Gamma prior. - pdraw(:,i) = gamm_inv(rdraw(:,i),p6(i),p7(i))+p3(i); - case 1% Beta distribution (TODO: generalized beta distribution) - pdraw(:,i) = beta_inv(rdraw(:,i),p6(i),p7(i))*(p4(i)-p3(i))+p3(i); - case 4% INV-GAMMA1 distribution - % TO BE CHECKED - pdraw(:,i) = sqrt(1./gamm_inv(rdraw(:,i),p7(i)/2,2/p6(i)))+p3(i); - case 6% INV-GAMMA2 distribution - % TO BE CHECKED - pdraw(:,i) = 1./gamm_inv(rdraw(:,i),p7(i)/2,2/p6(i))+p3(i); - otherwise - % Nothing to do here. - end -end - - diff --git a/GSA_distrib/4.1/priorcdf.m b/GSA_distrib/4.1/priorcdf.m deleted file mode 100644 index 53d8ec34d..000000000 --- a/GSA_distrib/4.1/priorcdf.m +++ /dev/null @@ -1,50 +0,0 @@ -function [xcum] = priorcdf(para, pshape, p6, p7, p3, p4) -% This procedure transforms x vectors into cumulative values -% pshape: 0 is point mass, both para and p2 are ignored -% 1 is BETA(mean,stdd) -% 2 is GAMMA(mean,stdd) -% 3 is NORMAL(mean,stdd) -% 4 is INVGAMMA(s^2,nu) -% 5 is UNIFORM [p1,p2] -% Adapted by M. Ratto from MJ priordens.m - -nprio = length(pshape); - -i = 1; -while i <= nprio; - a = 0; - b = 0; - if pshape(i) == 1; % (generalized) BETA Prior -% mu = (p1(i)-p3(i))/(p4(i)-p3(i)); -% stdd = p2(i)/(p4(i)-p3(i)); -% a = (1-mu)*mu^2/stdd^2 - mu; -% b = a*(1/mu - 1); - %lnprior = lnprior + lpdfgbeta(para(i),a,b,p3(i),p4(i)) ; - para(:,i) = (para(:,i)-p3(i))./(p4(i)-p3(i)); -% xcum(:,i) = betacdf(para(:,i),a,b) ; - xcum(:,i) = betainc(para(:,i),p6(i),p7(i)); - elseif pshape(i) == 2; % GAMMA PRIOR -% b = p2(i)^2/(p1(i)-p3(i)); -% a = (p1(i)-p3(i))/b; - %lnprior = lnprior + lpdfgam(para(i)-p3(i),a,b); -% xcum(:,i) = gamcdf(para(:,i)-p3(i),a,b); - xcum(:,i) = gamm_cdf((para(:,i)-p3(i))./p7(i),p6(i)); - elseif pshape(i) == 3; % GAUSSIAN PRIOR - %lnprior = lnprior + lpdfnorm(para(i),p1(i),p2(i)); -% xcum(:,i) = normcdf(para(:,i),p1(i),p2(i)); - xcum(:,i) = 0.5 * erfc(-(para(:,i)-p6(i))/p7(i) ./ sqrt(2)); - elseif pshape(i) == 4; % INVGAMMA1 PRIOR - %lnprior = lnprior + lpdfig1(para(i),p1(i),p2(i)); -% xcum(:,i) = gamcdf(1/para(:,i).^2,p2(i)/2,2/p1(i)); - xcum(:,i) = gamm_cdf((1./(para(:,i)-p3(i)).^2)/(2/p6(i)),p7(i)/2); - elseif pshape(i) == 5; % UNIFORM PRIOR - %lnprior = lnprior + log(1/(p2(i)-p1(i))); - xcum(:,i) = (para(:,i)-p3(i))./(p4(i)-p3(i)); - elseif pshape(i) == 6; % INVGAMMA2 PRIOR -% lnprior = lnprior + lpdfig2(para(i),p1(i),p2(i)); -% xcum(:,i) = gamcdf(1/para(:,i),p2(i)/2,2/p1(i)); - xcum(:,i) = gamm_cdf((1./(para(:,i)-p3(i)))./(2/p6(i)),p7(i)/2); - end; - i = i+1; -end; - diff --git a/GSA_distrib/4.1/read_data.m b/GSA_distrib/4.1/read_data.m deleted file mode 100644 index f54f66cb6..000000000 --- a/GSA_distrib/4.1/read_data.m +++ /dev/null @@ -1,39 +0,0 @@ -function [gend, data] = read_data -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global options_ bayestopt_ - -rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range); - -options_ = set_default_option(options_,'nobs',size(rawdata,1)-options_.first_obs+1); -gend = options_.nobs; - -rawdata = rawdata(options_.first_obs:options_.first_obs+gend-1,:); -if options_.loglinear == 1 & ~options_.logdata - rawdata = log(rawdata); -end -if options_.prefilter == 1 - bayestopt_.mean_varobs = mean(rawdata,1); - data = transpose(rawdata-ones(gend,1)*bayestopt_.mean_varobs); -else - data = transpose(rawdata); -end - -if ~isreal(rawdata) - error(['There are complex values in the data. Probably a wrong' ... - ' transformation']) -end diff --git a/GSA_distrib/4.1/redform_map.m b/GSA_distrib/4.1/redform_map.m deleted file mode 100644 index 2350c5993..000000000 --- a/GSA_distrib/4.1/redform_map.m +++ /dev/null @@ -1,351 +0,0 @@ -function redform_map(dirname) -%function redform_map(dirname) -% inputs (from opt_gsa structure -% anamendo = options_gsa_.namendo; -% anamlagendo = options_gsa_.namlagendo; -% anamexo = options_gsa_.namexo; -% iload = options_gsa_.load_redform; -% pprior = options_gsa_.pprior; -% ilog = options_gsa_.logtrans_redform; -% threshold = options_gsa_.threshold_redform; -% ksstat = options_gsa_.ksstat_redform; -% alpha2 = options_gsa_.alpha2_redform; -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global M_ oo_ estim_params_ options_ bayestopt_ - -options_gsa_ = options_.opt_gsa; - -anamendo = options_gsa_.namendo; -anamlagendo = options_gsa_.namlagendo; -anamexo = options_gsa_.namexo; -iload = options_gsa_.load_redform; -pprior = options_gsa_.pprior; -ilog = options_gsa_.logtrans_redform; -threshold = options_gsa_.threshold_redform; -ksstat = options_gsa_.ksstat_redform; -alpha2 = options_gsa_.alpha2_redform; - -pnames = M_.param_names(estim_params_.param_vals(:,1),:); -if nargin==0, - dirname=''; -end - -if pprior - load([dirname,'/',M_.fname,'_prior']); - adir=[dirname '/redform_stab']; -else - load([dirname,'/',M_.fname,'_mc']); - adir=[dirname '/redform_mc']; -end -if ~exist('T') - stab_map_(dirname); -if pprior - load([dirname,'/',M_.fname,'_prior'],'T'); -else - load([dirname,'/',M_.fname,'_mc'],'T'); -end -end -if isempty(dir(adir)) - mkdir(adir) -end -adir0=pwd; -%cd(adir) - -nspred=size(T,2)-M_.exo_nbr; -x0=lpmat(istable,:); -[kn, np]=size(x0); -offset = length(bayestopt_.pshape)-np; -if options_gsa_.prior_range, - pshape=5*(ones(np,1)); - pd = [NaN(np,1) NaN(np,1) bayestopt_.lb(offset+1:end) bayestopt_.ub(offset+1:end)]; -else - pshape = bayestopt_.pshape(offset+1:end); - pd = [bayestopt_.p6(offset+1:end) bayestopt_.p7(offset+1:end) bayestopt_.p3(offset+1:end) bayestopt_.p4(offset+1:end)]; -end - -nsok = length(find(M_.lead_lag_incidence(M_.maximum_lag,:))); -clear lpmat lpmat0 egg iunstable yys -js=0; -for j=1:size(anamendo,1) - namendo=deblank(anamendo(j,:)); - iendo=strmatch(namendo,M_.endo_names(oo_.dr.order_var,:),'exact'); - ifig=0; - iplo=0; - for jx=1:size(anamexo,1) - namexo=deblank(anamexo(jx,:)); - iexo=strmatch(namexo,M_.exo_names,'exact'); - - if ~isempty(iexo), - %y0=squeeze(T(iendo,iexo+nspred,istable)); - y0=squeeze(T(iendo,iexo+nspred,:)); - if (max(y0)-min(y0))>1.e-10, - if mod(iplo,9)==0, - ifig=ifig+1; - hfig = figure('name',[namendo,' vs. shocks ',int2str(ifig)]); - iplo=0; - end - iplo=iplo+1; - js=js+1; - xdir0 = [adir,'/',namendo,'_vs_', namexo]; - if ilog==0, - if isempty(threshold) - si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namexo, xdir0); - else - iy=find( (y0>threshold(1)) & (y0=threshold(2))); - xdir = [xdir0,'_cut']; - if ~isempty(iy), - si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namexo, xdir); - end - if ~isempty(iy) & ~isempty(iyc) - delete([xdir, '/*cut*.*']) - [proba, dproba] = stab_map_1(x0, iy, iyc, 'cut',0); - indsmirnov = find(dproba>ksstat); - stab_map_1(x0, iy, iyc, 'cut',1,indsmirnov,xdir); - stab_map_2(x0(iy,:),alpha2,'cut',xdir) - stab_map_2(x0(iyc,:),alpha2,'trim',xdir) - end - end - else - [yy, xdir] = log_trans_(y0,xdir0); - silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namexo, xdir); - end - - figure(hfig) - subplot(3,3,iplo), - if ilog, - [saso, iso] = sort(-silog(:,js)); - bar([silog(iso(1:min(np,10)),js)]) - logflag='log'; - else - [saso, iso] = sort(-si(:,js)); - bar(si(iso(1:min(np,10)),js)) - logflag=''; - end - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - title([logflag,' ',namendo,' vs. ',namexo],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - close(gcf) - end - - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - close(gcf) - end - ifig=0; - iplo=0; - for je=1:size(anamlagendo,1) - namlagendo=deblank(anamlagendo(je,:)); - ilagendo=strmatch(namlagendo,M_.endo_names(oo_.dr.order_var(oo_.dr.nstatic+1:oo_.dr.nstatic+nsok),:),'exact'); - - if ~isempty(ilagendo), - %y0=squeeze(T(iendo,ilagendo,istable)); - y0=squeeze(T(iendo,ilagendo,:)); - if (max(y0)-min(y0))>1.e-10, - if mod(iplo,9)==0, - ifig=ifig+1; - hfig = figure('name',[namendo,' vs. lags ',int2str(ifig)]); - iplo=0; - end - iplo=iplo+1; - js=js+1; - xdir0 = [adir,'/',namendo,'_vs_', namlagendo]; - if ilog==0, - if isempty(threshold) - si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namlagendo, xdir0); - else - iy=find( (y0>threshold(1)) & (y0=threshold(2))); - xdir = [xdir0,'_cut']; - if ~isempty(iy) - si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namlagendo, xdir); - end - if ~isempty(iy) & ~isempty(iyc), - delete([xdir, '/*cut*.*']) - [proba, dproba] = stab_map_1(x0, iy, iyc, 'cut',0); - indsmirnov = find(dproba>ksstat); - stab_map_1(x0, iy, iyc, 'cut',1,indsmirnov,xdir); - stab_map_2(x0(iy,:),alpha2,'cut',xdir) - stab_map_2(x0(iyc,:),alpha2,'trim',xdir) - end - end - else - [yy, xdir] = log_trans_(y0,xdir0); - silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namlagendo, xdir); - end - - figure(hfig), - subplot(3,3,iplo), - if ilog, - [saso, iso] = sort(-silog(:,js)); - bar([silog(iso(1:min(np,10)),js)]) - logflag='log'; - else - [saso, iso] = sort(-si(:,js)); - bar(si(iso(1:min(np,10)),js)) - logflag=''; - end - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - title([logflag,' ',namendo,' vs. ',namlagendo,'(-1)'],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - close(gcf) - end - - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - close(gcf) - end -end - -if ilog==0, -figure, %bar(si) -% boxplot(si','whis',10,'symbol','r.') -myboxplot(si',[],'.',[],10) -xlabel(' ') -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -title('Reduced form GSA') - -saveas(gcf,[dirname,'/',M_.fname,'_redform_gsa']) -eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_gsa']); -eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_gsa']); - -else -figure, %bar(silog) -% boxplot(silog','whis',10,'symbol','r.') -myboxplot(silog',[],'.',[],10) -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -xlabel(' ') -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -title('Reduced form GSA - Log-transformed elements') - -saveas(gcf,[dirname,'/',M_.fname,'_redform_gsa_log']) -eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_gsa_log']); -eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_gsa_log']); - -end -function si = redform_private(x0, y0, pshape, pd, iload, pnames, namy, namx, xdir) -global bayestopt_ options_ - -opt_gsa=options_.opt_gsa; -np=size(x0,2); -x00=x0; - if opt_gsa.prior_range, - for j=1:np, - x0(:,j)=(x0(:,j)-pd(j,3))./(pd(j,4)-pd(j,3)); - end - else - x0=priorcdf(x0,pshape, pd(:,1), pd(:,2), pd(:,3), pd(:,4)); - end - -fname=[xdir,'/map']; -if iload==0, - figure, hist(y0,30), title([namy,' vs. ', namx]) - if isempty(dir(xdir)) - mkdir(xdir) - end - saveas(gcf,[xdir,'/', namy,'_vs_', namx]) - eval(['print -depsc2 ' xdir,'/', namy,'_vs_', namx]); - eval(['print -dpdf ' xdir,'/', namy,'_vs_', namx]); - close(gcf) -% gsa_ = gsa_sdp_dyn(y0, x0, -2, [],[],[],1,fname, pnames); - nrun=length(y0); - nest=min(250,nrun); - nfit=min(1000,nrun); -% dotheplots = (nfit<=nest); - gsa_ = gsa_sdp(y0(1:nest), x0(1:nest,:), 2, [],[-1 -1 -1 -1 -1 0],[],0,[fname,'_est'], pnames); - if nfit>nest, - gsa_ = gsa_sdp(y0(1:nfit), x0(1:nfit,:), -2, gsa_.nvr*nest^3/nfit^3,[-1 -1 -1 -1 -1 0],[],0,fname, pnames); - end - save([fname,'.mat'],'gsa_') - [sidum, iii]=sort(-gsa_.si); - gsa_.x0=x00(1:nfit,:); - hfig=gsa_sdp_plot(gsa_,fname,pnames,iii(1:min(12,np))); - close(hfig); - gsa_.x0=x0(1:nfit,:); -% copyfile([fname,'_est.mat'],[fname,'.mat']) - figure, - plot(y0(1:nfit),[gsa_.fit y0(1:nfit)],'.'), - title([namy,' vs. ', namx,' fit']) - saveas(gcf,[xdir,'/', namy,'_vs_', namx,'_fit']) - eval(['print -depsc2 ' xdir,'/', namy,'_vs_', namx,'_fit']); - eval(['print -dpdf ' xdir,'/', namy,'_vs_', namx,'_fit']); - close(gcf) - if nfit0 & ifig, - saveas(gcf,[dirname,'/',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]); - close(gcf) - end - - iplo=0; - ifig=0; - for je=1:size(anamlagendo,1) - namlagendo=deblank(anamlagendo(je,:)); - ilagendo=strmatch(namlagendo,M_.endo_names(oo_.dr.order_var(oo_.dr.nstatic+1:oo_.dr.nstatic+nsok),:),'exact'); - - if ~isempty(ilagendo), - y0=teff(T(iendo,ilagendo,:),kn,istable); - if ~isempty(y0), - if mod(iplo,9)==0, - ifig=ifig+1; - figure('name',[namendo,' vs. lagged endogenous ',int2str(ifig)]), - iplo=0; - end - iplo=iplo+1; - js=js+1; - subplot(3,3,iplo), - [SAmeas, SAMorris] = Morris_Measure_Groups(np+nshock, [lpmat0 lpmat], y0,nliv); - SAM = squeeze(SAMorris(nshock+1:end,1)); - SA(:,js)=SAM./(max(SAM)+eps); - [saso, iso] = sort(-SA(:,js)); - bar(SA(iso(1:min(np,10)),js)) - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - - title([namendo,' vs. ',namlagendo,'(-1)'],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - close(gcf) - end - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - close(gcf) - end -end - -figure, -%bar(SA) -% boxplot(SA','whis',10,'symbol','r.') -myboxplot(SA',[],'.',[],10) -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -xlabel(' ') -ylabel('Elementary Effects') -title('Reduced form screening') - -saveas(gcf,[dirname,'/',M_.fname,'_redform_screen']) -eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_screen']); -eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_screen']); - diff --git a/GSA_distrib/4.1/set_shocks_param.m b/GSA_distrib/4.1/set_shocks_param.m deleted file mode 100644 index f84247d29..000000000 --- a/GSA_distrib/4.1/set_shocks_param.m +++ /dev/null @@ -1,30 +0,0 @@ -function set_shocks_param(xparam1) - global estim_params_ M_ - - nvx = estim_params_.nvx; - ncx = estim_params_.ncx; - np = estim_params_.np; - Sigma_e = M_.Sigma_e; - offset = 0; - if nvx - offset = offset + nvx; - var_exo = estim_params_.var_exo; - for i=1:nvx - k = var_exo(i,1); - Sigma_e(k,k) = xparam1(i)^2; - end - end - - if ncx - offset = offset + estim_params_.nvn; - corrx = estim_params_.corrx; - for i=1:ncx - k1 = corrx(i,1); - k2 = corrx(i,2); - Sigma_e(k1,k2) = xparam1(i+offset)*sqrt(Sigma_e_(k1,k1)*Sigma_e_(k2,k2)); - Sigma_e(k2,k1) = Sigma_e_(k1,k2); - end - end - - - M_.Sigma_e = Sigma_e; \ No newline at end of file diff --git a/GSA_distrib/4.1/skewness.m b/GSA_distrib/4.1/skewness.m deleted file mode 100644 index 19ce487ab..000000000 --- a/GSA_distrib/4.1/skewness.m +++ /dev/null @@ -1,7 +0,0 @@ -function s=skewness(y), - -% y=stand_(y); -% s=mean(y.^3); - m2=mean((y-mean(y)).^2); - m3=mean((y-mean(y)).^3); - s=m3/m2^1.5; \ No newline at end of file diff --git a/GSA_distrib/4.1/smirnov.m b/GSA_distrib/4.1/smirnov.m deleted file mode 100644 index bc068aeb1..000000000 --- a/GSA_distrib/4.1/smirnov.m +++ /dev/null @@ -1,73 +0,0 @@ -function [H,prob,d] = smirnov(x1 , x2 , alpha, iflag ) -% Smirnov test for 2 distributions -% [H,prob,d] = smirnov(x1 , x2 , alpha, iflag ) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - - - -if nargin<3 - alpha = 0.05; -end -if nargin<4, - iflag=0; -end - -% empirical cdfs. -xmix= [x1;x2]; -bin = [-inf ; sort(xmix) ; inf]; - -ncount1 = histc (x1 , bin); -ncount1 = ncount1(:); -ncount2 = histc (x2 , bin); -ncount2 = ncount2(:); - -cum1 = cumsum(ncount1)./sum(ncount1); -cum1 = cum1(1:end-1); - -cum2 = cumsum(ncount2)./sum(ncount2); -cum2 = cum2(1:end-1); - -n1= length(x1); -n2= length(x2); -n = n1*n2 /(n1+n2); - -% Compute the d(n1,n2) statistics. - -if iflag==0, - d = max(abs(cum1 - cum2)); -elseif iflag==-1 - d = max(cum2 - cum1); -elseif iflag==1 - d = max(cum1 - cum2); -end -% -% Compute P-value check H0 hypothesis -% - -lam = max((sqrt(n) + 0.12 + 0.11/sqrt(n)) * d , 0); -if iflag == 0 - j = [1:101]'; - prob = 2 * sum((-1).^(j-1).*exp(-2*lam*lam*j.^2)); - - prob=max(prob,0); - prob=min(1,prob); -else - prob = exp(-2*lam*lam); -end - -H = (alpha >= prob); diff --git a/GSA_distrib/4.1/speed.m b/GSA_distrib/4.1/speed.m deleted file mode 100644 index faaa1de86..000000000 --- a/GSA_distrib/4.1/speed.m +++ /dev/null @@ -1,52 +0,0 @@ -function [tadj, iff] = speed(A,B,mf,p), -% [tadj, iff] = speed(A,B,mf,p), -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -nvar=length(mf); -nstate= size(A,1); -nshock = size(B,2); -nrun=size(B,3); - -iff=zeros(nvar,nshock,nrun); -tadj=iff; -disp('Computing speed of adjustement ...') -h = waitbar(0,'Speed of adjustement...'); - -for i=1:nrun, - irf=zeros(nvar,nshock); - a=squeeze(A(:,:,i)); - b=squeeze(B(:,:,i)); - IFF=inv(eye(nstate)-a)*b; - iff(:,:,i)=IFF(mf,:); - IF=IFF-b; - - t=0; - while any(any(irf<0.5)) - t=t+1; - IFT=((eye(nstate)-a^(t+1))*inv(eye(nstate)-a))*b-b; - irf=IFT(mf,:)./(IF(mf,:)+eps); - irf = irf.*(abs(IF(mf,:))>1.e-7)+(abs(IF(mf,:))<=1.e-7); - %irf=ft(mf,:); - tt=(irf>0.5).*t; - tadj(:,:,i)=((tt-tadj(:,:,i))==tt).*tt+tadj(:,:,i); - end - waitbar(i/nrun,h) -end -disp(' ') -disp('.. done !') -close(h) diff --git a/GSA_distrib/4.1/stab_map_.m b/GSA_distrib/4.1/stab_map_.m deleted file mode 100644 index f525e0121..000000000 --- a/GSA_distrib/4.1/stab_map_.m +++ /dev/null @@ -1,556 +0,0 @@ -function x0 = stab_map_(OutputDirectoryName) -% -% function x0 = stab_map_(OutputDirectoryName) -% -% Mapping of stability regions in the prior ranges applying -% Monte Carlo filtering techniques. -% -% INPUTS (from opt_gsa structure) -% Nsam = MC sample size -% fload = 0 to run new MC; 1 to load prevoiusly generated analysis -% alpha2 = significance level for bivariate sensitivity analysis -% [abs(corrcoef) > alpha2] -% prepSA = 1: save transition matrices for mapping reduced form -% = 0: no transition matrix saved (default) -% pprior = 1: sample from prior ranges (default): sample saved in -% _prior.mat file -% = 0: sample from posterior ranges: sample saved in -% _mc.mat file -% OUTPUT: -% x0: one parameter vector for which the model is stable. -% -% GRAPHS -% 1) Pdf's of marginal distributions under the stability (dotted -% lines) and unstability (solid lines) regions -% 2) Cumulative distributions of: -% - stable subset (dotted lines) -% - unacceptable subset (solid lines) -% 3) Bivariate plots of significant correlation patterns -% ( abs(corrcoef) > alpha2) under the stable and unacceptable subsets -% -% USES lptauSEQ, -% stab_map_1, stab_map_2 -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -%global bayestopt_ estim_params_ dr_ options_ ys_ fname_ -global bayestopt_ estim_params_ options_ oo_ M_ - -opt_gsa=options_.opt_gsa; - -Nsam = opt_gsa.Nsam; -fload = opt_gsa.load_stab; -ksstat = opt_gsa.ksstat; -alpha2 = opt_gsa.alpha2_stab; -prepSA = (opt_gsa.redform | opt_gsa.identification); -pprior = opt_gsa.pprior; -ilptau = opt_gsa.ilptau; -nliv = opt_gsa.morris_nliv; -ntra = opt_gsa.morris_ntra; - -dr_ = oo_.dr; -%if isfield(dr_,'ghx'), - ys_ = oo_.dr.ys; - nspred = dr_.nspred; %size(dr_.ghx,2); - nboth = dr_.nboth; - nfwrd = dr_.nfwrd; -%end -fname_ = M_.fname; - -np = estim_params_.np; -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; -lpmat0=[]; - -pshape = bayestopt_.pshape(nshock+1:end); -p1 = bayestopt_.p1(nshock+1:end); -p2 = bayestopt_.p2(nshock+1:end); -p3 = bayestopt_.p3(nshock+1:end); -p4 = bayestopt_.p4(nshock+1:end); - -if nargin==0, - OutputDirectoryName=''; -end - -opt=options_; - options_.periods=0; - options_.nomoments=1; - options_.irf=0; - options_.noprint=1; - options_.simul=0; -if fload==0, -% if prepSA -% T=zeros(size(dr_.ghx,1),size(dr_.ghx,2)+size(dr_.ghu,2),Nsam/2); -% end - - if isfield(dr_,'ghx'), - egg=zeros(length(dr_.eigval),Nsam); - end - yys=zeros(length(dr_.ys),Nsam); - - if opt_gsa.morris == 1 - [lpmat, OutFact] = Sampling_Function_2(nliv, np+nshock, ntra, ones(np+nshock, 1), zeros(np+nshock,1), []); - lpmat = lpmat.*(nliv-1)/nliv+1/nliv/2; - Nsam=size(lpmat,1); - lpmat0 = lpmat(:,1:nshock); - lpmat = lpmat(:,nshock+1:end); - elseif opt_gsa.morris==3, - lpmat = prep_ide(Nsam,np,5); - Nsam=size(lpmat,1); - else - if np<52 & ilptau>0, - [lpmat] = lptauSEQ(Nsam,np); % lptau - if np>30 | ilptau==2, % scrambled lptau - for j=1:np, - lpmat(:,j)=lpmat(randperm(Nsam),j); - end - end - else %ilptau==0 - %[lpmat] = rand(Nsam,np); - for j=1:np, - lpmat(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - end - - end - end -% try - dummy=prior_draw_gsa(1); -% catch -% if pprior, -% if opt_gsa.prior_range==0; -% error('Some unknown prior is specified or ML estimation,: use prior_range=1 option!!'); -% end -% end -% -% end - if pprior, - for j=1:nshock, - if opt_gsa.morris~=1, - lpmat0(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - end - if opt_gsa.prior_range - lpmat0(:,j)=lpmat0(:,j).*(bayestopt_.ub(j)-bayestopt_.lb(j))+bayestopt_.lb(j); - end - end - if opt_gsa.prior_range -% if opt_gsa.identification, -% deltx=min(0.001, 1/Nsam/2); -% for j=1:np, -% xdelt(:,:,j)=prior_draw_gsa(0,[lpmat0 lpmat]+deltx); -% end -% end - for j=1:np, - lpmat(:,j)=lpmat(:,j).*(bayestopt_.ub(j+nshock)-bayestopt_.lb(j+nshock))+bayestopt_.lb(j+nshock); - end - else - xx=prior_draw_gsa(0,[lpmat0 lpmat]); -% if opt_gsa.identification, -% deltx=min(0.001, 1/Nsam/2); -% ldum=[lpmat0 lpmat]; -% ldum = prior_draw_gsa(0,ldum+deltx); -% for j=1:nshock+np, -% xdelt(:,:,j)=xx; -% xdelt(:,j,j)=ldum(:,j); -% end -% clear ldum -% end - lpmat0=xx(:,1:nshock); - lpmat=xx(:,nshock+1:end); - clear xx; - end - else - % for j=1:nshock, - % xparam1(j) = oo_.posterior_mode.shocks_std.(bayestopt_.name{j}); - % sd(j) = oo_.posterior_std.shocks_std.(bayestopt_.name{j}); - % lpmat0(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - % lb = max(bayestopt_.lb(j), xparam1(j)-2*sd(j)); - % ub1=xparam1(j)+(xparam1(j) - lb); % define symmetric range around the mode! - % ub = min(bayestopt_.ub(j),ub1); - % if ub30 & np<52 - % lpmat(:,j) = lpmat(randperm(Nsam),j).*(ub-lb)+lb; - % else - % lpmat(:,j) = lpmat(:,j).*(ub-lb)+lb; - % end - % end - %load([fname_,'_mode']) - eval(['load ' options_.mode_file ';']'); - d = chol(inv(hh)); - lp=randn(Nsam*2,nshock+np)*d+kron(ones(Nsam*2,1),xparam1'); - for j=1:Nsam*2, - lnprior(j) = any(lp(j,:)'<=bayestopt_.lb | lp(j,:)'>=bayestopt_.ub); - end - ireal=[1:2*Nsam]; - ireal=ireal(find(lnprior==0)); - lp=lp(ireal,:); - Nsam=min(Nsam, length(ireal)); - lpmat0=lp(1:Nsam,1:nshock); - lpmat=lp(1:Nsam,nshock+1:end); - clear lp lnprior ireal; - end - % - h = waitbar(0,'Please wait...'); - istable=[1:Nsam]; - jstab=0; - iunstable=[1:Nsam]; - iindeterm=zeros(1,Nsam); - iwrong=zeros(1,Nsam); - for j=1:Nsam, - M_.params(estim_params_.param_vals(:,1)) = lpmat(j,:)'; - %try stoch_simul([]); - try - [Tt,Rr,SteadyState,infox{j}] = dynare_resolve(bayestopt_.restrict_var_list,... - bayestopt_.restrict_columns,... - bayestopt_.restrict_aux); - if infox{j}==0, - check1 = max(abs(feval([M_.fname '_static'],... - SteadyState,... - [oo_.exo_steady_state; ... - oo_.exo_det_steady_state], M_.params))) > options_.dynatol ; - if check1, - error(['The seadystate values returned by ' M_.fname ... - '_steadystate.m don''t solve the static model!' ]) - end - end - - - if ~exist('T') - dr_=oo_.dr; - T=zeros(size(dr_.ghx,1),size(dr_.ghx,2)+size(dr_.ghu,2),Nsam); - egg=zeros(length(dr_.eigval),Nsam); - end - catch - if isfield(oo_.dr,'eigval'), - oo_.dr=rmfield(oo_.dr,'eigval'); - end - if isfield(oo_.dr,'ghx'), - oo_.dr=rmfield(oo_.dr,'ghx'); - end - disp('No solution could be found'), - end - dr_ = oo_.dr; - if isfield(dr_,'ghx'), - egg(:,j) = sort(dr_.eigval); - iunstable(j)=0; - if prepSA - jstab=jstab+1; - T(:,:,jstab) = [dr_.ghx dr_.ghu]; -% [A,B] = ghx2transition(squeeze(T(:,:,jstab)), ... -% bayestopt_.restrict_var_list, ... -% bayestopt_.restrict_columns, ... -% bayestopt_.restrict_aux); - end - if ~exist('nspred'), - nspred = dr_.nspred; %size(dr_.ghx,2); - nboth = dr_.nboth; - nfwrd = dr_.nfwrd; - end - else - istable(j)=0; - if isfield(dr_,'eigval') - egg(:,j) = sort(dr_.eigval); - if exist('nspred') - if any(isnan(egg(1:nspred,j))) - iwrong(j)=j; - else - if (nboth | nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium, - iindeterm(j)=j; - end - end - end - else - if exist('egg'), - egg(:,j)=ones(size(egg,1),1).*NaN; - end - iwrong(j)=j; - end - end - ys_=real(dr_.ys); - yys(:,j) = ys_; - ys_=yys(:,1); - waitbar(j/Nsam,h,['MC iteration ',int2str(j),'/',int2str(Nsam)]) - end - close(h) - if prepSA, - T=T(:,:,1:jstab); - end - istable=istable(find(istable)); % stable params - iunstable=iunstable(find(iunstable)); % unstable params - iindeterm=iindeterm(find(iindeterm)); % indeterminacy - iwrong=iwrong(find(iwrong)); % dynare could not find solution - - % % map stable samples - % istable=[1:Nsam]; - % for j=1:Nsam, - % if any(isnan(egg(1:nspred,j))) - % istable(j)=0; - % else - % if abs(egg(nspred,j))>=options_.qz_criterium; %(1-(options_.qz_criterium-1)); %1-1.e-5; - % istable(j)=0; - % %elseif (dr_.nboth | dr_.nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium; %1+1.e-5; - % elseif (nboth | nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium; %1+1.e-5; - % istable(j)=0; - % end - % end - % end - % istable=istable(find(istable)); % stable params - % - % % map unstable samples - % iunstable=[1:Nsam]; - % for j=1:Nsam, - % %if abs(egg(dr_.npred+1,j))>1+1.e-5 & abs(egg(dr_.npred,j))<1-1.e-5; - % %if (dr_.nboth | dr_.nfwrd), - % if ~any(isnan(egg(1:5,j))) - % if (nboth | nfwrd), - % if abs(egg(nspred+1,j))>options_.qz_criterium & abs(egg(nspred,j))0 & length(iunstable)ksstat); - disp('Smirnov statistics in driving acceptable behaviour') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indstab) - stab_map_1(lpmat, istable, iunstable, aname, 1, indstab, OutputDirectoryName); - end - ixun=iunstable(find(~ismember(iunstable,[iindeterm,iwrong]))); - if ~isempty(iindeterm), - [proba, dproba] = stab_map_1(lpmat, [1:Nsam], iindeterm, [aname, '_indet'],0); - indindet=find(dproba>ksstat); - disp('Smirnov statistics in driving indeterminacy') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indindet) - stab_map_1(lpmat, [1:Nsam], iindeterm, [aname, '_indet'], 1, indindet, OutputDirectoryName); - end - end - - if ~isempty(ixun), - [proba, dproba] = stab_map_1(lpmat, [1:Nsam], ixun, [aname, '_unst'],0); - indunst=find(dproba>ksstat); - disp('Smirnov statistics in driving instability') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indunst) - stab_map_1(lpmat, [1:Nsam], ixun, [aname, '_unst'], 1, indunst, OutputDirectoryName); - end - end - - if ~isempty(iwrong), - [proba, dproba] = stab_map_1(lpmat, [1:Nsam], iwrong, [aname, '_wrong'],0); - indwrong=find(dproba>ksstat); - disp('Smirnov statistics in driving no solution') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indwrong) - stab_map_1(lpmat, [1:Nsam], iwrong, [aname, '_wrong'], 1, indwrong, OutputDirectoryName); - end - end - - disp(' ') - disp('Starting bivariate analysis:') - - c0=corrcoef(lpmat(istable,:)); - c00=tril(c0,-1); - - stab_map_2(lpmat(istable,:),alpha2, asname, OutputDirectoryName); - if length(iunstable)>10, - stab_map_2(lpmat(iunstable,:),alpha2, auname, OutputDirectoryName); - end - if length(iindeterm)>10, - stab_map_2(lpmat(iindeterm,:),alpha2, aindname, OutputDirectoryName); - end - if length(ixun)>10, - stab_map_2(lpmat(ixun,:),alpha2, aunstname, OutputDirectoryName); - end - if length(iwrong)>10, - stab_map_2(lpmat(iwrong,:),alpha2, awrongname, OutputDirectoryName); - end - - x0=0.5.*(bayestopt_.ub(1:nshock)-bayestopt_.lb(1:nshock))+bayestopt_.lb(1:nshock); - x0 = [x0; lpmat(istable(1),:)']; - if istable(end)~=Nsam - M_.params(estim_params_.param_vals(:,1)) = lpmat(istable(1),:)'; - [oo_.dr, info] = resol(oo_.steady_state,0); -% stoch_simul([]); - end -else - if length(iunstable)==0, - disp('All parameter values in the specified ranges are stable!') - x0=0.5.*(bayestopt_.ub(1:nshock)-bayestopt_.lb(1:nshock))+bayestopt_.lb(1:nshock); - x0 = [x0; lpmat(istable(1),:)']; - else - disp('All parameter values in the specified ranges are not acceptable!') - x0=[]; - end - -end - - -options_.periods=opt.periods; -if isfield(opt,'nomoments'), - options_.nomoments=opt.nomoments; -end -options_.irf=opt.irf; -options_.noprint=opt.noprint; -if isfield(opt,'simul'), - options_.simul=opt.simul; -end - - - diff --git a/GSA_distrib/4.1/stab_map_1.m b/GSA_distrib/4.1/stab_map_1.m deleted file mode 100644 index 8813fa572..000000000 --- a/GSA_distrib/4.1/stab_map_1.m +++ /dev/null @@ -1,87 +0,0 @@ -function [proba, dproba] = stab_map_1(lpmat, ibehaviour, inonbehaviour, aname, iplot, ipar, dirname) -%function [proba, dproba] = stab_map_1(lpmat, ibehaviour, inonbehaviour, aname, iplot, ipar, dirname) -% -% lpmat = Monte Carlo matrix -% ibehaviour = index of behavioural runs -% inonbehaviour = index of non-behavioural runs -% aname = label of the analysis -% iplot = 1 plot cumulative distributions (default) -% iplot = 0 no plots -% ipar = index array of parameters to plot -% dirname = (OPTIONAL) path of the directory where to save -% (default: current directory) -% -% Plots: dotted lines for BEHAVIOURAL -% solid lines for NON BEHAVIOURAL -% USES smirnov -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global estim_params_ bayestopt_ M_ options_ - -if nargin<5, - iplot=1; -end -fname_ = M_.fname; -if nargin<7, - dirname='';; -end - -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; - -npar=size(lpmat,2); -ishock= npar>estim_params_.np; - -if nargin<6 | isempty(ipar), - ipar=[1:npar]; -end -nparplot=length(ipar); - -% Smirnov test for Blanchard; -for j=1:npar, - [H,P,KSSTAT] = smirnov(lpmat(ibehaviour,j),lpmat(inonbehaviour,j)); - proba(j)=P; - dproba(j)=KSSTAT; -end -if iplot - lpmat=lpmat(:,ipar); - ftit=bayestopt_.name(ipar+nshock*(1-ishock)); - -for i=1:ceil(nparplot/12), - figure('name',aname), - for j=1+12*(i-1):min(nparplot,12*i), - subplot(3,4,j-12*(i-1)) - if ~isempty(ibehaviour), - h=cumplot(lpmat(ibehaviour,j)); - set(h,'color',[0 0 0], 'linestyle',':') - end - hold on, - if ~isempty(inonbehaviour), - h=cumplot(lpmat(inonbehaviour,j)); - set(h,'color',[0 0 0]) - end - title([ftit{j},'. D-stat ', num2str(dproba(ipar(j)),2)],'interpreter','none') - end - saveas(gcf,[dirname,'/',fname_,'_',aname,'_SA_',int2str(i)]) - eval(['print -depsc2 ' dirname '/' fname_ '_' aname '_SA_' int2str(i)]); - eval(['print -dpdf ' dirname '/' fname_ '_' aname '_SA_' int2str(i)]); - if options_.nograph, close(gcf), end -end -end diff --git a/GSA_distrib/4.1/stab_map_2.m b/GSA_distrib/4.1/stab_map_2.m deleted file mode 100644 index 3d1a8fa9c..000000000 --- a/GSA_distrib/4.1/stab_map_2.m +++ /dev/null @@ -1,97 +0,0 @@ -%function stab_map_2(x,alpha2,istab,fnam) -function stab_map_2(x,alpha2,fnam, dirname) -% function stab_map_2(x,alpha2,fnam, dirname) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -%global bayestopt_ estim_params_ dr_ options_ ys_ fname_ -global bayestopt_ estim_params_ options_ oo_ M_ - -npar=size(x,2); -ishock= npar>estim_params_.np; -if nargin<3, - fnam=''; -end -if nargin<4, - dirname=''; -end - -ys_ = oo_.dr.ys; -dr_ = oo_.dr; -fname_ = M_.fname; -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; - -c0=corrcoef(x); -c00=tril(c0,-1); -fig_nam_=[fname_,'_',fnam,'_corr_']; - -ifig=0; -j2=0; -if ishock==0 - npar=estim_params_.np; -else - npar=estim_params_.np+nshock; -end -for j=1:npar, - i2=find(abs(c00(:,j))>alpha2); - if length(i2)>0, - for jx=1:length(i2), - j2=j2+1; - if mod(j2,12)==1, - ifig=ifig+1; - figure('name',['Correlations in the ',fnam,' sample ', num2str(ifig)]), - end - subplot(3,4,j2-(ifig-1)*12) - % bar(c0(i2,j)), - % set(gca,'xticklabel',bayestopt_.name(i2)), - % set(gca,'xtick',[1:length(i2)]) - %plot(stock_par(ixx(nfilt+1:end,i),j),stock_par(ixx(nfilt+1:end,i),i2(jx)),'.k') - %hold on, - plot(x(:,j),x(:,i2(jx)),'.') - % xlabel(deblank(estim_params_.param_names(j,:)),'interpreter','none'), - % ylabel(deblank(estim_params_.param_names(i2(jx),:)),'interpreter','none'), - if ishock, - xlabel(bayestopt_.name{j},'interpreter','none'), - ylabel(bayestopt_.name{i2(jx)},'interpreter','none'), - else - xlabel(bayestopt_.name{j+nshock},'interpreter','none'), - ylabel(bayestopt_.name{i2(jx)+nshock},'interpreter','none'), - end - title(['cc = ',num2str(c0(i2(jx),j))]) - if (mod(j2,12)==0) & j2>0, - saveas(gcf,[dirname,'/',fig_nam_,int2str(ifig)]) - eval(['print -depsc2 ' dirname '/' fig_nam_ int2str(ifig)]); - eval(['print -dpdf ' dirname '/' fig_nam_ int2str(ifig)]); - if options_.nograph, close(gcf), end - end - end - end - if (j==(npar)) & j2>0, - saveas(gcf,[dirname,'/',fig_nam_,int2str(ifig)]) - eval(['print -depsc2 ' dirname '/' fig_nam_ int2str(ifig)]); - eval(['print -dpdf ' dirname '/' fig_nam_ int2str(ifig)]); - if options_.nograph, close(gcf), end - end - -end -if ifig==0, - disp(['No correlation term >', num2str(alpha2),' found for ',fnam]) -end -%close all diff --git a/GSA_distrib/4.1/stand_.m b/GSA_distrib/4.1/stand_.m deleted file mode 100644 index fb0b3fda3..000000000 --- a/GSA_distrib/4.1/stand_.m +++ /dev/null @@ -1,25 +0,0 @@ -function [y, meany, stdy] = stand_(x) -% STAND_ Standardise a matrix by columns -% -% [x,my,sy]=stand(y) -% -% y: Time series (column matrix) -% -% x: standardised equivalent of y -% my: Vector of mean values for each column of y -% sy: Vector of standard deviations for each column of y -% -% Copyright (c) 2006 by JRC, European Commission, United Kingdom -% Author : Marco Ratto - - -if nargin==0, - return; -end - -for j=1:size(x,2); -meany(j)=mean(x(find(~isnan(x(:,j))),j)); -stdy(j)=std(x(find(~isnan(x(:,j))),j)); - y(:,j)=(x(:,j)-meany(j))./stdy(j); -end -% end of m-file \ No newline at end of file diff --git a/GSA_distrib/4.1/teff.m b/GSA_distrib/4.1/teff.m deleted file mode 100644 index 6c33706e5..000000000 --- a/GSA_distrib/4.1/teff.m +++ /dev/null @@ -1,51 +0,0 @@ -function [yt, j0, ir, ic]=teff(T,Nsam,istable) -% -% [yt, j0, ir, ic]=teff(T,Nsam,istable) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -ndim = (length(size(T))); -if ndim==3, -if nargin==1, - Nsam=size(T,3); - istable = [1:Nsam]'; -end -tmax=max(T,[],3); -tmin=min(T,[],3); -[ir, ic]=(find( (tmax-tmin)>1.e-8)); -j0 = length(ir); -yt=zeros(Nsam, j0); - -for j=1:j0, - y0=squeeze(T(ir(j),ic(j),:)); - %y1=ones(size(lpmat,1),1)*NaN; - y1=ones(Nsam,1)*NaN; - y1(istable,1)=y0; - yt(:,j)=y1; -end - -else -tmax=max(T,[],2); -tmin=min(T,[],2); -ir=(find( (tmax-tmin)>1.e-8)); -j0 = length(ir); -yt=NaN(Nsam, j0); -yt(istable,:)=T(ir,:)'; - - -end -%clear y0 y1; diff --git a/GSA_distrib/4.1/th_moments.m b/GSA_distrib/4.1/th_moments.m deleted file mode 100644 index 41bb18d78..000000000 --- a/GSA_distrib/4.1/th_moments.m +++ /dev/null @@ -1,66 +0,0 @@ -% Copyright (C) 2001 Michel Juillard -% -function [vdec, corr, autocorr, z, zz] = th_moments(dr,var_list) - global M_ oo_ options_ - - nvar = size(var_list,1); - if nvar == 0 - nvar = length(dr.order_var); - ivar = [1:nvar]'; - else - ivar=zeros(nvar,1); - for i=1:nvar - i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); - if isempty(i_tmp) - error (['One of the variable specified does not exist']) ; - else - ivar(i) = i_tmp; - end - end - end - - [gamma_y,ivar] = th_autocovariances(dr,ivar,M_, options_); - m = dr.ys(ivar); - - - i1 = find(abs(diag(gamma_y{1})) > 1e-12); - s2 = diag(gamma_y{1}); - sd = sqrt(s2); - - - z = [ m sd s2 ]; - mean = m; - var = gamma_y{1}; - - -%'THEORETICAL MOMENTS'; -%'MEAN','STD. DEV.','VARIANCE'); -z; - -%'VARIANCE DECOMPOSITION (in percent)'; -if M_.exo_nbr>1, -vdec = 100*gamma_y{options_.ar+2}(i1,:); -else -vdec = 100*ones(size(gamma_y{1}(i1,1))); -end -%'MATRIX OF CORRELATIONS'; -if options_.opt_gsa.useautocorr, - corr = gamma_y{1}(i1,i1)./(sd(i1)*sd(i1)'); - corr = corr-diag(diag(corr))+diag(diag(gamma_y{1}(i1,i1))); -else - corr = gamma_y{1}(i1,i1); -end - if options_.ar > 0 -%'COEFFICIENTS OF AUTOCORRELATION'; - for i=1:options_.ar - if options_.opt_gsa.useautocorr, - autocorr{i} = gamma_y{i+1}(i1,i1); - else - autocorr{i} = gamma_y{i+1}(i1,i1).*(sd(i1)*sd(i1)'); - end - zz(:,i) = diag(gamma_y{i+1}(i1,i1)); - end - end - - - \ No newline at end of file diff --git a/GSA_distrib/4.1/thet2tau.m b/GSA_distrib/4.1/thet2tau.m deleted file mode 100644 index 5cd29f00e..000000000 --- a/GSA_distrib/4.1/thet2tau.m +++ /dev/null @@ -1,45 +0,0 @@ -function tau = thet2tau(params, indx, indexo, flagmoments,mf,nlags,useautocorr) -global M_ oo_ options_ - -if nargin==1, - indx = [1:M_.param_nbr]; - indexo = []; -end - -if nargin<4, - flagmoments=0; -end -if nargin<7 | isempty(useautocorr), - useautocorr=0; -end - -M_.params(indx) = params(length(indexo)+1:end); -if ~isempty(indexo) - M_.Sigma_e(indexo,indexo) = diag(params(1:length(indexo)).^2); -end -% [A(oo_.dr.order_var,oo_.dr.order_var),B(oo_.dr.order_var,:)]=dynare_resolve; -[A,B]=dynare_resolve; -if flagmoments==0, -tau = [oo_.dr.ys(oo_.dr.order_var); A(:); vech(B*M_.Sigma_e*B')]; -else -GAM = lyapunov_symm(A,B*M_.Sigma_e*B',options_.qz_criterium,options_.lyapunov_complex_threshold); -k = find(abs(GAM) < 1e-12); -GAM(k) = 0; -if useautocorr, - sy = sqrt(diag(GAM)); - sy = sy*sy'; - sy0 = sy-diag(diag(sy))+eye(length(sy)); - dum = GAM./sy0; - tau = vech(dum(mf,mf)); -else - tau = vech(GAM(mf,mf)); -end -for ii = 1:nlags - dum = A^(ii)*GAM; - if useautocorr, - dum = dum./sy; - end - tau = [tau;vec(dum(mf,mf))]; -end -tau = [ oo_.dr.ys(oo_.dr.order_var(mf)); tau]; -end \ No newline at end of file diff --git a/GSA_distrib/4.1/trank.m b/GSA_distrib/4.1/trank.m deleted file mode 100644 index a0c5bda99..000000000 --- a/GSA_distrib/4.1/trank.m +++ /dev/null @@ -1,25 +0,0 @@ -function yr = trank(y); -% yr = trank(y); -% yr is the rank transformation of y -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -[nr, nc] = size(y); -for j=1:nc, - [dum, is]=sort(y(:,j)); - yr(is,j)=[1:nr]'./nr; -end diff --git a/GSA_distrib/4.2/LPTAU.m b/GSA_distrib/4.2/LPTAU.m deleted file mode 100644 index 7427de885..000000000 --- a/GSA_distrib/4.2/LPTAU.m +++ /dev/null @@ -1,512 +0,0 @@ -function VECTOR = LPTAU(I, N) -% -% I.M. SOBOL', V.I. TURCHANINOV, Yu.L. LEVITAN, B.V. SHUKHMAN -% KELDYSH INSTITUTE OF APPLIED MATHEMATICS -% RUSSIAN ACADEMY OF SCIENCES -% -% QUASIRANDOM SEQUENCE GENERATORS -% ------------------------------- -% -% 28.11.1991 -% -% NOTE TO THE USER BY the NEA Data Bank: -% This quasi random number generator has been made available to -% you on condition that its identity is preserved when used -% in computer programs. If its use leads to scientific publication -% of results you should cite it in the references, in addition -% no commercial use should be made unless agreed upon with the -% main author (Prof. I.M. Sobol') -% -% ABSTRACT -% ........ -% -% POINTS BELONGING TO LP-TAU SEQUENCES UNIFORMLY DISTRIBUTED IN THE -% N-DIMENSIONAL UNIT CUBE ARE OFTEN USED IN NUMERICAL MATHEMATICS: -% -% - AS NODES FOR MULTIDIMENSIONAL INTEGRATION; -% - AS SEARCHING POINTS IN GLOBAL OPTIMIZATION; -% - AS TRIAL POINTS IN MULTI-CRITERIA DECISION MAKING; -% - AS QUASIRANDOM POINTS FOR QUASI-MONTECARLO ALGORITHMS; -% - ETC. -% -% THIS SUBROUTINE CONTAINS THE ALGORITHM FOR FAST GENERATION OF -% LP-TAU SEQUENCES THAT ARE SUITABLE FOR MULTI-PROCESSOR COMPUTATIONS. -% THE DIMENSIONS N.LE.51, THE NUMBER OF POINTS N.LT.2**30. -% THE PROGRAMMING LANGUAGE IS FORTRAN-77. THIS SUBROUTINE IS AVAILABLE -% ALSO IN %-LANGUAGE. -% THE REPORT DESCRIBING THE ALGORITHM CONTAINS THE DESCRIPTION OF THE -% ALGORITHM AND CERTAIN IMPORTANT PROPERTIES OF LP-TAU SEQUENCES AND -% THEIR GENERALIZATIONS ARE DISCUSSED. -% -% REFERENCE: -% I.M. SOBOL', V.I. TURCHANINOV, Yu.L. LEVITAN, B.V. SHUKHMAN -% KELDYSH INSTITUTE OF APPLIED MATHEMATICS -% RUSSIAN ACADEMY OF SCIENCES -% -% QUASIRANDOM SEQUENCE GENERATORS -% MOSCOW 1992, IPM ZAK. NO.30 (100 COPIES) -% -% ------------------------------------------------------------------------ -% -% INPUT PARAMETERS: -% -% I - NUMBER OF THE POINT (I=(0,2**30-1)), -% N - DIMENSION OF THE POINT (0MAXNUM) | (N>MAXDIM)), - disp('LP-TAU CALL FAILED') - disp(' PRESS TO EXIT LPTAU') - pause - return -end -if ((PRVNUM+1==I) & (N<=PRVDIM)), - % - % RECURRENT GENERATION OF THE POINT - % - % - % SEARCH POSITION OF THE RIGHTMOST "1" - % IN THE BINARY REPRESENTATION OF I - % - L=0; - POS=0; - while L1e-010); - % If we deal with groups we can only estimate the new mu* - % measure since factors in the same groups can move in - % opposite direction and the definition of the standard - % Morris mu cannopt be applied. - % In the new version the elementary effect is defined with - % the absolute value. - %SAmeas(find(GroupMat(Change_factor(j,i),:)),i) = abs((Single_OutValues(j) - Single_OutValues(j+1) )/Delt); %(2/3)); - SAmeas(i,Change_factor') = abs((Single_OutValues(j) - Single_OutValues(j+1) )/Delt); - else - Change_factor(j,i) = find(Single_Sample(j+1,:)-Single_Sample(j,:)); - % If no groups --> we compute both the original and - % modified measure - if Delta(j) > 0 %=> +Delta - SAmeas(Change_factor(j,i),i) = (Single_OutValues(j+1) - Single_OutValues(j) )/Delt; %(2/3); - else %=> -Delta - SAmeas(Change_factor(j,i),i) = (Single_OutValues(j) - Single_OutValues(j+1) )/Delt; %(2/3); - end - end - end %for j=1:sizea - - end %for i=1:r - - if NumGroups ~ 0 - SAmeas = SAmeas'; - end - - % Compute Mu AbsMu and StDev - if any(any(isnan(SAmeas))) - for j=1:NumFact, - SAm = SAmeas(j,:); - SAm = SAm(find(~isnan(SAm))); - rr=length(SAm); - AbsMu(j,1) = sum(abs(SAm),2)/rr; - if NumGroups == 0 - Mu(j,1) = sum(SAm,2)/rr; - StDev(j,1) = sum((SAm - repmat(Mu(j),1,rr)).^2/(rr*(rr-1)),2).^0.5; - end - end - else - AbsMu = sum(abs(SAmeas),2)/r; - if NumGroups == 0 - Mu = sum(SAmeas,2)/r; - StDev = sum((SAmeas - repmat(Mu,1,r)).^2/(r*(r-1)),2).^0.5; - end - end - - % Define the output Matrix - if we have groups we cannot define the old - % measure mu, only mu* makes sense - if NumGroups > 0 - OutMatrix = [OutMatrix; AbsMu]; - else - OutMatrix = [OutMatrix; AbsMu, Mu, StDev]; - end -end % For Each Output diff --git a/GSA_distrib/4.2/Sampling_Function_2.m b/GSA_distrib/4.2/Sampling_Function_2.m deleted file mode 100644 index ccd3a87f9..000000000 --- a/GSA_distrib/4.2/Sampling_Function_2.m +++ /dev/null @@ -1,174 +0,0 @@ -function [Outmatrix, OutFact] = Sampling_Function_2(p, k, r, UB, LB, GroupMat) -%[Outmatrix, OutFact] = Sampling_Function_2(p, k, r, UB, LB, GroupMat) -% Inputs: k (1,1) := number of factors examined or number of groups examined. -% In case the groups are chosen the number of factors is stores in NumFact and -% sizea becomes the number of created groups. -% NumFact (1,1) := number of factors examined in the case when groups are chosen -% r (1,1) := sample size -% p (1,1) := number of intervals considered in [0, 1] -% UB(sizea,1) := Upper Bound for each factor -% LB(sizea,1) := Lower Bound for each factor -% GroupNumber(1,1) := Number of groups (eventually 0) -% GroupMat(NumFact,GroupNumber):= Matrix which describes the chosen groups. Each column represents a group and its elements -% are set to 1 in correspondence of the factors that belong to the fixed group. All -% the other elements are zero. -% Local Variables: -% sizeb (1,1) := sizea+1 -% sizec (1,1) := 1 -% randmult (sizea,1) := vector of random +1 and -1 -% perm_e(1,sizea) := vector of sizea random permutated indeces -% fact(sizea) := vector containing the factor varied within each traj -% DDo(sizea,sizea) := D* in Morris, 1991 -% A(sizeb,sizea) := Jk+1,k in Morris, 1991 -% B(sizeb,sizea) := B in Morris, 1991 -% Po(sizea,sizea) := P* in Morris, 1991 -% Bo(sizeb,sizea) := B* in Morris, 1991 -% Ao(sizeb,sizec) := Jk+1,1 in Morris, 1991 -% xo(sizec,sizea) := x* in Morris, 1991 (starting point for the trajectory) -% In(sizeb,sizea) := for each loop orientation matrix. It corresponds to a trajectory -% of k step in the parameter space and it provides a single elementary -% effect per factor -% MyInt() -% Fact(sizea,1) := for each loop vector indicating which factor or group of factors has been changed -% in each step of the trajectory -% AuxMat(sizeb,sizea) := Delta*0.5*((2*B - A) * DD0 + A) in Morris, 1991. The AuxMat is used as in Morris design -% for single factor analysis, while it constitutes an intermediate step for the group analysis. -% -% Output: Outmatrix(sizeb*r, sizea) := for the entire sample size computed In(i,j) matrices -% OutFact(sizea*r,1) := for the entire sample size computed Fact(i,1) vectors -% -% Note: B0 is constructed as in Morris design when groups are not considered. When groups are considered the routine -% follows the following steps: -% 1- Creation of P0 and DD0 matrices defined in Morris for the groups. This means that the dimensions of these -% 2 matrices are (GroupNumber,GroupNumber). -% 2- Creation of AuxMat matrix with (GroupNumber+1,GroupNumber) elements. -% 3- Definition of GroupB0 starting from AuxMat, GroupMat and P0. -% 4- The final B0 for groups is obtained as [ones(sizeb,1)*x0' + GroupB0]. The P0 permutation is present in GroupB0 -% and it's not necessary to permute the matrix (ones(sizeb,1)*x0') because it's already randomly created. -% Reference: -% A. Saltelli, K. Chan, E.M. Scott, "Sensitivity Analysis" on page 68 ss -% -% F. Campolongo, J. Cariboni, JRC - IPSC Ispra, Varese, IT -% Last Update: 15 November 2005 by J.Cariboni -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -% Parameters and initialisation of the output matrix -sizea = k; -Delta = p/(2*p-2); -%Delta = 1/3 -NumFact = sizea; -GroupNumber = size(GroupMat,2); - -if GroupNumber ~ 0; - sizea = size(GroupMat,2); -end - -sizeb = sizea + 1; -sizec = 1; -Outmatrix = []; -OutFact = []; - -% For each i generate a trajectory -for i=1:r - - % Construct DD0 - OLD VERSION - it does not need communication toolbox - % RAND(N,M) is an NXM matrix with random entries, chosen from a uniform distribution on the interval (0.0,1.0). - % Note that DD0 tells if the factor have to be increased or ddecreased - % by Delta. - randmult = ones(k,1); - v = rand(k,1); - randmult (find(v < 0.5))=-1; - randmult = repmat(randmult,1,k); - DD0 = randmult .* eye(k); - - % Construct DD0 - NEW VERSION - it needs communication toolbox - % randsrc(m) generates an m-by-m matrix, each of whose entries independently takes the value -1 with probability 1/2, - % and 1 with probability 1/2. - % DD0 = randsrc(NumFact) .* eye(NumFact); - - % Construct B (lower triangular) - B = ones(sizeb,sizea); - for j = 1:sizea - B(1:j,j)=0; - end - - % Construct A0, A - A0 = ones(sizeb,1); - A = ones(sizeb,NumFact); - - % Construct the permutation matrix P0. In each column of P0 one randomly chosen element equals 1 - % while all the others equal zero. - % P0 tells the order in which order factors are changed in each - % trajectory. P0 is created as it follows: - % 1) All the elements of P0 are set equal to zero ==> P0 = zeros (sizea, sizea); - % 2) The function randperm create a random permutation of integer 1:sizea, without repetitions ==> perm_e; - % 3) In each column of P0 the element indicated in perm_e is set equal to one. - % Note that P0 is then used reading it by rows. - P0 = zeros (sizea, sizea); - perm_e = randperm(sizea); % RANDPERM(n) is a random permutation of the integers from 1 to n. - for j = 1:sizea - P0(perm_e(j),j) = 1; - end - - % When groups are present the random permutation is done only on B. The effect is the same since - % the added part (A0*x0') is completely random. - if GroupNumber ~ 0 - B = B * (GroupMat*P0')'; - end - - % Compute AuxMat both for single factors and groups analysis. For Single factors analysis - % AuxMat is added to (A0*X0) and then permutated through P0. When groups are active AuxMat is - % used to build GroupB0. AuxMat is created considering DD0. If the element on DD0 diagonal - % is 1 then AuxMat will start with zero and add Delta. If the element on DD0 diagonal is -1 - % then DD0 will start Delta and goes to zero. - AuxMat = Delta*0.5*((2*B - A) * DD0 + A); - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % a --> Define the random vector x0 for the factors. Note that x0 takes value in the hypercube - % [0,...,1-Delta]*[0,...,1-Delta]*[0,...,1-Delta]*[0,...,1-Delta] - MyInt = repmat([0:(1/(p-1)):(1-Delta)],NumFact,1); % Construct all possible values of the factors - - % OLD VERSION - it needs communication toolbox - % w = randint(NumFact,1,[1,size(MyInt,2)]); - - % NEW VERSION - construct a version of random integers - % 1) create a vector of random integers - % 2) divide [0,1] into the needed steps - % 3) check in which interval the random numbers fall - % 4) generate the corresponding integer - v = repmat(rand(NumFact,1),1,size(MyInt,2)+1); % 1) - IntUsed = repmat([0:1/size(MyInt,2):1],NumFact,1); % 2) - DiffAuxVec = IntUsed - v; % 3) - - for ii = 1:size(DiffAuxVec,1) - w(1,ii) = max(find(DiffAuxVec(ii,:)<0)); % 4) - end - x0 = MyInt(1,w)'; % Define x0 - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % b --> Compute the matrix B*, here indicated as B0. Each row in B0 is a - % trajectory for Morris Calculations. The dimension of B0 is (Numfactors+1,Numfactors) - if GroupNumber ~ 0 - B0 = (A0*x0' + AuxMat); - else - B0 = (A0*x0' + AuxMat)*P0; - end - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % c --> Compute values in the original intervals - % B0 has values x(i,j) in [0, 1/(p -1), 2/(p -1), ... , 1]. - % To obtain values in the original intervals [LB, UB] we compute - % LB(j) + x(i,j)*(UB(j)-LB(j)) - In = repmat(LB,1,sizeb)' + B0 .* repmat((UB-LB),1,sizeb)'; - - % Create the Factor vector. Each component of this vector indicate which factor or group of factor - % has been changed in each step of the trajectory. - for j=1:sizea - Fact(1,j) = find(P0(j,:)); - end - Fact(1,sizea+1) = 0; - - Outmatrix = [Outmatrix; In]; - OutFact = [OutFact; Fact']; - -end \ No newline at end of file diff --git a/GSA_distrib/4.2/beta_inv.m b/GSA_distrib/4.2/beta_inv.m deleted file mode 100644 index d3c95836d..000000000 --- a/GSA_distrib/4.2/beta_inv.m +++ /dev/null @@ -1,38 +0,0 @@ -function x = beta_inv(p, a, b) -% PURPOSE: inverse of the cdf (quantile) of the beta(a,b) distribution -%-------------------------------------------------------------- -% USAGE: x = beta_inv(p,a,b) -% where: p = vector of probabilities -% a = beta distribution parameter, a = scalar -% b = beta distribution parameter b = scalar -% NOTE: mean [beta(a,b)] = a/(a+b), variance = ab/((a+b)*(a+b)*(a+b+1)) -%-------------------------------------------------------------- -% RETURNS: x at each element of p for the beta(a,b) distribution -%-------------------------------------------------------------- -% SEE ALSO: beta_d, beta_pdf, beta_inv, beta_rnd -%-------------------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to -% match the format of the econometrics toolbox - -if (nargin ~= 3) - error('Wrong # of arguments to beta_inv'); -end - -if any(any((a<=0)|(b<=0))) - error('beta_inv parameter a or b is nonpositive'); -end -if any(any(abs(2*p-1)>1)) - error('beta_inv: A probability should be 0<=p<=1'); -end - -x = a ./ (a+b); -dx = 1; -while any(any(abs(dx)>256*eps*max(x,1))) - dx = (betainc(x,a,b) - p) ./ beta_pdf(x,a,b); - x = x - dx; - x = x + (dx - x) / 2 .* (x<0); -end - \ No newline at end of file diff --git a/GSA_distrib/4.2/beta_pdf.m b/GSA_distrib/4.2/beta_pdf.m deleted file mode 100644 index 8412fbdce..000000000 --- a/GSA_distrib/4.2/beta_pdf.m +++ /dev/null @@ -1,32 +0,0 @@ -function pdf = beta_pdf(x, a, b) -% PURPOSE: pdf of the beta(a,b) distribution -%-------------------------------------------------------------- -% USAGE: pdf = beta_pdf(x,a,b) -% where: x = vector of components -% a = beta distribution parameter, a = scalar -% b = beta distribution parameter b = scalar -% NOTE: mean[(beta(a,b)] = a/(a+b), variance = ab/((a+b)*(a+b)*(a+b+1)) -%-------------------------------------------------------------- -% RETURNS: pdf at each element of x of the beta(a,b) distribution -%-------------------------------------------------------------- -% SEE ALSO: beta_d, beta_pdf, beta_inv, beta_rnd -%-------------------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to -% match the format of the econometrics toolbox - - -if (nargin ~=3) - error('Wrong # of arguments to beta_pdf'); -end - -if any(any((a<=0)|(b<=0))) - error('Parameter a or b is nonpositive'); -end - -I = find((x<0)|(x>1)); - -pdf = x.^(a-1) .* (1-x).^(b-1) ./ beta(a,b); -pdf(I) = 0*I; diff --git a/GSA_distrib/4.2/cumplot.m b/GSA_distrib/4.2/cumplot.m deleted file mode 100644 index a700d3784..000000000 --- a/GSA_distrib/4.2/cumplot.m +++ /dev/null @@ -1,14 +0,0 @@ -function h = cumplot(x); -%function h =cumplot(x) -% Copyright (C) 2005 Marco Ratto - - -n=length(x); -x=[-inf; sort(x); Inf]; -y=[0:n n]./n; -h0 = stairs(x,y); -grid on, - -if nargout, - h=h0; -end diff --git a/GSA_distrib/4.2/dat_fil_.m b/GSA_distrib/4.2/dat_fil_.m deleted file mode 100644 index 0b3ac8f8e..000000000 --- a/GSA_distrib/4.2/dat_fil_.m +++ /dev/null @@ -1,30 +0,0 @@ -function c = dat_fil_(data_file); -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -try - eval(data_file); -catch - load(data_file); -end -clear data_file; - -a=who; - -for j=1:length(a) - eval(['c.',a{j},'=',a{j},';']); -end \ No newline at end of file diff --git a/GSA_distrib/4.2/dynare_MC.m b/GSA_distrib/4.2/dynare_MC.m deleted file mode 100644 index 3d13b5b51..000000000 --- a/GSA_distrib/4.2/dynare_MC.m +++ /dev/null @@ -1,133 +0,0 @@ -function dynare_MC(var_list_,OutDir,data,rawdata,data_info) -% -% Adapted by M. Ratto from dynare_estimation.m and posteriorsmoother.m -% (dynare_estimation.m and posteriorsmoother.m are part of DYNARE, -% copyright M. Juillard) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global M_ options_ oo_ estim_params_ -global bayestopt_ - -% if options_.filtered_vars ~= 0 & options_.filter_step_ahead == 0 -% options_.filter_step_ahead = 1; -% end -% if options_.filter_step_ahead ~= 0 -% options_.nk = max(options_.filter_step_ahead); -% else -% options_.nk = 0; -% end -% -options_.filter_step_ahead=1; -options_.nk = 1; - - - -nvx = estim_params_.nvx; -nvn = estim_params_.nvn; -ncx = estim_params_.ncx; -ncn = estim_params_.ncn; -np = estim_params_.np ; -npar = nvx+nvn+ncx+ncn+np; - -if isempty(options_.datafile) - error('ESTIMATION: datafile option is missing') -end - -if isempty(options_.varobs) - error('ESTIMATION: VAROBS is missing') -end - -gend = data_info.gend; -n_varobs = size(options_.varobs,1); - -data_index = data_info.data_index; -number_of_observations = data_info.number_of_observations; -no_more_missing_observations = data_info.no_more_missing_observations; -missing_value = data_info.missing_value; - -offset = npar-np; -fname_=M_.fname; - -options_ = set_default_option(options_,'opt_gsa',1); -options_gsa_ = options_.opt_gsa; - -if options_gsa_.pprior, - namfile=[fname_,'_prior']; -else - namfile=[fname_,'_mc']; -end -load([OutDir,'/',namfile],'lpmat', 'lpmat0', 'istable') -% load(options_.mode_file) -%% -%% -%% -x=[lpmat0(istable,:) lpmat(istable,:)]; -clear lpmat lpmat0 istable %iunstable egg yys T -B = size(x,1); -[atT,innov,measurement_error,updated_variables,ys,trend_coeff, aK] = DsgeSmoother(x(1,:)',gend,data,data_index,missing_value); -n1=size(atT,1); - -nfil=B/40; -stock_smooth = zeros(M_.endo_nbr,gend,40); -stock_filter = zeros(M_.endo_nbr,gend+1,40); -stock_ys = zeros(40, M_.endo_nbr); -logpo2=zeros(B,1); -%% -h = waitbar(0,'MC smoother ...'); -delete([OutDir,'/',namfile,'_*.mat']) -ib=0; -ifil=0; -opt_gsa=options_.opt_gsa; - -for b=1:B - ib=ib+1; - deep = x(b,:)'; - set_all_parameters(deep); - dr = resol(oo_.steady_state,0); - %deep(1:offset) = xparam1(1:offset); - logpo2(b,1) = DsgeLikelihood(deep,gend,data,data_index,number_of_observations,no_more_missing_observations); - if opt_gsa.lik_only==0, - [atT,innov,measurement_error,updated_variables,ys,trend_coeff, aK] = DsgeSmoother(deep,gend,data,data_index,missing_value); - stock_smooth(:,:,ib)=atT(1:M_.endo_nbr,:); -% stock_filter(:,:,ib)=updated_variables(1:M_.endo_nbr,:); - stock_filter(:,:,ib)=aK(1,1:M_.endo_nbr,:); - stock_ys(ib,:)=ys'; - if ib==40, - ib=0; - ifil=ifil+1; - save([OutDir,'/',namfile,'_',num2str(ifil)],'stock_smooth','stock_filter','stock_ys') - stock_smooth = zeros(M_.endo_nbr,gend,40); - stock_filter = zeros(M_.endo_nbr,gend+1,40); - stock_ys = zeros(40, M_.endo_nbr); - end - end - waitbar(b/B,h,['MC smoother ...',num2str(b),'/',num2str(B)]); -end -close(h) -if opt_gsa.lik_only==0, -if ib>0, - ifil=ifil+1; - stock_smooth = stock_smooth(:,:,1:ib); - stock_filter = stock_filter(:,:,1:ib); - stock_ys = stock_ys(1:ib,:); - save([OutDir,'/',namfile,'_',num2str(ifil)],'stock_smooth','stock_filter','stock_ys') -end -end -stock_gend=gend; -stock_data=data; -save([OutDir,'/',namfile],'x','logpo2','stock_gend','stock_data','-append') diff --git a/GSA_distrib/4.2/fdjac.m b/GSA_distrib/4.2/fdjac.m deleted file mode 100644 index 2ff746531..000000000 --- a/GSA_distrib/4.2/fdjac.m +++ /dev/null @@ -1,37 +0,0 @@ -% FDJAC Computes two-sided finite difference Jacobian -% USAGE -% fjac = fdjac(f,x,P1,P2,...) -% INPUTS -% f : name of function of form fval = f(x) -% x : evaluation point -% P1,P2,... : additional arguments for f (optional) -% OUTPUT -% fjac : finite differnce Jacobian -% -% USER OPTIONS (SET WITH OPSET) -% tol : a factor used in setting the step size -% increase if f is inaccurately computed - -% Copyright (c) 1997-2002, Paul L. Fackler & Mario J. Miranda -% paul_fackler@ncsu.edu, miranda.4@osu.edu - -function fjac = fdjac(f,x,varargin) - -tol = optget(mfilename,'tol',eps.^(1/3)); - -h = tol.*max(abs(x),1); -xh1=x+h; xh0=x-h; -h=xh1-xh0; -for j=1:length(x); - xx = x; - xx(j) = xh1(j); f1=feval(f,xx,varargin{:}); - xx(j) = xh0(j); f0=feval(f,xx,varargin{:}); - fjac(:,j) = (f1-f0)/h(j); -% v = (f1-f0); -% k = find(abs(v) < 1e-8); -% v(k) = 0; -% -% fjac(:,j) = v/h(j); -end - -feval(f,x,varargin{:}); \ No newline at end of file diff --git a/GSA_distrib/4.2/filt_mc_.m b/GSA_distrib/4.2/filt_mc_.m deleted file mode 100644 index ba582de37..000000000 --- a/GSA_distrib/4.2/filt_mc_.m +++ /dev/null @@ -1,687 +0,0 @@ -function [rmse_MC, ixx] = filt_mc_(OutDir,data_info) -% function [rmse_MC, ixx] = filt_mc_(OutDir) -% copyright Marco Ratto 2006 -% inputs (from opt_gsa structure) -% vvarvecm = options_gsa_.var_rmse; -% loadSA = options_gsa_.load_rmse; -% pfilt = options_gsa_.pfilt_rmse; -% alpha = options_gsa_.alpha_rmse; -% alpha2 = options_gsa_.alpha2_rmse; -% istart = options_gsa_.istart_rmse; -% alphaPC = 0.5; -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global bayestopt_ estim_params_ M_ options_ oo_ - -options_gsa_=options_.opt_gsa; -vvarvecm = options_gsa_.var_rmse; -loadSA = options_gsa_.load_rmse; -pfilt = options_gsa_.pfilt_rmse; -alpha = options_gsa_.alpha_rmse; -alpha2 = options_gsa_.alpha2_rmse; -istart = options_gsa_.istart_rmse; -alphaPC = 0.5; - -fname_ = M_.fname; -lgy_ = M_.endo_names; -dr_ = oo_.dr; - -disp(' ') -disp(' ') -disp('Starting sensitivity analysis') -disp('for the fit of EACH observed series ...') -disp(' ') -disp('Deleting old SA figures...') -a=dir([OutDir,'/*.*']); -tmp1='0'; -if options_.opt_gsa.ppost, - tmp=['_rmse_post']; -else - if options_.opt_gsa.pprior - tmp=['_rmse_prior']; - else - tmp=['_rmse_mc']; - end - if options_gsa_.lik_only, - tmp1 = [tmp,'_post_SA']; - tmp = [tmp,'_lik_SA']; - end -end -for j=1:length(a), - if strmatch([fname_,tmp],a(j).name), - disp(a(j).name) - delete([OutDir,'/',a(j).name]) - end, - if strmatch([fname_,tmp1],a(j).name), - disp(a(j).name) - delete([OutDir,'/',a(j).name]) - end, -end -disp('done !') - - -nshock=estim_params_.nvx + estim_params_.nvn + estim_params_.ncx + estim_params_.ncn; -npar=estim_params_.np; -if ~isempty(options_.mode_file), - load(options_.mode_file,'xparam1'), -end -if options_.opt_gsa.ppost, - c=load([fname_,'_mean'],'xparam1'); - xparam1_mean=c.xparam1; - clear c -elseif ~isempty(options_.mode_file) & ~isempty(ls([fname_,'_mean.mat'])) - c=load([fname_,'_mean'],'xparam1'); - xparam1_mean=c.xparam1; - clear c -end - -if options_.opt_gsa.ppost, - fnamtmp=[fname_,'_post']; - DirectoryName = CheckPath('metropolis'); -else - if options_.opt_gsa.pprior - fnamtmp=[fname_,'_prior']; - DirectoryName = CheckPath(['gsa' filesep 'prior']); - else - fnamtmp=[fname_,'_mc']; - DirectoryName = CheckPath(['gsa' filesep 'mc']); - end -end -if ~loadSA, - if exist('xparam1','var') - set_all_parameters(xparam1); - steady_; - ys_mode=oo_.steady_state; - end - if exist('xparam1_mean','var') - set_all_parameters(xparam1_mean); - steady_; - ys_mean=oo_.steady_state; - end - % eval(options_.datafile) - obs = dat_fil_(options_.datafile); - %stock_gend=data_info.gend; - %stock_data = data_info.data; - load([DirectoryName '/' M_.fname '_data.mat']); filfilt = dir([DirectoryName '/' M_.fname '_filter_step_ahead*.mat']); - filparam = dir([DirectoryName '/' M_.fname '_param*.mat']); - x=[]; - logpo2=[]; - sto_ys=[]; - for j=1:length(filparam), - %load([DirectoryName '/' M_.fname '_param',int2str(j),'.mat']); - if isempty(strmatch([M_.fname '_param_irf'],filparam(j).name)) - load([DirectoryName '/' filparam(j).name]); - x=[x; stock]; - logpo2=[logpo2; stock_logpo]; - sto_ys=[sto_ys; stock_ys]; - clear stock stock_logpo stock_ys; - end - end - nruns=size(x,1); - nfilt=floor(pfilt*nruns); - if options_.opt_gsa.ppost || (options_.opt_gsa.ppost==0 && options_.opt_gsa.lik_only==0) - disp(' ') - disp('Computing RMSE''s...') - fobs = options_.first_obs; - nobs=options_.nobs; - for i=1:size(vvarvecm,1), - vj=deblank(vvarvecm(i,:)); - eval(['vobs =obs.',vj,'(fobs:fobs-1+nobs);']) - if options_.prefilter == 1 - %eval([vj,'=',vj,'-bayestopt_.mean_varobs(i);']) - %eval([vj,'=',vj,'-mean(',vj,',1);']) - vobs = vobs-mean(vobs,1); - end - - jxj = strmatch(vj,lgy_(dr_.order_var,:),'exact'); - js = strmatch(vj,lgy_,'exact'); - if exist('xparam1','var') - % if isfield(oo_,'FilteredVariables') - % eval(['rmse_mode(i) = sqrt(mean((vobs(istart:end)-oo_.steady_state(js)-oo_.FilteredVariables.',vj,'(istart:end-1)).^2));']) - % else - [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK] = DsgeSmoother(xparam1,stock_gend,stock_data,{},0); - y0 = squeeze(aK(1,jxj,:)) + ... - kron(ys_mode(js,:),ones(size(aK,3),1)); - % y0 = ahat(jxj,:)' + ... - % kron(ys_mode(js,:),ones(size(ahat,2),1)); - rmse_mode(i) = sqrt(mean((vobs(istart:end)-y0(istart:end-1)).^2)); - % end - end - y0=zeros(nobs+1,nruns); - nbb=0; - for j=1:length(filfilt), - load([DirectoryName '/' M_.fname '_filter_step_ahead',num2str(j),'.mat']); - nb = size(stock,4); - % y0(:,nbb+1:nbb+nb)=squeeze(stock(1,js,:,:)) + ... - % kron(sto_ys(nbb+1:nbb+nb,js)',ones(size(stock,3),1)); - y0(:,nbb+1:nbb+nb)=squeeze(stock(1,js,1:nobs+1,:)) + ... - kron(sto_ys(nbb+1:nbb+nb,js)',ones(nobs+1,1)); - %y0(:,:,size(y0,3):size(y0,3)+size(stock,3))=stock; - nbb=nbb+nb; - clear stock; - end - y0M=mean(y0,2); - for j=1:nruns, - rmse_MC(j,i) = sqrt(mean((vobs(istart:end)-y0(istart:end-1,j)).^2)); - end - if exist('xparam1_mean','var') - %eval(['rmse_pmean(i) = sqrt(mean((',vj,'(fobs-1+istart:fobs-1+nobs)-y0M(istart:end-1)).^2));']) - [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK] = DsgeSmoother(xparam1_mean,stock_gend,stock_data,{},0); - y0 = squeeze(aK(1,jxj,:)) + ... - kron(ys_mean(js,:),ones(size(aK,3),1)); - % y0 = ahat(jxj,:)' + ... - % kron(ys_mean(js,:),ones(size(ahat,2),1)); - rmse_pmean(i) = sqrt(mean((vobs(istart:end)-y0(istart:end-1)).^2)); - end - end - clear stock_filter; - end - for j=1:nruns, - lnprior(j,1) = priordens(x(j,:)',bayestopt_.pshape,bayestopt_.p1,bayestopt_.p2,bayestopt_.p3,bayestopt_.p4); - end - likelihood=logpo2(:)-lnprior(:); - disp('... done!') - - if options_.opt_gsa.ppost - save([OutDir,'/',fnamtmp], 'x', 'logpo2', 'likelihood', 'rmse_MC', 'rmse_mode','rmse_pmean') - else - if options_.opt_gsa.lik_only - save([OutDir,'/',fnamtmp], 'likelihood', '-append') - else - save([OutDir,'/',fnamtmp], 'likelihood', 'rmse_MC','-append') - if exist('xparam1_mean','var') - save([OutDir,'/',fnamtmp], 'rmse_pmean','-append') - end - if exist('xparam1','var') - save([OutDir,'/',fnamtmp], 'rmse_mode','-append') - end - end - end -else - if options_.opt_gsa.lik_only & options_.opt_gsa.ppost==0 - load([OutDir,'/',fnamtmp],'x','logpo2','likelihood'); - else - load([OutDir,'/',fnamtmp],'x','logpo2','likelihood','rmse_MC','rmse_mode','rmse_pmean'); - end - lnprior=logpo2(:)-likelihood(:); - nruns=size(x,1); - nfilt=floor(pfilt*nruns); -end -% smirnov tests -nfilt0=nfilt*ones(size(vvarvecm,1),1); -logpo2=logpo2(:); -if ~options_.opt_gsa.ppost - [dum, ipost]=sort(-logpo2); - [dum, ilik]=sort(-likelihood); -end -if ~options_.opt_gsa.ppost & options_.opt_gsa.lik_only - if options_.opt_gsa.pprior - anam='rmse_prior_post'; - else - anam='rmse_mc_post'; - end - stab_map_1(x, ipost(1:nfilt), ipost(nfilt+1:end), anam, 1,[],OutDir); - stab_map_2(x(ipost(1:nfilt),:),alpha2,anam, OutDir); - if options_.opt_gsa.pprior - anam='rmse_prior_lik'; - else - anam='rmse_mc_lik'; - end - stab_map_1(x, ilik(1:nfilt), ilik(nfilt+1:end), anam, 1,[],OutDir); - stab_map_2(x(ilik(1:nfilt),:),alpha2,anam, OutDir); -else - for i=1:size(vvarvecm,1), - [dum, ixx(:,i)]=sort(rmse_MC(:,i)); - if options_.opt_gsa.ppost, - %nfilt0(i)=length(find(rmse_MC(:,i)0.0001 ); - vvarvecm=vvarvecm(ivar,:); - rmse_MC=rmse_MC(:,ivar); - - disp(' ') - % if options_.opt_gsa.ppost==0 & options_.opt_gsa.pprior, - disp(['Sample filtered the ',num2str(pfilt*100),'% best RMSE''s for each observed series ...' ]) - % else - % disp(['Sample filtered the best RMSE''s smaller than RMSE at the posterior mean ...' ]) - % end - % figure, boxplot(rmse_MC) - % set(gca,'xticklabel',vvarvecm) - % saveas(gcf,[fname_,'_SA_RMSE']) - - disp(' ') - disp(' ') - disp('RMSE ranges after filtering:') - if options_.opt_gsa.ppost==0 & options_.opt_gsa.pprior, - disp([' best ',num2str(pfilt*100),'% filtered remaining 90%']) - disp([' min max min max posterior mode']) - else - disp([' best filtered remaining ']) - disp([' min max min max posterior mean']) - end - for j=1:size(vvarvecm,1), - disp([vvarvecm(j,:), sprintf('%15.5g',[min(rmse_MC(ixx(1:nfilt0(j),j),j)) ... - max(rmse_MC(ixx(1:nfilt0(j),j),j)) ... - min(rmse_MC(ixx(nfilt0(j)+1:end,j),j)) ... - max(rmse_MC(ixx(nfilt0(j)+1:end,j),j)) ... - rmse_txt(j)])]) - % disp([vvarvecm(j,:), sprintf('%15.5g',[min(logpo2(ixx(1:nfilt,j))) ... - % max(logpo2(ixx(1:nfilt,j))) ... - % min(logpo2(ixx(nfilt+1:end,j))) ... - % max(logpo2(ixx(nfilt+1:end,j)))])]) - end - - SP=zeros(npar+nshock,size(vvarvecm,1)); - for j=1:size(vvarvecm,1), - ns=find(PP(:,j)1),:); - snam=param_names(find(nsp>0),:); - % snam0=bayestopt_.name(find(nsp==0)); - % snam1=bayestopt_.name(find(nsp==1)); - % snam2=bayestopt_.name(find(nsp>1)); - % snam=bayestopt_.name(find(nsp>0)); - nsnam=(find(nsp>1)); - - disp(' ') - disp(' ') - disp('These parameters do not affect significantly the fit of ANY observed series:') - disp(snam0) - disp(' ') - disp('These parameters affect ONE single observed series:') - disp(snam1) - disp(' ') - disp('These parameters affect MORE THAN ONE observed series: trade off exists!') - disp(snam2) - - - %pnam=bayestopt_.name(end-estim_params_.np+1:end); - pnam=bayestopt_.name; - - % plot trade-offs - a00=jet(size(vvarvecm,1)); - for ix=1:ceil(length(nsnam)/5), - figure, - for j=1+5*(ix-1):min(size(snam2,1),5*ix), - subplot(2,3,j-5*(ix-1)) - %h0=cumplot(x(:,nsnam(j)+nshock)); - h0=cumplot(x(:,nsnam(j))); - set(h0,'color',[0 0 0]) - hold on, - np=find(SP(nsnam(j),:)); - %a0=jet(nsp(nsnam(j))); - a0=a00(np,:); - for i=1:nsp(nsnam(j)), %size(vvarvecm,1), - %h0=cumplot(x(ixx(1:nfilt,np(i)),nsnam(j)+nshock)); - h0=cumplot(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j))); - set(h0,'color',a0(i,:)) - end - ydum=get(gca,'ylim'); - %xdum=xparam1(nshock+nsnam(j)); - if exist('xparam1') - xdum=xparam1(nsnam(j)); - h1=plot([xdum xdum],ydum); - set(h1,'color',[0.85 0.85 0.85],'linewidth',2) - end - xlabel('') - title([pnam{nsnam(j)}],'interpreter','none') - end - %subplot(3,2,6) - h0=legend(str2mat('base',vvarvecm(np,:)),0); - set(h0,'fontsize',6,'position',[0.7 0.1 0.2 0.3],'interpreter','none') - %h0=legend({'base',vnam{np}}',0); - %set(findobj(get(h0,'children'),'type','text'),'interpreter','none') - if options_.opt_gsa.ppost - saveas(gcf,[OutDir,'/',fname_,'_rmse_post_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_post_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_post_' int2str(ix)]); - else - if options_.opt_gsa.pprior - saveas(gcf,[OutDir,'/',fname_,'_rmse_prior_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_prior_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_prior_' int2str(ix)]); - else - saveas(gcf,[OutDir,'/',fname_,'_rmse_mc_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_mc_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_mc_' int2str(ix)]); - end - end - end - close all - - for j=1:size(SP,2), - nsx(j)=length(find(SP(:,j))); - end - - number_of_grid_points = 2^9; % 2^9 = 512 !... Must be a power of two. - bandwidth = 0; % Rule of thumb optimal bandwidth parameter. - kernel_function = 'gaussian'; % Gaussian kernel for Fast Fourrier Transform approximaton. - %kernel_function = 'uniform'; % Gaussian kernel for Fast Fourrier Transform approximaton. - - for ix=1:ceil(length(nsnam)/5), - figure, - for j=1+5*(ix-1):min(size(snam2,1),5*ix), - subplot(2,3,j-5*(ix-1)) - optimal_bandwidth = mh_optimal_bandwidth(x(:,nsnam(j)),size(x,1),bandwidth,kernel_function); - [x1,f1] = kernel_density_estimate(x(:,nsnam(j)),number_of_grid_points,... - size(x,1),optimal_bandwidth,kernel_function); - h0 = plot(x1, f1,'k'); - hold on, - np=find(SP(nsnam(j),:)); - %a0=jet(nsp(nsnam(j))); - a0=a00(np,:); - for i=1:nsp(nsnam(j)), %size(vvarvecm,1), - optimal_bandwidth = mh_optimal_bandwidth(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)),nfilt,bandwidth,kernel_function); - [x1,f1] = kernel_density_estimate(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)),number_of_grid_points,... - nfilt, optimal_bandwidth,kernel_function); - h0 = plot(x1, f1); - set(h0,'color',a0(i,:)) - end - ydum=get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]); - if exist('xparam1') - %xdum=xparam1(nshock+nsnam(j)); - xdum=xparam1(nsnam(j)); - h1=plot([xdum xdum],[0 ydum(2)]); - set(h1,'color',[0.85 0.85 0.85],'linewidth',2) - end - xlabel('') - title([pnam{nsnam(j)}],'interpreter','none') - end - h0=legend(str2mat('base',vvarvecm(np,:)),0); - set(h0,'fontsize',6,'position',[0.7 0.1 0.2 0.3],'interpreter','none') - %h0=legend({'base',vnam{np}}',0); - %set(findobj(get(h0,'children'),'type','text'),'interpreter','none') - if options_.opt_gsa.ppost - saveas(gcf,[OutDir,'/',fname_,'_rmse_post_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_post_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_post_dens_' int2str(ix)]); - else - if options_.opt_gsa.pprior - saveas(gcf,[OutDir,'/',fname_,'_rmse_prior_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_prior_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_prior_dens_' int2str(ix)]); - else - saveas(gcf,[OutDir,'/',fname_,'_rmse_mc_dens_',num2str(ix)]) - eval(['print -depsc2 ' OutDir '/' fname_ '_rmse_mc_dens_' int2str(ix)]); - eval(['print -dpdf ' OutDir '/' fname_ '_rmse_mc_dens_' int2str(ix)]); - end - end - end - close all - - % for j=1:size(SP,2), - % nfig=0; - % np=find(SP(:,j)); - % for i=1:nsx(j), %size(vvarvecm,1), - % if mod(i,12)==1, - % nfig=nfig+1; - % %figure('name',['Sensitivity of fit of ',vnam{j}]), - % figure('name',['Sensitivity of fit of ',deblank(vvarvecm(j,:)),' ',num2str(nfig)]), - % end - % - % subplot(3,4,i-12*(nfig-1)) - % optimal_bandwidth = mh_optimal_bandwidth(x(ixx(1:nfilt,j),np(i)),nfilt,bandwidth,kernel_function); - % [x1,f1] = kernel_density_estimate(x(ixx(1:nfilt,j),np(i)),number_of_grid_points,... - % nfilt, optimal_bandwidth,kernel_function); - % plot(x1, f1,':k','linewidth',2) - % optimal_bandwidth = mh_optimal_bandwidth(x(ixx(nfilt+1:end,j),np(i)),nruns-nfilt,bandwidth,kernel_function); - % [x1,f1] = kernel_density_estimate(x(ixx(nfilt+1:end,j),np(i)),number_of_grid_points,... - % nruns-nfilt,optimal_bandwidth,kernel_function); - % hold on, plot(x1, f1,'k','linewidth',2) - % ydum=get(gca,'ylim'); - % %xdum=xparam1(nshock+np(i)); - % xdum=xparam1(np(i)); - % h1=plot([xdum xdum],ydum); - % set(h1,'color',[0.85 0.85 0.85],'linewidth',2) - % %xdum1=mean(x(ixx(1:nfilt,j),np(i)+nshock)); - % xdum1=mean(x(ixx(1:nfilt,j),np(i))); - % h2=plot([xdum1 xdum1],ydum); - % set(h2,'color',[0 1 0],'linewidth',2) - % % h0=cumplot(x(nfilt+1:end,np(i)+nshock)); - % % set(h0,'color',[1 1 1]) - % % hold on, - % % h0=cumplot(x(ixx(1:nfilt,j),np(i)+nshock)); - % % set(h0,'linestyle',':','color',[1 1 1]) - % %title([pnam{np(i)}]) - % title([pnam{np(i)},'. K-S prob ', num2str(PP(np(i),j))],'interpreter','none') - % xlabel('') - % if mod(i,12)==0 | i==nsx(j), - % saveas(gcf,[fname_,'_rmse_',deblank(vvarvecm(j,:)),'_',int2str(nfig)]) - % close(gcf) - % end - % end - % end - - - disp(' ') - disp(' ') - disp('Sensitivity table (significance and direction):') - vav=char(zeros(1, size(param_names,2)+3 )); - ibl = 12-size(vvarvecm,2); - for j=1:size(vvarvecm,1), - vav = [vav, char(zeros(1,ibl)),vvarvecm(j,:)]; - end - disp(vav) - for j=1:npar+nshock, %estim_params_.np, - %disp([param_names(j,:), sprintf('%8.5g',SP(j,:))]) - disp([param_names(j,:),' ', sprintf('%12.3g',PP(j,:))]) - disp([char(zeros(1, size(param_names,2)+3 )),sprintf(' (%6g)',SS(j,:))]) - end - - - disp(' ') - disp(' ') - disp('Starting bivariate analysis:') - - for i=1:size(vvarvecm,1) - if options_.opt_gsa.ppost - fnam = ['rmse_post_',deblank(vvarvecm(i,:))]; - else - if options_.opt_gsa.pprior - fnam = ['rmse_prior_',deblank(vvarvecm(i,:))]; - else - fnam = ['rmse_mc_',deblank(vvarvecm(i,:))]; - end - end - stab_map_2(x(ixx(1:nfilt0(i),i),:),alpha2,fnam, OutDir); - - % [pc,latent,explained] = pcacov(c0); - % %figure, bar([explained cumsum(explained)]) - % ifig=0; - % j2=0; - % for j=1:npar+nshock, - % i2=find(abs(pc(:,j))>alphaPC); - % if ~isempty(i2), - % j2=j2+1; - % if mod(j2,12)==1, - % ifig=ifig+1; - % figure('name',['PCA of the filtered sample ',deblank(vvarvecm(i,:)),' ',num2str(ifig)]), - % end - % subplot(3,4,j2-(ifig-1)*12) - % bar(pc(i2,j)), - % set(gca,'xticklabel',bayestopt_.name(i2)), - % set(gca,'xtick',[1:length(i2)]) - % title(['PC ',num2str(j),'. Explained ',num2str(explained(j)),'%']) - % end - % if (mod(j2,12)==0 | j==(npar+nshock)) & j2, - % saveas(gcf,[fname_,'_SA_PCA_',deblank(vvarvecm(i,:)),'_',int2str(ifig)]) - % end - % end - % close all - end - -end \ No newline at end of file diff --git a/GSA_distrib/4.2/gamm_cdf.m b/GSA_distrib/4.2/gamm_cdf.m deleted file mode 100644 index a11d0962a..000000000 --- a/GSA_distrib/4.2/gamm_cdf.m +++ /dev/null @@ -1,27 +0,0 @@ -function cdf = gamm_cdf (x, a) -% PURPOSE: returns the cdf at x of the gamma(a) distribution -%--------------------------------------------------- -% USAGE: cdf = gamm_cdf(x,a) -% where: x = a vector -% a = a scalar gamma(a) -%--------------------------------------------------- -% RETURNS: -% a vector of cdf at each element of x of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_d, gamm_pdf, gamm_rnd, gamm_inv -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg - -if nargin ~= 2 -error('Wrong # of arguments to gamm_cdf'); -end; - -if any(any(a<=0)) - error('gamm_cdf: parameter a is wrong') -end - -cdf = gammainc(x,a); -I0 = find(x<0); -cdf(I0) = zeros(size(I0)); diff --git a/GSA_distrib/4.2/gamm_inv.m b/GSA_distrib/4.2/gamm_inv.m deleted file mode 100644 index 3bede95ba..000000000 --- a/GSA_distrib/4.2/gamm_inv.m +++ /dev/null @@ -1,50 +0,0 @@ -function x = gamm_inv(p,a,b) -% PURPOSE: returns the inverse of the cdf at p of the gamma(a,b) distribution -%--------------------------------------------------- -% USAGE: x = gamm_inv(p,a) -% where: p = a vector of probabilities -% a = a scalar parameter gamma(a) -% b = scaling factor for gamma -%--------------------------------------------------- -% RETURNS: -% a vector x of the quantile at each element of p of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_d, gamm_pdf, gamm_rnd, gamm_cdf -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg -% documentation modified by LeSage to fit the format -% of the econometrics toolbox - - if (nargin < 2 | isempty(b)) - b=1; - end - - if (nargin > 3) - error('Wrong # of arguments to gamm_inv'); - end - - -if any(any(abs(2*p-1)>1)) - error('gamm_inv: a probability should be 0<=p<=1') -end -if any(any(a<=0)) - error('gamma_inv: parameter a is wrong') -end - -x = max(a-1,0.1); -dx = 1; -while any(any(abs(dx)>256*eps*max(x,1))) - dx = (gamm_cdf(x,a) - p) ./ gamm_pdf(x,a); - x = x - dx; - x = x + (dx - x) / 2 .* (x<0); -end - -I0 = find(p==0); -x(I0) = zeros(size(I0)); -I1 = find(p==1); -x(I1) = zeros(size(I0)) + Inf; - - -x=x.*b; diff --git a/GSA_distrib/4.2/gamm_pdf.m b/GSA_distrib/4.2/gamm_pdf.m deleted file mode 100644 index 86f4ffb1d..000000000 --- a/GSA_distrib/4.2/gamm_pdf.m +++ /dev/null @@ -1,27 +0,0 @@ -function f = gamm_pdf (x, a) -% PURPOSE: returns the pdf at x of the gamma(a) distribution -%--------------------------------------------------- -% USAGE: pdf = gamm_pdf(x,a) -% where: x = a vector -% a = a scalar for gamma(a) -%--------------------------------------------------- -% RETURNS: -% a vector of pdf at each element of x of the gamma(a) distribution -% -------------------------------------------------- -% SEE ALSO: gamm_cdf, gamm_rnd, gamm_inv -%--------------------------------------------------- - -% Anders Holtsberg, 18-11-93 -% Copyright (c) Anders Holtsberg - -if nargin ~= 2 -error('Wrong # of arguments to gamm_cdf'); -end; - -if any(any(a<=0)) - error('gamm_pdf: parameter a is wrong') -end - -f = x .^ (a-1) .* exp(-x) ./ gamma(a); -I0 = find(x<0); -f(I0) = zeros(size(I0)); diff --git a/GSA_distrib/4.2/ghx2transition.m b/GSA_distrib/4.2/ghx2transition.m deleted file mode 100644 index ad3cf110a..000000000 --- a/GSA_distrib/4.2/ghx2transition.m +++ /dev/null @@ -1,54 +0,0 @@ -function [A,B] = ghx2transition(mm,iv,ic,aux) -% [A,B] = ghx2transition(mm,iv,ic,aux) -% -% Adapted by M. Ratto from kalman_transition_matrix.m -% (kalman_transition_matrix.m is part of DYNARE, copyright M. Juillard) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global oo_ M_ - - [nr1, nc1] = size(mm); - ghx = mm(:, [1:(nc1-M_.exo_nbr)]); - ghu = mm(:, [(nc1-M_.exo_nbr+1):end] ); - if nargin == 1 - oo_.dr.ghx = ghx; - oo_.dr.ghu = ghu; - endo_nbr = M_.endo_nbr; - nstatic = oo_.dr.nstatic; - npred = oo_.dr.npred; - iv = (1:endo_nbr)'; - ic = [ nstatic+(1:npred) endo_nbr+(1:size(oo_.dr.ghx,2)-npred) ]'; - aux = oo_.dr.transition_auxiliary_variables; - k = find(aux(:,2) > npred); - aux(:,2) = aux(:,2) + nstatic; - aux(k,2) = aux(k,2) + oo_.dr.nfwrd; - end - n_iv = length(iv); - n_ir1 = size(aux,1); - nr = n_iv + n_ir1; - - A = zeros(nr,nr); - B = zeros(nr,M_.exo_nbr); - - i_n_iv = 1:n_iv; - A(i_n_iv,ic) = ghx(iv,:); - if n_ir1 > 0 - A(n_iv+1:end,:) = sparse(aux(:,1),aux(:,2),ones(n_ir1,1),n_ir1,nr); - end - - B(i_n_iv,:) = ghu(iv,:); diff --git a/GSA_distrib/4.2/log_trans_.m b/GSA_distrib/4.2/log_trans_.m deleted file mode 100644 index b0ff26ddf..000000000 --- a/GSA_distrib/4.2/log_trans_.m +++ /dev/null @@ -1,54 +0,0 @@ -function [yy, xdir, isig, lam]=log_trans_(y0,xdir0) - -if nargin==1, - xdir0=''; -end -f=inline('skewness(log(y+lam))','lam','y'); -isig=1; -if ~(max(y0)<0 | min(y0)>0) - if skewness(y0)<0, - isig=-1; - y0=-y0; - end - n=hist(y0,10); - if n(1)>20*n(end), - try lam=fzero(f,[-min(y0)+10*eps -min(y0)+abs(median(y0))],[],y0); - catch - yl(1)=f(-min(y0)+10*eps,y0); - yl(2)=f(-min(y0)+abs(median(y0)),y0); - if abs(yl(1))0 - %yy=log(y0); - xdir=[xdir0,'_log']; - end - try lam=fzero(f,[-min(y0)+10*eps -min(y0)+median(y0)],[],y0); - catch - yl(1)=f(-min(y0)+10*eps,y0); - yl(2)=f(-min(y0)+abs(median(y0)),y0); - if abs(yl(1))1, - ifig=0; - for j=1:M_.exo_nbr, - if mod(j,6)==1 - figure('name',['Variance decomposition shocks']); - ifig=ifig+1; - iplo=0; - end - iplo=iplo+1; - subplot(2,3,iplo) - myboxplot(squeeze(vdec(:,j,:))',[],'.',[],10) - % boxplot(squeeze(vdec(:,j,:))','whis',10,'symbol','.r') - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:size(options_.varobs,1)]) - set(gca,'xlim',[0.5 size(options_.varobs,1)+0.5]) - set(gca,'ylim',[-2 102]) - for ip=1:size(options_.varobs,1), - text(ip,-4,deblank(options_.varobs(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - ylabel(' ') - title(M_.exo_names(j,:),'interpreter','none') - if mod(j,6)==0 | j==M_.exo_nbr, - saveas(gcf,[OutputDirectoryName,'/',fname_,'_vdec_exo_',int2str(ifig)]) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_vdec_exo_',int2str(ifig)]); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_vdec_exo_',int2str(ifig)]); - close(gcf), - end - end - end - for j=1:size(cc,1) - cc(j,j,:)=stand_(squeeze(log(cc(j,j,:))))./2; - end - [vdec, j0, ir_vdec, ic_vdec] = teff(vdec,Nsam,istable); - [cc, j0, ir_cc, ic_cc] = teff(cc,Nsam,istable); - [ac, j0, ir_ac, ic_ac] = teff(ac,Nsam,istable); - - [nr1, nc1, nnn] = size(T); - endo_nbr = M_.endo_nbr; - nstatic = oo_.dr.nstatic; - npred = oo_.dr.npred; - iv = (1:endo_nbr)'; - ic = [ nstatic+(1:npred) endo_nbr+(1:size(oo_.dr.ghx,2)-npred) ]'; - aux = oo_.dr.transition_auxiliary_variables; - k = find(aux(:,2) > npred); - aux(:,2) = aux(:,2) + nstatic; - aux(k,2) = aux(k,2) + oo_.dr.nfwrd; - - dr.ghx = T(:, [1:(nc1-M_.exo_nbr)],1); - dr.ghu = T(:, [(nc1-M_.exo_nbr+1):end], 1); - [Aa,Bb] = kalman_transition_matrix(dr, ... - iv, ic, aux, M_.exo_nbr); -% bayestopt_.restrict_var_list, ... -% bayestopt_.restrict_columns, ... -% bayestopt_.restrict_aux, M_.exo_nbr); - A = zeros(size(Aa,1),size(Aa,2)+size(Aa,1),length(istable)); - % Sig(estim_params_.var_exo(:,1))=lpmatx(1,:).^2; - set_shocks_param(lpmatx(1,:)); - A(:,:,1)=[Aa, triu(Bb*M_.Sigma_e*Bb')]; - for j=2:length(istable), - dr.ghx = T(:, [1:(nc1-M_.exo_nbr)],j); - dr.ghu = T(:, [(nc1-M_.exo_nbr+1):end], j); - [Aa,Bb] = kalman_transition_matrix(dr, ... - iv, ic, aux, M_.exo_nbr); -% bayestopt_.restrict_var_list, ... -% bayestopt_.restrict_columns, ... -% bayestopt_.restrict_aux, M_.exo_nbr); - set_shocks_param(lpmatx(j,:)); - A(:,:,j)=[Aa, triu(Bb*M_.Sigma_e*Bb')]; - end - clear T; - clear lpmatx; - - [nr,nc,nn]=size(A); - io=bayestopt_.mf2; - % T1=A(io,1:nr,:); - % ino=find(~ismember([1:nr],io)); - % T2=A(ino,1:nr,:); - R=A(:,nr+1:nc,:); -% [tadj, iff] = speed(A(1:nr,1:nr,:),R,io,0.5); -% [tadj, j0, ir_tadj, ic_tadj] = teff(tadj,Nsam,istable); -% [iff, j0, ir_if, ic_if] = teff(iff,Nsam,istable); - - - [yt, j0]=teff(A,Nsam,istable); - yt = [yys yt]; - if opt_gsa.morris==2, -% iii=find(std(yt(istable,:))>1.e-8); -% if max(max(abs(TAU-yt(istable,iii)')))<= 1.e-8, -% err = max(max(abs(TAU-yt(istable,iii)'))); -% disp(['Model check OK ',num2str(err)]), - clear TAU A -% end - else - clear A, - end - % [yt1, j01]=teff(T1,Nsam,istable); - % [yt2, j02]=teff(T2,Nsam,istable); - % [ytr, j0r]=teff(R,Nsam,istable); - % - % yt=[yt1 yt2 ytr]; - save([OutputDirectoryName,'/',fname_,'_main_eff'],'ac','cc','vdec','yt','mss') -else - if opt_gsa.morris==2, -% [pdraws, TAU, GAM] = dynare_identification([1:npT]); %,[lpmatx lpmat(istable,:)]); - [pdraws, TAU, GAM] = dynare_identification(options_.options_ident); - end - load([OutputDirectoryName,'/',fname_,'_main_eff'],'ac','cc','vdec','yt','mss') -end - -% for j=1:nr, -% for i=1:nc, -% y0=squeeze(A(j,i,:)); -% if max(y0)-min(y0)>1.e-10, -% j0=j0+1; -% y1=ones(size(lpmat,1),1)*NaN; -% y1(istable,1)=y0; -% yt(:,j0)=y1; -% end -% end -% end -% yt = yt(:,j0); - -if opt_gsa.morris==1, - %OutputDir = CheckPath('GSA/SCREEN'); - if ~isempty(vdec), - if opt_gsa.load_ident_files==0, - SAMorris = []; - for i=1:size(vdec,2), - [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], vdec(:,i),nliv); - end - SAvdec = squeeze(SAMorris(:,1,:))'; - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec') - else - load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec') - end - - figure, -% boxplot(SAvdec,'whis',10,'symbol','r.') - myboxplot(SAvdec,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('All variance decomposition') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_vdec']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_vdec']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_vdec']); - close(gcf) - else - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'vdec') - - end - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET variance decomposition observed variables']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_vdec==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAvdec(iv,:),[],'.',[],3) -% else -% plot(SAvdec(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_vdec_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_vdec_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_vdec_varobs_',int2str(ifig)]); -% close(gcf) -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['EET variance decomposition shocks']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_vdec==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAvdec(iv,:),[],'.',[],3) -% else -% plot(SAvdec(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-2,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr, -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_vdec_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_vdec_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_vdec_exo_',int2str(ifig)]); -% close(gcf), -% end -% end - - - if opt_gsa.load_ident_files==0, - SAMorris = []; - ccac = [mss cc ac]; - for i=1:size(ccac,2), - [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], [ccac(:,i)],nliv); - end - SAcc = squeeze(SAMorris(:,1,:))'; - SAcc = SAcc./(max(SAcc')'*ones(1,npT)); - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAcc','cc','ir_cc','ic_cc','-append') - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'ac','ir_ac','ic_ac','-append') - else - load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAcc','cc','ir_cc','ic_cc') - load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'ac','ir_ac','ic_ac') - end - - figure, -% boxplot(SAcc,'whis',10,'symbol','r.') - myboxplot(SAcc,[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('EET All moments') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_moments']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_moments']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_moments']); -% close(gcf), - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% MORRIS FOR DERIVATIVES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% if opt_gsa.load_ident_files==0, -% for j=1:npT, -% SAMorris = []; -% ddd=NaN(size(lpmat,1),size(JJ,1)); -% ddd(istable,:) = squeeze(JJ(:,j,:))'; -% for i=1:size(ddd,2), -% [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], [ddd(:,i)],nliv); -% end -% SAddd(:,:,j) = squeeze(SAMorris(:,1,:))'; -% SAddd(:,:,j) = SAddd(:,:,j)./(max(SAddd(:,:,j)')'*ones(1,npT)); -% sad(:,j) = median(SAddd(find(~isnan(squeeze(SAddd(:,1,j)))),:,j))'; -% end -% save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAddd','sad','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAddd','sad') -% end -% figure, -% contourf(sad,10), colorbar -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'yticklabel',' ','fontsize',10,'ytick',[1:npT]) -% for ip=1:npT, -% text(ip,0.9,['D(',bayestopt_.name{ip},')'],'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(0.9,ip,[bayestopt_.name{ip}],'rotation',0,'HorizontalAlignment','right','interpreter','none') -% end -% [m,im]=max(sad); -% iii = find((im-[1:npT])==0); -% disp('Most identified params') -% disp(bayestopt_.name(iii)) - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% END OF MORRIS FOR DERIVATIVES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET cross-correlations']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_cc==j); -% iv = [iv; find(ic_cc==j)]; -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAcc(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAcc(iv,:),[],'.',[],3) -% else -% plot(SAcc(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_cc_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_cc_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_cc_',int2str(ifig)]); -% close(gcf), -% end -% end - - -% if opt_gsa.load_ident_files==0, -% SAMorris = []; -% for i=1:size(ac,2), -% [SAmeas, SAMorris(:,:,i)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], ac(:,i),nliv); -% end -% %end -% SAac = squeeze(SAMorris(:,1,:))'; -% save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAac','ac','ir_ac','ic_ac','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAac','ac','ir_ac','ic_ac') -% end -% figure, -% % boxplot(SAac,'whis',10,'symbol','r.') -% myboxplot(SAac,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title('EET All auto-correlations') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_ac']) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_ac']); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_ac']); -% close(gcf), - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET auto-correlations']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_ac==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAac(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAac(iv,:),[],'.',[],3) -% else -% plot(SAac(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_ac_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_ac_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_ac_',int2str(ifig)]); -% close(gcf), -% end -% end - -% if opt_gsa.load_ident_files==0, -% js=0; -% %for j=1:size(tadj,1), -% SAMorris = []; -% for i=1:size(tadj,2), -% js=js+1; -% [SAmeas, SAMorris(:,:,js)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], tadj(:,i),nliv); -% end -% %end -% SAM = squeeze(SAMorris(nshock+1:end,1,:)); -% for j=1:js, -% SAtadj(:,j)=SAM(:,j)./(max(SAM(:,j))+eps); -% end -% SAtadj = SAtadj'; -% save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAtadj','tadj','ir_tadj','ic_tadj','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAtadj','tadj','ir_tadj','ic_tadj') -% end -% if opt_gsa.load_ident_files==0, -% js=0; -% SAMorris = []; -% for i=1:size(iff,2), -% js=js+1; -% [SAmeas, SAMorriss(:,:,js)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], iff(:,i),nliv); -% end -% SAM = squeeze(SAMorriss(nshock+1:end,1,:)); -% for j=1:js, -% SAIF(:,j)=SAM(:,j)./(max(SAM(:,j))+eps); -% end -% SAIF = SAIF'; -% save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAIF','iff','ir_if','ic_if','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAIF','iff','ir_if','ic_if') -% end -% figure, -% %bar(SAtadj), -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAtadj,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% set(gca,'ylim',[0 1]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title('All half-life') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_tadj']) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_tadj']); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_tadj']); -% close(gcf), - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET speed of adjustment observed variables']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_tadj==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAtadj(iv,:),[],'.',[],3) -% else -% plot(SAtadj(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_tadj_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_tadj_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_tadj_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end - -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['EET speed of adjustment shocks']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_tadj==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAtadj(iv,:),[],'.',[],3) -% else -% plot(SAtadj(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr, -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_tadj_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_tadj_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_tadj_exo_',int2str(ifig)]); -% close(gcf), -% end -% end - -% figure, -% %bar(SAIF), -% % boxplot(SAIF,'whis',10,'symbol','r.') -% myboxplot(SAIF,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% set(gca,'ylim',[0 1]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% ylabel('Elementary Effects') -% title('Steady state gains (impact factors)') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_gain']) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_gain']); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_gain']); -% close(gcf), - %figure, bar(SAIF'), title('All Gain Relationships') -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['EET steady state gain observed series']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_if==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAIF(iv,:),'whis',10,'symbol','r.'); -% myboxplot(SAIF(iv,:),[],'.',[],10) -% else -% plot(SAIF(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_gain_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_gain_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_gain_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['EET steady state gain shocks']); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_if==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAIF(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAIF(iv,:),[],'.',[],3) -% else -% plot(SAIF(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr, -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_gain_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_gain_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_gain_exo_',int2str(ifig)]); -% close(gcf), -% end -% end - - - if opt_gsa.load_ident_files==0, - SAMorris = []; - for j=1:j0, - [SAmeas, SAMorris(:,:,j)] = Morris_Measure_Groups(npT, [lpmat0 lpmat], yt(:,j),nliv); - end - -% SAM = squeeze(SAMorris(nshock+1:end,1,:)); - SAM = squeeze(SAMorris(1:end,1,:)); - for j=1:j0 - SAnorm(:,j)=SAM(:,j)./max(SAM(:,j)); - irex(j)=length(find(SAnorm(:,j)>0.01)); - end - [dum, irel]=sort(irex); - -% SAMmu = squeeze(SAMorris(nshock+1:end,2,:)); - SAMmu = squeeze(SAMorris(1:end,2,:)); - for j=1:j0 - SAmunorm(:,j)=SAMmu(:,j)./max(SAM(:,j)); % normalised w.r.t. mu* - end -% SAMsig = squeeze(SAMorris(nshock+1:end,3,:)); - SAMsig = squeeze(SAMorris(1:end,3,:)); - for j=1:j0 - SAsignorm(:,j)=SAMsig(:,j)./max(SAMsig(:,j)); - end - save([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAnorm','SAmunorm','SAsignorm','-append') - else - load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAnorm','SAmunorm','SAsignorm') - end - figure, %bar(SAnorm(:,irel)) -% boxplot(SAnorm','whis',10,'symbol','r.') - myboxplot(SAnorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:npT, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('Elementary effects in the model') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_par']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_par']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_par']); - - figure, %bar(SAmunorm(:,irel)) -% boxplot(SAmunorm','whis',10,'symbol','r.') - myboxplot(SAmunorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - set(gca,'ylim',[-1 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('\mu in the model') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morrismu_par']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morrismu_par']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morrismu_par']); - close(gcf), - - figure, %bar(SAsignorm(:,irel)) -% boxplot(SAsignorm','whis',10,'symbol','r.') - myboxplot(SAsignorm',[],'.',[],10) - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - set(gca,'ylim',[0 1]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - xlabel(' ') - for ip=1:npT, - text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title('\sigma in the model') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_morrissig_par']) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morrissig_par']); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morrissig_par']); - close(gcf), - - % figure, bar(SAnorm(:,irel)') - % set(gca,'xtick',[1:j0]) - % set(gca,'xlim',[0.5 j0+0.5]) - % title('Elementary effects relationships') - % saveas(gcf,[OutputDirectoryName,'/',fname_,'_morris_redform']) - % eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_morris_redform']); - % eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_morris_redform']); - -elseif opt_gsa.morris==3, - np=estim_params_.np; - na=(4*np+1)*opt_gsa.Nsam; - for j=1:j0, - [idex(j,:), yd(j,:)] = spop_ide(lpmat, yt(:,j), opt_gsa.Nsam, 5-1); - end - iok=find(~isnan(yt(1:opt_gsa.Nsam,1))); - yr=NaN*ones(size(lpmat,1),j0); - for j=1:j0, - ys(j,:)=yd(j,:)./max(yd(j,:)); - [dum, is]=sort(yt(iok,j)); - yr(iok(is),j)=[1:length(iok)]'./length(iok); - yr(istable(length(iok)+1:end),j) = interp1(yt(iok,j),yr(iok,j),yt(istable(length(iok)+1:end),j),'','extrap'); - ineg=find(yr(:,j)<0); - if any(ineg), - [dum, is]=sort(yr(ineg,j)); - yr(ineg(is),j)=-[length(ineg):-1:1]./length(iok); - - end - [idex_r(j,:), yd_r(j,:)] = spop_ide(lpmat, yr(:,j), opt_gsa.Nsam, 5-1); - ys_r(j,:)=yd_r(j,:)./max(yd_r(j,:)); - - end, - figure, bar((idex.*ys)./opt_gsa.Nsam), title('Relationships') - figure, bar((idex.*ys)'./opt_gsa.Nsam), title('Parameters') - figure, bar((idex_r.*ys_r)./opt_gsa.Nsam), title('Relationships rank') - figure, bar((idex_r.*ys_r)'./opt_gsa.Nsam), title('Parameters rank') - [v0,d0]=eig(corrcoef(yt(iok,:))); - ee=diag(d0); - ee=ee([end:-1:1])./j0; - i0=length(find(ee>0.01)); - v0=v0(:,[end:-1:1]); - for j=1:i0, - [idex_pc(j,:), yd_pc(j,:)] = spop_ide(lpmat, yt*v0(:,j), opt_gsa.Nsam, 5-1); - end - for j=1:i0, - ys_pc(j,:)=yd_pc(j,:)./max(yd_pc(j,:)); - end, - figure, bar((idex_pc.*ys_pc)./opt_gsa.Nsam), title('Relationships PCA') - figure, bar((idex_pc.*ys_pc)'./opt_gsa.Nsam), title('Parameters PCA') - - [vr,dr]=eig(corrcoef(yr(iok,:))); - er=diag(dr); - er=er([end:-1:1])./j0; - ir0=length(find(er>0.01)); - vr=vr(:,[end:-1:1]); - for j=1:ir0, - [idex_pcr(j,:), yd_pcr(j,:)] = spop_ide(lpmat, yr*vr(:,j), opt_gsa.Nsam, 5-1); - end - for j=1:ir0, - ys_pcr(j,:)=yd_pcr(j,:)./max(yd_pcr(j,:)); - end, - figure, bar((idex_pcr.*ys_pcr)./opt_gsa.Nsam), title('Relationships rank PCA') - figure, bar((idex_pcr.*ys_pcr)'./opt_gsa.Nsam), title('Parameters rank PCA') - -elseif opt_gsa.morris==2, % ISKREV staff - return, - - -else, % main effects analysis - - if itrans==0, - fsuffix = ''; - elseif itrans==1, - fsuffix = '_log'; - else - fsuffix = '_rank'; - end - - imap=[1:npT]; - - x0=[lpmat0(istable,:), lpmat(istable,:)]; - nrun=length(istable); - nest=min(250,nrun); - nfit=min(1000,nrun); - -% opt_gsa.load_ident_files=0; - -% if opt_gsa.load_ident_files==0, -% try -% EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec'); -% catch -% EET=[]; -% end -% SAvdec=zeros(size(vdec,2),npT); -% -% for j=1:size(vdec,2), -% if itrans==0, -% y0 = vdec(istable,j); -% elseif itrans==1, -% y0 = log_trans_(vdec(istable,j)); -% else -% y0 = trank(vdec(istable,j)); -% end -% if ~isempty(EET), -% % imap=find(EET.SAvdec(j,:)); -% % [dum, isort]=sort(-EET.SAvdec(j,:)); -% imap=find(EET.SAvdec(j,:) >= (0.1.*max(EET.SAvdec(j,:))) ); -% end -% gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... -% 2, [],[],[],0,[OutputDirectoryName,'/map_vdec',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_vdec',fsuffix,int2str(j)], pnames); -% end -% -% SAvdec(j,imap)=gsa_(j).si; -% imap_vdec{j}=imap; -% end -% save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_vdec','SAvdec','vdec','ir_vdec','ic_vdec','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_vdec','SAvdec','vdec','ir_vdec','ic_vdec') -% end -% figure, -% % boxplot(SAvdec,'whis',10,'symbol','r.') -% myboxplot(SAvdec,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects variance decomposition ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_vdec',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix]); -% close(gcf), -% -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects observed variance decomposition ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_vdec==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAvdec(iv,:),'whis',10,'symbol','r.'); -% myboxplot(SAvdec(iv,:),[],'.',[],10) -% else -% plot(SAvdec(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_vdec',fsuffix,'_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix,'_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix,'_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['Main effects shocks variance decomposition ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_vdec==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAvdec(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAvdec(iv,:),[],'.',[],10) -% else -% plot(SAvdec(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',3,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% set(gca,'fontsize',10) -% end -% title(M_.exo_names(j,:),'interpreter','none','fontsize',10) -% if mod(j,6)==0 | j==M_.exo_nbr -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_vdec',fsuffix,'_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix,'_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_vdec',fsuffix,'_exo_',int2str(ifig)]); -% close(gcf), -% end -% end - - if opt_gsa.load_ident_files==0, - try - EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAcc','ir_cc','ic_cc'); - catch - EET=[]; - end - ccac = stand_([mss cc ac]); - [pcc, dd] = eig(cov(ccac(istable,:))); - [latent, isort] = sort(-diag(dd)); - latent = -latent; - figure, bar(latent) - title('Eigenvalues in PCA') - pcc=pcc(:,isort); - ccac = ccac*pcc; -% npca = min(40, max(find(cumsum(latent)./length(latent)<0.99))+1); - npca = max(find(cumsum(latent)./length(latent)<0.99))+1; - siPCA = (EET.SAcc'*abs(pcc'))'; -% siPCA = siPCA./(max(siPCA')'*ones(1,npT)).*(latent*ones(1,npT)); - siPCA = siPCA./(max(siPCA')'*ones(1,npT)); -% siPCA = sum(siPCA,1); -% siPCA = siPCA./max(siPCA); - SAcc=zeros(size(ccac,2),npT); - for j=1:npca, %size(ccac,2), - if itrans==0, - y0 = ccac(istable,j); - elseif itrans==1, - y0 = log_trans_(ccac(istable,j)); - else - y0 = trank(ccac(istable,j)); - end - if ~isempty(EET), -% imap=find(EET.SAvdec(j,:)); -% [dum, isort]=sort(-EET.SAvdec(j,:)); - imap=find(siPCA(j,:) >= (0.1.*max(siPCA(j,:))) ); -% imap=find(EET.SAcc(j,:) >= (0.1.*max(EET.SAcc(j,:))) ); - end - gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... - 2, [],[],[],0,[OutputDirectoryName,'/map_cc',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_cc',fsuffix,int2str(j)], pnames); -% end - SAcc(j,imap)=gsa_(j).si; - imap_cc{j}=imap; - - end - save([OutputDirectoryName,'/map_cc',fsuffix],'gsa_') - save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_cc','SAcc','ccac','-append') - else - load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_cc','SAcc','ccac') - - end -% figure, -% % boxplot(SAcc,'whis',10,'symbol','r.') -% myboxplot(SAcc,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% ylabel(' ') -% title(['Main effects moments''s PCA ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_cc',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_moments',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_moments',fsuffix]); -% close(gcf), - -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects cross-covariances ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_cc==j); -% iv = [iv; find(ic_cc==j)]; -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAcc(iv,:),'whis',10,'symbol','r.'); -% myboxplot(SAcc(iv,:),[],'.',[],10) -% else -% plot(SAcc(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% set(gca,'fontsize',10) -% end -% title(options_.varobs(j,:),'interpreter','none','fontsize',10) -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_cc',fsuffix,'_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_cc',fsuffix,'_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_cc',fsuffix,'_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% if opt_gsa.load_ident_files==0, -% try -% EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAac','ir_ac','ic_ac'); -% catch -% EET=[]; -% end -% SAac=zeros(size(ac,2),npT); -% for j=1:size(ac,2), -% if itrans==0, -% y0 = ac(istable,j); -% elseif itrans==1, -% y0 = log_trans_(ac(istable,j)); -% else -% y0 = trank(ac(istable,j)); -% end -% if ~isempty(EET), -% imap=find(EET.SAac(j,:) >= (0.1.*max(EET.SAac(j,:))) ); -% end -% % gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% % gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); -% gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... -% 2, [],[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_ac',fsuffix,int2str(j)], pnames); -% end -% SAac(j,imap)=gsa_(j).si; -% imap_ac{j}=imap; -% -% end -% save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_ac','SAac','ac','ir_ac','ic_ac','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_ac','SAac','ac','ir_ac','ic_ac') -% end -% -% figure, -% % boxplot(SAac,'whis',10,'symbol','r.') -% myboxplot(SAac,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects 1 lag auto-covariances ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_ac',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_ac',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_ac',fsuffix]); -% close(gcf), -% -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects auto-covariances ',fsuffix]); -% ifig=ifig+1; -% iplo = 0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_ac==j); -% %iv = [iv; find(ic_ac==j)]; -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAac(iv,:),'whis',10,'symbol','r.'); -% myboxplot(SAac(iv,:),[],'.',[],10) -% else -% plot(SAac(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:npT, -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% set(gca,'fontsize',10) -% end -% title(options_.varobs(j,:),'interpreter','none','fontsize',10) -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_ac',fsuffix,'_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_ac',fsuffix,'_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_ac',fsuffix,'_',int2str(ifig)]); -% close(gcf), -% end -% end - -% x0=x0(:,nshock+1:end); - imap=[1:npT]; - -% if opt_gsa.load_ident_files==0, -% try -% EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAtadj','ir_tadj','ic_tadj'); -% ny=size(EET.SAtadj,1); -% catch -% EET=[]; -% end -% SAtadj=zeros(size(tadj,2),np); -% for j=1:size(tadj,2), -% if itrans==0, -% y0 = tadj(istable,j); -% elseif itrans==1, -% y0 = log_trans_(tadj(istable,j)); -% else -% y0 = trank(tadj(istable,j)); -% end -% if ~isempty(EET), -% if size(tadj,2)~=ny, -% jj=find(EET.ir_tadj==ir_tadj(j)); -% jj=jj(find(EET.ic_tadj(jj)==ic_tadj(j))); -% if ~isempty(jj), -% imap=find(EET.SAtadj(jj,:) >= (0.1.*max(EET.SAtadj(jj,:))) ); -% else -% imap=[1:np]; -% end -% else -% imap=find(EET.SAtadj(j,:) >= (0.1.*max(EET.SAtadj(j,:))) ); -% end -% end -% % gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% % gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); -% gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... -% 2, [],[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_tadj',fsuffix,int2str(j)], pnames); -% end -% SAtadj(j,imap)=gsa_(j).si; -% imap_tadj{j}=imap; -% -% end -% save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_tadj','SAtadj','tadj','ir_tadj','ic_tadj','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_tadj','SAtadj','tadj','ir_tadj','ic_tadj') -% end -% -% figure, -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAtadj,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects speed of adjustment ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_tadj',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix]); -% close(gcf), -% -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects observed speed adjustment ',fsuffix]); -% ifig=ifig+1; -% iplo = 0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_tadj==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAtadj(iv,:),[],'.',[],10) -% else -% plot(SAtadj(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_tadj',fsuffix,'_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix,'_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix,'_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['Main effects shocks speed of adjustment ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_tadj==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAtadj(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAtadj(iv,:),[],'.',[],10) -% else -% plot(SAtadj(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr, -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_tadj',fsuffix,'_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix,'_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_tadj',fsuffix,'_exo_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% -% if opt_gsa.load_ident_files==0, -% try -% EET=load([OutputDirectoryName,'/SCREEN/',fname_,'_morris_IDE'],'SAIF','ir_if','ic_if'); -% catch -% EET=[]; -% end -% SAif=zeros(size(iff,2),np); -% for j=1:size(iff,2), -% if itrans==0, -% y0 = iff(istable,j); -% elseif itrans==1, -% y0 = log_trans_(iff(istable,j)); -% else -% y0 = trank(iff(istable,j)); -% end -% if ~isempty(EET), -% imap=find(EET.SAIF(j,:) >= (0.1.*max(EET.SAIF(j,:))) ); -% end -% % gsa_(j) = gsa_sdp_dyn( y0, lpmat(istable,:), ... -% % gsa_flag, [],[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); -% gsa_(j) = gsa_sdp(y0(1:nest), x0(1:nest,imap), ... -% 2, [],[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); -% if nfit>nest, -% gsa_(j) = gsa_sdp(y0(1:nfit), x0(1:nfit,imap), ... -% -2, gsa_(j).nvr*nest^3/nfit^3,[],[],0,[OutputDirectoryName,'/map_if',fsuffix,int2str(j)], pnames); -% end -% SAif(j,imap)=gsa_(j).si; -% imap_if{j}=imap; -% -% end -% save([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_if','SAif','iff','ir_if','ic_if','-append') -% else -% load([OutputDirectoryName,'/',fname_,'_main_eff'],'imap_if','SAif','iff','ir_if','ic_if') -% end -% -% figure, -% % boxplot(SAif,'whis',10,'symbol','r.') -% myboxplot(SAif,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects impact factors ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_if',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_if',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_if',fsuffix]); -% close(gcf), -% -% ifig = 0; -% for j=1:size(options_.varobs,1) -% if mod(j,6)==1 -% figure('name',['Main effects observed impact factors ',fsuffix]); -% ifig=ifig+1; -% iplo = 0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ir_if==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAif(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAif(iv,:),[],'.',[],10) -% else -% plot(SAif(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(options_.varobs(j,:),'interpreter','none') -% if mod(j,6)==0 | j==size(options_.varobs,1) -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_if',fsuffix,'_varobs_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_if',fsuffix,'_varobs_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_if',fsuffix,'_varobs_',int2str(ifig)]); -% close(gcf), -% end -% end -% -% ifig = 0; -% for j=1:M_.exo_nbr, -% if mod(j,6)==1 -% figure('name',['Main effects shocks impact factors ',fsuffix]); -% ifig=ifig+1; -% iplo=0; -% end -% iplo=iplo+1; -% subplot(3,2,iplo) -% iv = find(ic_if==j); -% if ~isempty(iv) -% if length(iv)>1 -% % boxplot(SAif(iv,:),'whis',3,'symbol','r.'); -% myboxplot(SAif(iv,:),[],'.',[],10) -% else -% plot(SAif(iv,:),'r.'); -% end -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% end -% title(M_.exo_names(j,:),'interpreter','none') -% if mod(j,6)==0 | j==M_.exo_nbr -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_if',fsuffix,'_exo_',int2str(ifig)]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_if',fsuffix,'_exo_',int2str(ifig)]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_if',fsuffix,'_exo_',int2str(ifig)]); -% close(gcf), -% end -% end -% SAmom = [SAvdec' SAcc' SAac']'; -% SAdyn = [SAtadj' SAif']'; -% SAall = [SAmom(:,nshock+1:end)' SAdyn']'; -% -% figure, -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAmom,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) -% set(gca,'xlim',[0.5 npT+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:npT, -% % text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects theoretical moments ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_moments',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_moments',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_moments',fsuffix]); -% % close(gcf), -% -% figure, -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAdyn,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects short-long term dynamics ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_dynamics',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_dynamics',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_dynamics',fsuffix]); -% % close(gcf), -% -% figure, -% % boxplot(SAtadj,'whis',10,'symbol','r.') -% myboxplot(SAall,[],'.',[],10) -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -% set(gca,'xlim',[0.5 np+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:np, -% text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% % text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Main effects all ',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_map_ALL',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_map_ALL',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_map_ALL',fsuffix]); -% % close(gcf), - -% for j=1:size(SAall,1), -% SAallN(j,:)=SAall(j,:)./max(SAall(j,:)); -% end -% SAmean=mean(SAallN); -% for j=1:size(SAmom,1), -% SAmomN(j,:)=SAmom(j,1:nshock)./max(SAmom(j,1:nshock)); -% end -% SAmomN(find(isnan(SAmomN)))=0; -% SAmeanexo=mean(SAmomN(:,1:nshock)); - -% figure, bar(latent'*SAcc), - figure, bar(sum(SAcc)), - set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) - set(gca,'xlim',[0.5 npT+0.5]) - ydum = get(gca,'ylim'); - set(gca,'ylim',[0 ydum(2)]) - set(gca,'position',[0.13 0.2 0.775 0.7]) - for ip=1:npT, - text(ip,-0.02*(ydum(2)),bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - % text(ip,-0.02,bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - xlabel(' ') - title(['Identifiability indices in the ',fsuffix,' moments.'],'interpreter','none') - saveas(gcf,[OutputDirectoryName,'/',fname_,'_ident_ALL',fsuffix]) - eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_ident_ALL',fsuffix]); - eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_ident_ALL',fsuffix]); - -% figure, bar(SAmeanexo), -% set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:nshock]) -% set(gca,'xlim',[0.5 nshock+0.5]) -% ydum = get(gca,'ylim'); -% set(gca,'ylim',[0 ydum(2)]) -% set(gca,'position',[0.13 0.2 0.775 0.7]) -% for ip=1:nshock, -% % text(ip,-0.02*(ydum(2)),deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -% text(ip,-0.02*(ydum(2)),bayestopt_.name{ip},'rotation',90,'HorizontalAlignment','right','interpreter','none') -% end -% xlabel(' ') -% title(['Identifiability indices for shocks',fsuffix],'interpreter','none') -% saveas(gcf,[OutputDirectoryName,'/',fname_,'_ident_SHOCKS',fsuffix]) -% eval(['print -depsc2 ' OutputDirectoryName '/' fname_ '_ident_SHOCKS',fsuffix]); -% eval(['print -dpdf ' OutputDirectoryName '/' fname_ '_ident_SHOCKS',fsuffix]); -end - -return diff --git a/GSA_distrib/4.2/mc_moments.m b/GSA_distrib/4.2/mc_moments.m deleted file mode 100644 index 0f38ff6a6..000000000 --- a/GSA_distrib/4.2/mc_moments.m +++ /dev/null @@ -1,25 +0,0 @@ -function [vdec, cc, ac] = mc_moments(mm, ss, dr) -global options_ M_ - - [nr1, nc1, nsam] = size(mm); - disp('Computing theoretical moments ...') - h = waitbar(0,'Theoretical moments ...'); - - for j=1:nsam, - dr.ghx = mm(:, [1:(nc1-M_.exo_nbr)],j); - dr.ghu = mm(:, [(nc1-M_.exo_nbr+1):end], j); - if ~isempty(ss), - set_shocks_param(ss(j,:)); - end - [vdec(:,:,j), corr, autocorr, z, zz] = th_moments(dr,options_.varobs); - cc(:,:,j)=triu(corr); - dum=[]; - for i=1:options_.ar - dum=[dum, autocorr{i}]; - end - ac(:,:,j)=dum; - waitbar(j/nsam,h) - end - close(h) - disp(' ') - disp('... done !') diff --git a/GSA_distrib/4.2/myboxplot.m b/GSA_distrib/4.2/myboxplot.m deleted file mode 100644 index 096d1a854..000000000 --- a/GSA_distrib/4.2/myboxplot.m +++ /dev/null @@ -1,158 +0,0 @@ - -function sout = myboxplot (data,notched,symbol,vertical,maxwhisker) - -% sout = myboxplot (data,notched,symbol,vertical,maxwhisker) - -% % % % endif -if nargin < 5 | isempty(maxwhisker), maxwhisker = 1.5; end -if nargin < 4 | isempty(vertical), vertical = 1; end -if nargin < 3 | isempty(symbol), symbol = ['+','o']; end -if nargin < 2 | isempty(notched), notched = 0; end - -if length(symbol)==1, symbol(2)=symbol(1); end - -if notched==1, notched=0.25; end -a=1-notched; - -% ## figure out how many data sets we have -if iscell(data), - nc = length(data); -else -% if isvector(data), data = data(:); end - nc = size(data,2); -end - -% ## compute statistics -% ## s will contain -% ## 1,5 min and max -% ## 2,3,4 1st, 2nd and 3rd quartile -% ## 6,7 lower and upper confidence intervals for median -s = zeros(7,nc); -box = zeros(1,nc); -whisker_x = ones(2,1)*[1:nc,1:nc]; -whisker_y = zeros(2,2*nc); -outliers_x = []; -outliers_y = []; -outliers2_x = []; -outliers2_y = []; - -for i=1:nc - % ## Get the next data set from the array or cell array - if iscell(data) - col = data{i}(:); - else - col = data(:,i); - end -% ## Skip missing data -% % % % % % % col(isnan(col) | isna (col)) = []; - col(isnan(col)) = []; - - % ## Remember the data length - nd = length(col); - box(i) = nd; - if (nd > 1) -% ## min,max and quartiles -% s(1:5,i) = statistics(col)(1:5); -s(1,i)=min(col); -s(5,i)=max(col); -s(2,i)=myprctilecol(col,25); -s(3,i)=myprctilecol(col,50); -s(4,i)=myprctilecol(col,75); - - - - - - - - -% ## confidence interval for the median - est = 1.57*(s(4,i)-s(2,i))/sqrt(nd); - s(6,i) = max([s(3,i)-est, s(2,i)]); - s(7,i) = min([s(3,i)+est, s(4,i)]); -% ## whiskers out to the last point within the desired inter-quartile range - IQR = maxwhisker*(s(4,i)-s(2,i)); - whisker_y(:,i) = [min(col(col >= s(2,i)-IQR)); s(2,i)]; - whisker_y(:,nc+i) = [max(col(col <= s(4,i)+IQR)); s(4,i)]; -% ## outliers beyond 1 and 2 inter-quartile ranges - outliers = col((col < s(2,i)-IQR & col >= s(2,i)-2*IQR) | (col > s(4,i)+IQR & col <= s(4,i)+2*IQR)); - outliers2 = col(col < s(2,i)-2*IQR | col > s(4,i)+2*IQR); - outliers_x = [outliers_x; i*ones(size(outliers))]; - outliers_y = [outliers_y; outliers]; - outliers2_x = [outliers2_x; i*ones(size(outliers2))]; - outliers2_y = [outliers2_y; outliers2]; - elseif (nd == 1) -% ## all statistics collapse to the value of the point - s(:,i) = col; -% ## single point data sets are plotted as outliers. - outliers_x = [outliers_x; i]; - outliers_y = [outliers_y; col]; - else -% ## no statistics if no points - s(:,i) = NaN; - end -end -% % % % if isempty(outliers2_y) -% % % % outliers2_y= -% ## Note which boxes don't have enough stats -chop = find(box <= 1); - -% ## Draw a box around the quartiles, with width proportional to the number of -% ## items in the box. Draw notches if desired. -box = box*0.23/max(box); -quartile_x = ones(11,1)*[1:nc] + [-a;-1;-1;1;1;a;1;1;-1;-1;-a]*box; -quartile_y = s([3,7,4,4,7,3,6,2,2,6,3],:); - -% ## Draw a line through the median -median_x = ones(2,1)*[1:nc] + [-a;+a]*box; -% median_x=median(col); -median_y = s([3,3],:); - -% ## Chop all boxes which don't have enough stats -quartile_x(:,chop) = []; -quartile_y(:,chop) = []; -whisker_x(:,[chop,chop+nc]) = []; -whisker_y(:,[chop,chop+nc]) = []; -median_x(:,chop) = []; -median_y(:,chop) = []; -% % % % -% ## Add caps to the remaining whiskers -cap_x = whisker_x; -cap_x(1,:) =cap_x(1,:)- 0.05; -cap_x(2,:) =cap_x(2,:)+ 0.05; -cap_y = whisker_y([1,1],:); - -% #quartile_x,quartile_y -% #whisker_x,whisker_y -% #median_x,median_y -% #cap_x,cap_y -% -% ## Do the plot - -mm=min(min(data)); -MM=max(max(data)); - -if vertical - plot (quartile_x, quartile_y, 'b', ... - whisker_x, whisker_y, 'b--', ... - cap_x, cap_y, 'k', ... - median_x, median_y, 'r', ... - outliers_x, outliers_y, [symbol(1),'r'], ... - outliers2_x, outliers2_y, [symbol(2),'r']); - set(gca,'XTick',1:nc); - set(gca, 'XLim', [0.5, nc+0.5]); - set(gca, 'YLim', [mm-(MM-mm)*0.05-eps, MM+(MM-mm)*0.05+eps]); - -else -% % % % % plot (quartile_y, quartile_x, "b;;", -% % % % % whisker_y, whisker_x, "b;;", -% % % % % cap_y, cap_x, "b;;", -% % % % % median_y, median_x, "r;;", -% % % % % outliers_y, outliers_x, [symbol(1),"r;;"], -% % % % % outliers2_y, outliers2_x, [symbol(2),"r;;"]); -end - -if nargout, - sout=s; -end -% % % endfunction \ No newline at end of file diff --git a/GSA_distrib/4.2/myprctilecol.m b/GSA_distrib/4.2/myprctilecol.m deleted file mode 100644 index d99d5ad50..000000000 --- a/GSA_distrib/4.2/myprctilecol.m +++ /dev/null @@ -1,20 +0,0 @@ -function y = myprctilecol(x,p); -xx = sort(x); -[m,n] = size(x); - -if m==1 | n==1 - m = max(m,n); - if m == 1, - y = x*ones(length(p),1); - return; - end - n = 1; - q = 100*(0.5:m - 0.5)./m; - xx = [min(x); xx(:); max(x)]; -else - q = 100*(0.5:m - 0.5)./m; - xx = [min(x); xx; max(x)]; -end - -q = [0 q 100]; -y = interp1(q,xx,p); \ No newline at end of file diff --git a/GSA_distrib/4.2/norm_inv.m b/GSA_distrib/4.2/norm_inv.m deleted file mode 100644 index e676be94e..000000000 --- a/GSA_distrib/4.2/norm_inv.m +++ /dev/null @@ -1,49 +0,0 @@ -function invp = norm_inv(x, m, sd) -% PURPOSE: computes the quantile (inverse of the CDF) -% for each component of x with mean m, standard deviation sd -%--------------------------------------------------- -% USAGE: invp = norm_inv(x,m,v) -% where: x = variable vector (nx1) -% m = mean vector (default=0) -% sd = standard deviation vector (default=1) -%--------------------------------------------------- -% RETURNS: invp (nx1) vector -%--------------------------------------------------- -% SEE ALSO: norm_d, norm_rnd, norm_inv, norm_cdf -%--------------------------------------------------- - -% Written by KH (Kurt.Hornik@ci.tuwien.ac.at) on Oct 26, 1994 -% Copyright Dept of Probability Theory and Statistics TU Wien -% Converted to MATLAB by JP LeSage, jpl@jpl.econ.utoledo.edu - - if nargin > 3 - error ('Wrong # of arguments to norm_inv'); - end - - [r, c] = size (x); - s = r * c; - - if (nargin == 1) - m = zeros(1,s); - sd = ones(1,s); - end - - - if length(m)==1, - m = repmat(m,1,s); - end - if length(sd)==1, - sd = repmat(sd,1,s); - end - x = reshape(x,1,s); - m = reshape(m,1,s); - sd = reshape(sd,1,s); - - invp = zeros (1,s); - - invp = m + sd .* (sqrt(2) * erfinv(2 * x - 1)); - - - - invp = reshape (invp, r, c); - diff --git a/GSA_distrib/4.2/optget.m b/GSA_distrib/4.2/optget.m deleted file mode 100644 index b2893e2ce..000000000 --- a/GSA_distrib/4.2/optget.m +++ /dev/null @@ -1,39 +0,0 @@ -% OPTGET Utility to get previously set function default values -% USAGE -% optvalue=optget(funcname,optname,optvalue); -% INPUTS -% funcname : name of function -% optname : name of option -% optval : option value -% OUTPUT -% optval : the current value of the option -% -% If the named field is not already defined, it will be set to -% optvalue, but optvalue has no effect if the field has already -% been set. Use OPTSET to change a previously set field. -% -% optget(funcname) returns the current values of the options structure. - -% Copyright (c) 1997-2000, Paul L. Fackler & Mario J. Miranda -% paul_fackler@ncsu.edu, miranda.4@osu.edu - -function optvalue = optget(funcname,optname,optvalue) - -funcname = lower(funcname); -optvar=[funcname '_options']; -eval(['global ' optvar]) % declare a global variable - -if nargin==1 % return the whole option structure - optvalue=(eval(optvar)); - return -end - -optname = lower(optname); -% if structure is empty or the named field does not exist -% set to the value passed -if isempty(eval(optvar)) | ~isfield(eval(optvar),optname) - eval([optvar '.' optname '=optvalue;']); -% otherwise return the value in the field -else - optvalue = eval([optvar '.' optname]); -end diff --git a/GSA_distrib/4.2/prior_draw_gsa.m b/GSA_distrib/4.2/prior_draw_gsa.m deleted file mode 100644 index 278e1e237..000000000 --- a/GSA_distrib/4.2/prior_draw_gsa.m +++ /dev/null @@ -1,105 +0,0 @@ -function pdraw = prior_draw_gsa(init,rdraw) -% Draws from the prior distributions -% Adapted by M. Ratto from prior_draw (of DYNARE, copyright M. Juillard), -% for use with Sensitivity Toolbox for DYNARE -% -% -% INPUTS -% o init [integer] scalar equal to 1 (first call) or 0. -% o rdraw -% -% OUTPUTS -% o pdraw [double] draw from the joint prior density. -% -% ALGORITHM -% ... -% -% SPECIAL REQUIREMENTS -% MATLAB Statistics Toolbox -% -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -% global M_ options_ estim_params_ bayestopt_ -global bayestopt_ -persistent npar pshape p6 p7 p3 p4 lbcum ubcum - -if init - pshape = bayestopt_.pshape; - p6 = bayestopt_.p6; - p7 = bayestopt_.p7; - p3 = bayestopt_.p3; - p4 = bayestopt_.p4; - npar = length(p6); - pdraw = zeros(npar,1); - lbcum = zeros(npar,1); - ubcum = ones(npar,1); - - % set bounds for cumulative probabilities - for i = 1:npar - switch pshape(i) - case 5% Uniform prior. - p4(i) = min(p4(i),bayestopt_.ub(i)); - p3(i) = max(p3(i),bayestopt_.lb(i)); - case 3% Gaussian prior. - lbcum(i) = 0.5 * erfc(-(bayestopt_.lb(i)-p6(i))/p7(i) ./ sqrt(2));; - ubcum(i) = 0.5 * erfc(-(bayestopt_.ub(i)-p6(i))/p7(i) ./ sqrt(2));; - case 2% Gamma prior. - lbcum(i) = gamm_cdf((bayestopt_.lb(i)-p3(i))/p7(i),p6(i)); - ubcum(i) = gamm_cdf((bayestopt_.ub(i)-p3(i))/p7(i),p6(i)); - case 1% Beta distribution (TODO: generalized beta distribution) - lbcum(i) = betainc((bayestopt_.lb(i)-p3(i))./(p4(i)-p3(i)),p6(i),p7(i)); - ubcum(i) = betainc((bayestopt_.ub(i)-p3(i))./(p4(i)-p3(i)),p6(i),p7(i)); - case 4% INV-GAMMA1 distribution - % TO BE CHECKED - lbcum(i) = gamm_cdf((1/(bayestopt_.ub(i)-p3(i))^2)/(2/p6(i)),p7(i)/2); - ubcum(i) = gamm_cdf((1/(bayestopt_.lb(i)-p3(i))^2)/(2/p6(i)),p7(i)/2); - case 6% INV-GAMMA2 distribution - % TO BE CHECKED - lbcum(i) = gamm_cdf((1/(bayestopt_.ub(i)-p3(i)))/(2/p6(i)),p7(i)/2); - ubcum(i) = gamm_cdf((1/(bayestopt_.lb(i)-p3(i)))/(2/p6(i)),p7(i)/2); - otherwise - % Nothing to do here. - end - end - return -end - - -for i = 1:npar - rdraw(:,i) = rdraw(:,i).*(ubcum(i)-lbcum(i))+lbcum(i); - switch pshape(i) - case 5% Uniform prior. - pdraw(:,i) = rdraw(:,i)*(p4(i)-p3(i)) + p3(i); - case 3% Gaussian prior. - pdraw(:,i) = norm_inv(rdraw(:,i),p6(i),p7(i)); - case 2% Gamma prior. - pdraw(:,i) = gamm_inv(rdraw(:,i),p6(i),p7(i))+p3(i); - case 1% Beta distribution (TODO: generalized beta distribution) - pdraw(:,i) = beta_inv(rdraw(:,i),p6(i),p7(i))*(p4(i)-p3(i))+p3(i); - case 4% INV-GAMMA1 distribution - % TO BE CHECKED - pdraw(:,i) = sqrt(1./gamm_inv(rdraw(:,i),p7(i)/2,2/p6(i)))+p3(i); - case 6% INV-GAMMA2 distribution - % TO BE CHECKED - pdraw(:,i) = 1./gamm_inv(rdraw(:,i),p7(i)/2,2/p6(i))+p3(i); - otherwise - % Nothing to do here. - end -end - - diff --git a/GSA_distrib/4.2/priorcdf.m b/GSA_distrib/4.2/priorcdf.m deleted file mode 100644 index 53d8ec34d..000000000 --- a/GSA_distrib/4.2/priorcdf.m +++ /dev/null @@ -1,50 +0,0 @@ -function [xcum] = priorcdf(para, pshape, p6, p7, p3, p4) -% This procedure transforms x vectors into cumulative values -% pshape: 0 is point mass, both para and p2 are ignored -% 1 is BETA(mean,stdd) -% 2 is GAMMA(mean,stdd) -% 3 is NORMAL(mean,stdd) -% 4 is INVGAMMA(s^2,nu) -% 5 is UNIFORM [p1,p2] -% Adapted by M. Ratto from MJ priordens.m - -nprio = length(pshape); - -i = 1; -while i <= nprio; - a = 0; - b = 0; - if pshape(i) == 1; % (generalized) BETA Prior -% mu = (p1(i)-p3(i))/(p4(i)-p3(i)); -% stdd = p2(i)/(p4(i)-p3(i)); -% a = (1-mu)*mu^2/stdd^2 - mu; -% b = a*(1/mu - 1); - %lnprior = lnprior + lpdfgbeta(para(i),a,b,p3(i),p4(i)) ; - para(:,i) = (para(:,i)-p3(i))./(p4(i)-p3(i)); -% xcum(:,i) = betacdf(para(:,i),a,b) ; - xcum(:,i) = betainc(para(:,i),p6(i),p7(i)); - elseif pshape(i) == 2; % GAMMA PRIOR -% b = p2(i)^2/(p1(i)-p3(i)); -% a = (p1(i)-p3(i))/b; - %lnprior = lnprior + lpdfgam(para(i)-p3(i),a,b); -% xcum(:,i) = gamcdf(para(:,i)-p3(i),a,b); - xcum(:,i) = gamm_cdf((para(:,i)-p3(i))./p7(i),p6(i)); - elseif pshape(i) == 3; % GAUSSIAN PRIOR - %lnprior = lnprior + lpdfnorm(para(i),p1(i),p2(i)); -% xcum(:,i) = normcdf(para(:,i),p1(i),p2(i)); - xcum(:,i) = 0.5 * erfc(-(para(:,i)-p6(i))/p7(i) ./ sqrt(2)); - elseif pshape(i) == 4; % INVGAMMA1 PRIOR - %lnprior = lnprior + lpdfig1(para(i),p1(i),p2(i)); -% xcum(:,i) = gamcdf(1/para(:,i).^2,p2(i)/2,2/p1(i)); - xcum(:,i) = gamm_cdf((1./(para(:,i)-p3(i)).^2)/(2/p6(i)),p7(i)/2); - elseif pshape(i) == 5; % UNIFORM PRIOR - %lnprior = lnprior + log(1/(p2(i)-p1(i))); - xcum(:,i) = (para(:,i)-p3(i))./(p4(i)-p3(i)); - elseif pshape(i) == 6; % INVGAMMA2 PRIOR -% lnprior = lnprior + lpdfig2(para(i),p1(i),p2(i)); -% xcum(:,i) = gamcdf(1/para(:,i),p2(i)/2,2/p1(i)); - xcum(:,i) = gamm_cdf((1./(para(:,i)-p3(i)))./(2/p6(i)),p7(i)/2); - end; - i = i+1; -end; - diff --git a/GSA_distrib/4.2/read_data.m b/GSA_distrib/4.2/read_data.m deleted file mode 100644 index f54f66cb6..000000000 --- a/GSA_distrib/4.2/read_data.m +++ /dev/null @@ -1,39 +0,0 @@ -function [gend, data] = read_data -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global options_ bayestopt_ - -rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range); - -options_ = set_default_option(options_,'nobs',size(rawdata,1)-options_.first_obs+1); -gend = options_.nobs; - -rawdata = rawdata(options_.first_obs:options_.first_obs+gend-1,:); -if options_.loglinear == 1 & ~options_.logdata - rawdata = log(rawdata); -end -if options_.prefilter == 1 - bayestopt_.mean_varobs = mean(rawdata,1); - data = transpose(rawdata-ones(gend,1)*bayestopt_.mean_varobs); -else - data = transpose(rawdata); -end - -if ~isreal(rawdata) - error(['There are complex values in the data. Probably a wrong' ... - ' transformation']) -end diff --git a/GSA_distrib/4.2/redform_map.m b/GSA_distrib/4.2/redform_map.m deleted file mode 100644 index 2350c5993..000000000 --- a/GSA_distrib/4.2/redform_map.m +++ /dev/null @@ -1,351 +0,0 @@ -function redform_map(dirname) -%function redform_map(dirname) -% inputs (from opt_gsa structure -% anamendo = options_gsa_.namendo; -% anamlagendo = options_gsa_.namlagendo; -% anamexo = options_gsa_.namexo; -% iload = options_gsa_.load_redform; -% pprior = options_gsa_.pprior; -% ilog = options_gsa_.logtrans_redform; -% threshold = options_gsa_.threshold_redform; -% ksstat = options_gsa_.ksstat_redform; -% alpha2 = options_gsa_.alpha2_redform; -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global M_ oo_ estim_params_ options_ bayestopt_ - -options_gsa_ = options_.opt_gsa; - -anamendo = options_gsa_.namendo; -anamlagendo = options_gsa_.namlagendo; -anamexo = options_gsa_.namexo; -iload = options_gsa_.load_redform; -pprior = options_gsa_.pprior; -ilog = options_gsa_.logtrans_redform; -threshold = options_gsa_.threshold_redform; -ksstat = options_gsa_.ksstat_redform; -alpha2 = options_gsa_.alpha2_redform; - -pnames = M_.param_names(estim_params_.param_vals(:,1),:); -if nargin==0, - dirname=''; -end - -if pprior - load([dirname,'/',M_.fname,'_prior']); - adir=[dirname '/redform_stab']; -else - load([dirname,'/',M_.fname,'_mc']); - adir=[dirname '/redform_mc']; -end -if ~exist('T') - stab_map_(dirname); -if pprior - load([dirname,'/',M_.fname,'_prior'],'T'); -else - load([dirname,'/',M_.fname,'_mc'],'T'); -end -end -if isempty(dir(adir)) - mkdir(adir) -end -adir0=pwd; -%cd(adir) - -nspred=size(T,2)-M_.exo_nbr; -x0=lpmat(istable,:); -[kn, np]=size(x0); -offset = length(bayestopt_.pshape)-np; -if options_gsa_.prior_range, - pshape=5*(ones(np,1)); - pd = [NaN(np,1) NaN(np,1) bayestopt_.lb(offset+1:end) bayestopt_.ub(offset+1:end)]; -else - pshape = bayestopt_.pshape(offset+1:end); - pd = [bayestopt_.p6(offset+1:end) bayestopt_.p7(offset+1:end) bayestopt_.p3(offset+1:end) bayestopt_.p4(offset+1:end)]; -end - -nsok = length(find(M_.lead_lag_incidence(M_.maximum_lag,:))); -clear lpmat lpmat0 egg iunstable yys -js=0; -for j=1:size(anamendo,1) - namendo=deblank(anamendo(j,:)); - iendo=strmatch(namendo,M_.endo_names(oo_.dr.order_var,:),'exact'); - ifig=0; - iplo=0; - for jx=1:size(anamexo,1) - namexo=deblank(anamexo(jx,:)); - iexo=strmatch(namexo,M_.exo_names,'exact'); - - if ~isempty(iexo), - %y0=squeeze(T(iendo,iexo+nspred,istable)); - y0=squeeze(T(iendo,iexo+nspred,:)); - if (max(y0)-min(y0))>1.e-10, - if mod(iplo,9)==0, - ifig=ifig+1; - hfig = figure('name',[namendo,' vs. shocks ',int2str(ifig)]); - iplo=0; - end - iplo=iplo+1; - js=js+1; - xdir0 = [adir,'/',namendo,'_vs_', namexo]; - if ilog==0, - if isempty(threshold) - si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namexo, xdir0); - else - iy=find( (y0>threshold(1)) & (y0=threshold(2))); - xdir = [xdir0,'_cut']; - if ~isempty(iy), - si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namexo, xdir); - end - if ~isempty(iy) & ~isempty(iyc) - delete([xdir, '/*cut*.*']) - [proba, dproba] = stab_map_1(x0, iy, iyc, 'cut',0); - indsmirnov = find(dproba>ksstat); - stab_map_1(x0, iy, iyc, 'cut',1,indsmirnov,xdir); - stab_map_2(x0(iy,:),alpha2,'cut',xdir) - stab_map_2(x0(iyc,:),alpha2,'trim',xdir) - end - end - else - [yy, xdir] = log_trans_(y0,xdir0); - silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namexo, xdir); - end - - figure(hfig) - subplot(3,3,iplo), - if ilog, - [saso, iso] = sort(-silog(:,js)); - bar([silog(iso(1:min(np,10)),js)]) - logflag='log'; - else - [saso, iso] = sort(-si(:,js)); - bar(si(iso(1:min(np,10)),js)) - logflag=''; - end - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - title([logflag,' ',namendo,' vs. ',namexo],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - close(gcf) - end - - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)]); - close(gcf) - end - ifig=0; - iplo=0; - for je=1:size(anamlagendo,1) - namlagendo=deblank(anamlagendo(je,:)); - ilagendo=strmatch(namlagendo,M_.endo_names(oo_.dr.order_var(oo_.dr.nstatic+1:oo_.dr.nstatic+nsok),:),'exact'); - - if ~isempty(ilagendo), - %y0=squeeze(T(iendo,ilagendo,istable)); - y0=squeeze(T(iendo,ilagendo,:)); - if (max(y0)-min(y0))>1.e-10, - if mod(iplo,9)==0, - ifig=ifig+1; - hfig = figure('name',[namendo,' vs. lags ',int2str(ifig)]); - iplo=0; - end - iplo=iplo+1; - js=js+1; - xdir0 = [adir,'/',namendo,'_vs_', namlagendo]; - if ilog==0, - if isempty(threshold) - si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namlagendo, xdir0); - else - iy=find( (y0>threshold(1)) & (y0=threshold(2))); - xdir = [xdir0,'_cut']; - if ~isempty(iy) - si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namlagendo, xdir); - end - if ~isempty(iy) & ~isempty(iyc), - delete([xdir, '/*cut*.*']) - [proba, dproba] = stab_map_1(x0, iy, iyc, 'cut',0); - indsmirnov = find(dproba>ksstat); - stab_map_1(x0, iy, iyc, 'cut',1,indsmirnov,xdir); - stab_map_2(x0(iy,:),alpha2,'cut',xdir) - stab_map_2(x0(iyc,:),alpha2,'trim',xdir) - end - end - else - [yy, xdir] = log_trans_(y0,xdir0); - silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namlagendo, xdir); - end - - figure(hfig), - subplot(3,3,iplo), - if ilog, - [saso, iso] = sort(-silog(:,js)); - bar([silog(iso(1:min(np,10)),js)]) - logflag='log'; - else - [saso, iso] = sort(-si(:,js)); - bar(si(iso(1:min(np,10)),js)) - logflag=''; - end - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - title([logflag,' ',namendo,' vs. ',namlagendo,'(-1)'],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - close(gcf) - end - - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)]); - close(gcf) - end -end - -if ilog==0, -figure, %bar(si) -% boxplot(si','whis',10,'symbol','r.') -myboxplot(si',[],'.',[],10) -xlabel(' ') -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -title('Reduced form GSA') - -saveas(gcf,[dirname,'/',M_.fname,'_redform_gsa']) -eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_gsa']); -eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_gsa']); - -else -figure, %bar(silog) -% boxplot(silog','whis',10,'symbol','r.') -myboxplot(silog',[],'.',[],10) -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -xlabel(' ') -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -title('Reduced form GSA - Log-transformed elements') - -saveas(gcf,[dirname,'/',M_.fname,'_redform_gsa_log']) -eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_gsa_log']); -eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_gsa_log']); - -end -function si = redform_private(x0, y0, pshape, pd, iload, pnames, namy, namx, xdir) -global bayestopt_ options_ - -opt_gsa=options_.opt_gsa; -np=size(x0,2); -x00=x0; - if opt_gsa.prior_range, - for j=1:np, - x0(:,j)=(x0(:,j)-pd(j,3))./(pd(j,4)-pd(j,3)); - end - else - x0=priorcdf(x0,pshape, pd(:,1), pd(:,2), pd(:,3), pd(:,4)); - end - -fname=[xdir,'/map']; -if iload==0, - figure, hist(y0,30), title([namy,' vs. ', namx]) - if isempty(dir(xdir)) - mkdir(xdir) - end - saveas(gcf,[xdir,'/', namy,'_vs_', namx]) - eval(['print -depsc2 ' xdir,'/', namy,'_vs_', namx]); - eval(['print -dpdf ' xdir,'/', namy,'_vs_', namx]); - close(gcf) -% gsa_ = gsa_sdp_dyn(y0, x0, -2, [],[],[],1,fname, pnames); - nrun=length(y0); - nest=min(250,nrun); - nfit=min(1000,nrun); -% dotheplots = (nfit<=nest); - gsa_ = gsa_sdp(y0(1:nest), x0(1:nest,:), 2, [],[-1 -1 -1 -1 -1 0],[],0,[fname,'_est'], pnames); - if nfit>nest, - gsa_ = gsa_sdp(y0(1:nfit), x0(1:nfit,:), -2, gsa_.nvr*nest^3/nfit^3,[-1 -1 -1 -1 -1 0],[],0,fname, pnames); - end - save([fname,'.mat'],'gsa_') - [sidum, iii]=sort(-gsa_.si); - gsa_.x0=x00(1:nfit,:); - hfig=gsa_sdp_plot(gsa_,fname,pnames,iii(1:min(12,np))); - close(hfig); - gsa_.x0=x0(1:nfit,:); -% copyfile([fname,'_est.mat'],[fname,'.mat']) - figure, - plot(y0(1:nfit),[gsa_.fit y0(1:nfit)],'.'), - title([namy,' vs. ', namx,' fit']) - saveas(gcf,[xdir,'/', namy,'_vs_', namx,'_fit']) - eval(['print -depsc2 ' xdir,'/', namy,'_vs_', namx,'_fit']); - eval(['print -dpdf ' xdir,'/', namy,'_vs_', namx,'_fit']); - close(gcf) - if nfit0 & ifig, - saveas(gcf,[dirname,'/',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)]); - close(gcf) - end - - iplo=0; - ifig=0; - for je=1:size(anamlagendo,1) - namlagendo=deblank(anamlagendo(je,:)); - ilagendo=strmatch(namlagendo,M_.endo_names(oo_.dr.order_var(oo_.dr.nstatic+1:oo_.dr.nstatic+nsok),:),'exact'); - - if ~isempty(ilagendo), - y0=teff(T(iendo,ilagendo,:),kn,istable); - if ~isempty(y0), - if mod(iplo,9)==0, - ifig=ifig+1; - figure('name',[namendo,' vs. lagged endogenous ',int2str(ifig)]), - iplo=0; - end - iplo=iplo+1; - js=js+1; - subplot(3,3,iplo), - [SAmeas, SAMorris] = Morris_Measure_Groups(np+nshock, [lpmat0 lpmat], y0,nliv); - SAM = squeeze(SAMorris(nshock+1:end,1)); - SA(:,js)=SAM./(max(SAM)+eps); - [saso, iso] = sort(-SA(:,js)); - bar(SA(iso(1:min(np,10)),js)) - %set(gca,'xticklabel',pnames(iso(1:min(np,10)),:),'fontsize',8) - set(gca,'xticklabel',' ','fontsize',10) - set(gca,'xlim',[0.5 10.5]) - for ip=1:min(np,10), - text(ip,-0.02,deblank(pnames(iso(ip),:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') - end - - title([namendo,' vs. ',namlagendo,'(-1)'],'interpreter','none') - if iplo==9, - saveas(gcf,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - close(gcf) - end - end - end - end - if iplo<9 & iplo>0 & ifig, - saveas(gcf,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]) - eval(['print -depsc2 ' dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - eval(['print -dpdf ' dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)]); - close(gcf) - end -end - -figure, -%bar(SA) -% boxplot(SA','whis',10,'symbol','r.') -myboxplot(SA',[],'.',[],10) -set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) -set(gca,'xlim',[0.5 np+0.5]) -set(gca,'ylim',[0 1]) -set(gca,'position',[0.13 0.2 0.775 0.7]) -for ip=1:np, - text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') -end -xlabel(' ') -ylabel('Elementary Effects') -title('Reduced form screening') - -saveas(gcf,[dirname,'/',M_.fname,'_redform_screen']) -eval(['print -depsc2 ' dirname,'/',M_.fname,'_redform_screen']); -eval(['print -dpdf ' dirname,'/',M_.fname,'_redform_screen']); - diff --git a/GSA_distrib/4.2/set_shocks_param.m b/GSA_distrib/4.2/set_shocks_param.m deleted file mode 100644 index f84247d29..000000000 --- a/GSA_distrib/4.2/set_shocks_param.m +++ /dev/null @@ -1,30 +0,0 @@ -function set_shocks_param(xparam1) - global estim_params_ M_ - - nvx = estim_params_.nvx; - ncx = estim_params_.ncx; - np = estim_params_.np; - Sigma_e = M_.Sigma_e; - offset = 0; - if nvx - offset = offset + nvx; - var_exo = estim_params_.var_exo; - for i=1:nvx - k = var_exo(i,1); - Sigma_e(k,k) = xparam1(i)^2; - end - end - - if ncx - offset = offset + estim_params_.nvn; - corrx = estim_params_.corrx; - for i=1:ncx - k1 = corrx(i,1); - k2 = corrx(i,2); - Sigma_e(k1,k2) = xparam1(i+offset)*sqrt(Sigma_e_(k1,k1)*Sigma_e_(k2,k2)); - Sigma_e(k2,k1) = Sigma_e_(k1,k2); - end - end - - - M_.Sigma_e = Sigma_e; \ No newline at end of file diff --git a/GSA_distrib/4.2/skewness.m b/GSA_distrib/4.2/skewness.m deleted file mode 100644 index 19ce487ab..000000000 --- a/GSA_distrib/4.2/skewness.m +++ /dev/null @@ -1,7 +0,0 @@ -function s=skewness(y), - -% y=stand_(y); -% s=mean(y.^3); - m2=mean((y-mean(y)).^2); - m3=mean((y-mean(y)).^3); - s=m3/m2^1.5; \ No newline at end of file diff --git a/GSA_distrib/4.2/smirnov.m b/GSA_distrib/4.2/smirnov.m deleted file mode 100644 index bc068aeb1..000000000 --- a/GSA_distrib/4.2/smirnov.m +++ /dev/null @@ -1,73 +0,0 @@ -function [H,prob,d] = smirnov(x1 , x2 , alpha, iflag ) -% Smirnov test for 2 distributions -% [H,prob,d] = smirnov(x1 , x2 , alpha, iflag ) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - - - -if nargin<3 - alpha = 0.05; -end -if nargin<4, - iflag=0; -end - -% empirical cdfs. -xmix= [x1;x2]; -bin = [-inf ; sort(xmix) ; inf]; - -ncount1 = histc (x1 , bin); -ncount1 = ncount1(:); -ncount2 = histc (x2 , bin); -ncount2 = ncount2(:); - -cum1 = cumsum(ncount1)./sum(ncount1); -cum1 = cum1(1:end-1); - -cum2 = cumsum(ncount2)./sum(ncount2); -cum2 = cum2(1:end-1); - -n1= length(x1); -n2= length(x2); -n = n1*n2 /(n1+n2); - -% Compute the d(n1,n2) statistics. - -if iflag==0, - d = max(abs(cum1 - cum2)); -elseif iflag==-1 - d = max(cum2 - cum1); -elseif iflag==1 - d = max(cum1 - cum2); -end -% -% Compute P-value check H0 hypothesis -% - -lam = max((sqrt(n) + 0.12 + 0.11/sqrt(n)) * d , 0); -if iflag == 0 - j = [1:101]'; - prob = 2 * sum((-1).^(j-1).*exp(-2*lam*lam*j.^2)); - - prob=max(prob,0); - prob=min(1,prob); -else - prob = exp(-2*lam*lam); -end - -H = (alpha >= prob); diff --git a/GSA_distrib/4.2/speed.m b/GSA_distrib/4.2/speed.m deleted file mode 100644 index faaa1de86..000000000 --- a/GSA_distrib/4.2/speed.m +++ /dev/null @@ -1,52 +0,0 @@ -function [tadj, iff] = speed(A,B,mf,p), -% [tadj, iff] = speed(A,B,mf,p), -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -nvar=length(mf); -nstate= size(A,1); -nshock = size(B,2); -nrun=size(B,3); - -iff=zeros(nvar,nshock,nrun); -tadj=iff; -disp('Computing speed of adjustement ...') -h = waitbar(0,'Speed of adjustement...'); - -for i=1:nrun, - irf=zeros(nvar,nshock); - a=squeeze(A(:,:,i)); - b=squeeze(B(:,:,i)); - IFF=inv(eye(nstate)-a)*b; - iff(:,:,i)=IFF(mf,:); - IF=IFF-b; - - t=0; - while any(any(irf<0.5)) - t=t+1; - IFT=((eye(nstate)-a^(t+1))*inv(eye(nstate)-a))*b-b; - irf=IFT(mf,:)./(IF(mf,:)+eps); - irf = irf.*(abs(IF(mf,:))>1.e-7)+(abs(IF(mf,:))<=1.e-7); - %irf=ft(mf,:); - tt=(irf>0.5).*t; - tadj(:,:,i)=((tt-tadj(:,:,i))==tt).*tt+tadj(:,:,i); - end - waitbar(i/nrun,h) -end -disp(' ') -disp('.. done !') -close(h) diff --git a/GSA_distrib/4.2/stab_map_.m b/GSA_distrib/4.2/stab_map_.m deleted file mode 100644 index 2142ec234..000000000 --- a/GSA_distrib/4.2/stab_map_.m +++ /dev/null @@ -1,548 +0,0 @@ -function x0 = stab_map_(OutputDirectoryName) -% -% function x0 = stab_map_(OutputDirectoryName) -% -% Mapping of stability regions in the prior ranges applying -% Monte Carlo filtering techniques. -% -% INPUTS (from opt_gsa structure) -% Nsam = MC sample size -% fload = 0 to run new MC; 1 to load prevoiusly generated analysis -% alpha2 = significance level for bivariate sensitivity analysis -% [abs(corrcoef) > alpha2] -% prepSA = 1: save transition matrices for mapping reduced form -% = 0: no transition matrix saved (default) -% pprior = 1: sample from prior ranges (default): sample saved in -% _prior.mat file -% = 0: sample from posterior ranges: sample saved in -% _mc.mat file -% OUTPUT: -% x0: one parameter vector for which the model is stable. -% -% GRAPHS -% 1) Pdf's of marginal distributions under the stability (dotted -% lines) and unstability (solid lines) regions -% 2) Cumulative distributions of: -% - stable subset (dotted lines) -% - unacceptable subset (solid lines) -% 3) Bivariate plots of significant correlation patterns -% ( abs(corrcoef) > alpha2) under the stable and unacceptable subsets -% -% USES lptauSEQ, -% stab_map_1, stab_map_2 -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -%global bayestopt_ estim_params_ dr_ options_ ys_ fname_ -global bayestopt_ estim_params_ options_ oo_ M_ - -opt_gsa=options_.opt_gsa; - -Nsam = opt_gsa.Nsam; -fload = opt_gsa.load_stab; -ksstat = opt_gsa.ksstat; -alpha2 = opt_gsa.alpha2_stab; -prepSA = (opt_gsa.redform | opt_gsa.identification); -pprior = opt_gsa.pprior; -ilptau = opt_gsa.ilptau; -nliv = opt_gsa.morris_nliv; -ntra = opt_gsa.morris_ntra; - -dr_ = oo_.dr; -%if isfield(dr_,'ghx'), -ys_ = oo_.dr.ys; -nspred = dr_.nspred; %size(dr_.ghx,2); -nboth = dr_.nboth; -nfwrd = dr_.nfwrd; -%end -fname_ = M_.fname; - -np = estim_params_.np; -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; -lpmat0=[]; - -pshape = bayestopt_.pshape(nshock+1:end); -p1 = bayestopt_.p1(nshock+1:end); -p2 = bayestopt_.p2(nshock+1:end); -p3 = bayestopt_.p3(nshock+1:end); -p4 = bayestopt_.p4(nshock+1:end); - -if nargin==0, - OutputDirectoryName=''; -end - -opt=options_; -options_.periods=0; -options_.nomoments=1; -options_.irf=0; -options_.noprint=1; -options_.simul=0; -if fload==0, - % if prepSA - % T=zeros(size(dr_.ghx,1),size(dr_.ghx,2)+size(dr_.ghu,2),Nsam/2); - % end - - if isfield(dr_,'ghx'), - egg=zeros(length(dr_.eigval),Nsam); - end - yys=zeros(length(dr_.ys),Nsam); - - if opt_gsa.morris == 1 - [lpmat, OutFact] = Sampling_Function_2(nliv, np+nshock, ntra, ones(np+nshock, 1), zeros(np+nshock,1), []); - lpmat = lpmat.*(nliv-1)/nliv+1/nliv/2; - Nsam=size(lpmat,1); - lpmat0 = lpmat(:,1:nshock); - lpmat = lpmat(:,nshock+1:end); - elseif opt_gsa.morris==3, - lpmat = prep_ide(Nsam,np,5); - Nsam=size(lpmat,1); - else - if np<52 & ilptau>0, - [lpmat] = lptauSEQ(Nsam,np); % lptau - if np>30 | ilptau==2, % scrambled lptau - for j=1:np, - lpmat(:,j)=lpmat(randperm(Nsam),j); - end - end - else %ilptau==0 - %[lpmat] = rand(Nsam,np); - for j=1:np, - lpmat(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - end - - end - end - % try - dummy=prior_draw_gsa(1); - % catch - % if pprior, - % if opt_gsa.prior_range==0; - % error('Some unknown prior is specified or ML estimation,: use prior_range=1 option!!'); - % end - % end - % - % end - if pprior, - for j=1:nshock, - if opt_gsa.morris~=1, - lpmat0(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - end - if opt_gsa.prior_range - lpmat0(:,j)=lpmat0(:,j).*(bayestopt_.ub(j)-bayestopt_.lb(j))+bayestopt_.lb(j); - end - end - if opt_gsa.prior_range - % if opt_gsa.identification, - % deltx=min(0.001, 1/Nsam/2); - % for j=1:np, - % xdelt(:,:,j)=prior_draw_gsa(0,[lpmat0 lpmat]+deltx); - % end - % end - for j=1:np, - lpmat(:,j)=lpmat(:,j).*(bayestopt_.ub(j+nshock)-bayestopt_.lb(j+nshock))+bayestopt_.lb(j+nshock); - end - else - xx=prior_draw_gsa(0,[lpmat0 lpmat]); - % if opt_gsa.identification, - % deltx=min(0.001, 1/Nsam/2); - % ldum=[lpmat0 lpmat]; - % ldum = prior_draw_gsa(0,ldum+deltx); - % for j=1:nshock+np, - % xdelt(:,:,j)=xx; - % xdelt(:,j,j)=ldum(:,j); - % end - % clear ldum - % end - lpmat0=xx(:,1:nshock); - lpmat=xx(:,nshock+1:end); - clear xx; - end - else - % for j=1:nshock, - % xparam1(j) = oo_.posterior_mode.shocks_std.(bayestopt_.name{j}); - % sd(j) = oo_.posterior_std.shocks_std.(bayestopt_.name{j}); - % lpmat0(:,j) = randperm(Nsam)'./(Nsam+1); %latin hypercube - % lb = max(bayestopt_.lb(j), xparam1(j)-2*sd(j)); - % ub1=xparam1(j)+(xparam1(j) - lb); % define symmetric range around the mode! - % ub = min(bayestopt_.ub(j),ub1); - % if ub30 & np<52 - % lpmat(:,j) = lpmat(randperm(Nsam),j).*(ub-lb)+lb; - % else - % lpmat(:,j) = lpmat(:,j).*(ub-lb)+lb; - % end - % end - %load([fname_,'_mode']) - eval(['load ' options_.mode_file ';']'); - d = chol(inv(hh)); - lp=randn(Nsam*2,nshock+np)*d+kron(ones(Nsam*2,1),xparam1'); - for j=1:Nsam*2, - lnprior(j) = any(lp(j,:)'<=bayestopt_.lb | lp(j,:)'>=bayestopt_.ub); - end - ireal=[1:2*Nsam]; - ireal=ireal(find(lnprior==0)); - lp=lp(ireal,:); - Nsam=min(Nsam, length(ireal)); - lpmat0=lp(1:Nsam,1:nshock); - lpmat=lp(1:Nsam,nshock+1:end); - clear lp lnprior ireal; - end - % - h = waitbar(0,'Please wait...'); - istable=[1:Nsam]; - jstab=0; - iunstable=[1:Nsam]; - iindeterm=zeros(1,Nsam); - iwrong=zeros(1,Nsam); - for j=1:Nsam, - M_.params(estim_params_.param_vals(:,1)) = lpmat(j,:)'; - %try stoch_simul([]); - try - [Tt,Rr,SteadyState,infox{j}] = dynare_resolve('restrict'); - if infox{j}(1)==0 && ~exist('T'), - dr_=oo_.dr; - T=zeros(size(dr_.ghx,1),size(dr_.ghx,2)+size(dr_.ghu,2),Nsam); - egg=zeros(length(dr_.eigval),Nsam); - end - if infox{j}, - disp('no solution'), - if isfield(oo_.dr,'ghx'), - oo_.dr=rmfield(oo_.dr,'ghx'); - end - end - catch - if isfield(oo_.dr,'eigval'), - oo_.dr=rmfield(oo_.dr,'eigval'); - end - if isfield(oo_.dr,'ghx'), - oo_.dr=rmfield(oo_.dr,'ghx'); - end - disp('No solution could be found'), - end - dr_ = oo_.dr; - if isfield(dr_,'ghx'), - egg(:,j) = sort(dr_.eigval); - iunstable(j)=0; - if prepSA - jstab=jstab+1; - T(:,:,jstab) = [dr_.ghx dr_.ghu]; - % [A,B] = ghx2transition(squeeze(T(:,:,jstab)), ... - % bayestopt_.restrict_var_list, ... - % bayestopt_.restrict_columns, ... - % bayestopt_.restrict_aux); - end - if ~exist('nspred'), - nspred = dr_.nspred; %size(dr_.ghx,2); - nboth = dr_.nboth; - nfwrd = dr_.nfwrd; - end - else - istable(j)=0; - if isfield(dr_,'eigval') - egg(:,j) = sort(dr_.eigval); - if exist('nspred') - if any(isnan(egg(1:nspred,j))) - iwrong(j)=j; - else - if (nboth | nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium, - iindeterm(j)=j; - end - end - end - else - if exist('egg'), - egg(:,j)=ones(size(egg,1),1).*NaN; - end - iwrong(j)=j; - end - end - ys_=real(dr_.ys); - yys(:,j) = ys_; - ys_=yys(:,1); - waitbar(j/Nsam,h,['MC iteration ',int2str(j),'/',int2str(Nsam)]) - end - close(h) - if prepSA, - T=T(:,:,1:jstab); - end - istable=istable(find(istable)); % stable params - iunstable=iunstable(find(iunstable)); % unstable params - iindeterm=iindeterm(find(iindeterm)); % indeterminacy - iwrong=iwrong(find(iwrong)); % dynare could not find solution - - % % map stable samples - % istable=[1:Nsam]; - % for j=1:Nsam, - % if any(isnan(egg(1:nspred,j))) - % istable(j)=0; - % else - % if abs(egg(nspred,j))>=options_.qz_criterium; %(1-(options_.qz_criterium-1)); %1-1.e-5; - % istable(j)=0; - % %elseif (dr_.nboth | dr_.nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium; %1+1.e-5; - % elseif (nboth | nfwrd) & abs(egg(nspred+1,j))<=options_.qz_criterium; %1+1.e-5; - % istable(j)=0; - % end - % end - % end - % istable=istable(find(istable)); % stable params - % - % % map unstable samples - % iunstable=[1:Nsam]; - % for j=1:Nsam, - % %if abs(egg(dr_.npred+1,j))>1+1.e-5 & abs(egg(dr_.npred,j))<1-1.e-5; - % %if (dr_.nboth | dr_.nfwrd), - % if ~any(isnan(egg(1:5,j))) - % if (nboth | nfwrd), - % if abs(egg(nspred+1,j))>options_.qz_criterium & abs(egg(nspred,j))0 & length(iunstable)ksstat); - disp('Smirnov statistics in driving acceptable behaviour') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indstab) - stab_map_1(lpmat, istable, iunstable, aname, 1, indstab, OutputDirectoryName); - end - ixun=iunstable(find(~ismember(iunstable,[iindeterm,iwrong]))); - if ~isempty(iindeterm), - [proba, dproba] = stab_map_1(lpmat, [1:Nsam], iindeterm, [aname, '_indet'],0); - indindet=find(dproba>ksstat); - disp('Smirnov statistics in driving indeterminacy') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indindet) - stab_map_1(lpmat, [1:Nsam], iindeterm, [aname, '_indet'], 1, indindet, OutputDirectoryName); - end - end - - if ~isempty(ixun), - [proba, dproba] = stab_map_1(lpmat, [1:Nsam], ixun, [aname, '_unst'],0); - indunst=find(dproba>ksstat); - disp('Smirnov statistics in driving instability') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indunst) - stab_map_1(lpmat, [1:Nsam], ixun, [aname, '_unst'], 1, indunst, OutputDirectoryName); - end - end - - if ~isempty(iwrong), - [proba, dproba] = stab_map_1(lpmat, [1:Nsam], iwrong, [aname, '_wrong'],0); - indwrong=find(dproba>ksstat); - disp('Smirnov statistics in driving no solution') - for j=1:np, - disp([M_.param_names(estim_params_.param_vals(j,1),:),' d-stat = ', num2str(dproba(j),3)]) - end - disp(' '); - if ~isempty(indwrong) - stab_map_1(lpmat, [1:Nsam], iwrong, [aname, '_wrong'], 1, indwrong, OutputDirectoryName); - end - end - - disp(' ') - disp('Starting bivariate analysis:') - - c0=corrcoef(lpmat(istable,:)); - c00=tril(c0,-1); - - stab_map_2(lpmat(istable,:),alpha2, asname, OutputDirectoryName); - if length(iunstable)>10, - stab_map_2(lpmat(iunstable,:),alpha2, auname, OutputDirectoryName); - end - if length(iindeterm)>10, - stab_map_2(lpmat(iindeterm,:),alpha2, aindname, OutputDirectoryName); - end - if length(ixun)>10, - stab_map_2(lpmat(ixun,:),alpha2, aunstname, OutputDirectoryName); - end - if length(iwrong)>10, - stab_map_2(lpmat(iwrong,:),alpha2, awrongname, OutputDirectoryName); - end - - x0=0.5.*(bayestopt_.ub(1:nshock)-bayestopt_.lb(1:nshock))+bayestopt_.lb(1:nshock); - x0 = [x0; lpmat(istable(1),:)']; - if istable(end)~=Nsam - M_.params(estim_params_.param_vals(:,1)) = lpmat(istable(1),:)'; - [oo_.dr, info] = resol(oo_.steady_state,0); - % stoch_simul([]); - end -else - if length(iunstable)==0, - disp('All parameter values in the specified ranges are stable!') - x0=0.5.*(bayestopt_.ub(1:nshock)-bayestopt_.lb(1:nshock))+bayestopt_.lb(1:nshock); - x0 = [x0; lpmat(istable(1),:)']; - else - disp('All parameter values in the specified ranges are not acceptable!') - x0=[]; - end - -end - - -options_.periods=opt.periods; -if isfield(opt,'nomoments'), - options_.nomoments=opt.nomoments; -end -options_.irf=opt.irf; -options_.noprint=opt.noprint; -if isfield(opt,'simul'), - options_.simul=opt.simul; -end - - - diff --git a/GSA_distrib/4.2/stab_map_1.m b/GSA_distrib/4.2/stab_map_1.m deleted file mode 100644 index 8813fa572..000000000 --- a/GSA_distrib/4.2/stab_map_1.m +++ /dev/null @@ -1,87 +0,0 @@ -function [proba, dproba] = stab_map_1(lpmat, ibehaviour, inonbehaviour, aname, iplot, ipar, dirname) -%function [proba, dproba] = stab_map_1(lpmat, ibehaviour, inonbehaviour, aname, iplot, ipar, dirname) -% -% lpmat = Monte Carlo matrix -% ibehaviour = index of behavioural runs -% inonbehaviour = index of non-behavioural runs -% aname = label of the analysis -% iplot = 1 plot cumulative distributions (default) -% iplot = 0 no plots -% ipar = index array of parameters to plot -% dirname = (OPTIONAL) path of the directory where to save -% (default: current directory) -% -% Plots: dotted lines for BEHAVIOURAL -% solid lines for NON BEHAVIOURAL -% USES smirnov -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -global estim_params_ bayestopt_ M_ options_ - -if nargin<5, - iplot=1; -end -fname_ = M_.fname; -if nargin<7, - dirname='';; -end - -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; - -npar=size(lpmat,2); -ishock= npar>estim_params_.np; - -if nargin<6 | isempty(ipar), - ipar=[1:npar]; -end -nparplot=length(ipar); - -% Smirnov test for Blanchard; -for j=1:npar, - [H,P,KSSTAT] = smirnov(lpmat(ibehaviour,j),lpmat(inonbehaviour,j)); - proba(j)=P; - dproba(j)=KSSTAT; -end -if iplot - lpmat=lpmat(:,ipar); - ftit=bayestopt_.name(ipar+nshock*(1-ishock)); - -for i=1:ceil(nparplot/12), - figure('name',aname), - for j=1+12*(i-1):min(nparplot,12*i), - subplot(3,4,j-12*(i-1)) - if ~isempty(ibehaviour), - h=cumplot(lpmat(ibehaviour,j)); - set(h,'color',[0 0 0], 'linestyle',':') - end - hold on, - if ~isempty(inonbehaviour), - h=cumplot(lpmat(inonbehaviour,j)); - set(h,'color',[0 0 0]) - end - title([ftit{j},'. D-stat ', num2str(dproba(ipar(j)),2)],'interpreter','none') - end - saveas(gcf,[dirname,'/',fname_,'_',aname,'_SA_',int2str(i)]) - eval(['print -depsc2 ' dirname '/' fname_ '_' aname '_SA_' int2str(i)]); - eval(['print -dpdf ' dirname '/' fname_ '_' aname '_SA_' int2str(i)]); - if options_.nograph, close(gcf), end -end -end diff --git a/GSA_distrib/4.2/stab_map_2.m b/GSA_distrib/4.2/stab_map_2.m deleted file mode 100644 index 3d1a8fa9c..000000000 --- a/GSA_distrib/4.2/stab_map_2.m +++ /dev/null @@ -1,97 +0,0 @@ -%function stab_map_2(x,alpha2,istab,fnam) -function stab_map_2(x,alpha2,fnam, dirname) -% function stab_map_2(x,alpha2,fnam, dirname) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -%global bayestopt_ estim_params_ dr_ options_ ys_ fname_ -global bayestopt_ estim_params_ options_ oo_ M_ - -npar=size(x,2); -ishock= npar>estim_params_.np; -if nargin<3, - fnam=''; -end -if nargin<4, - dirname=''; -end - -ys_ = oo_.dr.ys; -dr_ = oo_.dr; -fname_ = M_.fname; -nshock = estim_params_.nvx; -nshock = nshock + estim_params_.nvn; -nshock = nshock + estim_params_.ncx; -nshock = nshock + estim_params_.ncn; - -c0=corrcoef(x); -c00=tril(c0,-1); -fig_nam_=[fname_,'_',fnam,'_corr_']; - -ifig=0; -j2=0; -if ishock==0 - npar=estim_params_.np; -else - npar=estim_params_.np+nshock; -end -for j=1:npar, - i2=find(abs(c00(:,j))>alpha2); - if length(i2)>0, - for jx=1:length(i2), - j2=j2+1; - if mod(j2,12)==1, - ifig=ifig+1; - figure('name',['Correlations in the ',fnam,' sample ', num2str(ifig)]), - end - subplot(3,4,j2-(ifig-1)*12) - % bar(c0(i2,j)), - % set(gca,'xticklabel',bayestopt_.name(i2)), - % set(gca,'xtick',[1:length(i2)]) - %plot(stock_par(ixx(nfilt+1:end,i),j),stock_par(ixx(nfilt+1:end,i),i2(jx)),'.k') - %hold on, - plot(x(:,j),x(:,i2(jx)),'.') - % xlabel(deblank(estim_params_.param_names(j,:)),'interpreter','none'), - % ylabel(deblank(estim_params_.param_names(i2(jx),:)),'interpreter','none'), - if ishock, - xlabel(bayestopt_.name{j},'interpreter','none'), - ylabel(bayestopt_.name{i2(jx)},'interpreter','none'), - else - xlabel(bayestopt_.name{j+nshock},'interpreter','none'), - ylabel(bayestopt_.name{i2(jx)+nshock},'interpreter','none'), - end - title(['cc = ',num2str(c0(i2(jx),j))]) - if (mod(j2,12)==0) & j2>0, - saveas(gcf,[dirname,'/',fig_nam_,int2str(ifig)]) - eval(['print -depsc2 ' dirname '/' fig_nam_ int2str(ifig)]); - eval(['print -dpdf ' dirname '/' fig_nam_ int2str(ifig)]); - if options_.nograph, close(gcf), end - end - end - end - if (j==(npar)) & j2>0, - saveas(gcf,[dirname,'/',fig_nam_,int2str(ifig)]) - eval(['print -depsc2 ' dirname '/' fig_nam_ int2str(ifig)]); - eval(['print -dpdf ' dirname '/' fig_nam_ int2str(ifig)]); - if options_.nograph, close(gcf), end - end - -end -if ifig==0, - disp(['No correlation term >', num2str(alpha2),' found for ',fnam]) -end -%close all diff --git a/GSA_distrib/4.2/stand_.m b/GSA_distrib/4.2/stand_.m deleted file mode 100644 index fb0b3fda3..000000000 --- a/GSA_distrib/4.2/stand_.m +++ /dev/null @@ -1,25 +0,0 @@ -function [y, meany, stdy] = stand_(x) -% STAND_ Standardise a matrix by columns -% -% [x,my,sy]=stand(y) -% -% y: Time series (column matrix) -% -% x: standardised equivalent of y -% my: Vector of mean values for each column of y -% sy: Vector of standard deviations for each column of y -% -% Copyright (c) 2006 by JRC, European Commission, United Kingdom -% Author : Marco Ratto - - -if nargin==0, - return; -end - -for j=1:size(x,2); -meany(j)=mean(x(find(~isnan(x(:,j))),j)); -stdy(j)=std(x(find(~isnan(x(:,j))),j)); - y(:,j)=(x(:,j)-meany(j))./stdy(j); -end -% end of m-file \ No newline at end of file diff --git a/GSA_distrib/4.2/teff.m b/GSA_distrib/4.2/teff.m deleted file mode 100644 index 6c33706e5..000000000 --- a/GSA_distrib/4.2/teff.m +++ /dev/null @@ -1,51 +0,0 @@ -function [yt, j0, ir, ic]=teff(T,Nsam,istable) -% -% [yt, j0, ir, ic]=teff(T,Nsam,istable) -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -ndim = (length(size(T))); -if ndim==3, -if nargin==1, - Nsam=size(T,3); - istable = [1:Nsam]'; -end -tmax=max(T,[],3); -tmin=min(T,[],3); -[ir, ic]=(find( (tmax-tmin)>1.e-8)); -j0 = length(ir); -yt=zeros(Nsam, j0); - -for j=1:j0, - y0=squeeze(T(ir(j),ic(j),:)); - %y1=ones(size(lpmat,1),1)*NaN; - y1=ones(Nsam,1)*NaN; - y1(istable,1)=y0; - yt(:,j)=y1; -end - -else -tmax=max(T,[],2); -tmin=min(T,[],2); -ir=(find( (tmax-tmin)>1.e-8)); -j0 = length(ir); -yt=NaN(Nsam, j0); -yt(istable,:)=T(ir,:)'; - - -end -%clear y0 y1; diff --git a/GSA_distrib/4.2/th_moments.m b/GSA_distrib/4.2/th_moments.m deleted file mode 100644 index 41bb18d78..000000000 --- a/GSA_distrib/4.2/th_moments.m +++ /dev/null @@ -1,66 +0,0 @@ -% Copyright (C) 2001 Michel Juillard -% -function [vdec, corr, autocorr, z, zz] = th_moments(dr,var_list) - global M_ oo_ options_ - - nvar = size(var_list,1); - if nvar == 0 - nvar = length(dr.order_var); - ivar = [1:nvar]'; - else - ivar=zeros(nvar,1); - for i=1:nvar - i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); - if isempty(i_tmp) - error (['One of the variable specified does not exist']) ; - else - ivar(i) = i_tmp; - end - end - end - - [gamma_y,ivar] = th_autocovariances(dr,ivar,M_, options_); - m = dr.ys(ivar); - - - i1 = find(abs(diag(gamma_y{1})) > 1e-12); - s2 = diag(gamma_y{1}); - sd = sqrt(s2); - - - z = [ m sd s2 ]; - mean = m; - var = gamma_y{1}; - - -%'THEORETICAL MOMENTS'; -%'MEAN','STD. DEV.','VARIANCE'); -z; - -%'VARIANCE DECOMPOSITION (in percent)'; -if M_.exo_nbr>1, -vdec = 100*gamma_y{options_.ar+2}(i1,:); -else -vdec = 100*ones(size(gamma_y{1}(i1,1))); -end -%'MATRIX OF CORRELATIONS'; -if options_.opt_gsa.useautocorr, - corr = gamma_y{1}(i1,i1)./(sd(i1)*sd(i1)'); - corr = corr-diag(diag(corr))+diag(diag(gamma_y{1}(i1,i1))); -else - corr = gamma_y{1}(i1,i1); -end - if options_.ar > 0 -%'COEFFICIENTS OF AUTOCORRELATION'; - for i=1:options_.ar - if options_.opt_gsa.useautocorr, - autocorr{i} = gamma_y{i+1}(i1,i1); - else - autocorr{i} = gamma_y{i+1}(i1,i1).*(sd(i1)*sd(i1)'); - end - zz(:,i) = diag(gamma_y{i+1}(i1,i1)); - end - end - - - \ No newline at end of file diff --git a/GSA_distrib/4.2/thet2tau.m b/GSA_distrib/4.2/thet2tau.m deleted file mode 100644 index d0a8d0ed4..000000000 --- a/GSA_distrib/4.2/thet2tau.m +++ /dev/null @@ -1,45 +0,0 @@ -function tau = thet2tau(params, indx, indexo, flagmoments,mf,nlags,useautocorr) -global M_ oo_ options_ - -if nargin==1, - indx = [1:M_.param_nbr]; - indexo = []; -end - -if nargin<4, - flagmoments=0; -end -if nargin<7 | isempty(useautocorr), - useautocorr=0; -end - -M_.params(indx) = params(length(indexo)+1:end); -if ~isempty(indexo) - M_.Sigma_e(indexo,indexo) = diag(params(1:length(indexo)).^2); -end -% [A(oo_.dr.order_var,oo_.dr.order_var),B(oo_.dr.order_var,:)]=dynare_resolve; -[A,B]=dynare_resolve; -if flagmoments==0, -tau = [oo_.dr.ys(oo_.dr.order_var); A(:); dyn_vech(B*M_.Sigma_e*B')]; -else -GAM = lyapunov_symm(A,B*M_.Sigma_e*B',options_.qz_criterium,options_.lyapunov_complex_threshold); -k = find(abs(GAM) < 1e-12); -GAM(k) = 0; -if useautocorr, - sy = sqrt(diag(GAM)); - sy = sy*sy'; - sy0 = sy-diag(diag(sy))+eye(length(sy)); - dum = GAM./sy0; - tau = dyn_vech(dum(mf,mf)); -else - tau = dyn_vech(GAM(mf,mf)); -end -for ii = 1:nlags - dum = A^(ii)*GAM; - if useautocorr, - dum = dum./sy; - end - tau = [tau;vec(dum(mf,mf))]; -end -tau = [ oo_.dr.ys(oo_.dr.order_var(mf)); tau]; -end \ No newline at end of file diff --git a/GSA_distrib/4.2/trank.m b/GSA_distrib/4.2/trank.m deleted file mode 100644 index a0c5bda99..000000000 --- a/GSA_distrib/4.2/trank.m +++ /dev/null @@ -1,25 +0,0 @@ -function yr = trank(y); -% yr = trank(y); -% yr is the rank transformation of y -% -% Part of the Sensitivity Analysis Toolbox for DYNARE -% -% Written by Marco Ratto, 2006 -% Joint Research Centre, The European Commission, -% (http://eemc.jrc.ec.europa.eu/), -% marco.ratto@jrc.it -% -% Disclaimer: This software is not subject to copyright protection and is in the public domain. -% It is an experimental system. The Joint Research Centre of European Commission -% assumes no responsibility whatsoever for its use by other parties -% and makes no guarantees, expressed or implied, about its quality, reliability, or any other -% characteristic. We would appreciate acknowledgement if the software is used. -% Reference: -% M. Ratto, Global Sensitivity Analysis for Macroeconomic models, MIMEO, 2006. -% - -[nr, nc] = size(y); -for j=1:nc, - [dum, is]=sort(y(:,j)); - yr(is,j)=[1:nr]'./nr; -end