function[para,standard_deviation,fv]=my_mle(fun,para0,varargin)%estimateparametersandstandarderrorswhenusingmaximiumlikelihoodestimation(MLE)%input%fun:afunctiondefinedbyusersforcalculatinglogprobabilitydensityfunction(pdf)andnegativesumoflogarithmofpdf%para0:giveninitialparameters%varargin:otherneededparametersrequiredbyfun%output%para:estimatedparameters%standard_deviation:standarddeviationsofestimatedparameters%fv:maximizedlikelihoodfunctionvalue%%%%%%%%%%%%example1:estimatemeanandstandarddeviationbyrealizationsofa%randomvariablewhichisnormallydistributed%functionf=mynormpdfsum(x,num,y)%yy=1/sqrt(2*pi)/x(2)*exp(-(y-x(1)).^2/2/x(2)^2);%ifnum==1%(note:itmustbesetto1)%f=log(yy);%elsef=-sum(log(yy));end%%%%%%%%%%y=2+3*randn(5000,1);%[para,standard_deviation]=my_mle('mynormpdfsum',[0;2],y)%%%%%%%%%%example2:estimatecoefficientsinalinearregression%clear%x=randn(500,1);%y=2+3*x+randn(500,1);%[para,standard_deviation,fv]=my_mle('mynormpdfsum001',[1;2;3],y,x)%%%%%%%%%%%%%functionf=mynormpdfsum001(para,num,y,x)%yy=1/sqrt(2*pi)/para(3)*exp(-(y-para(1)-para(2)*x).^2/2/para(3)^2);%ifnum==1%(note:itmustbesetto1)%f=log(yy);%elsef=-sum(log(yy));endpara0=para0(:);[para,fv]=fminsearch(fun,para0,[],2,varargin{:});fv=-fv;d=numericalfirstderivative(fun,para,1,varargin{:});standard_deviation=sqrt(diag(pinv(d'*d)));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%functionf=numericalfirstderivative(fun,parameter,varargin)%input:%fun:thenameofafunction%parameter:givenparameterwithrespecttowhichfirst-orderderivativeiscalculated%varargin:otherneededparametersrequiredbyfun%output:%f:numericalfirstorderderivativeoffunatparametern=length(parameter);fori=1:na=zeros(n,1);a(i)=min(parameter(i)*1e-6,1e-5);y1(:,i)=feval_r(fun,parameter+a,varargin{:});y2(:,i)=feval_r(fun,parameter-a,varargin{:});f(:,i)=(y1(:,i)-y2(:,i))/2/a(i);end