Le forum du Master ESA économétrie et statistique appliquée - Université d'Orléans

Vous n'êtes pas identifié.

Annonce

Vous êtes sur le forum du master ESA !

Le site du master ESA - description de la formation, notes de cours, contacts... vient de déménager !!!

Venez visiter notre nouveau site : www.master-esa.fr

#1 02-04-2014 17:09:16

floriansolaz
Member
Date d'inscription: 02-09-2013
Messages: 17

Proc IML

Bonjour, j'ai un problème avec la proc IML et plus particulièrement le passage en log d'un vecteur. J'ai donc un vecteur que je souhaite passer en log je fais donc "log(de mon vecteur)" et c'est là que j'ai des difficultés. SAS m'écrit dans le journal le message suivant :

Code:

226  VraisEsti=sum(y#log(lien)+(1-y)#log(1-lien));
227  return (VraisEsti);
228  finish nonparam;
NOTE: Module NONPARAM defined.
229  opt={1,2};
230  parmin={-0.185155 -0.537700  2.303856 -1.225149  -0.801934  0.471167  -0.229831};
231  call nlpnra (rc, betahat,"nonparam", parmin, opt) ;
ERROR: (execution) Invalid argument to function.

 count     : number of occurrences is 7
 operation : LOG at line 226 column 36
 operands  : _TEM1004
_TEM1004   1000 rows      1 col     (numeric)

 statement : ASSIGN at line 226 column 1
 traceback : module NONPARAM at line 226 column 1

232  quit;

Je vois donc que c'est la fonction log qui le gène ! J'ai pensé que j'avais peut être un 0 dans mon vecteur (mes données dans le vecteur varient entre 0 et 1) j'ai donc extrait "1-lien" (c'est le vecteur en question) pour regarder de plus près, je vous le poste aussi (une partie seulement):

Code:

6.530196E-6
0.0004176296
0.0005237853
0.001755902
0.0032220079
0.0041839261
0.0082463723
0.0159905622
0.0278418432
0.1858295811
0.1864972797
0.1928831982
0.2239085458
0.3349912821
0.3352927814
0.3749001623
0.3811441156
0.3985757863
0.4122827424
0.4229605254
0.4488428388
0.4610649996
0.5229704732
0.5337386684
0.538824141
0.545109575
0.5831469799
0.5922769668
0.5985233278
0.6044507971
0.6066454798
0.6075721004
0.6222796528
0.6299657597
0.6380191238
0.6396976936
0.6638212132
0.6712561475
0.6897640527
0.6908736611
0.6930287805
0.6961020215
0.705489644
0.7098519966
0.7108284484

je l'ai trié par ordre croissant et je n'ai donc pas de 0 mais un chiffre très proche 6.530196E-6, je l'ai donc recodé (dans le doute) pour voir si c'était bien ça qui le gène et la SAS accepte enfin de me passer le vecteur en log... Le problème c'est que log(1E-4) (ce que j'ai recodé pour mon test) et log(6.530196E-6) ce n'est pas vraiment la même valeur !!
Des idées sur le problème et sa résolution?

Hors ligne

 

#2 03-04-2014 09:20:56

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Proc IML

bon... je me mets à IML....

pour moi, votre problème ne vient pas d'IML...

faisons ensemble un petit test :

Code:

data toto;
   do i=1 to 25;
     test=ranuni(-584)/1E12;
     verif=log(test);
     output;
   end;
run;

proc sql noprint ;
   select test,verif into :list separated by ' ',:listl separated by ' ' from toto; 
quit;

proc iml;
   c = {&list};
   b = log(c);
   a = {&listl};
   print b a;
quit;

le calcul des log ne posent pas de problème...

en passant, le passage par une macro variable construite avec PROC SQL est très certainement la chose à pire à faire...

Des modalités de variables numériques, lorsqu'elle sont placées dans une macro variable sont converties au moyen d'un FORMAT BEST8.

Les valeurs que j'envoie donc dans le vecteur a ont donc la forme suivante : 3.91E-13 8.07E-13 9.45E-13 4.17E-13 1.9E-13...

Pour la précision, ce n'est pas gagné... c'est ce que vous montre le contenu du vecteur a (qui lui, contient les log calculés dans l'étape DATA) - mais, franchement parlé, je m'attendais à pire... les différences n'apparaissent qu'à la quatrième décimale...

en conclusion : le calcul de log avec IML, même sur des valeurs très petites ne posent pas de problème.

donc, c'est votre programme...

Hors ligne

 

#3 03-04-2014 13:41:25

esa_gc
Moderator
Date d'inscription: 21-02-2007
Messages: 421

Re: Proc IML

Je ne suis pas un spécialiste, mais il me semble que SAS n'aime pas faire plusieurs choses à la fois. Avez-vous essayé de créer tout d'abord les vecteurs en log, puis de passer le résultat en argument, i.e.
loglien0=log(lien);
loglien1=log(1-lien);
VraisEsti=sum(y#loglien0)+(1-y)#loglien1));

Hors ligne

 

#4 03-04-2014 16:02:51

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Proc IML

esa_gc a écrit:

Je ne suis pas un spécialiste, mais il me semble que SAS n'aime pas faire plusieurs choses à la fois

comme les calculatrices quatre opérations qui ne respectent pas les priorités multiplication / addition ?

c'est ça ?

Hors ligne

 

#5 03-04-2014 16:24:08

floriansolaz
Member
Date d'inscription: 02-09-2013
Messages: 17

Re: Proc IML

Alors j'ai essayé de créer mes vecteurs à part et de les injectés dans mon log !! Le problème reste pareil sauf que maintenant c'est au niveau de la création du vecteur qu'il me met le problème du log ^^ (voici mon journal ):

Code:

38                lien[i,1]=z/zbis;
39                droite[i,1]=log(1-lien[i,1]);
40                gauche[i,1]=log(lien[i,1]);
41      end;
42   VraisEsti=sum(y#gauche+(1-y)#droite);
43   return (VraisEsti);
44   finish nonparam;
NOTE: Module NONPARAM defined.
45   opt={1,2};
46   parmin={-0.185155 -0.272149  1.831921  -0.393684  -0.404169   0.244453  -0.144540};
47   call nlpnra (rc, betahat,"nonparam", parmin, opt) ;
ERROR: (execution) Invalid argument to function.

 operation : LOG at line 39 column 29
 operands  : _TEM1002

_TEM1002      1 row       1 col     (numeric)

         0

 statement : ASSIGN at line 39 column 14
 traceback : module NONPARAM at line 39 column 14

ERROR: NEWRAP Optimization cannot be completed.
ERROR: The function value of the objective function cannot be computed at the starting point.
48   quit;

Bon du cou c'est sûrement mon programme qui n'est pas bon, je le sors donc de la création de fonction et je test avec des paramètres (les mêmes que ceux utilisés dans ma call nlpnra) et la le log ne lui pose pas de pb....

Je me dis que c'est peut être au sein de la routine d'optimisation Newton Raphson que les arrondis sont différents?? Pour simplifier les calculs peut être?

Hors ligne

 

#6 03-04-2014 18:44:09

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Proc IML

Je me dis que c'est peut être au sein de la routine d'optimisation Newton Raphson

euh... c'est la faute de Newton Raphson ?
les "arrondis" de Newton Raphson ?

allons bon...

quand le sage montre la lune, le fou regarde le doigt ;-)

je demeure convaincu que le problème n'est pas dans le log (le doigt) mais dans votre programme (la lune)

perso, je n'y connais rien à votre routine mais quand je regarde l'aide, j'ai du mal à voir les relations entre vos paramètres et ceux présentés dans l'aide...

Hors ligne

 

#7 03-04-2014 18:48:12

floriansolaz
Member
Date d'inscription: 02-09-2013
Messages: 17

Re: Proc IML

"Parmin" c'est mes valeur initiale pour débuter la maximisation, et "opt" c'est les options de sorties.
Je vais reprendre une n ième fois le programme alors et si je trouve le problème je le posterais !

Hors ligne

 

#8 03-04-2014 19:24:10

Gwendaline_p
Member
Date d'inscription: 06-06-2012
Messages: 46

Re: Proc IML

1) parmin intervient à un quelconque moment dans ton algorithme d'optimisation? (car on ne voit pas le début de ton programme)

2) dans opt il n'y a pas de virgules mais des espaces, peut être que ça fonctionne avec des virgules, je ne suis pas sûre mais avec des espaces j'en suis sûre :p

Hors ligne

 

#9 03-04-2014 20:11:08

floriansolaz
Member
Date d'inscription: 02-09-2013
Messages: 17

Re: Proc IML

Parmin c'est mes Beta initiaux pour calculer mon index (XiB) Ils me servent uniquement au début de mon programme (que je peux poster si besoin) !!
Pour le vecteur des options j'ai suivi la syntaxe apprise en cours ^^

Mais il semblerait que je ne soit pas le seul a avoir ce genre de problème, j'ai trouvé ceci sur les forums de SAS
https://communities.sas.com/message/108444
Je n'ai pas le temps ce soir de regarder en détail la réponse de Rick Wicklin (et sa magnifique chevelure :p) mais je le ferais dès demain !

Hors ligne

 

#10 03-04-2014 20:15:49

floriansolaz
Member
Date d'inscription: 02-09-2013
Messages: 17

Re: Proc IML

bon lui son chiffre est négatif donc normal que son log ne fonctionne pas --' au final ça ne m'avance pas plus ^^

Hors ligne

 

#11 03-04-2014 21:12:47

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Proc IML

floriansolaz a écrit:

Rick Wicklin (et sa magnifique chevelure :p)

et nous avons là un homme de goût !

j'ai, moi aussi toujours été impressionné par la coiffure de Rick... en 2011, j'ai discuté avec lui (de je ne sais plus quoi mais c'était en lien avec GTL) et pour lui montrer les trucs rigolos qu'on pouvait faire avec GTL, je lui avait envoyé ces images...

http://www.sas-sr.com/rick/SGRender1.png

http://www.sas-sr.com/rick/SGRender3.png

http://www.sas-sr.com/rick/SGRender9.png

bien entendu, ces images sont produites avec SAS...
(faudrait que je retrouve le programme un jour....)

Hors ligne

 

#12 04-04-2014 18:29:58

floriansolaz
Member
Date d'inscription: 02-09-2013
Messages: 17

Re: Proc IML

Donc Rick existe vraiment!! Je pensais à un avatar traffiqué pour avoir des cheveux aussi brillant roll

Je reviens à la charge avec mon problème !

Code:

    
 lien       1-lien
0.9970211 0.0029789 
0.7590189 0.2409811 
0.3704836 0.6295164 
0.3580046 0.6419954 
0.3414203 0.6585797 
0.3408354 0.6591646

Mon vecteur lien est trié par ordre décroissant et le 1-lien par ordre croissant. Ce n'est pas 0 ! Le log de 1-lien ne fonctionne pas quand je lance ma routine de maximisation alors que mon programme fonctionne en dehors de celle-ci hmm
J'ai le même problème avec mon programme ou avec celui de Mr alaa-eddine qui a rédiger une macro (bien plus complète que la mienne) sur le sujet qui me concerne http://master-esa.com/viewtopic.php?id=54 ça me redonne espoir en mon programme qui ne doit pas être si mauvais !

Hors ligne

 

#13 05-04-2014 15:15:03

barbillon
New member
Date d'inscription: 03-09-2012
Messages: 3

Re: Proc IML

pour voir le problème il faudrait que tu nous donne l'intégralité du code

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

[ Generated in 0.029 seconds, 8 queries executed ]