IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS IML Discussion :

Algorithme newton raphson


Sujet :

SAS IML

  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Par défaut Algorithme newton raphson
    Bonjour
    je veux appliquer l'algorithme de newton raphson sur sas afin de minimiser une certaine somme sur i qui s'ecrit sous cette forme:
    sum(a(i)*(1/(1+exp(b(i)+x)) - c(i)))
    dans cette algorithme je dois chercher le x qui minimise cette somme donc je l'ai fait juste pour les premieres valeurs des veteurs a b c et ça a bien marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    data newton_raphson;
    x=0.1/*initialisation de x*/
    a=0.4;
    b=3.2;
    c=0.038;
    F=0;
    F_der=0;
    do iteration=1 to 100;
    F=a*(1/1+exp(b+x))-c;/*la fonction a minimiser*/
    F_der=-a*exp((b+x)/(1+exp(b+x))*(1+exp(b+x));/*la derivee de la fonction a minimiser*/
    previous_x=x;
    x=x-F/F_der;
    output;
    end;
    donc la ça marche pour le premier element des vecteurs:a b c j'obtient un certain x; mais le probleme c'est que je dois trouver un x qui minimise la somme : sum(a(i)*(1/(1+exp(b(i)+x)) - c(i)))
    donc je dois appliquer ca sur tout les elements des vecteurs a b c
    donc les difficultés consiste en :
    1)comment je pourrai creer le vecteur x de la meme longueur que les vecteurs a b c au sein ds l'etape data et contenant juste des 0.1
    2)comment je pourrai faire appel aux vecteurs: a b c dans l'etape data sachant qu'il existent deja dans une table que j'ai creé dans une proc sql precedente.


    Merci pour vos reponse

  2. #2
    Membre Expert
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Par défaut
    A mon avis, si tu veux coder l'algorithme the Newton raphston, il te faudra passer par le langauge matriciel, ie , la proc iml.

    Mais sache que newton raphston est applique au moins dans certaines procedures statistique de SAS. Je n'ai plus les noms en tete avec assurance a 100%, mais ca doit pouvoir se retrouver facilement sur la toile.

  3. #3
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Par défaut
    mais est ce que je peux intriduire une etape data dans une proc iml??

  4. #4
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    Voici comment créer un vecteur

  5. #5
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Par défaut
    je peux pas faire une etape data au sein d'une autre c'est pour ça que je voudrais savoir comment faire appel ds une etape data d'un veteur qu'on a deja creé dans une proc sql ou une autre etape data

  6. #6
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    St tu as déja stocker les éléments de ton vecteurs dans une macro, tu peux proceder ainsi:

    Si ça ne répond pas à ton problème, il nous faudrait plus de détails (ton code sql,...)

  7. #7
    Membre éclairé
    Femme Profil pro
    Analyste en Intelligence d'Affaires (BI)
    Inscrit en
    Avril 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste en Intelligence d'Affaires (BI)
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 245
    Par défaut
    Citation Envoyé par 22011988 Voir le message
    mais est ce que je peux intriduire une etape data dans une proc iml??
    Dans la proc IML tu dois pouvoir alimenter tes vecteurs par des données stockées dans des tables SAS.

    Franchement la proc IML devrait résoudre ton problème.

  8. #8
    Membre Expert
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Par défaut
    OK. Reste a savoir si 22011988 a la licence de la proc iml...

    mais encore une fois, pourquoi faire si complique?

    J'ai regarde si la proc mixed par exemple utilise newton raphson. Bingo!

    http://support.sas.com/documentation...ed_sect028.htm

    PROC MIXED uses a ridge-stabilized Newton-Raphson algorithm to optimize either a full (ML) or residual (REML) likelihood function. The Newton-Raphson algorithm is preferred to the EM algorithm (Lindstrom and Bates 1988).

    Si tes objectifs de modelisation (quels sont-ils?) collent avec la proc mixed, il s'agit juste de coder une procedure classique et le tour est joue. C'est pas plus complique que ca, pas la peine de voir midi a quatorze...

  9. #9
    Membre éclairé
    Femme Profil pro
    Analyste en Intelligence d'Affaires (BI)
    Inscrit en
    Avril 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste en Intelligence d'Affaires (BI)
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 245
    Par défaut
    Juste pour le FUN la création de tes variables en IML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Data source_newton_raphson;
    input a b c ;
    cards;
     
    0.4  3.2 0.038 
    0.6  3   1.02 
    1    5.3 0.25 
    0.3  2.1 0.10 
     
    ;
    run;
     
     
     
    proc iml;
     
    /*Appele et utilisation de la table SAS avec les données sources*/
       show datasets;
       reset deflib=work;
       use source_newton_raphson var {a,b,c};
       list all;
     
    /*Lecture et création des vecteurs*/
       read all var {a} into A; print A; /*juste pour voir sinon pas obliger le print*/
       read all var {b} into B; print B; /*juste pour voir sinon pas obliger le print*/
       read all var {c} into C; print C; /*juste pour voir sinon pas obliger le print*/
     
    /*Création matrice X*/
       N = nrow(A); 
       X = J(N,1,0.1);
     
       /* Création Matrix Y : pas nécessaire pour le modèle */
       Y = X || A|| B|| C;
       print Y;
     
     
    quit;
    Après reste à appliquer la formuler avec les opérateurs de IML.

  10. #10
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Par défaut
    Bonsoir,

    Merci pour vos réponses
    là je suis passé sur sas/iml pour essayer juste de bien ecrire la fonction a minimiser pour lui appliquer l'algo:
    je veux l'ecrire en faite juste pour une seule annee de ma table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    PROC IML;
    	reset log print;
    	use donnee_beta_test ;
    	read all var {annee} into A;
    	read all var {S} into Y;
    	read all var {P} into Z where(A="2006");
    	read all var {nb} into T where(A="2006");
    	val=0.5;
    	X=val*J(108,1);
     
    sigma3= j(108,1,0);
    tmp1= sigma3;
    do i= 1 to 108;
    tmp1[i]= 1;
    sigma3[i]=val*T[i]#1/(1+exp(Y[i]+X[i]))-Z[i]; 
    end;
    quit;
    lorsque je met pas le where ça marche mais sinon ça marche pas
    est-il mal placé??

  11. #11
    Membre éclairé
    Femme Profil pro
    Analyste en Intelligence d'Affaires (BI)
    Inscrit en
    Avril 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste en Intelligence d'Affaires (BI)
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 245
    Par défaut
    Salut,

    le A que tu mentionnes dans le where est un vecteur et plus une variable.
    Tu as essayé de remplacer A par année?

    Voir dans la doc SAS IML.

  12. #12
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Par défaut
    J'ai essaye:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    PROC IML;
    	use donnee_beta_test ;
    	read all var {annee} into A;
    	read all var {S} into Y;
    	read all var {P}  into Z ;
    	read all var {n}  into T ;
    	val=0.5;
    	X=val*J(108,1);
    sigma3= j(108,1,0);
    tmp1= sigma3;
    where  A[i]="2006";
    do i= 1 to 108; 
    tmp1[i]= 1;
    sigma3[i]=val*T[i]#1/(1+exp(Y[i]+X[i]))-Z[i]; 
    end;
    quit;
    mais ça n'a pas marche!!!

  13. #13
    Membre éclairé
    Femme Profil pro
    Analyste en Intelligence d'Affaires (BI)
    Inscrit en
    Avril 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste en Intelligence d'Affaires (BI)
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 245
    Par défaut
    Le where reste à la même position d'origine mais tu remplaces uniquement A par annee.

    Voir exemple ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    DATA source_newton_raphson;
    input a b c annee;
    cards;
     
    0.4  3.2 0.038 2006
    0.6  3   1.02  2007
    1    5.3 0.25  2006
    0.3  2.1 0.10  2003
     
    ;
    run;
     
     
     
    proc iml;
     
    /*Appele et utilisation de la table SAS avec les données sources*/
       SHOW datasets;
       reset deflib=work;
       USE source_newton_raphson var {a,b,c,annee};
       list ALL;
     
    /*Lecture et création des vecteurs*/
       READ ALL var {a} INTO A ; print A; /*juste pour voir sinon pas obliger le print*/
       READ ALL var {b} INTO B where(annee=2006); print B; /*juste pour voir sinon pas obliger le print*/
       READ ALL var {c} INTO C where(annee=2006); print C; /*juste pour voir sinon pas obliger le print*/
     
    quit;
    Résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
       OBS         a         b         c     annee                                                                                      
    ------ --------- --------- --------- ---------                                                                                      
         1    0.4000    3.2000    0.0380      2006                                                                                      
         2    0.6000    3.0000    1.0200      2007                                                                                      
         3    1.0000    5.3000    0.2500      2006                                                                                      
         4    0.3000    2.1000    0.1000      2003                                                              
            a
    0.4
    0.6
    1
    0.3
     
    b
    3.2
    5.3
     
    c
    0.038
    0.25
    Merci

  14. #14
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Par défaut
    Merci ça ne rale plus

  15. #15
    Membre éclairé
    Femme Profil pro
    Analyste en Intelligence d'Affaires (BI)
    Inscrit en
    Avril 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste en Intelligence d'Affaires (BI)
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 245
    Par défaut
    Avec plaisir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Algorithme de Newton-Raphson
    Par Invité dans le forum R
    Réponses: 5
    Dernier message: 11/02/2014, 22h09
  2. Algorithme de Newton-Raphson
    Par Invité dans le forum R
    Réponses: 0
    Dernier message: 05/02/2014, 19h41
  3. Algorithme Newton Raphson
    Par Chefcou dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 17/01/2013, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo