Les données sont tirées du dataset interne `Sashelp.Iris`, spécifiquement la variable `SepalWidth`. Ce jeu de données est disponible par défaut dans l'environnement SAS.
1 Bloc de code
Macro Variables
Explication : Définit des variables macro pour le nom du jeu de données source (`DSName`) et le nom de la variable d'intérêt (`VarName`). Cela permet une réutilisation facile et une modification centralisée si le jeu de données ou la variable à analyser change.
Explication : Ce bloc `PROC IML` est le cœur de l'analyse. Il définit un module `LogLik` qui calcule la fonction de log-vraisemblance pour une distribution normale, prenant en entrée les paramètres (moyenne `mu` et écart-type `sigma`) et la matrice de données `x`. Les données sont lues dynamiquement depuis `Sashelp.Iris` via les variables macro. Le script initialise les valeurs de départ pour les paramètres (`p`), définit les contraintes (`con`) et les options d'optimisation (`opt`). La fonction `nlpnra` est ensuite appelée pour effectuer l'optimisation non linéaire et trouver les estimations du maximum de vraisemblance (`MLE`), qui sont ensuite affichées.
Copié !
proc iml;
/* write the log-likelihood function for Normal dist */
start LogLik(param) global (x);
mu = param[1];
sigma2 = param[2]##2;
n = countn(x); /* count nonmissing values */
f = -n/2*log(sigma2) - 1/2/sigma2*ssq(x-mu);
return ( f );
finish;
/* read data */
use &DSName;
read all var {&VarName} into x;
close &DSName;
/* Specify initial guess for parameters that is close to
p = mean(x) || std(x); */
p = {35 5.5};
/* mu-sigma constraint matrix */
con = { . 0, /* lower bounds: -infty < mu; 0 < sigma */
. .}; /* upper bounds: mu < infty; sigma < infty */
opt = {1, /* find maximum of function */
0}; /* print iteration history? 0=no; 1=yes */
call nlpnra(rc, MLE, "LogLik", p, opt, con);
print MLE[c={"mu" "sigma"}]; /* maximum likelihood estimates */
1
PROC IML;
2
/* write the log-likelihood function for Normal dist */
3
start LogLik(param) global (x);
4
mu = param[1];
5
sigma2 = param[2]##2;
6
n = countn(x); /* count nonmissing values */
7
f = -n/2*log(sigma2) - 1/2/sigma2*ssq(x-mu);
8
return ( f );
9
finish;
10
11
/* read data */
12
use &DSName;
13
read all var {&VarName} into x;
14
close &DSName;
15
/* Specify initial guess for parameters that is close to
PRINT MLE[c={"mu""sigma"}]; /* maximum likelihood estimates */
3 Bloc de code
PROC SGPLOT (via SUBMIT/ENDSUBMIT)
Explication : Ce bloc démontre comment intégrer d'autres procédures SAS (ici, `PROC SGPLOT`) dans un programme IML en utilisant les instructions `SUBMIT` et `ENDSUBMIT`. Il utilise les estimations `mu` et `sigma` obtenues précédemment pour superposer une courbe de densité normale sur un histogramme de la variable `SepalWidth`, permettant une visualisation de l'ajustement du modèle. L'instruction `quit;` met fin à la procédure IML.
Copié !
/* Optional: plot histogram with density overlay.
The SUBMIT and ENDSUBMIT statements enable you to call
SAS procedures from within a SAS/IML program. You can
pass parameters to the procedure. See
R. Wicklin, "Passing values from PROC IML into SAS procedures",
The DO Loop blog, published Jun 3, 2013.
http://blogs.sas.com/content/iml/2013/06/03/passing-values-into-procedures/
*/
submit mu=(MLE[1]) sigma=(MLE[2]);
proc sgplot data=&DSName;
histogram &VarName;
density &VarName / type=normal(mu=&mu sigma=&sigma);
run;
endsubmit;
quit;
1
/* Optional: plot histogram with density overlay.
2
The SUBMIT and ENDSUBMIT statements enable you to call
3
SAS procedures from within a SAS/IML program. You can
4
pass parameters to the procedure. See
5
R. Wicklin, "Passing values from PROC IML into SAS procedures",
density &VarName / type=normal(mu=&mu sigma=&sigma);
13
RUN;
14
endsubmit;
15
16
QUIT;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Example taken from R. Wicklin, 'Maximum likelihood estimation in SAS/IML', The DO Loop blog, published Oct 12, 2011. URL: http://blogs.sas.com/content/iml/2011/10/12/maximum-likelihood-estimation-in-sasiml/
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.