BookmarkSubscribeRSS Feed
Calcite | Level 5


I will be so  thankful to anyone who can help to figure out what is wrong with my code

attached is the code

It suppose to estimate the parameters using NLPQN

if I have one simulated data set, then there is no errors (but results are not good). If I ask for more than one simulation I get error and warnings messages such as


WARNING: Invalid argument resulted in missing value result.

that refers to this statement

do L=1 to n;

sum=sum+( X- 1/alpha*( -log(p)/gamma) **(-1/beta) )**2;


and at the end I get this error message


ERROR: Overflow error in NLPQN.

I don't know exactly what is my mistake? I tried to change the initial values works but then if I increase the sample size n then I get

the same error again

I will highly appreciate any advice

thank you

SAS Employee

I modified your code to save some of the intermediate values as it was evaluating the objective function, and it appears that you are getting an overflow sometimes when the algorithm computes the following in the objective function:

1/alpha*( -log(p)/gamma) **(-1/beta)      )**2;

Basically, with your constraints beta can be small (0.0001). When it is small and -log(p)/gamma is less than 1 you are trying to compute a very large power, say somthing like 0.8 ** -10000, equivalent to 1.25 ** 10000. My guess is that you really don't intend for beta to be that small? You either need to raise your lower bound for beta or do something special in your objective function to handle that situation.

Calcite | Level 5

Thank you so much for your help

you were right about beta, beta shouldn't be small,  I was trying to play with initial values based on your recommendations before I reply

Now, I don't get any errors or warnings but I found that there is no optimizations,for instant whether I take the size of the data (n) 10 or 50, whether the number of simulations (k) =10 or 1000  results are the same don't change at all like if they were fixed no matter how many loops I execute or how big my data are

I also changed the true values of the parameter, the initial values the constrains...but nothing seems to matter, I wasn't sure exactly how to change the objective function.

I wilcome any suggestions or advices

thank you for your help

SAS Employee

I am not sure what you are trying to do, but looking at your code, if you are expecting to get the optimization to converge to alpha, beta, and gamma, I believe that you should set p to match the random number stream used in your simulation. Otherwise, I don't see how you could expect it to converge to the right answer. Try doing:

********************* Generating My Data ****************************************;                                                     

        do j=1 to n;                                                                                                                   

              p = Uniform(seed);                                                                                                    






Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.

If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website. 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 3 replies
  • 2 in conversation