Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Options

- RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

🔒 This topic is **solved** and **locked**.
Need further help from the community? Please
sign in and ask a **new** question.

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Posted 08-18-2016 11:37 AM
(854 views)

Hi

I am trying to optimize the following code. It tries to find the values of and AR(2) given an initial error variance and a convergence variance.

I have been able to set the problem in Excel Solver and the solution converges. When I try to solve it in SAS I am getting two errors:

Either it doesnt compute anything and give me values of the objective function with the same initial parameters that are larger than if I just call the function with the same values, or it gives me ERROR: Overflow error in *`.

I have noticed that the value of the gradient is very large. What puzzles me is why Solver using a gradient search algorithm would be able and SAS IML wont. I have use several routines with no success.

Below is the code I am using

Thanks

```
proc iml; free;
h=10; /*maximum projection horizon*/
W=j(h,h,0); /*Create starting covariance matrix*/
F=j(h,h,0); /*Create parameter matrix*/
int=j(h,h,0);
year=7; /*Create vector with variance convergence*/
var_y=1.7935990244;
fc_cov=j(h,h,0); /*Create covariance matrix*/
lowIdx = do(h+1, (h*h)-1, h+1); /*Index for lower diagonal*/
F[lowIdx]=1;
weight=j(h,1,0);
weight[1:(h-year)]=1;
/*map variance matrix W and paramter matrix F*/
W[1,1]=0.77;
start minsqre(param) global(h, W, F, int, var_y, fc_cov, weight);
F[1,1]=param[1];
F[1,2]=param[2];
/*Project forecast error variance*/
do j=0 to (h-1);
int=(F**j)*W*(t(F**j));
fc_cov=fc_cov+int;
end;
y_var=diag(j(h,1,var_y));
target=sum(diag(weight)#((fc_cov-y_var)##2));
return(target);
finish minsqre;
theta={0.1 0.1};
opt=j(1,11,.); opt[1]=0; opt[2]=5;
cons={ .-1 . .,
. 1 . .,
1 1 -1 1,
-1 1 -1 1 };
/*check4=minsqre(theta);*/
/*print check4;*/
call nlpqn(rc,thetares,"minsqre",theta,opt);
quit;
```

1 ACCEPTED SOLUTION

Accepted Solutions

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

So let me see if I undestand your problem. You are MINIMIZING a constrained problem on the triangular region formed by

-1 <= p2 <= 1

p1 + p2 <= 1

-p1 + p2 <= 1

I don't understand what your objective function is computing, but I'm guessing that you have a mistake there. For example, do you really intend for the fc_cov matrix to persist across calls? It looks like you are using that matrix to accumulate some weighted matrix products. If so, you probably want to zero out the fc_cov matrix at the beginning of each call.

If I add the line

fc_cov=j(h,h,0);

at the top of the objective function, the NLP routine computes a minimum near (0.9, -0.2) for the initial conditions you specified.

There might not a unique solution for this problem, since other initial conditions seem to converge to other local minima.

2 REPLIES 2

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

So let me see if I undestand your problem. You are MINIMIZING a constrained problem on the triangular region formed by

-1 <= p2 <= 1

p1 + p2 <= 1

-p1 + p2 <= 1

I don't understand what your objective function is computing, but I'm guessing that you have a mistake there. For example, do you really intend for the fc_cov matrix to persist across calls? It looks like you are using that matrix to accumulate some weighted matrix products. If so, you probably want to zero out the fc_cov matrix at the beginning of each call.

If I add the line

fc_cov=j(h,h,0);

at the top of the objective function, the NLP routine computes a minimum near (0.9, -0.2) for the initial conditions you specified.

There might not a unique solution for this problem, since other initial conditions seem to converge to other local minima.

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi Rick,

That was the problem. I thought that for each functoin call the function would call again the global as it was proviously defined! Once I have reset to value of the storing matrices it all works!

Thanks four your help!

Jorge

⏰

Time is running out to save with the early bird rate. Register by Friday, March 1 for just $695 - $100 off the standard rate.

Check out the agenda and get ready for a jam-packed event featuring workshops, super demos, breakout sessions, roundtables, inspiring keynotes and incredible networking events.** **

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.