Search
   >> Home >> Resources & support >> FAQs >> Using nlcom with long expressions

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 June 2013

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. 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
. nlcom _b[a1] + _b[a2] _nl_1: _b[a1] + _b[a2]
mpg Coef. Std. Err. z P>|z| [95% Conf. Interval]
_nl_1 1.544752 .0822579 18.78 0.000 1.383529 1.705975
The Stata Blog: Not Elsewhere Classified Find us on Facebook Follow us on Twitter LinkedIn Google+ Watch us on YouTube