*! version 1.2.0 January 12, 2024 J. N. Luchman
help domme

Title

domme -- Dominance analysis for mulitple equation models

Syntax

domme [(eqname1 = parmnamelist1)
(eqname2 = parmnamelist2) ...
(eqnameN = parmnamelistN)]
[if] [in] [weight], [options]

Model
reg(full_estimation_command) preditive model command to call

ropts(command_options) options to command in reg()

fitstat(fitstat_opts) fit statistic returned by reg() or computed using built-in method

sets([PEset_1] ... [PEset_x]) sets of indepdendent variables

all(PEall) indepdendent variables included in all subets

Reporting
noconditional suppresses computation of conditional dominance statistics

nocomplete suppresses computation of complete dominance designations

reverse reverses interpretation for statistics that decrease with better fit

Command in reg() must accept constraints as a command option.

aweights, fweights, iweights, and pweights are
allowed; see weight. Weight use is restricted to commands in reg()
that accept them.

Note that domme requires at least two parameter estimates or
sets of parameter estimates (see option sets() below).
Because it is possible to submit only sets of parameter estimates, the
initial parameter estimates specification statement is optional.

Table of Contents

1. Description
2. Set-up
3. Options
4. Saved Results
5. Examples
6. Final Remarks
7. References

1. Description

Dominance analysis (DA) is a methodology for determining the relative
importance of independent variables or parameter estimates in a predictive model.
The domme approach extends on domin by being able to accommodate more
predictive models such as those with multiple equations/dependent variables
(see Luchman, Lei, and Kaplan, 2020 for a discussion). As an extension of single
equation dominance analysis, it is recommended that the user familiarize
themselves with single equation dominance analysis (i.e., see domin)
before attempting to use the multiple equation version of the methodology.

This multiple equation DA implementation differs from the implementation of
the single equation version of DA in how it includes or excludes parameter
estimates from the model. Multiple equation DA uses constraints to exclude
parameter estimates from the model by constraining their values to be 0. When constrained
to be 0, the parameter estimate cannot affect prediction and, thus, is effectively
excluded. This is why domme can only be used with commands that accept
constraints.

2. Set-up

This implementation of multiple equatuion DA must be provided with the components
of the parameter estimates from which it will create "parameter equals 0"
constraints. How these constraints are constructed follows from the way in which
Stata names each parameter estimate. Consider, for example, the following logistic
regression model (estimated on the sysuse auto data).

logit foreign price mpg turn trunk

Following the estimation of this model, the user can ask for the names of all
the parameters in the e(b) or coefficient matrix by using:

display "`: colfullnames e(b)'"

which produces

foreign:price foreign:mpg foreign:turn foreign:trunk foreign:_cons

This series of names are the parameter names for all the coefficients in the
logit model. In order to use DA on this model, the user needs
to supply domme with the names of all the parameters that will be used.
One way to supply these parameter names is to use the initial
(eqname = parmnamelist) statements. For instance:

domme (foreign = price mpg turn trunk), ...

implies four constraints:

_b[foreign:price] = 0

_b[foreign:mpg] = 0

_b[foreign:turn] = 0

_b[foreign:trunk] = 0

domme uses these constraints to "remove" parameters by constraining their
value to 0. This mimics domin's method where the parameter's name is
removed from the indepvars list directly.

The way parameter constraints are produced with the all() and sets()
options is identical to that of the initial statements to domme.

3. Options

Model

reg(full_estimation_command) refers domme to a command that accepts
constraints, uses ml to estimate parameters, and that can produce the
scalar-valued statistic referenced in the fitstat() option. domme can be
applied to any built-in or user-written program that meets these criteria.

full_estimation_command is the full estimation command, not including
a comma or options following the comma, as would be submitted to Stata. The
reg() option has no default and the user is required to provide a
domme-compatible statistical model.

ropts(command_options) supplies the command in reg() with any
relevant estimation options. Any options normally following the comma in standard
Stata syntax can be supplied to the statisical model this way. The only exception
to is the use of constraints(); domme cannot, at current, accept
constraints other than those it creates.

fitstat(fitstat_opts) the scalar-valued model fit summary statistic
used in the dominance analysis. There are two ways domme points to fit
statistics.

