{smcl} {* 10dec2021}{...} {cmd:help mata mm_wbal()} {hline} {title:Title} {pstd} {bf:mm_wbal() -- Generate balancing weights using entropy balancing} {title:Syntax} {p 8 23 2} {it:real rowvector}{bind: } {cmd:mm_wbal(}{it:X}{cmd:,} {it:w}{cmd:,} {it:Xref}{cmd:,} {it:wref} [{cmd:,} {it:nowarn}]{cmd:)} {p 8 8 2} where {p 12 16 2} {it:X} is the data to be reweighted; rows are observations, columns are variables {p 12 16 2} {it:w} is a column vector containing base weights; use {it:w} = {cmd:1} for unweighted data; if not scalar, {it:w} must have the same number of rows as {it:X} {p 12 16 2} {it:Xref} is the reference data; rows are observations, columns are variables; {it:Xref} must have the same number of columns as {it:X}; if {it:Xref} only has a single row, it is assumed to contain population averages {p 12 16 2} {it:wref} is a column vector containing base weights for the reference data; use {it:wref} = {cmd:1} for unweighted data; if not scalar, {it:wref} must have the same number of rows as {it:Xref}; if {it:Xref} only has a single row, {it:wref} is assumed to contain the population size {p 12 16 2} {it:nowarn}!=0 suppresses the warning messages that are displayed if convergence or balancing is not achieved. Omitted {it:nowarn} is equivalent to {it:nowarn}=0. {title:Description} {pstd} {cmd:mm_wbal()} returns a vector of balancing weights obtained by entropy balancing. {cmd:mm_wbal()} is implemented as a wrapper for {helpb mf_mm_ebalance:mm_ebalance()}. See the help file of {helpb mf_mm_ebalance:mm_ebalance()} for technical details and references. {title:Examples} {dlgtab:Balance subsamples} . {stata sysuse nlsw88, clear} . {stata drop if missing(union, hours, ttl_exp, tenure)} . {stata generate byte nonunion = 1 - union} . {stata "mata:"} : {stata X = st_data(., "hours ttl_exp tenure", "union")} : {stata Xref = st_data(., "hours ttl_exp tenure", "nonunion")} : {stata wbal = mm_wbal(X, 1, Xref, 1)} : {stata mean(Xref)', mean(X)', mean(X, wbal)'} : {stata rows(Xref), rows(X), sum(wbal)} : {stata end} {pstd} The balancing weights adjust the sample of unionized workers in a way such that the means of working hours, work experience, and tenure are the same as in the reference sample (non-unionized workers). {pstd} The sum of the balancing weights is equal to the size of the reference sample. {dlgtab:Adjust sample to population} {pstd} From census data you know that the population averages of working hours, work experience, and tenure are 35, 10, and 5, respectively. The size of the population is 1 million. You want to reweight your sample such that it is in line with the population: . {stata sysuse nlsw88, clear} . {stata drop if missing(hours, ttl_exp, tenure)} . {stata "mata:"} : {stata X = st_data(., "hours ttl_exp tenure")} : {stata mu = (35, 10, 5)} : {stata N = 1e6} : {stata wbal = mm_wbal(X, 1, mu, N)} : {stata mean(X)', mean(X, wbal)'} : {stata sum(wbal)} : {stata end} {title:Source code} {pstd} {help moremata11_source##mm_wbal:mm_wbal.mata} {title:Author} {pstd} Ben Jann, University of Bern, ben.jann@unibe.ch {title:Also see} {psee} Online: help for {bf:{help moremata}}, {helpb mf_mm_ebalance:mm_ebalance()} {p_end}