turn on suggestions

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

Showing results for

Find a Community

Topic Options

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

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

08-18-2016 11:37 AM

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

Accepted Solutions

Solution

08-19-2016
04:24 AM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

08-18-2016 02:54 PM

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.

All Replies

Solution

08-19-2016
04:24 AM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

08-18-2016 02:54 PM

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
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Rick_SAS

08-19-2016 04:24 AM

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