Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: ml mixture distribution


From   Lukas Kornher <lukas.kornher@uni-bonn.de>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: ml mixture distribution
Date   Mon, 09 Jul 2012 18:39:09 +0200

Thanks Maarten. I know the command. I have a mixture distribution of a normal and two truncated normal which is not available for fmm. Do you think it is possible to rewrite Deb's original code?

Regards
Lukas



Am 09/07/2012 18:25, schrieb Maarten Buis:
Have you looked at -fmm- (In stata type: -ssc desc fmm-)?

Hope this helps,
Maarten

On Mon, Jul 9, 2012 at 6:14 PM, Lukas Kornher<lukas.kornher@uni-bonn.de>  wrote:
Dear Statalisters,

I am trying to set up a ml model for a mixture distribution function with
three regimes. Stata cannot find a maximum and returns:
/could not calculate numerical derivatives -- discontinuous region with
missing values encountered/.
I am quite new to ml in Stata and I find very little on mixture distribution
on the web and in MLE with Stata. Any comments would be really appreciated.
Especially how one can constraint the sum of the regime probabilities to 1.
Many thanks.

Lukas

STATA CODE:

program define pbm_mixture ;
args todo b lnf;
tempvar lnf_j;
tempname lambda1 lambda2 sigma_1 sigma_2 sigma_3 mu;
scalar `mu' = `b'[1,1];
scalar `sigma_1' = exp(`b'[1,2]);
scalar `sigma_2' = exp(`b'[1,3]);
scalar `sigma_3' = exp(`b'[1,4]);
scalar `lambda1'  = normal(`b'[1,5]);
scalar `lambda2'  = normal(`b'[1,6]);
gen double `lnf_j' =
   `lambda1' * (1/`sigma_1') * normalden(($ML_y1 - `mu')/`sigma_1') +


   `lambda2'*(2/sqrt(`sigma_1'^2+`sigma_2'^2)) * normalden(($ML_y1 - `mu')/
sqrt(`sigma_1'^2+`sigma_2'^2))*
   (1-normal((-($ML_y1 - `mu')*(`sigma_1'/`sigma_2'))/
sqrt(`sigma_1'^2+`sigma_2'^2)))+

   (1-`lambda1'-`lambda2') * (2/sqrt(`sigma_1'^2+`sigma_3'^2)) *
normalden(($ML_y1 - `mu')/ sqrt(`sigma_1'^2+`sigma_3'^2))*
   (1-normal((($ML_y1 - `mu')*(`sigma_1'/`sigma_3'))/
sqrt(`sigma_1'^2+`sigma_3'^2)));
  mlsum `lnf' = log(`lnf_j');


end;
gen mu = -0.00001;

ml model d0 pbm_mixture (tau = mu, noconst technique(dfp)  ) /ln_sigma_1
/ln_sigma_2 /ln_sigma_3 /inv_lambda1 /inv_lambda2 ;
ml init mu=0;
ml check;
ml search lambda1 0 1 lambda2 0 1, repeat(250);
ml maximize;

--
Lukas Kornher

Phd Candidate
Department of Economic and Technological Change
Center for Development Research
University of Bonn

Tel.: +49 (0) 228 / 73-1842
Room 1.031




*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/




--
Lukas Kornher

Phd Candidate
Department of Economic and Technological Change
Center for Development Research
University of Bonn

Tel.: +49 (0) 228 / 73-1842
Room 1.031



*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index