--- On Wed, 30/9/09, Dmitriy Krichevskiy wrote:
> I have a large panel data in which I have discretized
> income into quintiles. I then tested to see if transition
> processes (governing quintile transitions) are stationary.
> I found that I can characterize transitions as Markov. So
> I followed with xttrans command estimating transition
> probabilities. But I also want to know what my confidence
> intervals for transition probabilities estimates are?
Here is a quick stab at an approximate solution. It copies the strategy
of the official Stata command -proportion-, which is that these
proportions/transition probabilities are nothing other means, so we
can use the standard formulas for inference about the mean to get an
approximation of the confidence intervals about these proportions. I
am thus conveniently ignoring lots of potential problems here, and I
leave it up to you to decide whether you find that acceptable.
Hope this helps,
Maarten
*------------------ begin example ------------------------------
program drop _all
program define xttransci, rclass byable(recall) sort
*! version 1.0.0 MLB 30Sept2009
*! based on xttrans
version 6, missing
syntax varname [if] [in] [, I(varname) T(varname) ]
xt_iis `i'
local ivar "`s(ivar)'"
xt_tis `t'
local tvar "`s(timevar)'"
tempvar touse
mark `touse' `if' `in'
markout `touse' `varlist' `ivar' `tvar'
tempvar was is
quietly {
sort `ivar' `tvar'
by `ivar': gen float `was' = `varlist' if _n<_N
by `ivar': gen float `is' = `varlist'[_n+1] if _n<_N
by `ivar': replace `touse'=0 if `touse'[_n+1]==0 & _n<_N
levelsof `was'
local levs `r(levels)'
local k : word count `levs'
tempname res
matrix `res' = J(`=3*`k'',`k', .)
tokenize `levs'
forvalues i = 1/`k' {
tempvar d`i'
gen byte `d`i'' = `is' == ``i''
}
forvalues i = 1/`k' {
mean `d1'-`d`k'' if `touse' & `was' == ``i''
local ilb = (`i'-1)*3+1
local ip = (`i'-1)*3+2
local iub = (`i'-1)*3+3
local rown `"`rown' ``i'':lb ``i'':p ``i'':ub"'
forvalues j = 1/`k' {
matrix `res'[`ilb',`j'] = _b[`d`j''] - invttail(e(df_r),0.025)*_se[`d`j'']
matrix `res'[`ip',`j'] = _b[`d`j'']
matrix `res'[`iub',`j'] = _b[`d`j''] + invttail(e(df_r),0.025)*_se[`d`j'']
}
}
matrix rownames `res' = `rown'
matrix colnames `res' = `levs'
}
matlist `res', format(%9.3f)
return matrix result `res'
end
webuse nlswork, clear
xttransci msp
exit
*------------------------- end example ----------------------------
(For more on examples I sent to the Statalist see:
http://www.maartenbuis.nl/example_faq )
--------------------------
Maarten L. Buis
Institut fuer Soziologie
Universitaet Tuebingen
Wilhelmstrasse 36
72074 Tuebingen
Germany
http://www.maartenbuis.nl
--------------------------
*
* 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/