*! 02Feb2013
help mrprobit

Title

Probit Estimation with Misreporting of the Dependent Variable

Syntax

mrprobit
depvar
[indepvars]
[if] [in]
[weight]
[, options]

Model
alpha0(string) Can be used to specify model for the probability of false positives

alpha1(string) Can be used to specify model for the probability of false negatives

c0 Forces mrprobit to interpret variable in alpha0() as defining cells if alpha0() contains one variable.

c1 Forces mrprobit to interpret variable in alpha1() as defining cells if alpha1() contains one variable.

predict Returns results in e() such that some of the Probit postestimation programs work.

Maximization
modelopts(string) options passed to ml model

maxopts(string) options passed to ml maximize

init(string) starting values passed to ml init

pweights, fweights, aweights and iweights are allowed; see weight.

Description

mrprobit estimates the probit model proposed in Hausman et al (1998) that is consistent in the presence of misreporting of the dependent variable as well as some extensions. The probability of
misreporting can be allowed to differ by cells defined by observables, be a known constant or an estimate for each observation can be provided.

Options

Model

alpha0(string) can be used to specify the model for the probability of false positives. If it is not specified, mrprobit estimates the probit model proposed in Hausman et al (1998), which assumes
that the probability of false positives (Pr(y=1|y*=0)) is a constant and estimates it from the data. If alpha0(string) contains a real number, it constrains the probability to this number (for technical
reasons, mrprobit will constrain the probability to a value arbitrarily close to 0 if 0 is specified). alpha0(string) can also contain a (list of) categorical variables, inducing mrprobit to
estimate separate probabilities of false positives for each cell defined by unique combinations of the varlist. The table of results lists the unique combinations of the lables (as created by egen group with
the option lable) of the variables in alpha0() to identify the cells.
Finally, it can contain a variable that gives (estimated) probabilities of false positives for every observation, allowing the probability of false positves to depend on indepvars in arbitrary ways. The standard
errors assume that the probabilities are known, i.e. they do not take the uncertainty that arises from estimating these probabilities into account. If only one variable is specified, mrprobit tries to
determine automatically whether it defines cells or contains a probability. See c0 on how to override this.

alpha1(string) can be used to specify the model for the probability of false negatives. Works exactly the same way as alpha0(string), i.e. it can contain a number, a varlist specifying groups by which
the probability of false negatives is allowed to differ or a probability of false negative for each observation.

c0 forces mrprobit to interpret the variable specified in alpha0(string) as defining groups of observations rather than probabilities. Can be used in case the program fails to figure that out
by itself.

c1 forces mrprobit to interpret the variable specified in alpha1(string) as defining groups of observations rather than probabilities. Can be used in case the program fails to figure that out
by itself.

predict The regular probit postestimation commands (such as predict or margins) do not work unless some results are returned in e(). predict forces the program to return
e(predict) and e(rules) such that some of these postestimation commands work. Use at your own risk, it just makes the commands work, they may not work correctly and do not work under all
circumstances.

Maximization

modelopts(string) can be used to pass any other options to ml model. Options should be entered just as they would be entered after the comma in the ml model statement.

maxopts(string) can be used to pass any other options to ml maximize. Options should be entered just as they would be entered after the comma in the ml maximize statement.

init(string) can be used to pass starting values to ml using ml init. Options should be entered as they would be entered after the comma in the ml init statement. Specifying starting
values for any parameter switches off the default starting values for all other parameters as well. See Starting Values for more details.

Remarks

Starting Values and Convergence

mrprobit choses starting values for the slope coefficients by running a standard probit and lets Stata choose starting values for the alphas. This tends to lead to quick and reliable convergence. However,
problems sometimes occured with probabilities of misreporting for different groups if the probability for one or more groups is 0, since this puts the maximum of the likelihood function on the boundary of the
parameter space. Stata sometimes settles on a local minimum if alpha() contains the probabilities of misreporting, so it seems desirable to check the robustness of the maximum by specifying starting values
manually using init(). Note that if init() is specified, mrprobit does not choose any starting values, but lets Stata choose starting values for any parameter without a starting value in
init().
Finally, as Hausman et al (1998) show, the model is only identified if alpha0+alpha1<1, since the likelihood function has a symetric maximum at (1-alpha0,1-alpha1,-b). In rare cases, the maximization may end
up at this maximum, which can be avoided by choosing appropriate starting values.

