program define sktestd version 2.1 mac def _varlist "req ex min(1)" mac def _if "opt" mac def _in "opt" mac def _exp "opt" parse "%_*" di _n _col(17) in gr "Skewness/Kurtosis tests for Normality" _n /* */ _col(47) "------- joint -------" _n /* */ " Variable | Pr(Skewness) Pr(Kurtosis)" /* */ " Chi-sq(2) Pr(Chi-sq)" _n /* */ "----------+" _dup(56) "-" while ("%_1"!="") { #delimit ; quietly sum %_1 %_if %_in %_exp, detail ; mac def _nobs = _result(1); mac def _Y = _result(14)*sqrt( ( (%_nobs+1)*(%_nobs+3)) / ( 6*(%_nobs-2) ) ) ; mac def _Beta2= ( 3*(%_nobs*%_nobs + 27*%_nobs-70)*(%_nobs+1)*(%_nobs+3) ) / ( (%_nobs-2)*(%_nobs+5)*(%_nobs+7)*(%_nobs+9) ) ; mac def _W2 = -1 + sqrt(2*(%_Beta2-1)) ; mac def _delta = 1/sqrt(log(sqrt(%_W2))) ; mac def _alpha = sqrt(2/(%_W2-1)) ; mac def _Z1= %_delta*log( %_Y/%_alpha + sqrt((%_Y/%_alpha)^2+1) ) ; mac def _Eb2=(3*(%_nobs-1)) / (%_nobs+1) ; mac def _Vb2 = ( 24*%_nobs*(%_nobs-2)*(%_nobs-3) ) / ( (%_nobs+1)^2 * (%_nobs+3)*(%_nobs+5) ) ; mac def _X = (_result(15)-%_Eb2)/sqrt(%_Vb2) ; mac def _RBeta1 = ( ( 6*(%_nobs*%_nobs-5*%_nobs+2) ) / ( (%_nobs+7)*(%_nobs+9) ) ) * sqrt( ( 6*(%_nobs+3)*(%_nobs+5) ) / ( %_nobs*(%_nobs-2)*(%_nobs-3) ) ) ; mac def _A = 6 + (8/%_RBeta1)*( 2/%_RBeta1 + sqrt(1+4/((%_RBeta1)*(%_RBeta1))) ) ; mac def _Z2 = ( (1-2/(9*%_A)) - ( (1-2/%_A)/(1+%_X*sqrt(2/(%_A-4))) )^(1/3) ) / sqrt(2/(9*%_A)) ; mac def _K2 = %_Z1*%_Z1 + %_Z2*%_Z2 ; mac def _indent = 9 - length("%_1") ; di in gr _skip(%_indent) "%_1 |" in ye _col(18) %5.3f 2-2*normprob(abs(%_Z1)) _col(32) %5.3f 2-2*normprob(abs(%_Z2)) _col(44) %9.2f %_K2 _col(60) %5.3f chiprob(2,%_K2) ; #delimit cr mac shift } end