propcnsreg: Stata module fitting a measurement model with causal indicators

Author: Maarten L. Buis

propcnsreg combines information from several observed variables into a single latent variable and estimates the effect of this latent variable on the depedent variable. These observed variables are so-called causal indicators (Bollen and Lennox, Psychological Bulletin 1991), that is, they influence the latent variable. It forms an alternative to factor analysis, which assumes that the latent variable influences the observed variables.

This package can be installed by typing in Stata: ssc install propcnsreg

Supporting materials

Examples

Regression with parametrically weighted covariates using the default identifying constraints: The latent variable equals 0 when all indicators are 0, and the standard deviation of the latent variable equals 1)

. sysuse nlsw88, clear (NLSW, 1988 extract)

. gen hs = grade == 12 if grade < . (2 missing values generated)

. gen sc = grade > 12 & grade < 16 if grade < . (2 missing values generated)

. gen c = grade >= 16 if grade < . (2 missing values generated)

. . gen lnwage = ln(wage)

. . gen tenure2 = tenure^2 (15 missing values generated)

. . gen white = race == 1 if race < .

. . propcnsreg lnwage white tenure tenure2 union, /// > lambda(tenure white) /// > constrained(hs sc c)

Iteration 0: log likelihood = -1068.1472 Iteration 1: log likelihood = -1065.1181 Iteration 2: log likelihood = -1063.6147 Iteration 3: log likelihood = -1063.5977 Iteration 4: log likelihood = -1063.5976

Number of obs = 1866 LR chi2(10) = 195.30 Log likelihood = -1063.5976 Prob > chi2 = 0.0000

Constraint: sd of latent variables = 1 ------------------------------------------------------------------------------ lnwage | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- unconstrai~d | white | .1904098 .0360015 5.29 0.000 .1198482 .2609715 tenure | .054622 .0062901 8.68 0.000 .0422936 .0669505 tenure2 | -.0012782 .0003087 -4.14 0.000 -.0018832 -.0006732 union | .1571225 .0234278 6.71 0.000 .1112049 .2030401 _cons | 1.186804 .0405603 29.26 0.000 1.107307 1.266301 -------------+---------------------------------------------------------------- constrained | hs | .7604651 .1479557 5.14 0.000 .4704772 1.050453 sc | 1.92175 .1469289 13.08 0.000 1.633775 2.209726 c | 2.836071 .0863589 32.84 0.000 2.666811 3.005332 -------------+---------------------------------------------------------------- lambda | tenure | -.0043634 .0018805 -2.32 0.020 -.0080492 -.0006777 white | -.0609361 .0232006 -2.63 0.009 -.1064085 -.0154638 _cons | .2706179 .0239255 11.31 0.000 .2237248 .317511 -------------+---------------------------------------------------------------- sigma | _cons | .4278637 .0070038 61.09 0.000 .4141365 .4415909 ------------------------------------------------------------------------------ LR test vs. unconstrained model: chi2(4) = 3.49 Prob > chi2 = 0.479

[do-file]

Regression with parametrically weighted covariates using an alternative identifying constraints: The latent variable equals 0 when all indicators are 0, and the latent variable equals 1 when c equals 1, that is, the remaining educational categories are scaled relative to less than high school(all indicators are 0) and college (c is 1)

. sysuse nlsw88, clear (NLSW, 1988 extract)

. gen hs = grade == 12 if grade < . (2 missing values generated)

. gen sc = grade > 12 & grade < 16 if grade < . (2 missing values generated)

. gen c = grade >= 16 if grade < . (2 missing values generated)

. . gen lnwage = ln(wage)

. . gen tenure2 = tenure^2 (15 missing values generated)

. . gen white = race == 1 if race < .

. . propcnsreg lnwage white tenure tenure2 union, /// > lambda(tenure white) /// > constrained(hs sc c) unit(c)

Iteration 0: log likelihood = -1068.1472 Iteration 1: log likelihood = -1063.7472 Iteration 2: log likelihood = -1063.5978 Iteration 3: log likelihood = -1063.5976 Iteration 4: log likelihood = -1063.5976

Number of obs = 1866 LR chi2(10) = 195.30 Log likelihood = -1063.5976 Prob > chi2 = 0.0000