svy, Standard Errors

mrprobit should work with the svy prefix, but I haven't checked whether all details are correct. If you find any errors, please let me know. The standard errors for the alphas are linearized by the
delta method. Clustering and any other variance option Stata is capable of can be used by passing the option to ml using modelopts() and maxopts().

Version 10 and omitted variables

The program runs under version 10, but may not transform the alphas back to [0,1] properly if Stata drops any variables from the model. I would like to thank Fola Malomo for pointing out this problem, which I have partially fixed in this version: It should only occur under version 10 with long (>244 characters) varlists of independent variables (in which case it should display a warning). If you want to be on the safe side, exclude any variables from your estimation command that Stata will exclude from e(b).

Other

If you find any mistakes or have any suggestions for improvements, please send me an email to mittag@uchicago.edu. Feel free to use, change or mutilate this program for private purpose, but please don't steal it, give due credit.

Examples

Setup

. webuse lbw2

Probit regression with union subject to misreporting, estimating probabilities of misreporting from the data as in Hausman et al (1998)

. mrprobit low age lwt race2 race3 smoke ptl ht ui

Same regression, but not allowing for false positives

. mrprobit low age lwt race2 race3 smoke ptl ht ui, alpha0(0)

Same regression, but using external information to fix probabilities of misreporting rather than estimating them

. mrprobit low age lwt race2 race3 smoke ptl ht ui, alpha0(0.03) alpha1(0.1)

Same regression, allowing alpha0 and alpha1 to be different for each combination of race and smoke

. mrprobit low age lwt race2 race3 smoke ptl ht ui, alpha0(race smoke) alpha1(race smoke)

Using estimated probabilities (stored in variables pr_fp and pr_fn) for each observation

. mrprobit low age lwt race2 race3 smoke ptl ht ui, alpha0(pr_fp) alpha1(pr_fn)

Saved results

mrprobit saves the following in e() (additional macros may be returned depending on the options passed to ml):

Scalars

e(N) number of observations

e(k) number of parameters

e(k_eq) number of equations in e(b)

e(k_eq_model) number of equations in model Wald test

e(k_dv) number of dependent variables

e(df_m) model degrees of freedom

e(ll) log likelihood

e(N_clust) number of clusters

e(chi2) chi-squared

e(p) significance

e(rank) rank of e(V)

e(ic) number of iterations

e(rc) return code

e(converged) 1 if converged, 0 otherwise

Macros

e(cmd) mrprobit

e(depvar) name of dependent variable

e(wtype) weight type

e(wexp) weight expression

e(clustvar) name of cluster variable

e(chi2type) Wald or LR; type of model chi-squared test

e(vce) vcetype specified in vce()

e(vcetype) title used to label Std. Err.

e(opt) type of optimization

e(ml_method) type of ml method

e(user) name of likelihood-evaluator program

e(technique) maximization technique

e(crittype) optimization criterion

e(properties) b V svyb svyr svyj

e(predict) program used to implement predict

Matrices

e(b) coefficient vector

e(b_o) original coefficient vector before parameter transformations

e(ilog) iteration log (up to 20 iterations)

e(gradient) gradient vector

e(V) variance-covariance matrix of the estimators

e(V_o) original variance-covariance matrix of the estimators before parameter transformations

Functions

e(sample) marks estimation sample

References

Hausman, Jerry, Jason Abrevaya and F. M. Scott-Morton. 1998. Misclassification of the Dependent Variable in a Discrete-Response Setting. Journal of Econometrics, 87 (2): 239-69.