* Stata estimation and maximum likelihood

* Clear old data

clear

* Set observations to 1000

set obs 10000

* Specify the quartile

gl tau=.5

gen x1=runiform()*4-2

gen y=3*x1+rnormal()

* Drop the program if it already is in the memory

cap program drop my_qreg1

* Define the ML program

program my_qreg1

* Tell stata what version to run in

version 11

* Define the arguments used in the ML command

args lnfj xb sigma

* Specify the log likelihood function return values (lnfj)

* The quantile estimator can be found by maximizing the asymetric Laplace probability density function

quietly replace `lnfj'=log($tau*(1-$tau)/`sigma')-$tau*($ML_y1-`xb')/`sigma' if `xb'< $ML_y1

quietly replace `lnfj'=log($tau*(1-$tau)/`sigma')-($tau-1)*($ML_y1-`xb')/`sigma' if `xb'>=$ML_y1

end

* Tell stata which model to use

ml model lf my_qreg1 (y = x1) ()

* Search for starting values

ml search

* Maximize the log likelihood function using the Newtonian/Ralphson algorithm

* Clear old data

clear

* Set observations to 1000

set obs 10000

* Specify the quartile

gl tau=.5

gen x1=runiform()*4-2

gen y=3*x1+rnormal()

* Drop the program if it already is in the memory

cap program drop my_qreg1

* Define the ML program

program my_qreg1

* Tell stata what version to run in

version 11

* Define the arguments used in the ML command

args lnfj xb sigma

* Specify the log likelihood function return values (lnfj)

* The quantile estimator can be found by maximizing the asymetric Laplace probability density function

quietly replace `lnfj'=log($tau*(1-$tau)/`sigma')-$tau*($ML_y1-`xb')/`sigma' if `xb'< $ML_y1

quietly replace `lnfj'=log($tau*(1-$tau)/`sigma')-($tau-1)*($ML_y1-`xb')/`sigma' if `xb'>=$ML_y1

end

* Tell stata which model to use

ml model lf my_qreg1 (y = x1) ()

* Search for starting values

ml search

* Maximize the log likelihood function using the Newtonian/Ralphson algorithm

* Sometimes this algorithm does not always converge. It is not as efficiently

* programmed as the stata built in qreg command.

ml maximize

* Pretty close but not exactly the same.

qreg y x1

ml maximize

* Pretty close but not exactly the same.

qreg y x1

## No comments:

## Post a Comment