Constraint: [constrained]c = 1 ------------------------------------------------------------------------------ lnwage | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- unconstrai~d | white | .1904094 .0360015 5.29 0.000 .1198477 .2609711 tenure | .054622 .0062901 8.68 0.000 .0422936 .0669504 tenure2 | -.0012782 .0003087 -4.14 0.000 -.0018832 -.0006732 union | .1571225 .0234278 6.71 0.000 .1112049 .2030401 _cons | 1.186805 .0405603 29.26 0.000 1.107308 1.266301 -------------+---------------------------------------------------------------- constrained | hs | .2681403 .0448295 5.98 0.000 .1802761 .3560045 sc | .6776101 .0497143 13.63 0.000 .5801719 .7750483 c | 1 . . . . . -------------+---------------------------------------------------------------- lambda | tenure | -.0123749 .0053077 -2.33 0.020 -.0227778 -.0019721 white | -.1728182 .0649983 -2.66 0.008 -.3002125 -.0454239 _cons | .7674904 .0675006 11.37 0.000 .6351915 .8997892 -------------+---------------------------------------------------------------- ln_sigma | _cons | -.8489505 .0163693 -51.86 0.000 -.8810337 -.8168673 ------------------------------------------------------------------------------ LR test vs. unconstrained model: chi2(4) = 3.49 Prob > chi2 = 0.479

[do-file]

A MIMIC model

. sysuse nlsw88, clear (NLSW, 1988 extract)

. gen hs = grade == 12 if grade < . (2 missing values generated)

. gen sc = grade > 12 & grade < 16 if grade < . (2 missing values generated)

. gen c = grade >= 16 if grade < . (2 missing values generated)

. . gen lnwage = ln(wage)

. . gen tenure2 = tenure^2 (15 missing values generated)

. . gen white = race == 1 if race < .

. . propcnsreg lnwage white tenure tenure2 union, /// > lambda(tenure white) /// > constrained(hs sc c) mimic

Iteration 0: log likelihood = -1970.1958 (not concave) Iteration 1: log likelihood = -1468.3636 (not concave) Iteration 2: log likelihood = -1152.4663 Iteration 3: log likelihood = -1063.4018 Iteration 4: log likelihood = -1057.0959 Iteration 5: log likelihood = -1052.3576 (not concave) Iteration 6: log likelihood = -1052.1687 Iteration 7: log likelihood = -1051.858 Iteration 8: log likelihood = -1051.5414 Iteration 9: log likelihood = -1051.4807 Iteration 10: log likelihood = -1051.4742 Iteration 11: log likelihood = -1051.4742

Number of obs = 1866 LR chi2(10) = 209.49 Log likelihood = -1051.4742 Prob > chi2 = 0.0000

Constraint: sd of latent variables = 1 ------------------------------------------------------------------------------ lnwage | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- unconstrai~d | white | .1353823 .0284992 4.75 0.000 .079525 .1912397 tenure | .0559132 .0060458 9.25 0.000 .0440636 .0677627 tenure2 | -.0011921 .0002843 -4.19 0.000 -.0017493 -.0006349 union | .1543966 .0229632 6.72 0.000 .1093896 .1994036 _cons | 1.200793 .0410802 29.23 0.000 1.120277 1.281309 -------------+---------------------------------------------------------------- constrained | hs | .8228831 .1509213 5.45 0.000 .5270828 1.118683 sc | 1.98763 .1466134 13.56 0.000 1.700273 2.274987 c | 2.860568 .0863068 33.14 0.000 2.69141 3.029726 -------------+---------------------------------------------------------------- lambda | tenure | -.0060213 .0017467 -3.45 0.001 -.0094448 -.0025978 white | -.0145962 .0135443 -1.08 0.281 -.0411426 .0119502 _cons | .2485132 .0214567 11.58 0.000 .2064589 .2905674 -------------+---------------------------------------------------------------- sigma | _cons | .2985457 .0430397 6.94 0.000 .2141895 .3829019 -------------+---------------------------------------------------------------- sigma_latent | _cons | .3785701 .0392528 9.64 0.000 .301636 .4555042 ------------------------------------------------------------------------------

[do-file]