[程式] SAS NLP
------------------------------------------------------------------------
[軟體程式類別]:
sas
[程式問題]:
nlp的收斂問題
[軟體熟悉度]:
新手(不到1個月)
[問題敘述]:
以下log檔和output
LOG:
-----------------------------------------------------------------------------------
NOTE: Your code contains 3 program statements.
NOTE: Gradient is computed using analytic formulas.
NOTE: Hessian is computed using analytic formulas.
NOTE: Initial value of parameter ALPHA is set randomly to 0.4942477809.
NOTE: Initial value of parameter DELTA is set randomly to 0.0148708765.
NOTE: Initial value of parameter ETA is set randomly to 0.0086154253.
NOTE: Initial value of parameter MU is set randomly to 0.2111245581.
ERROR: NRRIDG Optimization cannot be completed.
ERROR: NRRIDG needs more than 50 iterations or 125 function calls.
NOTE: Some of the active constraints have significant Lagrange Multipliers.
NOTE: There were 30 observations read from the data set WORK.EUR61.
NOTE: The data set WORK.PIN61 has 30 observations and 3 variables.
NOTE: PROCEDURE NLP used (Total process time):
real time 0.04 seconds
cpu time 0.03 seconds
-----------------------------------------------------------------------------------
OUTPUT:
----------------------------------------------------------------------------------
ptimization Results
Iterations 50 Function Calls
93
Hessian Calls 51 Active Constraints (+)
2
Objective Function 5400.2011171 Max Abs Gradient Element
3.7148684E12
Ridge 0 Actual Over Pred Change
0.0019521003
ERROR: NRRIDG needs more than 50 iterations or 125 function calls.
ERROR: NRRIDG Optimization cannot be completed.
請問這樣子是無法收斂嗎?
第二種log和output檔
log
---------------------------------------------------------------------------------------------
NOTE: Your code contains 3 program statements.
NOTE: Gradient is computed using analytic formulas.
NOTE: Hessian is computed using analytic formulas.
NOTE: Initial value of parameter ALPHA is set randomly to 0.4942477809.
NOTE: Initial value of parameter DELTA is set randomly to 0.0148708765.
NOTE: Initial value of parameter ETA is set randomly to 0.0086154253.
NOTE: Initial value of parameter MU is set randomly to 0.2111245581.
WARNING: Your program statements cannot be executed completely.
WARNING: Your program statements cannot be executed completely.
WARNING: Your program statements cannot be executed completely.
WARNING: Your program statements cannot be executed completely.
WARNING: Your program statements cannot be executed completely.
WARNING: Your program statements cannot be executed completely.
WARNING: Your program statements cannot be executed completely.
NOTE: FCONV convergence criterion satisfied.
NOTE: At least one element of the (projected) gradient is greater than 1e-3.
NOTE: Some of the active constraints have significant Lagrange Multipliers.
WARNING: In a total of 17 calls an error occurred during execution of the
program statements. NLP
attempted to recover by using a shorter step size.
NOTE: There were 30 observations read from the data set WORK.EUR70.
NOTE: The data set WORK.PIN70 has 30 observations and 3 variables.
NOTE: PROCEDURE NLP used (Total process time):
real time 0.05 seconds
cpu time 0.04 seconds
------------------------------------------------------------------------------------------
output
------------------------------------------------------------------------------------------
Optimization Results
Iterations 11 Function Calls
37
Hessian Calls 12 Active Constraints (+)
1
Objective Function 7127.8723383 Max Abs Gradient Element
5.7567645E99
Ridge 0 Actual Over Pred Change
1
FCONV convergence criterion satisfied.
NOTE: At least one element of the (projected) gradient is greater than 1e-3.
log檔中出現了一堆警告,但最後還是顯示FCONV convergence criterion satisfied
這樣子正常嗎?是不是只要出現了FCONV convergence criterion satisfied,就可以了嗎?
[程式範例]:
data movall;
infile 'c:\eurmov.txt';
input date mmddyy8.+1 time time8. +1 bid ask bidv askv dt price ret of
num;run;
proc nlp data=movall noprint out=pin (keep =num ALPHA ETA MU);
by num;
max loglik;
decvar ALPHA, DELTA, ETA, MU;
M = min(bidv,askv) + max(bidv,askv) / 2.0 ;
x = eta / (mu + eta) ;
bounds 0.0 < eta mu, 0.0 <= alpha delta <= 1.0 ;
loglik = -2.0 * eta + M * log(x) + (bidv + askv) * log(mu + eta) +
log( alpha * (1.0 - delta) * exp(-1.0 * mu) * (x ** (askv - M )) +
alpha * delta * exp(-1.0 * mu) * (x ** (bidv - M)) +
(1.0 - alpha) * (x ** (bidv + askv - M)) ) ;
proc sort data = pin nodupkey;
by num;
data pin; set pin;
PIN = alpha * mu / (alpha * mu + 2.0 * eta) ;
label pin = 'Probability of informed trading' ;
format pin 5.3 ;
run;
proc print data = pin;
run;
另外如果沒有收斂out=pin資料表中還會顯示嗎? 若會顯示,沒有收斂的數字即沒有意義
有什麼辦法使沒有收斂的數值自動以"."表示嗎?
-----------------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 223.140.145.76
→
02/29 09:53, , 1F
02/29 09:53, 1F
→
03/02 23:30, , 2F
03/02 23:30, 2F
→
03/02 23:32, , 3F
03/02 23:32, 3F
→
03/02 23:33, , 4F
03/02 23:33, 4F