magnitude completeness script added
This commit is contained in:
		
							
								
								
									
										231
									
								
								src/CompletenessMagnitudeEstimation/MCcalc.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								src/CompletenessMagnitudeEstimation/MCcalc.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,231 @@
 | 
			
		||||
% function [OUTstruct,maxc,gft10,gft5,mgft]=MCcalc(m,t,s,iop)
 | 
			
		||||
% ----------------------------------------------------------------------------------------------
 | 
			
		||||
% Program that calculates the completess magnitude of a given
 | 
			
		||||
% catalog by application of different methods, ASSUMING THAT
 | 
			
		||||
% FREQUENCY-MANGITUDE DISTRIBUTION IS EXPONENTIAL 
 | 
			
		||||
% The program calls the following functions which are appended in the scipt:
 | 
			
		||||
% function aa=FM_Param(m,t,iop) - GR-law parameters as a function of mmin
 | 
			
		||||
% function [b]=bmle(x,y,ml,dm) - Maximum likelihood b-value estimation
 | 
			
		||||
% function Rs=rescalc(No,m,a,b) - Residuals calculation
 | 
			
		||||
% ----------------------------------------------------------------------------------------------
 | 
			
		||||
% DESCRIPTION:
 | 
			
		||||
% The completeness magnitude is estimated by the application of Goodness<EFBFBD>of<EFBFBD>Fit Test (GFT), 
 | 
			
		||||
% proposed by Wiemer and Wyss (2000). The procedure they followed is that a power law, 
 | 
			
		||||
% as a function of minimum magnitude, Mi, is fitted for events with M?Mi, by application 
 | 
			
		||||
% of maximum likelihood estimation (Aki, 1965). The synthetic data, i.e. the distribution of 
 | 
			
		||||
% magnitudes which represent a perfect fit to the power law, is constructed in this way. Then
 | 
			
		||||
% the normalized absolute difference, R, between the cumulative number of observed events
 | 
			
		||||
% (No) and the simulated ones (Ns) in each magnitude bin is computed. A model is found at 
 | 
			
		||||
% an  R-value at which a predefined percentage (90% and 95%) of the observed data is modeled
 | 
			
		||||
% by a straight line, which means that 90% and 95% of the observed data can be simulated by 
 | 
			
		||||
% the specific power law. In addition to this approach, synthetic catalogs are constructed following
 | 
			
		||||
% the defined G-R, law, and then the number of events for each magnitude bin of the synthetic
 | 
			
		||||
% catalogs is compared with the corresponding observed one. In this way a discrete minimum 
 | 
			
		||||
% residual point is calculated, and considered as the completeness magnitude for a given dataset.
 | 
			
		||||
% The Maximum curvature method is also applied for comparison, which corresponds to the 
 | 
			
		||||
% magnitude bin with the highest frequency of events in the non-cumulative F-M distribution. 
 | 
			
		||||
% NOTE: Recall that the assumption of self similarity of the magnitude distribution may be invalid
 | 
			
		||||
% in some cases. In such cases, alternative (e.g. network based) methods should be applied.
 | 
			
		||||
% THE USER SHOULD COMPREHEND THE PROGRAM RESULTS TOGETHER WITH THEIR
 | 
			
		||||
% VISUALIZATION IN ORDER TO MAKE HIS/HERS FINAL DECISION.
 | 
			
		||||
% ----------------------------------------------------------------------------------------------
 | 
			
		||||
% COMPLIED BY:  
 | 
			
		||||
% Leptokaropoulos Konstantinos, last updated December 2015, (kleptoka@igf.edu.pl)
 | 
			
		||||
% within IS-EPOS Project, 
 | 
			
		||||
% ----------------------------------------------------------------------------------------------
 | 
			
		||||
% INPUT:
 | 
			
		||||
% m: magnitude of the events in the catalog
 | 
			
		||||
% t: occurrence time of the events
 | 
			
		||||
% s: number of synthetic catalogs following the same distribution with
 | 
			
		||||
%     the observed data (for modified goodness of fit test)-default is 500
 | 
			
		||||
% iop: unit time selection (default is 'day'):
 | 
			
		||||
