*! version 2.1.0 12feb2012
*! author: Partha Deb
* version 1.0.0 05sep2011

program fmm_lognormal_p
	version 9.2

	syntax anything(id="newvarname") [if] [in] [, MEan PRIor POSterior EQuation(string) ]

	syntax newvarname [if] [in] [, * ]

	forvalues i=1/$fmm_components {
		local L_xb `"`L_xb' xb`i'"'
		local L_pr `"`L_pr' pr`i'"'
		local L_lod `"`L_lod' lnsigma`i'"'
		local L_od `"`L_od' sigma`i'"'
	}
	forvalues i=1/`=$fmm_components-1' {
		local L_lpr `"`L_lpr' lpr`i'"'
	}

	tempvar `L_xb' `L_lpr' `L_pr' `L_lod' `L_od' den

	forvalues i=1/$fmm_components {
		qui _predict `typlist' `xb`i'' `if' `in', equation(component`i')
		qui _predict `typlist' `lnsigma`i'' `if' `in', equation(lnsigma`i')
		qui gen double `sigma`i'' = exp(`lnsigma`i'')
	}

	qui gen double `den' = 1
	forvalues i=1/`=$fmm_components-1' {
		qui _predict `typlist' `lpr`i'' `if' `in', equation(imlogitpi`i')
		qui replace `den' = `den' + exp(`lpr`i'')
	}

	forvalues i=1/`=$fmm_components-1' {
		qui gen double `pr`i'' = exp(`lpr`i'')/`den'
	}

	qui gen double `pr$fmm_components' = 1
	forvalues i=1/`=$fmm_components-1' {
		qui replace `pr$fmm_components' = `pr$fmm_components' - `pr`i''
	}

	if "`equation'" != "" & "`prior'" == "" & "`posterior'" == "" {
		gen `typlist' `varlist' `if' `in' = 0
		local i = substr("`equation'",-1,1)
		qui replace `varlist' = exp(`xb`i'' + 0.5*(`sigma`i'')^2) 
		label variable `varlist' "predicted mean: `equation'"
		exit
	}

	if "`equation'" == "" & "`prior'" == "" & "`posterior'" == "" {
		gen `typlist' `varlist' `if' `in' = 0
		forvalues i=1/$fmm_components {
			qui replace `varlist' = `varlist' + `pr`i'' * ///
					exp(`xb`i'' + 0.5*(`sigma`i'')^2)
		}
		label variable `varlist' "predicted mean"
		exit
	}

	if "`prior'" == "prior" {
		local i = substr("`equation'",-1,1)
		gen `typlist' `varlist' = `pr`i'' `if' `in'
		label variable `varlist' "prior probability: `equation'"
		exit
	}

	if "`posterior'" == "posterior" {
		tempvar prob probcomponent

		local fmm_y = e(depvar)
		qui gen double `prob' = 0
		forvalues i=1/$fmm_components {
			qui replace `prob' = `prob' + `pr`i'' ///
					* normalden(ln(`fmm_y'),`xb`i'',`sigma`i'') / `fmm_y' 
			if "`equation'"=="component`i'" {
				qui gen double `probcomponent' = `pr`i'' ///
					* normalden(ln(`fmm_y'),`xb`i'',`sigma`i'') / `fmm_y'
			}
		}
		gen `typlist' `varlist' = `probcomponent' / `prob'
		label variable `varlist' "posterior probability: `equation'"
		exit
	}

end