What causes "Jacobian matrix" to be singular in SAS?

4.3k views Asked by At

I have a simple SAS (version 9.2) program as follows,

proc model;
cdf('normal',log(V/100)+1)=0.5;
bounds V>0;
solve V/solveprint;
run;

It throws exception that says jacobian matrix to be singular,

The Newton method Jacobian matrix of partial derivatives of the
equations with respect to the variables to be solved is singular.

What is the possible cause of this error?

Update: I have simplified the problem a bit. When modified to "cdf('normal', X)=0.5", it works without exception.

Update2: bounds is updated to V>0; but exception still there

2

There are 2 answers

2
cmjohns On BEST ANSWER

What input data set are you passing to proc model? For example, this code works consistently:

data a;
 v=100;
run;

proc model data=a;
  cdf('normal',log(V/100)+1) = 0.5;
  bounds V>0;
  solve V / solveprint;
run;
quit;

And gives a solution of V=36.78794

But changing the input data somewhat (see below) will consistently give a singular Jacobian matrix error.

data a;
 v=0.00001;
run;

proc model data=a;
  cdf('normal',log(V/100)+1) = 0.5;
  bounds V>0;
  solve V / solveprint;
run;
quit;
4
itzy On

You are asking SAS to solve a function that has no solution. You are asking for the value of V>1000 that makes this equation true. But there are no such values because log(1000/100+1) is about 3.3, and the CDF of a Normal random variable with mean 0 and standard deviation 1 evaluated at 3.3 is 0.9995. Any larger value of V will just move the function closer to 1, not toward 0.5, so there is no answer to your question.

By telling you that the matrix of partial derivatives is singular, SAS is just using fancy math speak for "your function doesn't have a solution". (Really what it's saying is, "I've turned your question into an equivalent maximization problem, and that problem doesn't have a maximum, so I can't help you.")