Что заставляет матрицу Якоби быть сингулярной в SAS?

У меня есть простая программа SAS (версия 9.2) следующим образом:

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

Он выдает исключение, которое говорит, что матрица Якобиана является единственной,

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

Какова возможная причина этой ошибки?

Обновление: я немного упростил задачу. При изменении на "cdf('normal', X)=0.5" работает без исключения.

Update2: границы обновлены до V>0; но исключение все же есть


person Richard    schedule 05.11.2011    source источник
comment
Это не ошибка. Это говорит о том, что ваша матрица сингулярна, то есть необратима. Если вы пытаетесь решить систему уравнений, ваша матрица должна быть обратимой.   -  person NickLH    schedule 05.11.2011
comment
правильно ли сформулирована часть cdf('normal',(log(V/90.986)+(0.0477+0.2*0.2*0.5))/0.2)? поскольку вы не указываете mean/stdev, они по умолчанию равны 1 и 0, поэтому значение cdf() равно 1. Но SAS, возможно, трудно, потому что он все еще имеет небольшую чувствительность к V и хочет уменьшить V, но вы ограничил его значением >1000. bound добавляет дополнительное условие для удовлетворения, что делает проблему неразрешимой, я думаю   -  person yosukesabai    schedule 05.11.2011
comment
@NickLH Я знаю, что матрица очень чувствительна к данным, но как сделать матрицу обратимой?   -  person Richard    schedule 06.11.2011
comment
@yosukesabai, когда без ограничений, таких как V›1000, исключение сохраняется. И я думаю, что среднее значение по умолчанию должно быть 0, а стандартное отклонение должно быть 1... исправьте, если я ошибаюсь   -  person Richard    schedule 06.11.2011
comment
Если ваша матрица необратима, вы мало что можете с этим поделать. Сингулярный якобиан является матричным эквивалентом деления на ноль.   -  person David Heffernan    schedule 06.11.2011
comment
хм, извините, я потерял учетную запись sas, поэтому я даже не могу ее проверить. может я что-то упускаю.   -  person yosukesabai    schedule 06.11.2011


Ответы (2)


Какой набор входных данных вы передаете в модель proc? Например, этот код работает стабильно:

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;

И дает решение V=36.78794

Но некоторое изменение входных данных (см. ниже) будет постоянно давать сингулярную ошибку матрицы Якоби.

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;
person cmjohns    schedule 07.11.2011
comment
@Richard - Извините, это была ошибка копирования / вставки - исправлено сейчас. Просто нужно было изменить оператор V = на первом шаге данных. - person cmjohns; 08.11.2011
comment
@cmjohns - Интересно. Вы знаете, почему это происходит? Я не слишком знаком с proc model. - person itzy; 09.11.2011

Вы просите SAS решить функцию, которая не имеет решения. Вы запрашиваете значение V>1000, которое делает это уравнение верным. Но таких значений нет, потому что log(1000/100+1) составляет около 3,3, а CDF нормальной случайной величины со средним значением 0 и стандартным отклонением 1, оцененным как 3,3, составляет 0,9995. Любое большее значение V просто приблизит функцию к 1, а не к 0,5, поэтому ответа на ваш вопрос нет.

Сообщая вам, что матрица частных производных является единственной, SAS просто использует причудливую математическую формулировку «ваша функция не имеет решения». (На самом деле он говорит: «Я превратил ваш вопрос в эквивалентную задачу на максимизацию, а в этой задаче нет максимума, поэтому я не могу вам помочь».)

person itzy    schedule 05.11.2011
comment
Кстати, вы можете попробовать решить CDF('Normal',log(V/100+1)=0.9999 или что-то действительно близкое к 1, и это должно дать вам решение. - person itzy; 06.11.2011
comment
При изменении ограничений на V›0 все еще остается исключение. - person Richard; 06.11.2011
comment
Хм, ладно, это не то, чего я ожидал. У меня сейчас нет доступа к SAS, поэтому я не могу его протестировать. Что будет, если убрать связанное? - person itzy; 06.11.2011
comment
Если отнять связанное, то то же самое; еще то же исключение. - person Richard; 06.11.2011