%                                           0: day
 | 
			
		||||
%                                           1: month
 | 
			
		||||
%                                           2: year
 | 
			
		||||
%--------------------------------------------------------------------------------------------
 | 
			
		||||
% OUTPUT
 | 
			
		||||
% aa: output (not extracted) is an 9-column array with seismicity parameters as 
 | 
			
		||||
% a function of minimum magnitude. This array is also saved as
 | 
			
		||||
% 'parameters.txt'. Its columns correspond to:
 | 
			
		||||
% aa(1): magnitude bin (the step is fixed to 0.1)
 | 
			
		||||
% aa(2): number of events in the respective magnitude bin
 | 
			
		||||
% aa(3): cumulative number of events in the respective magnitude bin
 | 
			
		||||
% aa(4): b-value estimated by Maximum Likelihood (Aki, 1965) 
 | 
			
		||||
%           function bmle, appended
 | 
			
		||||
% aa(5): b-value uncertainty (Aki, 1965)
 | 
			
		||||
% aa(6): a-value calculated from GR law logN=a-bM, given N,M from catalog
 | 
			
		||||
%            and b from MLE (aa(4)).
 | 
			
		||||
% aa(7): at-value, normalized per unit time (at=a-log10(DT)) 
 | 
			
		||||
% aa(8): Residual between observed data and power law, 
 | 
			
		||||
%            as a function of minimum magnitude
 | 
			
		||||
% aa(9): Average residual between synthetic catalogs (s) and power law,
 | 
			
		||||
%           as a function of minimum magnitude
 | 
			
		||||
%
 | 
			
		||||
% OUTstruct: Structure containing all the aforementioned parameters in matlab format
 | 
			
		||||
% maxc: Mc estimation by Maximum Curvature Method(Wiemer & Wyss, 2000)
 | 
			
		||||
% gft10: Mc estimation by Goodness of fit test at 90% confidence bounds (Wiemer & Wyss, 2000) 
 | 
			
		||||
% gft5: Mc estimation by Goodness of fit test at 95% confidence bounds (Wiemer & Wyss, 2000)
 | 
			
		||||
% mgft: Mc estimation by Modified goodness of fit test (Leptokaropoulos et al., 2013)
 | 
			
		||||
%----------------------------------------------------------------------------------------------
 | 
			
		||||
% REFERENCES
 | 
			
		||||
%        - Aki, K. (1965), Maximum likelihood estimate of b in the formula log N=a-bM and its 
 | 
			
		||||
% confidence limits, Bull. Earthq. Res. Inst., Univ. Tokyo, 43, 237-239
 | 
			
		||||
%       - Wiemer, S. and M. Wyss (2000), Minimum magnitude of completeness in earthquake catalogs:
 | 
			
		||||
% Examples from Alaska, the Western United States, and Japan, Bull. Seismol. Soc. Am., 90, 859-869.
 | 
			
		||||
%       - Leptokaropoulos et al., (2013), A homogeneous earthquake catalogue compilation for western 
 | 
			
		||||
% Turkey and magnitude of completeness determination, Bull. Seismol. Soc. Am., 103, 5, 2739-2751.
 | 
			
		||||
%------------------------------------------------------------------------------------------------
 | 
			
		||||
function [OUTstruct,maxc,gft10,gft5,mgft]=MCcalc(m,t,s,iop)
 | 
			
		||||
if nargin==2;s=500;iop=0;end
 | 
			
		||||
if nargin==3;iop=0;end
 | 
			
		||||
 | 
			
		||||
% -------------- VALIDATION RULES -------------
 | 
			
		||||
if s<10 || s>10000;error('Number of synthetic catalogs should be between 10 and 10000');end
 | 
			
		||||
%----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
%call FM_Param function  
 | 
			
		||||
aa=FM_Param(m,t,iop);
 | 
			
		||||
no=aa(:,2);
 | 
			
		||||
 | 
			
		||||
% Nobs-Npl residuals
 | 
			
		||||
No=aa(:,3);m=aa(:,1);b=aa(:,4);a=aa(:,6);
 | 
			
		||||
