Is there a way to estimate a nonlinear combination with nlcom, when the
error “expression too long” is displayed?
|
Title
|
|
Using nlcom with long expressions
|
|
Author
|
Isabel Cañette, Gustavo Sánchez, StataCorp
|
|
Date
|
February 2008; minor revisions July 2011
|
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 | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-----------+----------------------------------------------------------------
a1 | .4999275 .0001062 4705.45 0.000 .4997152 .5001397
a2 | 1.044825 .0822261 12.71 0.000 .8805589 1.20909
----------------------------------------------------------------------------
. nlcom _b[a1] + _b[a2]
_nl_1: _b[a1] + _b[a2]
----------------------------------------------------------------------------
| Coef. Std. Err. t P>|t| [95% Conf. Interval]
-----------+----------------------------------------------------------------
_nl_1 | 1.544752 .0822579 18.78 0.000 1.380423 1.709081
----------------------------------------------------------------------------
|