<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Blogs - Haache</title>
		<link>https://www.developpez.net/forums/blogs/760090-haache/</link>
		<description>Developpez.com, le Club des Développeurs et IT Pro</description>
		<language>fr</language>
		<lastBuildDate>Tue, 14 Apr 2026 17:25:50 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.jpg</url>
			<title>Forum du club des développeurs et IT Pro - Blogs - Haache</title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/</link>
		</image>
		<item>
			<title><![CDATA[MACRO MORANTEST : Test d'autocorrélation spatiale de Moran et de Geary sous SAS]]></title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/b1549/macro-morantest-test-d-autocorrelation-spatiale-moran-geary-sous-sas/</link>
			<pubDate>Thu, 28 Jul 2016 18:02:24 GMT</pubDate>
			<description>Bonjour chers programmeurs....</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Bonjour chers programmeurs.<br />
Je vous propose dans ce blog une macro que je nomme <i>morantest</i>. Cette macro effectue les deux tests d'autocorrélation spatiale les plus connus, notamment le test de Moran (1950) et celui de Geary (1954). Une théorie sur ces tests est disponible <a href="https://www.google.sn/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=2&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwiBl_X3w5bOAhXItRoKHZjfA8oQFggiMAE&amp;url=http%3A%2F%2Foasis.irstea.fr%2Fwp-content%2Fuploads%2F2013%2F10%2F10-Autocorr%25C3%25A9lation.pdf&amp;usg=AFQjCNEWBFJg4VPoDqKyF7_fwdxgJvJ_ag&amp;sig2=j_krUIysIeZVsExiTTWy_g" target="_blank">ici</a> ou <a href="http://www.utdallas.edu/~briggs/henan/10SAglobal.ppt" target="_blank">ici</a>.<br />
La macro prend trois paramètres : Data où on renseigne la table des données, Var où on indique le variable dont l'autocorrélation spatiale sera testée et Poids où on indique la matrice de poids (une matrice carrée qui mesure la proximité entre les points, ça peut être une matrice de contiguïté ou de distance). Voici le code de la macro :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br /></div></td><td valign="top"><pre style="margin: 0">
%macro MoranTest(Data= ,Var= , Poids=)/STORE Des=&quot;Tests pour détecter une autocorrélation spatiale&quot;;options nonotes;
ods exclude all;
proc iml;
Title &quot;Tests d'autocorrélation spatiale de MORAN et de GEARY&quot;;
/******************************************* Lecture des données dans une matrice******************************************************************/
use &amp;Data; read all var {&amp;Var} into Y;
/*****************************************Matrice de poids dans le même ordre que les Id**********************************************************/
use &amp;Poids; read all into W;
/*Standardiser les lignes*/
W_row=W[,+];
do j=1 to nrow(W_row);
if W_row[j,1]=0 then W_row[j,1]=1;
end;
W=W/W_row;
 
 
N=nrow(Y);
Wcol=W[+,];
Wrow=W[,+];
K=(sum((Y-mean(Y))##4)/N)/((sum((Y-mean(Y))##2))/N)**2;
/******************************************* Calcul de la statistique*******************************************************************/
MORAN=(t(Y-mean(Y)) * W * (Y-mean(Y)))/(t((Y-mean(Y))) * (Y-mean(Y))); 
EMORAN=-1/(N-1);   /*Espérance de moran*/
S0=sum(W);
*S1=0.5*sum((W+t(W))##2);
S1=sum(W#W+W#t(W));
S2=sum((Wcol+t(Wrow))##2);
/*VMORAN=(N**2*S1-N*S2+3*S0**2)/((N-1)*(N+1)*S0**2)-(1/(N-1))**2; /*Variance de moran*/
VMORAN=(((N*((N**2-3*N+3)*S1-3*S2+3*S0**2))-(K*((N**2-3)*S1-2*N*S2+6*S0**2))))/((N-1)*(N-2)*(N-3)*S0**2)-EMORAN**2;
SMORAN=(VMORAN)**0.5;
RESULTAT=MORAN||EMORAN||VMORAN;
NAME={&quot;Statistique&quot;,&quot;Espérance&quot;,&quot;Variance&quot;};
OUT= nrow(Y);
OUTCN={&quot;Nombre d'observations&quot;};
OUT1={&amp;VAR};
options notes;
ods select all;
print OUT1[label=&quot; &quot; colname={&quot;Variable&quot;}] OUT[label=&quot; &quot; colname=OUTCN] ;
print RESULTAT[label=&quot;Indice de Moran&quot; colname=NAME  rowname=&quot; &quot;];
options nonotes;
ods exclude all;
MORANST=(MORAN-EMORAN)/SMORAN;
PROB1=CDF(&quot;normal&quot;,MORANST,0,1);   /*unilatérale à gauche*/
PROB2=1-CDF(&quot;normal&quot;,MORANST,0,1);   /*unilatérale à droite*/
PROB3=2-2*CDF(&quot;normal&quot;,abs(MORANST),0,1);   /*bilatérale*/
RESULTAT=MORANST || PROB1 || PROB2 ||PROB3;
NAME={&quot;Statistique standardisée&quot;, &quot;Prob unilatérale à gauche H1: I&lt;0&quot;, &quot;Prob unilatérale à droite H1: I&gt;0&quot;, &quot;Prob bilatéral: Alternative générale&quot;};
options notes;
ods select all;
print RESULTAT[label=&quot;Test de Moran&quot; colname=NAME rowname=&quot; &quot; format=10.5];
options nonotes;
ods exclude all;
/********************************************************************GEARY INDEX*****************************************************/
Y2=Y##2;
Wcol=W[+,];
GEARY=(N-1)*(sum(Y2)-2*t(Y)*W*Y+Wcol*Y2)/(2*S0*sum((Y-mean(Y))##2));
EGEARY=1;
/*VGEARY=( (2*S1+S2) * (N-1) -4*S2 )/( 2*(N+1)*S0 );*/
/*VGEARY=S0/(2*S1+S2);*/
VGEARY=(((N-1)*S1*(N**2-3*N+3-(N-1)*K))-(0.25*((N-1)*S2*(N**2+3*N-6-(N**2-N+2)*K)))+(S0**2*(N**2-3-(N-1)**2*K)))/(N*(N-2)*(N-3)*S0**2);
SGEARY=VGEARY**0.5;
RESULTAT=GEARY||EGEARY||VGEARY;
NAME={&quot;Statistique&quot;,&quot;Espérance&quot;,&quot;Variance&quot;};
options notes;
ods select all;
print RESULTAT[label=&quot;Indice de Geary&quot; colname=NAME  rowname=&quot;&quot;];
options nonotes;
ods exclude all;
GEARYST=(GEARY-EGEARY)/SGEARY;
PROB1=CDF(&quot;normal&quot;,GEARYST,0,1);   /*unilatérale à gauche*/
PROB2=1-CDF(&quot;normal&quot;,GEARYST,0,1);   /*unilatérale à droite*/
PROB3=2-2*CDF(&quot;normal&quot;,abs(GEARYST),0,1);   /*bilatérale*/
RESULTAT=GEARYST || PROB1 || PROB2 ||PROB3;
NAME={&quot;Statistique standardisée&quot;, &quot;Prob unilatérale à gauche H1: G&lt;1&quot;, &quot;Prob unilatérale à droite H1: G&gt;1&quot;, &quot;Prob bilatéral: Alternative générale&quot;};
options notes;
ods select all;
print RESULTAT[label=&quot;Test de Geary&quot; colname=NAME rowname=&quot; &quot; format=10.5];
quit;
title &quot; &quot;;
%put ***************************************************************************************;
%put *              MERCI D AVOIR UTILISE LES MACROS &quot;REGRESSIONS SPATIALES&quot;               *;                                                      
%put *                          DE Elysée Aristide HOUNDETOUNGAN                           *;  
%put *                          Courriel :  ariel92and@gmail.com                           *; 
%put *                  N hésitez pas à envoyer un mail en cas de besoin                   *; 
%put ***************************************************************************************;
 
 
%mend;</pre></td></tr></table></pre>
</div>Comme exercice, supposons que nous disposons de la base de données ci-contre : <a href="https://www.developpez.net/forums/attachment.php?attachmentid=216684"  title="Nom : 
Affichages : 
Taille : ">Pièce jointe 216684</a><br />
Si vous décompressez ce fichier, vous y trouverez deux bases SAS nommées Base et matrice. Base contient les données sur les pays de l'Afrique décrits par 5 variables : une variable pays qui indique le libellé du pays, l'identifiant des pays, le code des pays, la température moyenne et les taxes. <font color="#ff0000"><i>Les données sur la température et sur les taxes ne sont pas des données réelles.</i></font><br />
Les sont simulées de sorte que la température soit spatialement autocorrélée et les taxes non autocorrélées. Nous disposons également du shapefile des pays d'Afrique dans la librairie Maps de SAS (ceci vient par défaut avec toutes les versions de SAS. La table s'appelle Maps.Africa). Décidons d'abord de représenter les variables sur des cartes<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:96px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0">pattern6 v=s c=green;pattern5 v=s c=cx55aa11;
pattern4 v=s c=cx229922;
pattern3 v=s c=yellow;
pattern2 v=s c=cxffaa00;
pattern1 v=s c=cxff5555;legend1 shape=bar(.15in,.15in) frame cshadow=graylabel=(position=middle height=3.5pct font=&quot;arial/bold&quot;)value=(height=3.5pct font=&quot;arial&quot;);proc gmap data=Base map=Maps.Africa;format Precipitation Taxe comma10.1;id ID;choro Temperature / coutline=cx888888 legend=legend1; choro Taxe/ coutline=cx888888 legend=legend1; run;</pre></td></tr></table></pre>
</div><img src="https://www.developpez.net/forums/attachments/p216687d1469728894/general-developpement/langages-programmation/definition-metalangage/gmap49.png/" border="0" alt="Nom : gmap49.png
Affichages : 635
Taille : 31,0 Ko"  style="float: CONFIG" /><img src="https://www.developpez.net/forums/attachments/p216688d1469728897/general-developpement/langages-programmation/definition-metalangage/gmap50.png/" border="0" alt="Nom : gmap50.png
Affichages : 675
Taille : 28,7 Ko"  style="float: CONFIG" /><br />
<br />
On soupçonne déjà une autocorrélation spatiale avec la température. Les valeurs les plus élevées sont au sud de l'Afrique. En Afrique de l'Ouest les valeurs sont plus faibles. Par ailleurs, les taxes ne révèlent pas une telle caractéristiques (mélange de valeurs; il n'y a pas <i>a priori</i> un ordre sur la carte). Pour en être sûr, nous allons utiliser notre fameuse macro pour tester l'autocorrélation spatiale. A cette étape nous aurons besoin de la seconde base (Matrice qui est la matrice de contiguïté) des pays.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0">
%Morantest(Data=Base, Var=Temperature, Poids=Matrice);
%Morantest(Data=Base, Var=Taxe, Poids=Matrice);</pre></td></tr></table></pre>
</div><img src="https://www.developpez.net/forums/attachments/p216689d1469728923/general-developpement/langages-programmation/definition-metalangage/taxeas.png/" border="0" alt="Nom : TaxeAS.PNG
Affichages : 1028
Taille : 21,2 Ko"  style="float: CONFIG" /><img src="https://www.developpez.net/forums/attachments/p216690d1469728926/general-developpement/langages-programmation/definition-metalangage/tempas.png/" border="0" alt="Nom : TempAS.PNG
Affichages : 678
Taille : 21,5 Ko"  style="float: CONFIG" /><br />
<br />
Pour la variable Taxe, ni les tests (unilatéral à gauche, à droite et bilatéral) de Moran et de Geary ne sont significatifs. Mais pour la variable température, le test unilatéral à droite de Moran est significatif. Autrement dit, la température est à une autocorrélation spatiale positive (I&gt;0). Ce résultat est également confirmé par le test de Geary (G&lt;1). Les pays proches ont tendance à avoir les mêmes températures.<br />
<br />
<b>En réalité la taxe peut révéler une autocorrélation spatiale locale mais pas globale. Un test d'autocorrélation locale sera disponible dans quelques jours dans un autre blog.</b><br />
<br />
Merci à tous et j'espère que ce blog vous a plu. N'hésitez pas à m'écrire : <a href="mailto:ariel92and@gmail.com">ariel92and@gmail.com</a><br />
Si vous êtes fans de la programmation, nous pouvons développer beaucoup de macros. <br />
<br />
<font color="#0000ff"><i>Défions nos limites et rendons tout possible avec le numérique.</i><br />
<br />
<font size="1"><i>Bientôt disponible : test d'autocorrélation spatiale locale et régressions spatiales avec SAS.</i></font></font></blockquote>

]]></content:encoded>
			<dc:creator>Haache</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/760090-haache/b1549/macro-morantest-test-d-autocorrelation-spatiale-moran-geary-sous-sas/</guid>
		</item>
		<item>
			<title>Imputation des données manquantes par la méthode des k voisins les plus proches</title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/b987/imputation-donnees-manquantes-methode-k-voisins-plus-proches/</link>
			<pubDate>Sun, 27 Dec 2015 01:40:50 GMT</pubDate>
			<description>Télécharger le fichier zippé....</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Télécharger le fichier zippé. Il contient les macro et un manuel d'utilisation</blockquote>


<!-- attachments -->
	<div class="blogattachments">
		
		
		
		
			<fieldset class="blogcontent">
				<legend>Fichiers attachés</legend>
				<ul>
					
				</ul>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Haache</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/760090-haache/b987/imputation-donnees-manquantes-methode-k-voisins-plus-proches/</guid>
		</item>
		<item>
			<title><![CDATA[Bootstrap sur les estimateurs MCO d'un modèle linéaire]]></title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/b985/bootstrap-estimateurs-mco-d-modele-lineaire/</link>
			<pubDate>Sun, 27 Dec 2015 01:13:04 GMT</pubDate>
			<description>Nous faisons généralement...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Nous faisons généralement référence à un échantillon pour une analyse. Pour la plupart des cas, ces échantillons contiennent des observations atypiques qui pourraient incliner fortement les résultats. Le statisticien devra rigoureusement écarter ces observations de son étude au risque de biaiser son analyse. Ce problème se pose généralement en économétrie, où une seule observation peut influencer significativement les coefficients estimés. Plusieurs méthodes existent pour contrôler ses données. Dans ce blog, nous proposons une méthode de bootstrap sur les coefficient d'un modèle linéaire afin de tester la robustesse des estimateurs MCO (implémentation sous SAS mais si on comprend l'idée, on peut implémenter sous d'autres logiciels aisément).<br />
<br />
L'idée est quand même banale. Supposons qu'on dispose d'un échantillon de taille n. A partir de cette population de référence, on veut estimer un modèle linéaire Y=a*X+u. Pour tester la robustesse de l'estimateur MCO du coefficient a, la méthode que nous proposons est la suivante:<br />
<br />
- Tirer un autre échantillon de taille n1&lt;&lt;n à partir de notre échantillon de départ. (n1 est aussi supposé grand pour que les propriétés de convergence des estimateurs soient valides). On fait la régression sur l'échantillon de taille n1 et on stock les résultats.<br />
- Reprendre le procédé un certain nombre de fois (tirer toujours n1 et estimer le modèle et stocker les résultats).  <br />
- Comparer les différentes valeurs des estimateurs<br />
<br />
Si les estimateurs sont robustes et qu'il n'y a pas d'individus atypiques dans la base, on doit avoir sensiblement les mêmes valeurs à chaque itération. Pour un paramètre, les différents estimateurs doivent suivre une loi normale de même moyenne (selon la théorie). S’il y a une différence significative entre les estimateurs c'est qu'ils ne sont pas robustes. Ce qui veut dire qu'il y a un ou des élément(s) perturbateur(s) qui influence (nt) significativement les estimateurs. Raison pour laquelle les estimateurs sont perturbés lorsque ces observations sont tirées.<br />
<br />
Or si les valeurs ne changent presque pas, c'est que tous les individus sont homogènes (pas de valeurs atypiques). C'est pourquoi lorsqu'on tire un échantillon (peu importe les observations tirées), l'estimateur reste quasiment le même.<br />
<br />
Le code suivant permet de faire cette simulation sous SAS<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br /></div></td><td valign="top"><pre style="margin: 0">%macro iteml(Ite=100,n=30,Table=,Var=,List=,out=,Detail=0);
options nonotes;
ODS EXCLUDE ALL ;
proc surveyselect data=&amp;table n=&amp;n method=srs out=test noprint;
run;
proc reg data=test outest=S noprint;
model1: model &amp;var=&amp;list;
run;
quit;
 
data S (drop=_DEPVAR_ _Type_ _RMSE_ &amp;var);
set S;
Iteration=1;
data &amp;out;
set S;
run;
 
%if &amp;Detail=1 %then %do;
proc sql;
create table Detail as select 1  as Iteration, * from test;
quit;
%end;
 
%if &amp;Ite &gt;1 %then %do;
%do i=2 %to &amp;Ite;
proc surveyselect data=&amp;table n=&amp;n method=srs out=test noprint;
run;
proc reg data=test outest=S noprint;
model&amp;i: model &amp;var=&amp;List;
run;
quit;
 
data S (drop= _DEPVAR_ _Type_ _RMSE_ &amp;var);
set S;
Iteration=&amp;i;
data &amp;out;
set &amp;out S;
run;
 
%if &amp;Detail=1 %then %do;
proc sql;
create table Details as select &amp;i  as Iteration, * from test;
quit;
data Detail;
set Detail Details;
run;
%end;
%end;
proc sql;
drop Details;
quit;
%end;
 
proc sql;
drop table S, test;
quit;
options notes;
ODS SELECT ALL ;
 
%put **********************************************************************;
%put *      MACRO BOOTSTRAP SUR LES COEFFICIENTS D UN MODELE LINEAIRE     *;
%put *              DEVELOPPEE PAR ELYSE ARISTIDE HOUNDETOUNGAN           *;
%put *                         ariel92and@gmail.com                       *;
%put **********************************************************************;
%mend;</pre></td></tr></table></pre>
</div>Dans la variable Ite, on renseigne le nombre d’itérations, c'est à dire le nombre de fois où il faut tirer l'échantillon. n est la taille de l'échantillon à tirer. n doit être inférieur à la taille de votre échantillon de départ. Dans la variable table on renseigne la table qui continent les données (ça peut être de type library.table si la table n'est pas dans la bibliothèque work).  La variable Var prend le nom de la variable à modéliser, list la liste des variables explicatives. Out prend le nom de la table sortie. Pour chaque itération, cette table donne les estimateurs MCO des coefficients. Detail est une variable binaire égale à 0 ou 1. Par défaut égale à 0. Lorsqu'elle est égale à 1, la macro crée dans la bibliothèque Work une table qui s'appelle Detail. Cette table fournit pour chaque itération, les individus qui sont tirés. Cela permettra éventuellement de détecter, si à une itération les valeurs sont très différents, les individus qui ont permis d'obtenir ces coefficients. Ces individus seraient atypiques car ils ont un comportement différent des autres.<br />
<br />
Dans le code suivant, on a fait 100 itérations. Chaque fois on tire 80 individus. On régresse la variable Ispef sur les explicatives pibh pagr emco2 isf. Les sorties sont fournies dans la table work.sortie et les individus tirés à chaque itération sont dans la table Work.Detail.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0">
 
%iteml(Ite=100,n=80,table=local,var=ispef,list=pibh pagr emco2 isf,out=sortie,Detail=1);</pre></td></tr></table></pre>
</div>Lorsqu'on compile le code, on peut déjà utiliser la table Sortie pour tracer l'évolution des estimateurs suivant l'indice d'itération. On saura s'il y a un pic à une itération. On peut aussi faire des tests de normalité sur la série d'estimateurs pour un paramètre. Si on rejette l'hypothèse de normalité c'est qu'il y a un problème. Notre estimateur n'est donc pas convergent. Noter donc qu'on peut faire beaucoup d'analyses et de tests sur les sorties pour vérifier la robustesse des estimateurs.<br />
<br />
Amusez-vous bien et à très bientôt pour un nouveau billet.<br />
Vos commentaires et critiques seront les bienvenus</blockquote>

]]></content:encoded>
			<dc:creator>Haache</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/760090-haache/b985/bootstrap-estimateurs-mco-d-modele-lineaire/</guid>
		</item>
		<item>
			<title>Test de stationnarité: Différence entre le test de Fisher et celui de student pour le choix du meilleur modele</title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/b885/test-stationnarite-difference-entre-test-fisher-celui-student-choix-meilleur-modele/</link>
			<pubDate>Tue, 17 Nov 2015 01:18:59 GMT</pubDate>
			<description>Sas propose une procédure...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Sas propose une procédure &quot;ARIMA&quot; pour effectuer un test de Dikey Fuller. La théorie de ce test suggère d'abord de tester la présence de racine unitaire pour chaque type de modèle. Si la présence de racine unitaire est rejetée (si p.value &lt; 5%, ou si rho différent de 0) alors il faut tester la spécification du modèle avant de conclure. Le problème dont il est question dans ce petit texte concerne la spécification du modèle.<br />
<br />
SAS exécute un test de Fisher pour tester la spécification. Or selon la théorie il faut faire un test de Fisher lorsque la présence de racine unitaire n'est pas rejetée (p.value &gt; 5%).  Dans le cas contraire, le test convenable est en principe celui de student pour tester uniquement la significativité de la tendance ou de la constante. Ce résultat n'est pas fourni par défaut par SAS. Dans ces conditions, il est alors recommandé de construire le test avec une proc reg. <br />
<br />
Je propose ici une macro pour implémenter ce test. les résultats de cette macro, en plus de la proc arima son suffisants pour tester la stationnarité. Pour bien comprendre la nuance entre le test de Fisher et Celui de Student dans le processus du test de stationnarité, je vous invite à lire cette petite note en cliquant <a href="https://samos.univ-paris1.fr/archives/membres/perraudin/ST/resumechap2.pdf" target="_blank">ici</a> .<br />
<br />
<br />
Pour ce qui concerne la macro, Data permet de renseigner la table contenant la variable, var la variable, p le nombre de retards qu'il faut prendre (à déterminer sur le chorellogramme de la différence première). Pour cette dernière variable macro, la valeur par défaut est fixée à 2. Si la variable macro dif=0 alors, le test est effectué sur la variable à niveau, dif=1 veut dire qu'on veut tester le présence de racine unitaire sur la variable différenciée, et ainsi de suite <br />
 <br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br /></div></td><td valign="top"><pre style="margin: 0">/*Test de stationnarité*/Options sasmstore=Mmacro mstored;
%macro DFA(data= ,var= ,p=2 ,dif=0)/STORE DES=&quot;TEST DE DIVKEY FULLER AUGMENTE&quot;;
;
data _DFA_;
set &amp;Data;
D1_&amp;var=dif(&amp;var);
run;
/*J'ai créé la l'odre d'intégration de la variable à modéliser*/
%if &amp;dif &gt;=1 %then %do;
	%let k=%sysevalf(&amp;dif+1);
	%do i=2 %to &amp;k;
		%let j=%sysevalf(&amp;i-1);
		data _DFA_;
		set _DFA_;
		D&amp;i._&amp;var=dif(D&amp;j._&amp;var.);
		run;
	%end;
	/*le premier facteur de corrélation*/
	%if &amp;p&gt;=1 %then %do;
		data _DFA_;
		set _DFA_;
		L1_D&amp;k._&amp;var=lag(D&amp;k._&amp;var.);
		label L1_D&amp;k._&amp;var=&quot;TETA 1&quot;;
		run;
	%end;
	/*J'ai créé le rho y t-1 selon le modele*/
	data _DFA_;
	set _DFA_;
	L1_D&amp;dif._&amp;var=lag(D&amp;dif._&amp;var);
	label L1_D&amp;dif._&amp;var=&quot;PHI&quot;;
	run;
%end;
%else %do;
	data _DFA_;
	set _DFA_;
	L1_&amp;var=lag(&amp;var);
	label L1_&amp;var=&quot;PHI&quot;;
	run;
	%if &amp;p&gt;=1 %then %do;
	data _DFA_;
	set _DFA_;
	L1_D1_&amp;var=lag(D1_&amp;var.);
	label L1_D1_&amp;var=&quot;TETA 1&quot;;
	run;
	%end;
%end;
/*Créer les facteur d'autocorrélation*/
%if &amp;p&gt;=2 %then %do;
	%do i=2 %to &amp;p;
		%let k=%sysevalf(&amp;dif+1);
		%let j=%sysevalf(&amp;i-1);
		data _DFA_;
		set _DFA_;
		L&amp;i._D&amp;k._&amp;var=lag(L&amp;j._D&amp;k._&amp;var);
		label L&amp;i._D&amp;k._&amp;var=&quot;TETA &amp;i&quot;;
		run;
	%end;
%end;


/*Prise en compte des var non manquantes*/
%if &amp;dif=0 %then %do;
	data _DFA_;
	set _DFA_;
	if not missing(L1_&amp;var);
	run;
%end;
%else %do;
	data _DFA_;
	set _DFA_;
	if not missing(L1_D&amp;dif._&amp;var);
	run;
%end;
%if &amp;p&gt;=1 %then %do;
	%let k=%sysevalf(&amp;dif+1);
	data _DFA_;
	set _DFA_;
	if not missing(L&amp;p._D&amp;k._&amp;Var);
	run;
%end;
data _DFA_;
set _DFA_;
_trend_=_n_;
_constante_=1;
label _trend_=&quot;TREND&quot;;
label _constante_=&quot;CONSTANTE&quot;;
run;


/*Définition du vecteur de retard*/
%if &amp;p=0 %then %do;
	%if &amp;dif=0 %then %do;
		proc autoreg data=_DFA_ ;
		model D1_&amp;var =L1_&amp;var/ noint plots=none;
		model D1_&amp;var = _constante_ L1_&amp;var / noint plots=none;
		model D1_&amp;var= _trend_ _constante_ L1_&amp;var/ noint plots=none;
		run;
	%end;
	%else %do;
		%let k=%sysevalf(&amp;dif+1);
		proc autoreg data=_DFA_ ;
		model D&amp;k._&amp;var =L1_D&amp;dif._&amp;var/ noint plots=none;
		model D&amp;k._&amp;var = _constante_ L1_D&amp;dif._&amp;var /noint plots=none;
		model D&amp;k._&amp;var= _trend_ _constante_ L1_D&amp;dif._&amp;var/ noint plots=none;
		run;
	%end;
%end;
%else %do;
	/*Construction de vesteur des p autocorrélation*/
	%let k=%sysevalf(&amp;dif+1);
	%let A=L1_D&amp;k._&amp;var;
	%if &amp;p&gt;=2 %then %do;
		%do i=2 %to &amp;p;
			%let A=&amp;A L&amp;i._D&amp;k._&amp;var ;
		%end;
	%end;
	%if &amp;dif=0 %then %do;
		proc autoreg data=_DFA_ ;
		model D1_&amp;var =L1_&amp;var &amp;A/ noint plots=none;
		model D1_&amp;var =_constante_ L1_&amp;var &amp;A/ noint plots=none;
		model D1_&amp;var= _trend_ _constante_ L1_&amp;var &amp;A/ noint plots=none;
		run;
	%end;
	%else %do;
		%let k=%sysevalf(&amp;dif+1);
		proc autoreg data=_DFA_ ;
	    model D&amp;k._&amp;var =L1_D&amp;dif._&amp;var &amp;A/ noint plots=none;
		model D&amp;k._&amp;var = _constante_ L1_D&amp;dif._&amp;var &amp;A / noint plots=none;
		model D&amp;k._&amp;var= _trend_ _constante_ L1_D&amp;dif._&amp;var &amp;A/ noint plots=none;
		run;
	%end;
%end;
proc datasets nolist;
delete _dfa_;
run;
%put ***************************************************************************************;
%put MACRO CREEE PAR ARISTIDE HOUNDETOUNGAN, CONTRIBUER EN ENVOYANT VOS;
%put CRITIQUES: ariel92and@gmail.com;
%put ***************************************************************************************;
%mend;</pre></td></tr></table></pre>
</div>Commentez. On peut aussi discuter en privé. <a href="mailto:ariel92and@gmail.com">ariel92and@gmail.com</a></blockquote>

]]></content:encoded>
			<dc:creator>Haache</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/760090-haache/b885/test-stationnarite-difference-entre-test-fisher-celui-student-choix-meilleur-modele/</guid>
		</item>
		<item>
			<title><![CDATA[NUAGES D'UNE AFC et ACM: MACRO SAS]]></title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/b445/nuages-d-afc-acm-macro-sas/</link>
			<pubDate>Wed, 15 Apr 2015 20:07:44 GMT</pubDate>
			<description>Je vous propose une macro qui...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Je vous propose une macro qui permet de faire les différents nuages de AFC, et ACM en un code.<br />
<br />
Vous devez d'abord réaliser votre AFC et ACM avec la commande Proc corresp et vous allez exporter les résultats dans une table avec l'option Out.<br />
Voici le code de la macro qui fait les graphiques <br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br /></div></td><td valign="top"><pre style="margin: 0">
%macro PLOTCOR(DATA= ,ID= ,AXEH= ,AXEV= ,COND= )/ DES=&quot;Réprésentation des individus et variable en AFC ou en ACM&quot;;
DATA _Graph_;
set &amp;DATA;
%if %length(&amp;COND)^=0 %then %do;
&amp;COND;
%end;
run;


data CORANNOT;
length color $10.;
length text $10.;
length function $10.;
set _Graph_;
function=&quot;Label&quot;;
position=&quot;1&quot;;
when=&quot;B&quot;;
x=Dim&amp;AXEH;
y=Dim&amp;AXEV;
xsys='2';
ysys='2';
text=&amp;ID;
if _TYPE_=&quot;OBS&quot; then color=&quot;blue&quot;;
else if _TYPE_=&quot;VAR&quot; then color=&quot;red&quot;;
else if _TYPE_=&quot;VARSUP&quot; then color=&quot;green&quot;;
size=0.8;
Output;
function=&quot;Symbol&quot;;
position=&quot;5&quot;;
when=&quot;B&quot;;
x=Dim&amp;AXEH;
y=Dim&amp;AXEV;
xsys='2';
ysys='2';
text=&quot;triangle&quot;;
size=3*(SqCos&amp;AXEH+SqCos&amp;AXEV);
if _TYPE_=&quot;OBS&quot; then color=&quot;blue&quot;;
else if _TYPE_=&quot;VAR&quot; then color=&quot;red&quot;;
else if _TYPE_=&quot;SUPVAR&quot; then color=&quot;green&quot;;
output;
run; 




goptions reset=all gunit=pct hsize=7 vsize= 7;
axis1 minor=none offset=(4,4) major=(h=0.1 w=1) label=(&quot;Axe&amp;AXEH&quot;);
axis2  minor=none offset=(4,4) major=(h=0.1 w=1) label=(&quot;Axe&amp;AXEV&quot;);
symbol v=none;
proc gplot data=CORANNOT;
plot y*x=1/frame cframe=white href=0 vref=0 overlay annotate=CORANNOT grid haxis=axis1 vaxis=axis2;
run;
quit;
proc datasets lib=work memtype=DATA  nolist;
delete _Graph_ CORANNOT;
run; 
%mend Plotcor;</pre></td></tr></table></pre>
</div>Donc pour faire le graphique, vous allez mettre ceci:<br />
<br />
%plotcor(Data=  ,id=  , axeh= , axev= , cond= );<br />
<br />
<font color="#3E3E3E">Dans DATA, vous spécifiez le nom de la table sortie que vous avez mise dans la proc corresp (ce que vous avez mis dans Out=).</font><br />
<font color="#3E3E3E">Axev prend le numéro de l'axe que vous voulez mettre en vertical. soit 1, 2, 3 ....</font><br />
<font color="#3E3E3E">Axeh prend le numéro de l'axe que vous voulez mettre en horizontal </font><br />
<font color="#3E3E3E">Cond: Cette macro variable est très importante. Peut être que vous ne voulez pas afficher tous les points. Si vous voulez afficher les individus actifs seuls, vous allez mettre Cond= if _type_ in (&quot;OBS&quot;). Si c'est les variables supplémentaires seules, vous allez mettre Cond= if _type_ in (&quot;</font><font color="#3E3E3E">SUP</font><font color="#3E3E3E">VAR&quot;). Si c'est les individus actifs et supplémentaires, vous allez mettre Cond= if _type_ in (&quot;OBS&quot; &quot;</font><font color="#3E3E3E">SUP</font><font color="#3E3E3E">OBS&quot;).... A vous de voir les valeurs prises par la variable _type_ qui est dans la sortie pour pouvoir mettre ce qui est convenable.<br />
<br />
</font><font color="#3E3E3E">Je vous laisse le code pour que vous pussiez modifier. Jouer sur les couleurs des variables actives, supplémentaires, individus et autres. </font><br />
<font color="#3E3E3E">Voici un graphique que j'ai sorti par la macro<br />
<br />
</font></blockquote>


<!-- attachments -->
	<div class="blogattachments">
		
		
			<fieldset class="blogcontent">
				<legend>Images attachées</legend>
				
			</fieldset>
		
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Haache</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/760090-haache/b445/nuages-d-afc-acm-macro-sas/</guid>
		</item>
		<item>
			<title><![CDATA[NUAGE DIRECT ET DUAL D'UNE ACP: MACRO SAS]]></title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/b444/nuage-direct-dual-d-acp-macro-sas/</link>
			<pubDate>Wed, 15 Apr 2015 19:42:57 GMT</pubDate>
			<description>Encore une macro que je vous...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Encore une macro que je vous propose !<br />
Celle ci fait le nuage des individus et celle des variables, elle trace le cercle de corrélation. Vous pouvez jouer sur les couleurs et tout!  La macro est adaptée à la sortie ACP de la macro de l'INSEE. En fait, l'INSEE a créé une MACRO qui permet de réaliser l'ACP. Donc c'est la sortie des résultats que vous allez utiliser pour faire les nuages avec ma macro.  Je vous suggère de télécharger la macro ACP de l'INSEE pour faire vos ACP. l'INSEE a aussi proposé une macro pour faire les nuages. Mais tester la mienne aussi pour voir.<br />
<br />
La macro de l'INSEE qui permet de réaliser l'ACP est  est téléchargeable ici  : <a href="http://www.insee.fr/fr/methodes/default.asp?page=outils/analyse_donnees/accueil_analyse.htm" target="_blank">http://www.insee.fr/fr/methodes/defa...il_analyse.htm</a><br />
<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br /></div></td><td valign="top"><pre style="margin: 0">%macro Plotacp(DATA= ,AXEH= ,AXEV= ,COND= ,CERCLE=N,BAREA=N)/ DES=&quot;Réprésentation des individus et variable en ACP&quot;;/*Je dupplique la table dans une autre _Graph en supprimant les données manquantes*/
DATA _Graph_;
set &amp;DATA;
if not Missing(coord1);
run;
/*J'applique la condition. les observations et les variables que je veux afficher*/
DATA _Graph_;
SET _Graph_;
%if %length(&amp;COND)^=0 %then %do;
&amp;COND;
%end;
run;
/*Construction de la table Annotate*/
data ACPANNOT;
length function $10.;
set _Graph_;
function=&quot;Label&quot;;
run;
data ACPANNOT;
length color $10.;
length text $10.;
set ACPANNOT;
/*Les noms à écrire pour les observations et les variables dans le graphique*/
    text=_LABEL_;
    position=&quot;3&quot;;
    x=coord&amp;AXEH;
    y=coord&amp;AXEV;
    xsys='2';
    ysys='2';
    if _TYPE_=&quot;OBSACT&quot; then color=&quot;purple&quot;;
    else if _TYPE_=&quot;OBSSUP&quot; then color=&quot;black&quot;;
    else if _TYPE_=&quot;VARACT&quot; then color=&quot;blue&quot;;
    else color=&quot;red&quot;;
    if _TYPE_=&quot;OBSSUP&quot; then size=1.7;
    else size=0.9;
    Output;
/*Pour tracer les segments des variables. Les segments sont tracées du centre du cercle vers les points*/
    if _TYPE_ IN (&quot;VARACT&quot;,&quot;VARSUP&quot;) then do; 
    x=0;
    y=0;
    function=&quot;Move&quot;;
    if _TYPE_=&quot;OBSACT&quot; then color=&quot;blue&quot;;
    else if _TYPE_=&quot;OBSSUP&quot; then color=&quot;red&quot;;
    else if _TYPE_=&quot;VARACT&quot; then color=&quot;blue&quot;;
    else color=&quot;red&quot;;
    size=0.8;
    when=&quot;B&quot;;
    end;
    output;


    if _TYPE_ IN (&quot;VARACT&quot;,&quot;VARSUP&quot;) then do;
    x=coord&amp;AXEH;
    y=coord&amp;AXEV;
    function=&quot;Draw&quot;;
    if _TYPE_=&quot;OBSACT&quot; then color=&quot;blue&quot;;
    else if _TYPE_=&quot;OBSSUP&quot; then color=&quot;red&quot;;
    else if _TYPE_=&quot;VARACT&quot; then color=&quot;blue&quot;;
    else color=&quot;red&quot;;
    size=0.8;
    when=&quot;A&quot;;
    end;
output;
/*Pour mettre les symboles*/
function=&quot;Symbol&quot;;
position=&quot;5&quot;;
when=&quot;B&quot;;
x=coord&amp;AXEH;
y=coord&amp;AXEV;
xsys='2';
ysys='2';
if _TYPE_=&quot;OBSACT&quot; then text=&quot;triangle&quot;;
else if _TYPE_=&quot;OBSSUP&quot; then text=&quot;dot&quot;;
else if _TYPE_=&quot;VARACT&quot; then text=&quot;circle&quot;;
else text=&quot;circle&quot;;
if _TYPE_=&quot;OBSACT&quot; then size=0.01*(co2_&amp;AXEH+co2_&amp;AXEV);
else if _TYPE_=&quot;OBSSUP&quot; then size=0.03*(co2_&amp;AXEH+co2_&amp;AXEV);
else if _TYPE_=&quot;VARACT&quot; then size=0.035*(co2_&amp;AXEH+co2_&amp;AXEV);
else size=0.035*(co2_&amp;AXEH+co2_&amp;AXEV);
if _TYPE_=&quot;OBSACT&quot; then color=&quot;purple&quot;;
else if _TYPE_=&quot;OBSSUP&quot; then color=&quot;yellow&quot;;
else if _TYPE_=&quot;VARACT&quot; then color=&quot;blue&quot;;
else color=&quot;red&quot;;
output;
run; 


%if &amp;CERCLE=O %then %do;
data ACPANNOT;
set ACPANNOT end=fin;
output ACPANNOT;
if fin then do;
    x=1;
    y=0;
    function=&quot;Move&quot;;
    color='black';
    size=0.2;
    when=&quot;A&quot;;
output;
do angle=0 to 44/7 by 0.01;
        x=cos(angle);
        y=sin(angle);
        function=&quot;Draw&quot;;
        When=&quot;A&quot;;
        color='black';    
    output;
end;
output;
    x=1;
    y=0;
    function=&quot;Draw&quot;;
    color='black';
    when=&quot;A&quot;;
output;
end;
run; 
%end; 
options nodate;    
goptions reset=all gunit=pct htext=2;
%if &amp;BAREA=O %then %do;
goptions hsize=6 vsize= 6;
%end;
%else %do;
goptions hsize=6 vsize= 6;
%end;
axis1 minor=none offset=(4,4) major=(h=0.1 w=1) label=(&quot;Axe&amp;AXEH&quot;);
axis2  minor=none offset=(4,4) major=(h=0.1 w=1) label=(&quot;Axe&amp;AXEV&quot;);
symbol v=none;
proc gplot data=ACPANNOT;
plot y*x=1/frame cframe=white href=0 vref=0 overlay annotate=ACPANNOT grid haxis=axis1 vaxis=axis2;
run;
quit;
proc datasets lib=Work memtype=Data nolist;
%if &amp;CERCLE=O %then %do;
delete Acpannot Acpannotm Acpannotn _graph_;
%end;
run;
%Put Fin de macro;
%put Ecris moi si tu rencontres de difficultés: ariel92and@gmail.com;
%mend Plotacp;</pre></td></tr></table></pre>
</div>Lorsque vous réalisé votre ACP avec la macro de l'INSEE voici mon code pour faire le graphique.<br />
<br />
%Plotacp(DATA= ,AXEH= ,AXEV= ,COND= ,CERCLE=,BAREA=)<br />
<br />
Dans DATA, vous spécifiez le nom de la table sortie que vous avez mise dans la macro de l'insee (ce que vous avez mis dans Out=).<br />
Axev prend le numéro de l'axe que vous voulez mettre en vertical. soit 1, 2, 3 ....<br />
Axeh prend le numéro de l'axe que vous voulez mettre en horizontal <br />
Cond: Cette macro variable est très importante. Peut être que vous ne voulez pas afficher tous les points. Si vous voulez afficher les individus actifs seuls, vous allez mettre Cond= if _type_ in (&quot;OBSACT&quot;). Si c'est les variables supplémentaires seules, vous allez mettre  Cond= if _type_ in (&quot;VARSUP&quot;). Si c'est les individus actifs et supplémentaires, vous allez mettre Cond= if _type_ in (&quot;OBSACT&quot; &quot;OBSSUP&quot;).... A vous de voir les valeurs prises par la variable _type_ qui est dans la sortie  pour pouvoir mettre ce qui est convenable<br />
Dans la variable macro Cercle qui prend les valeurs O et N (O=OUI, N=NON), vous allez dire si vous voulez tracer le cercle de corrélation ou non<br />
Dans la variable macro BAREA vous allez mettre O si vous voulez que SAS affiche un grand graphique. N si non.<br />
<br />
Je vous laisse le code pour que vous pussiez modifier. Jouer sur les couleurs des variables actives, supplémentaires, individus et autres. <br />
Voici des graphiques que j'ai sortis par la macro</blockquote>


<!-- attachments -->
	<div class="blogattachments">
		
		
			<fieldset class="blogcontent">
				<legend>Images attachées</legend>
				
			</fieldset>
		
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Haache</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/760090-haache/b444/nuage-direct-dual-d-acp-macro-sas/</guid>
		</item>
		<item>
			<title>Tableau Disjonctif Complet (TDC): Macro SAS</title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/b441/tableau-disjonctif-complet-tdc-macro-sas/</link>
			<pubDate>Tue, 14 Apr 2015 14:47:33 GMT</pubDate>
			<description>le code ci-dessous crée la...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">le code ci-dessous crée la macro Disjonctif. Cette macro a pour objectif de créer un tableau disjonctif complet à partir d'un paquet de variables qualitatives. Il s'agit juste de transformer les modalités des variables qualitatives en variables binaires: 1 si l'individu possède la caractéristique et 0 sinon. Après avoir compilé la macro, le code suivant permet de l'exécuter:<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0">%Disjonctif(Data=Base, Var= assur age prof niv tm, out=Dich);
 /*Ce code transforme les modalités des variables assur age prof niv tm de la table Base en variables dichotomiques.
Il stocke le résultat dans Dich*/</pre></td></tr></table></pre>
</div>Vous n'aurez qu'à mettre le nom de la table des données, les variables qualitatives et la table de sortie.<br />
Cette opération est un peu fréquente dans les analyse multidimensionnelles comme ACM, économétrie des variables qualitatives etc.... D'où l'importance d'avoir une macro pour l'exécuter en un clic!!! :lol:<br />
Voici le code de la macro. Vous pouvez laisser vos contributions et critiques en commentaire. <br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br /></div></td><td valign="top"><pre style="margin: 0">%Macro Disjonctif(Data= ,Var= ,Out=_Dicotom_out)/STORE DES=&quot;Macro permettant de créer des variables dichotomiques à partir d'un 
 paquet de variables qualitatives&quot;;
 /* CREATION D'UN TABLEAU DISJONCTIF COMPLET*/
proc transpose data=&amp;Data out=_Dicotom_tr;
var &amp;var;
data _null_;
set _Dicotom_tr;
call symput (compress(&quot;Var&quot;||_n_),_NAME_);
call symput (&quot;Nvar&quot;,_n_);
run;
%let Listev= ;
%do i=1 %to &amp;nvar;
%let Listev=&amp;Listev &amp;&amp;Var&amp;i.*;
%end;
%let Listev=%substr(&amp;Listev,1,%length(&amp;Listev)-1);
proc freq data=&amp;Data noprint;
table &amp;Listev/out=_Dicotom_ct;
run;
Data &amp;out;
set &amp;Data;
run;
%do i=1 %to &amp;nvar;
proc sort data=_Dicotom_ct;
by &amp;&amp;var&amp;i;
data _Null_;
set _Dicotom_ct;
by &amp;&amp;var&amp;i;
retain __Ct 0;
if first.&amp;&amp;var&amp;i then __Ct=__Ct+1;
if first.&amp;&amp;var&amp;i then do;
call symput (compress(&quot;Var&amp;i._&quot;||__Ct),&amp;&amp;var&amp;i );
call symput (&quot;Nvar&amp;i&quot;,__Ct);
end;
run;
Data &amp;out;
set &amp;out;
rename &amp;&amp;var&amp;i=__&amp;&amp;var&amp;i;
run;
%do j=1 %to &amp;&amp;Nvar&amp;i;
Data &amp;out;
set &amp;out;
if __&amp;&amp;var&amp;i=&quot;&amp;&amp;Var&amp;i._&amp;j&quot; then Var&amp;i._&amp;j=1;
else Var&amp;i._&amp;j=0;
label Var&amp;i._&amp;j=&quot;&amp;&amp;Var&amp;i._&amp;j&quot;;
run;
%end;
Data &amp;out;
set &amp;out;
drop __&amp;&amp;var&amp;i;
run;
%end;
proc datasets lib=work nolist;
delete _Dicotom_tr _Dicotom_ct;
run;


%put FIN DE MACRO. SI VOUS AVEZ RENCONTRE DE DIFFICULTES;
%PUT ECRIVEZ-MOI SUR: ariel92and@gmail.com;
%mend;</pre></td></tr></table></pre>
</div></blockquote>

]]></content:encoded>
			<dc:creator>Haache</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/760090-haache/b441/tableau-disjonctif-complet-tdc-macro-sas/</guid>
		</item>
		<item>
			<title><![CDATA[Conditionnement Inverse : plus d'attention dans l'analyse des proportions]]></title>
			<link>https://www.developpez.net/forums/blogs/760090-haache/b420/conditionnement-inverse-plus-d-attention-l-analyse-proportions/</link>
			<pubDate>Fri, 03 Apr 2015 16:31:40 GMT</pubDate>
			<description>Conditionnement Inverse :...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><div style="text-align: center;">Conditionnement Inverse : plus d'attention dans l'analyse des proportions.</div><br />
Le document ci-joint parle de l'analyse des proportions et montre à travers quelques exemples les erreurs courantes qu'on peut commettre lorsqu'on compare les proportions dans deux populations différentes. Utile pour les statisticiens et tous ceux qui analysent les données. Ne quittez pas sans le télécharger, c'est juste deux pages.<br />
<br />
Laissez vos commentaires.<br />
Cordialement</blockquote>


<!-- attachments -->
	<div class="blogattachments">
		
		
		
			<fieldset class="blogcontent">
				<legend>Images attachées</legend>
				<ul>
					
				</ul>
			</fieldset>
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Haache</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/760090-haache/b420/conditionnement-inverse-plus-d-attention-l-analyse-proportions/</guid>
		</item>
	</channel>
</rss>
