Showing posts with label mi. Show all posts
Showing posts with label mi. Show all posts

Feb 9, 2018

Analysis of incomplete data using multiple imputation in Stata

This replicates MI Example 1 of Allison (2002, pp. 41-50) using Stata 14.

version 14
use "https://statisticalhorizons.com/wp-content/uploads/college.dta", clear

mi set mlong
mi register imputed gradrat csat private lenroll stufac rmbrd act
mi impute mvn gradrat csat private lenroll stufac rmbrd act, ///
   add(5) burnin(500) burnbetween(200) emlog emoutput ///
   saveptrace(trace, replace)

preserve
mi ptrace describe trace 
mi ptrace use trace, clear

// Generate regression coefficient
generate b = v_y2y1 / v_y2y2 
 

// Figure 5.1
twoway line b iter if inrange(iter, 1, 100), ///
       xtitle(Iteration) ytitle(b(csat)) ///
       ylabel(, format(%6.3f)) name(figure51, replace)
// Figure 5.2 tsset iter ac v_y2y1, lags(100) ciopts(color(white)) note("") name(figure52, replace) restore
// Table 5.3 eststo clear foreach i of numlist 1/5 { qui eststo: regress gradrat csat lenroll private stufac rmbrd if _mi_m == `i' } esttab, not se wide nostar noobs order(_cons) varlabel(_cons "Intercept") nomtitle
// Figure 5.3 mi estimate: regress gradrat csat lenroll private stufac rmbrd

Reference

Allison, Paul D. 2002. Missing Data. Sage. doi: 10.4135/9781412985079

Aug 22, 2017

Multiple imputation in Stata

clear

// Generate data
set obs 10000
generate e  = rnormal()
drawnorm x1 x2, ///
         corr(1, .4, 1) cstorage(lower) 
generate y = 1 + 1 * x1 + 1 * x2 + 25 * e
drop e

// Model with data-generating process
eststo clear
eststo: regress y x1 x2

// Drop cases conditional on other covariate
replace x1 = . if rnormal() > .1 & x2 > -1

// Model with missing data
eststo: regress y x1 x2

// Impute data
mi set mlong                  // Declare data format
mi register imputed x1        // Declare variable to be imputed
mi impute chained (regress) x1 = y x2, add(10) // Declare imputation model

// Model with imputed data
eststo: mi estimate, post:  regress y x1 x2 // post option is important for -esttab-

// Table
esttab, r2 se mtitles("DGP" "Missing data" "Imputed")