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]

st: Conditional Imputation using - mi impute chained -


From   Isaac Knowles <eyesack_kn@yahoo.com>
To   statalistTO <statalist@hsphsun2.harvard.edu>
Subject   st: Conditional Imputation using - mi impute chained -
Date   Tue, 12 Jun 2012 09:09:03 -0700 (PDT)

 
All,
 
Bit of a long explanation here:
 
I am imputing missing values for about eight variables in a data set based on a survey. The ultimate goal is to impute earnings, but earnings was only asked if a person worked, and working status was only asked if a person was aged 18 or older. Age was asked as a categorical variable, where age < 18 is coded as agecat == 1, and then a bunch of other categories are coded as agecat == 2, 3, 4, etc.  There are very few missing values for either the work or age variables, but the missing values are not nested. 
 
The way I formulate the work variable is
 
****
gen workimp = work /*assign workimp  the values of the original work variable, which was dichotomous */
replace workimp = 0 if agecat == 1 /*You don't work if you aren't old enough to work*/ 
*****
 
So, after that, I want to condition the imputation of work on whether a person was age 18 or older. However, issuing the following does NOT work:
 
****
mi impute chained 
    ....
    (logit, ... conditional(if agecat > 1)) workimp, [options here]
****
 
because agecat's missing values are not nested in work.
 
The way I "worked around" this problem  (in quotation marks because I'm not sure this is correct) was by using - mi xeq - to generate an indicator variable that tells - mi impute chained - which observations of work that I want to be imputed using the conditional option: 
 
 ***
mi xeq: gen workingage = agecat > 1 if  ~missing(agecat) 
...
mi impute chained 
    ....
    (logit, ... conditional(if workingage == 1)) workimp, [options here]
***
 
My thinking here is that after the first burn-in iteration, - mi impute chained - simulates values for workimp and agecat. Then based on these values it generates the workingage indicator variable, and then on the next iteration it utilizes the value of that indicator to condition the imputation of workimp. 
 
Now, this APPEARS to do what I want: crosstabs of imputed agecat and imputed workimp show that values of workimp are always zero if imputed agecat == 1, and nothing looks otherwise unreasonable. But is  this the correct way to do what I'm trying to do? If not, do you have some advice on how better to do it?
 
Thanks,
Isaac

*
*   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