*! version 1.0.0 10 March 1997 STB-36 ip16 program define ptransdb version 5.0 local varlist opt parse "`*'" global DB_var "`varlist'" global DB_one "Data variable:" window control static DB_one 10 10 50 9 global DB_data " " window control ssimple DB_var 10 20 50 50 DB_data global DB_two "Time variable:" window control static DB_two 70 10 50 9 global DB_time " " window control ssimple DB_var 70 20 50 50 DB_time global DB_l "lambda:" window control static DB_l 70 80 50 9 global DB_lams "0 .05 .10 .15 .20 .25 .30 .35 .40 .45 .50 .55 .60" global DB_lams "$DB_lams .65 .70 .75 .80 .85 .90 .95 1" global DB_lam "1" window control ssimple DB_lams 70 90 50 60 DB_lam window control button "lambda" 5 100 40 10 DB_lc window control button "lambda+" 5 115 40 10 DB_lp window control button "lambda-" 5 130 40 10 DB_lm window control button "exit" 5 145 40 10 DB_ex global DB_lc "bcdr 0" global DB_lp "bcdr 1" global DB_lm "bcdr -1" global DB_ex "exit 3000" wdlg "Time series power transform" 10 10 140 170 end program define bcdr version 5.0 local arg `1' tempvar x t gen `x'=$DB_data gen `t'=$DB_time if `arg' == -1 {global DB_lam=max(0,$DB_lam-.025)} if `arg' == 1 {global DB_lam=min(1,$DB_lam+.025)} if $DB_lam==0 {replace `x'=log(`x')} else { replace `x'=`x'^$DB_lam} sum `x' replace `x'=(`x'-_result(5))/(_result(6)-_result(5)) tempvar cs sn yhat gen `cs'=cos(2*_pi*_n/12) gen `sn'=sin(2*_pi*_n/12) regress `x' `t' `cs' `sn' local s2: display %9.4f _result(9) local lam: display %5.3f $DB_lam label var `x' " " label var `t' " " graph `x' `t', xlab ylab c(l) t1("Power transform (lambda=`lam', RMSE=`s2')") drop `x' `t' end