{smcl}
{* 25jul2021}{...}
{cmd:help mata mm_wbal()}
{hline}
{title:Title}
{pstd}
{bf:mm_wbal() -- Generate balancing weights using entropy balancing (Stata 11 required)}
{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.
{pstd}
{cmd:mm_wbal()} requires Stata 11 or newer.
{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}