n=length(No);ml=min(m);mu=max(m);
 | 
			
		||||
% call rescalc function
 | 
			
		||||
Rs=rescalc(No,m,a,b);
 | 
			
		||||
 
 | 
			
		||||
% Nsynth-Npl residuals
 | 
			
		||||
for i=1:s
 | 
			
		||||
ra=rand(No(1),1);
 | 
			
		||||
nN=No/No(1);
 | 
			
		||||
te=histc(ra,flipud(nN));
 | 
			
		||||
te(1)=numel(find(ra<min(nN)));
 | 
			
		||||
te=flipud(cumsum(te));
 | 
			
		||||
Sy=te(2:n);Sy(n)=numel(find(ra<min(nN)));
 | 
			
		||||
Rsyn=rescalc(Sy,m,a,b);
 | 
			
		||||
R(i,:)=Rsyn;
 | 
			
		||||
Rf=mean(R(:,1:n))';
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 Rf(Rf==inf)=100; Rf(Rf>100)=100;   % K 17APR2014
 | 
			
		||||
 | 
			
		||||
maxc=max(m(no==max(no))); 
 | 
			
		||||
gft10=min(m(Rs<10)); gft5=min(m(Rs<5));
 | 
			
		||||
mgft=m(Rf==min(Rf)); rmgft=Rf(Rf==min(Rf));
 | 
			
		||||
if gft10==max(m);gft10=NaN;end    %K4NOE2014 %K 12NOV 2015- replace [] with NaNs
 | 
			
		||||
if gft5==max(m);gft5=NaN;end    %K4NOE2014 %K 12NOV 2015- replace [] with NaNs
 | 
			
		||||
aa(:,8)=Rs;aa(:,9)=Rf;
 | 
			
		||||
 | 
			
		||||
[OUTstruct M n N b berr a at Rs Rf]=ar2vec(aa); 
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
% function aa=FM_Param(m,t,iop) 
 | 
			
		||||
% Function that calculates and saves seismicity parameters as a
 | 
			
		||||
% function of minimum magnitude for given catalog
 | 
			
		||||
% -------------------------------------------------------------------------------------------
 | 
			
		||||
% -------------------------------------------------------------------------------------------
 | 
			
		||||
function aa=FM_Param(m,t,iop)
 | 
			
		||||
if nargin==2;iop=0;end
 | 
			
		||||
 | 
			
		||||
dt=range(t);
 | 
			
		||||
if iop==0                                                            % unit time 
 | 
			
		||||
    dt=dt;un='day';
 | 
			
		||||
elseif iop==1;
 | 
			
		||||
    dt=dt/30.4;un='month';
 | 
			
		||||
elseif iop==2
 | 
			
		||||
    dt=dt/365;un='year';
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
dm=0.1;
 | 
			
		||||
m=round(m*10)*dm;                                        %rounds magnitides to 1 decimal digit
 | 
			
		||||
                                                          
 | 
			
		||||
mu=max(m);ml=min(m);                              % maximum catalog magnitude
 | 
			
		||||
mb=(ml:dm:mu)';                                            % magnitude bins
 | 
			
		||||
n1=hist(m,min(m):0.1:max(m))';                    % K-15MAY2015 number of events belonging to each magnitude bin
 | 
			
		||||
nx=length(n1);                                                 
 | 
			
		||||
cn1=flipud(cumsum(n1(nx:-1:1)));                 % cumulative number of events in each magnitude bin
 | 
			
		||||
 | 
			
		||||
for i=1:nx                                                          % calculation of b-value as a function of magnitude
 | 
			
		||||
b1=bmle(mb(i:nx),n1(i:nx),mb(i),dm);
 | 
			
		||||
sb(i)=b1/sqrt(cn1(i));                                       % b-value error
 | 
			
		||||
a(i)=log10(cn1(i))+b1*mb(i);                           % a-value
 | 
			
		||||
b(i)=b1;
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
b=b';sb=sb';a=a';
 | 
			
		||||
a1=a-log10(dt);                                                  % equivalent a-value for unit-time period
 | 
			
		||||
aa=[mb n1 cn1 b sb a a1];                                 % output parameters
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 end
 | 
			
		||||