The first method is identical to domin's approach. domme
accepts any returned, ereturned, or other
scalar produced by the estimation command in reg(). Note
that some Stata commands change their list of ereturn-ed results when
constraints are applied (e.g., logit, poisson). Ensure that the
command used produces the desired scalar with constraints.

The second method accommodates Stata commands' tendency to not return
pseudo-R-square values with constraints and expands which commands can get a
fit statistic using a built-in fit statistic computation. When fitstat()
is asked for an empty ereturned statistic indicator (i.e., e()). Using
fitstat(e()) produces the McFadden pseudo-R squared metric.
Prior to domme version 1.2 you had to provide a three character code as
an option to the fitstat(). fitstat() still accepts the the
McFadden pseudo-R squared (as fitstat(e(), mcf))
(See Example #1).

Note that domme has no default fit statistic and the user is
required to provide a fit statistic option. The built-in option
assumes the command in reg() ereturns e(ll).

sets([PEset_1] ... [PEset_x]) binds together parameter estimate
constraints as a set that are always constrained jointly and act as a
single parameter estimate.

Each PEset is put together in the same way as the initial statements in
that they are constructed from a series of (eqname = parmnamelist) statements.
All PEsets must be bound by brackets "[]". For example, consider again
the model logit foreign price mpg turn trunk. To produce two sets of parameters,
one that includes price and mpg as well as a second that includes turn
and trunk, the sets() type sets( [(foreign = price mpg)]
[(foreign = turn trunk)] ).

Note that a single set can include parameters from multiple equations
(see Example #6).

all(PEall) defines a set of parameter estimate constraints that
are allowed to explain the fit metric with a higher priority than the parameter
estimates in the initial statements or the sets() option (see Example #3).
In effect, the parameter estimates defined in the all() option are used
like covariates.

The PEall statement is set up in a way similar to the PE_sets
in a (eqname = parmnamelist) format and can accept parameters from multiple
equations.

Reporting

noconditional suppresses the computation and display of of the conditional dominance
statistics which can save computation time when conditional dominance statistics
are not desired. Suppressing the computation of conditional dominance statistics
also suppresses the "strongest dominance designations" list.

nocomplete suppresses the computation of the complete dominance designations
which can save computation time when complete dominance designations are not desired.
Suppressing the computation of complete dominance designations also suppresses
the "strongest dominance designations" list.

reverse reverses the interpretation of all dominance statistics in the
e(ranking) vector, e(cptdom) matrix, and corrects the computation of the
e(std) vector as well as the "strongest dominance designations" list.
domme assumes by default that higher values on overall fit statistics constitute
better fit. reverse is useful for the interpetation of dominance statistics
based on overall model fit statistics that decrease with better fit (e.g., AIC, BIC).

4. Saved Results

domme saves the following results to e():

scalars

e(N) number of observations

e(fitstat_o) overall fit statistic value

e(fitstat_a) fit statistic value associated with variables in all()

e(fitstat_c) fit statistic value computed by default when the constant model is non-zero

macros

e(cmdline) command as typed

e(title) Dominance analysis for multiple equations

e(cmd) domme

e(fitstat) contents of the fitstat() option

e(reg) contents of the reg() option

e(ropts) contents of the ropts() option

e(properties) b

e(set#) parameters included in set(#)

e(all) parameters included in all()

matrices

e(b) general dominance statistics vector

e(std) general dominance standardized statistics vector

e(ranking) rank ordering based on general dominance statistics vector

e(cdldom) conditional dominance statistics matrix

e(cptdom) complete dominance designation matrix

functions

e(sample) marks estimation sample

5. Examples

sysuse auto

Example 1: Path analysis/seemingly unrelated regression (SUR) with built in McFadden pseudo-R squared

sureg (price = length foreign gear_ratio) (headroom = mpg)

domme (price = length foreign gear_ratio) (headroom = mpg), reg(sureg (price = length foreign gear_ratio) (headroom = mpg)) fitstat(e())

Example 2: Zero-inflated Poisson

generate zi_pr = price*foreign

zip zi_pr headroom trunk, inflate(gear_ratio turn)

domme (zi_pr = headroom trunk) (inflate = gear_ratio turn), reg(zip zi_pr headroom trunk) f(e()) ropt(inflate(gear_ratio turn))

Example 3: Path analysis/SUR model with all option

sem (foreign <- headroom) (price <- foreign length weight) (weight <- turn)

domme (price = length foreign) (foreign = headroom), all((price = weight) (weight = turn)) reg(sem (foreign <- headroom) (price <- foreign length weight) (weight <- turn)) fitstat(e())

Example 4: Generalized negative binomial with all and parmeters treated as _cons in the dominance analysis (i.e., _b[price:foreign] using e(ll) as fit statistic

gnbreg price foreign weight turn headroom, lnalpha(weight length)

domme (price = turn headroom) (lnalpha = weight length), reg(gnbreg price foreign weight turn headroom) f(e(ll)) ropt(lnalpha(weight length)) all( (price = weight) )

Example 5: Generalized structural equation model with factor variables

sysuse nlsw88, clear

gsem (wage <- union hours, regress) (south <- age ib1.race union, logit)

domme (wage = union hours) (south = age union), reg(gsem (wage <- union hours, regress) (south <- age ib1.race union, logit)) fitstat(e()) sets([(south = 2.race 3.race)])

Example 6: Generalized structural equation model with sets to evaluate independent variables

gsem (south union <- wage tenure ttl_exp, logit)

domme, reg(gsem ( south smsa union <- wage tenure ttl_exp, logit)) fitstat(e()) sets( [(south = wage) (union = wage)] [(south = tenure) (union = tenure)] [(south = ttl_exp) (union = ttl_exp)])

Examples 7: Replicating results from domin

7a: Logit model with factor varaible

sysuse auto, clear

domin foreign price mpg turn trunk, reg(logit) fitstat(e(r2_p)) sets((i.rep78))

domme (foreign = price mpg turn trunk), reg(logit foreign price mpg turn trunk ib1.rep78) fitstat(e(), mcf) sets([(foreign = 3.rep78 4.rep78)])

7b: Ordered logit model with covariate

domin rep78 trunk weight length, reg(ologit) fitstat(e(r2_p)) all(turn)

domme (rep78 = trunk weight length), reg(ologit rep78 trunk weight length turn) fitstat(e(), mcf) all((rep78 = turn))

7c: Poisson regression with log-likelihood fitstat and constant-only comparison using reverse

domin price mpg rep78 headroom, reg(poisson) fitstat(e(ll)) consmodel reverse

domme (price = mpg rep78 headroom), reg(poisson price mpg rep78 headroom) fitstat(e(ll)) reverse

6. Final Remarks

See domin's help file for an extensive discussion of the role of dominance
analysis as a postestimation method and caveats about its use. All these notes
and considerations apply to domme as well.

Any parameter estimates in the model's reg() specification but not in
the initial statements, the sets(), or all() are considered to be a
part of the to a constant-only model (see Examples #4 and #7c). When using domme's
built-in fit statistic, the constant-only model will be used to compute the
baseline model.

Note that domme does not check to ensure that the parameters supplied
it are in the model and it is the user's responsibility to ensure that the
parameter estimates created in the initial statements, as well as those created by
sets() and all(), are valid parameters in the estimated model.
domme also attempts to clean-up parameter constraints it creates but
under certain circumstances, when domme fails to execute in a way that it does
not capture, parameter constraints will remain in memory. domme also will never
overwrite existing parameter estimate constraints and, if there are insufficient parameter
constraints in memory, domme will fail with an error noting insufficient free
constraints. Use constraint dir to list all defined constraints in memory.

7. References

Luchman, J. N., Lei, X., and Kaplan, S. A. (2020). Relative importance analysis with multivariate models: Shifting the focus from independent variables to parameter estimates.
Journal of Applied Structural Equation Modeling, 4(2), 40–59.

Development Webpage

Additional discussion of results, options, and conceptual issues on:

https://github.com/fmg-jluchman/domin/wiki

Please report bugs, requests for features, and contribute to as well as follow on-going development of domme on:

http://github.com/jluchman/domin

Article

Please cite as:

Luchman, J. N. (2021). Determining relative importance in Stata using dominance analysis: domin and domme. The Stata Journal, 21(2), 510–538. https://doi.org/10.1177/1536867X211025837

Author

Joseph N. Luchman

Research Fellow

Fors Marsh

Arlington, VA

jluchman@forsmarsh.com

See Also

R package domir, Detailed description of Dominance Analysis