BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
jnv
Calcite | Level 5 jnv
Calcite | Level 5

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
Rick_SAS
SAS Super FREQ

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.

 

View solution in original post

2 REPLIES 2
Rick_SAS
SAS Super FREQ

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.

 

jnv
Calcite | Level 5 jnv
Calcite | Level 5

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

sas-innovate-2024.png

 

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. 

 

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
  • 2 replies
  • 854 views
  • 0 likes
  • 2 in conversation