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