
Title | Using nlcom with long expressions | |
Author | Isabel Canette, Gustavo Sánchez, StataCorp |
There is a limit of 800 dyadic operators or 249 pairs of nested parentheses that can be used in an expression in Stata. The message
expression too long r(130);
indicates that a command is being called with an expression that is beyond those limits; therefore, you need to split the expression into smaller pieces. This can be tricky in the context of nlcom, so let us show you how it can be done.
Assume we run the following code:
sysuse auto quietly regress mpg price rep78 displacement foreign nlcom (normal(_b[price]* _b[rep78]) + exp(_b[displacement]*_b[foreign]))
The command nlcom will compute the variance of the expression
normal(_b[price]* _b[rep78]) + exp(_b[displacement]*_b[foreign]))
by applying the delta method. This variance will be used to determine the confidence interval reported.
Now pretend that the expression we passed to nlcom was too long. If we split it in two parts, we can use nlcom to compute a covariance matrix for those two expressions. If, in addition, we use the option post, the new values and their covariance matrix would be posted as current results. This would allow us to use nlcom again to obtain the solution for the original problem.
nlcom (a1:normal(_b[price]* _b[rep78])) (a2:exp(_b[displacement]*_b[foreign])), post nlcom _b[a1] + _b[a2]
Here is the output:
. nlcom (a1:normal(_b[price]* _b[rep78])) (a2:exp(_b[displacement]*_b[foreign])), post a1: normal(_b[price]* _b[rep78]) a2: exp(_b[displacement]*_b[foreign])
mpg | Coefficient Std. err. z P>|z| [95% conf. interval] | |
a1 | .4999275 .0001062 4705.45 0.000 .4997192 .5001357 | |
a2 | 1.044825 .0822261 12.71 0.000 .8836643 1.205985 | |
mpg | Coefficient Std. err. z P>|z| [95% conf. interval] | |
_nl_1 | 1.544752 .0822579 18.78 0.000 1.383529 1.705975 | |