*! xcorplot MGS/AT 1.0.0 19 September 1998 (STB-56: sg146) program define gevd version 1.0 local if "opt" local in "opt" local varlist "req ex min(1)" local options "centile(int 0) hybrid" parse "`*'" parse "`varlist'", parse (" ") local X `1' preserve if ("`if'"!="") { qui keep `if' } if ("`in'"!="") { qui keep `in' } qui summ `X' local m=_result(3) local v=_result(4) local min=_result(5) local max=_result(6) local n=_N local b0=`m' sort `X' local i=1 while `i'<=`n' { local j=`X'[`i'] local b1=`b1'+`j'*((`i'-1)/(`n'-1)) local i=`i'+1 } local b1=`b1'/`n' sort `X' local i=1 while `i'<=`n' { local j=`X'[`i'] local b2=`b2'+`j'*(((`i'-1)*(`i'-2))/((`n'-1)*(`n'-2))) local i=`i'+1 } local b2=`b2'/`n' local c=((2*`b1'-`b0')/(3*`b2'-`b0'))-(ln(2)/ln(3)) local kgevd=7.8598*`c'+2.9554*`c'^2 local agevd=((2*`b1'-`b0')*`kgevd')/(exp(lngamma(1+`kgevd'))*(1-2^(-`kgevd'))) local sgevd=`b0'+(`agevd'/`kgevd')*(exp(lngamma(1+`kgevd'))-1) if ((`sgevd'+`agevd'-`kgevd')>`max' & `kgevd'>0) | ((`sgevd'+`agevd'-`kgevd')<`min' & `kgevd'<0) { local kgevdh=`k' } else { if (`kgevd'>0) { local kgevdh=`agevd'/(`max'-`sgevd') } else { local kgevdh=`agevd'/(`min'-`sgevd') } } local meth "Probability Weighted Moments (PWM)" if "`hybrid'"=="hybrid" { local kgevd=`kgevdh' local meth "Hybrid estimator based on PWM" } display display in green _col(3) "Parameter estimation for GEVD distribution by using " _newline(1) _col(3) "`meth'" _newline(1) display in green _col(1) "Variable |" _col(13) "alpha" _col(27) "k" _col(41) "Psi" display in green "---------+---------------------------------------------" display in green _col(1) "`X'" _col(10) "|" in yellow _col (13) `agevd' _col(27) `kgevd' _col(41) `sgevd' if `centile'>0 { disp _newline(2) display in green _col(11) "Quantiles for GEVD distribution" _newline(1) display in green _col(1) "Variable |" _col(16) "Obs" _col(27) "Percentile" _col(41) "Centile" display in green "---------+---------------------------------------------" local i=1 local j=0 local p0=0 while `i'<`centile' { local p`i'=(100/`centile')+`p`j'' local c`i'=(`agevd'/`kgevd')*(1-(-ln(`p`i''/100))^`kgevd')+`sgevd' local i=`i'+1 local j=`j'+1 } local i=1 display in green _col(1) "`X'" _col(10) "|" in ye _col(16) `n' _col(27) %3.0f `p`i'' _col(41) `c`i'' local i=2 while `i'<`centile' { display in green _col(10) "|" in yellow _col (27) %3.0f `p`i'' _col(41) `c`i'' local i=`i'+1 { } mac def S_alpha `agevd' mac def S_k `kgevd' mac def S_psi `sgevd' end