%------------------------------------------------------------
 | 
			
		||||
%------------------------------------------------------------
 | 
			
		||||
function [b]=bmle(x,y,ml,dm)
 | 
			
		||||
% Function calcutates the b-value of frequency-magnitude
 | 
			
		||||
% distribution of earthquakes following the Maximum 
 | 
			
		||||
% Likelihood Estimate (Aki, 1965). 
 | 
			
		||||
% INPUT:
 | 
			
		||||
% x: magnitude 
 | 
			
		||||
% y: number of events with magnitude x
 | 
			
		||||
% ml: minimum magnitude (cuttoff)
 | 
			
		||||
% dm: the binning width of the catalog (default dm=0.1)
 | 
			
		||||
 | 
			
		||||
me=sum(x.*y)/sum(y);                                 % arithmetic mean of sample
 | 
			
		||||
b=1/((me-ml+dm/2)*log(10));
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
%------------------------------------------------------------
 | 
			
		||||
%------------------------------------------------------------
 | 
			
		||||
function Rs=rescalc(No,m,a,b)
 | 
			
		||||
% Residuals Calculation 
 | 
			
		||||
% Input:
 | 
			
		||||
% No: number of observed data per magnitude bin
 | 
			
		||||
% m: magnitude vector
 | 
			
		||||
% a: GR law a-value
 | 
			
		||||
% b: GR law b-value
 | 
			
		||||
% OUTPUT
 | 
			
		||||
% Rs: Fitting residuals as a function of minimum magnitude
 | 
			
		||||
n=length(No);
 | 
			
		||||
for i=1:n
 | 
			
		||||
    Ns=10.^(a(i)-m*b(i));
 | 
			
		||||
    Rs(i)=sum(abs(Ns(i:n)-No(i:n)))/sum(No(i:n));
 | 
			
		||||
end
 | 
			
		||||
Rs=Rs'*100;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
%------------------------------------------------------------
 | 
			
		||||
%------------------------------------------------------------ Added 17DEC2015
 | 
			
		||||
function [OUTstruct M n N b berr a at Rs Rf]=ar2vec(aa)
 | 
			
		||||
% Separates the output result 'aa' of the 'MCcalc'
 | 
			
		||||
% function to 9 vectors and 1 structure, corresponding to:
 | 
			
		||||
% M: Magnitude bins, from the minimum to the maximum 
 | 
			
		||||
%         magnitude of the data set.
 | 
			
		||||
% n: Number of events in the respective magnitude bin
 | 
			
		||||
% N: Cumulative number of events in the respective magnitude bin
 | 
			
		||||
% b: b-value of the GR law
 | 
			
		||||
% berr: b-value uncertainty
 | 
			
		||||
% a: a-value of the GR law
 | 
			
		||||
% at: at-value (a-value normalized per unit time)
 | 
			
		||||
% Rs: Residual between observed data and power law
 | 
			
		||||
% Rf: Average residual between synthetic catalogs (s) and power law
 | 
			
		||||
%
 | 
			
		||||
%OUTstruct: is a structure containing the aforementioned fields 
 | 
			
		||||
% -----------------------------------------------------------------
 | 
			
		||||
% Input is the 'aa' array as it is derived from 'MCcalc' program
 | 
			
		||||
%------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
M=aa(:,1);
 | 
			
		||||
n= aa(:,2);
 | 
			
		||||
N=aa(:,3);
 | 
			
		||||
b= aa(:,4);
 | 
			
		||||
berr= aa(:,5);
 | 
			
		||||
a =aa(:,6);
 | 
			
		||||
at=aa(:,7);
 | 
			
		||||
Rs= aa(:,8);
 | 
			
		||||
Rf=aa(:,9);
 | 
			
		||||
 | 
			
		||||
OUTstruct.M=M;OUTstruct.n=n;OUTstruct.N=N;
 | 
			
		||||
OUTstruct.b=b;OUTstruct.berr=berr;OUTstruct.a=a;
 | 
			
		||||
OUTstruct.at=at;OUTstruct.Rs=Rs;OUTstruct.Rf=Rf;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user