BookmarkSubscribeRSS Feed
blund
Obsidian | Level 7

The following code appeared in a 2024 WUSS presentation (below).

When running SAS OnDemand for Academics I get this IML error

ERROR: Invocation of unresolved module NLPSOLVE

Can someone provide a replacement IML function?

 

PROC IML;

start LL(param) global(x); /* normal log likelihood */

mu = param[1]; sigma = param[2];

LL = sum( logpdf("Normal", x, mu, sigma) );

return( -LL ); /* minimize -LL */

finish;

use Sashelp.Iris; /* read sample data */

read all var {SepalWidth} into x;

p = {35 5.5}; /* guess (mu, sigma), sigma>0 */

call nlpsolve(rc, soln, "LL", p) L={. 0}; /* sigma>0 */

print soln;

1 REPLY 1
Rick_SAS
SAS Super FREQ

Sure. ODA is running SAS 9.4, so use the NLPNRA procedure, as shown in 

Maximum likelihood estimation in SAS/IML - The DO Loop

PROC IML;
start LL(param) global(x); /* normal log likelihood */
   mu = param[1]; sigma = param[2];
   LL = sum( logpdf("Normal", x, mu, sigma) );
   return( -LL ); /* minimize -LL */
finish;

use Sashelp.Iris; /* read sample data */
read all var {SepalWidth} into x;

p = {35 5.5}; /* guess (mu, sigma), sigma>0 */
/*     mu-sigma constraint matrix */
con = { .   0,  /* lower bounds: -infty < mu; 0 < sigma */
        .   .}; /* upper bounds:  mu < infty; sigma < infty */
call nlpnra(rc, soln, "LL", p) BLC=con;
print soln;

To understand where the SUM(LOGPDF(...)) function call comes from, see

Two simple ways to construct a log-likelihood function in SAS - The DO Loop

sas-innovate-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 1 reply
  • 773 views
  • 1 like
  • 2 in conversation