Archive for the ‘Data Analysis’ Category

h1

Combien de contrats ai-je au total ? (5/5) PROC TABULATE

novembre 24, 2008

Ce dernier article de notre série sur le calcul d’un total par variable (contrat) sous SAS aborde la procédure PROC TABULATE. Comme précédemment, les résultats sont redirigés vers un data set.

1. Rappel

La source de la thématique : Cette série d’articles est basée sur une question posée sur le forum de http://www.commentcamarche.net : vous pouvez retrouver la question d’origine sur leur site.

Les autres articles : Vous pouvez retrouver les précédents articles de la série ici :

Les données :Les données sont sauvegardées dans un data set nommé CONTRATS. Il contient 4 variables :

  • l’identifiant de chaque client CLIENT,
  • le nombre de contrats NB_CNTR et
  • deux variables binaires TEL et HABITAT indiquant si oui ou non les fréquences s’appliquent.

Au total, on compte 9 contrats téléphoniques et 5 contrats d’habitation.

Créer le data set CONTRATS

data contrats;
   input client $ nb_cntr tel habitat;
   datalines;
a 5 1 0
b 1 1 0
c 2 0 1
d 1 1 0
e 3 0 1
f 2 1 0
;
run;

2. La réponse de PROC TABULATE

Lister les variables dans l’instruction VAR : Dans un premier temps les variables binaires TEL et HABITAT sont listées. Là encore il faut préciser le poids de chaque valeur. L’option WEIGHT introduit la variable NB_CONTR, notre coefficient multiplicateur.

Exprimer le calcul requis dans l’instruction TABLE : Pour chacune des variables TEL et HABITAT, la somme est faite en tenant compte du coefficient. Les résultats sont des nombres entiers mais SAS ajoute par défaut des chiffres après la virgule (des zéros donc ici). Pour s’en débarasser, un format 5. est appliqué aux sommes. La sonne ne devra donc pas être un nombre avec plus de 5 chiffres.

Empêcher l’affichage dans la fenêtre OUTPUT : La sortie générée par PROC TABULATE s’appelle TABLE. Par défaut, le résultat est envoyé dans la fenêtre OUTPUT. Pour empêcher cette redirection le temps du PROC TABULATE, les options ODS EXCLUDE doivent être activées.

Rediriger ses résultats dans un data set avec l’ODS (Output Delivery System) : Le data set contenant les résultats s’appelle SOLUTION5. Il est créé avec l’instruction ODS OUTPUT.

*ods exclude table;
proc tabulate data=contrats;*out=solution5;
   var tel habitat / weight=nb_cntr;
   table tel habitat, (sum='Frequency')*f=5.;
   ods output table=solution5;
run;
*ods exclude none;

L’ancienne méthode pour créer un data set, l’option OUT= : L’ancienne méthodeconsiste à ajouter l’option OUT= dans l’instruction PROC TABULATE. Mais cette syntaxe n’est pas généralisable à toutes les procédures et est donc plus difficile à se souvenir pour des utilisations occasionnelles.

3. Améliorer le fichier de sortie

Un simple PROC PRINT sur le fichier SOLUTION5 montre que

_TYPE_ _PAGE_ _TABLE_ tel_Sum habitat_Sum

   0      1      1        9       5

Pour changer l’orientation des résultats, vous pouvez faire appel à un PROC TRANSPOSE.

proc transpose data=solution5 out=solution5 (drop=_LABEL_);
   var tel_sum habitat_sum;
run;

Reste à vous d’améliorer la présentation avec des RENAME, LABEL appropriés, etc.

  _NAME_     COL1
tel_Sum       9
habitat_Sum   5
h1

Combien de contrats ai-je au total ? (3/5) PROC MEANS

novembre 10, 2008

Dans nos précédents articles du lundi, nous avons vu avec PROC SQL et RETAIN deux approches pour calculer le nombre total de contrats à partir du nombre de contrats par client. Il s’agit alors de résoudre une question posée sur le forum commentcamarche.net. Les données ont qu’en à elle une structure très particulière. La procédure PROC MEANS offre une troisième réponse possible comme nous le verrons ici.

Les données : Vous trouverez en fin d’article un rappel des données.

  • CLIENT : l’identifiant du client,
  • NB_CNTR : le nombre de contrats,
  • TEL: variable binaire (0/1) indiquant si oui ou non le nombre de contrat s’applique aux contrats téléphoniques du client
  • HABITAT : variable binaire (0/1) indiquant si oui ou non le nombre de contrat s’applique aux contrats habitation du client

1. La notion de coefficient (WEIGHT)

Les coefficient au bac : Les bacheliers français se souviendront d’avoir appliqué des coefficients à leur notes pour savoir combien de points ils leur fallait pour avoir le fameux sésam du bac. Il fallatt ainsi compter 5 fois la note d’histoire-géographie si le coefficient est de 5, etc.

La même notion de coefficient concerne aussi les bases de données. Il faut compter 5 fois une observation lorsqu’un coefficient de 5 est appliqué. En effet de manière générale, les données à disposition du programmeur contient soit toutes les informations ou un résumé de ces informations.

Traduction : En anglais, on parle de weight pour désigner les coefficient. En effet, le poids de chaque observation est mesuré.

Pourquoi utiliser des coefficients : Dans le cas d’un data set contenant des informations sur les contrats de cliens, une table pourrait avoir :

  • une ligne pour chaque contrat de chaque client ou
  • une ligne par client et le nombre de contrats qu’il a.

Dans le second cas, il y a une perte d’information pour les autres variables du data set mais le data set est moins volumineux.

Le mot-clé WEIGHT en SAS : De son côté, SAS utilise dans plusieurs procédures statistiques (PROC MEANS, PROC FREQ, etc.) le mot WEIGHT en tant que :

  • instruction,
  • option dans une instruction.

2. La notion de coefficient appliquée à nos données

WEIGHT=NB_CNTR : Dans notre exemple, la variable NB_CNTR indique combien de contrats un client a. Il s’agit de la variable servant de coefficient (weight).

client nb_contr tel habitat
   a       5     1     0
   b       1     1     0
   c       2     0     1
   d       1     1     0
   e       3     0     1
   f       2     1     0

Lister les variables concernées par le coefficient : SAS applique ce poids aux deux variables binaires TEL et HABITAT.

La variable TEL sera interprétée de la manière suivante :

client tel
   a    5
   b    1
   c    0
   d    1
   e    0
   f    2

Et la variable HABITAT sera interprétée ainsi :

client habitat
   a     0
   b     0
   c     2
   d     0
   e     3
   f     0

La syntaxe minimale du PROC MEANS : La procédure PROC MEANS listera dans un premier temps les variables binaires. Puis en option, désignera la variable weight afin de savoir par combien chaque valeur doit être multipliée.

proc means data=contrats sum;
   var tel habitat / weight=nb_cntr;
run;

L’option statistique SUM : pour ne voir que la somme des contrats il faut précise la statistique SUM en option de l’instruction PROC MEANS. Sinon, seont affichés les statistiques par défaut que sont

  • le nombre de contrat (N),
  • le plus petit/grand nombre de contrats (MIN/MAX),
  • la moyenne (MEAN) et
  • l’écart type (STD).

Résultats : Les premiers résultats dans la fenêtre OUTPUT confirme qu’il y a 9 contrats téléphoniques et 5 contrats d’habitation au total.

The MEANS Procedure
Variable            Sum
------------------------
tel            9.0000000
habitat        5.0000000
------------------------

2. Gérer les sorties de l’ODS

Par défaut les résultats sont redirigés vers la fenêtre OUTPUT de SAS.

Ajouter une destination avec ODS OUTPUT : Afin d’extraire le résultat dans un data set, il est possible d’ajouter une instruction ODS OUTPUT. Pour connaître le nom désignant la sortie générée par un PROC MEANS, utilisez au préalable ODS TRACE ON/LISTING et ODS TRACE OFF.

Stopper la destination OUTPUT avec ODS EXCLUDE : Si, de plus, le programmeur souhaite empêcher l’affichage de la sortie PROC MEANS dans la fenêtre OUTPUT, l’instruction ODS EXCLUDE doit être exécutée (ODS SELECT ALL annulera l’opération).

*ods trace on/listing;
proc means data=contrats sum;
   var tel habitat / weight=nb_cntr;
   ods exclude summary;
   ods output summary=solution3;
run;
*ods trace off;

Une version de base des statistiques sauvegardées dans un data set : Après un PROC PRINT sur le data set nouvellement créé (SOLUTION3), la sortie se présente sous une forme différente que dans la fenêtre OUTPUT.

VName_           VName_
 tel    tel_Sum  habitat  habitat_Sum

 tel       9     habitat      5

Pour modifier cette présentation, il est possible d’utiliser un PROC TRANSPOSE.

proc transpose data=solution3 out=solution3 (drop=_LABEL_);
   var tel habitat;
run;

Une version améliorée des statistiques sauvegardées dans un data set : Reste à vous le choix de renommer le nom des variables selon vos préférences.

  _NAME_    COL1
tel_Sum       7
habitat_Sum   5

Annexe :

data contrats;
   input client $ nb_cntr tel habitat;
   datalines;
a 5 1 0
b 1 1 0
c 2 0 1
d 1 1 0
e 3 0 1
f 2 1 0
;
run;

Plus de précisions sur la procédure PROC MEANS sont disponibles en ligne : SAS Online Doc : The MEANS Procedure.

A dans huit jours, pour une présentation de l’approche avec PROC FREQ. D’ici là je vous retrouve d’ici quelques jours pour le second article de la semaine.

h1

Des souvenirs de lycée, les logarithmes

juillet 2, 2008

Une des notations mathématiques qui est abordée au lycée en algèbre sont les logarithmes. Les propriétés de cette notation la rendent très attrayante pour exprimer et résoudre des équations. Mais vous souvenez vous du raisonnement qui se cache derrière ce nom ? Et savez-vous comment retrouver cette information en SAS ?

Cet article intéressera plus particulièrement ceux qui veulent replonger dans leur cours de statistique. En effet, les distributions statistiques, par exemple, sont formulées avec des équations contenant souvent des logarithmes. D’un point de vue professionnel, je n’ai jamais eu besoin de calculer un logarithme sous SAS pour l’industrie pharmaceutique.

1. Définition

Combien de fois faut-il multiplier 10 pour obtenir 1000 ? ou encore combien de fois faut-il multiplier 2 pour obtenir 32 ? Si vous avez la réponse à ces questions, vous êtes capable de résoudre des logarithmes.

Un logarithme est défini par une base. 10 et 2 sont les plus simples à comprendre dans un premier temps. Une base « e » rend les calculs plus simples. On parle alors de logarithme népérien ou logarithme naturel.

Dans le cas général, log symbolise le logarithme de manière général. Dans le cas particulier du logarithme népérien, log base e, le symbole est ln.

Les mathématiciens emploient plus facilement la base e dans la vie de tous les jours pour les raisons de facilité de calcul. Mais on a l’ordinateur de nos jours, me direz-vous. Alors il faut pensez au temps d’exécution de calculs complexes. Et là, même l’ordinateur sera content d’avoir des options pour résoudre le problème plus rapidement !

2. Exemples

Dans ce premier exemple, le logarithme de 1000 est défini par une base 10. Ainsi le but est de retrouver le nombre de fois 10 doit être multiplié pour obtenir le chiffre 1000. Sachant que 10x10x10=1000 ou de manière plus condensée 103=1000, la réponse est 3 fois.

log10 1000 = 3 car pour résoudre 10x=1000, on note x=3, soit 10x10x10=1000.

Dans ce second exemple, une base 2 est choisie. Il faut trouver le nombre de fois le nombre 2 est multiplié pour obtenir 32. La réponse est 5 fois.

log2 32 = 5 car pour résoudre 2x=32, on note x=5 soit 2x2x2x2x2=32.

Dans ce dernier exemple, une base e est choisie. Il s’agit du logarithme naturel ou logarithme népérien noté en langage courant ln. Pour retrouver la valeur approximative de e, on résout e1 sur son ordinateur ou sa calculatrice et on obtient une valeur de l’ordre de 2,71828.

loge 1 = ln 1 = 0 car pour résoudre ex =  1, on note x=0.

3. Calculer un logarithme en SAS

En SAS, il existe plusieurs types de fonctions LOG. Ainsi, notre log base 10 de 1000 devient LOG10 (1000) et notre log base 2 de 32 devient LOG2(32). Pour ce qui est du logarithme népérien, il suffit de ne pas préciser de chiffre LOG(1).

data _null_;
   log10_1000 = log10(1000);
   log2_32    = log2(32);
   loge_1     = log(1);
   loge_0     = log(0);
   put log10_1000 =;
   put log2_32    =;
   put loge_1     =   loge_0 = ;
run;

Dans l’exemple ci-dessus, j’ai arbitrairement choisi de ne pas créer de data set SAS en utilisant le mot _null_. Vous pouvez choisir de créer un data set et de l’afficher avec PROC PRINT.

Pour afficher les valeurs je me sers des instructions PUT. En choisissant d’ajouter le signe égal après le nom de la variable, non seulement la valeur des variables apparaîtront, mais aussi le nom des variables et le signe égal. Cela rend la lecture de l’information affichée dans la LOG plus facile. Faites le test sans le signe égal et vous verrez la différence dans la LOG.

Pour plus de précisions sur les fonctions logarithmiques, vous pouvez vous reporter à la documentation en ligne (SAS Online Doc. : LOG Function,  LOG10 Function, LOG2 Function). Sachez par ailleurs qu’il existe d’autres fonctions log sous SAS : LOGBETA, LOGCDC, LOGPDF et LOGSDF.

h1

Mes valeurs sont t’elles proches de la moyenne ? (écart-type)

juin 17, 2008

Pour résumer une série de mesures, il est courant de proposer la moyenne. Mais avoir une moyenne de 11 n’a pas le même sens selon que les valeurs soient dispersées entre 10 et 13, ou entre 0 et 20. Dans le premier cas, toutes les valeurs sont plus proches de la moyenne que dans le second cas. L’écart-type (ou standard deviation en anglais) reflète cette subtilité. Le statisticien aura pour rôle d’interpréter cette valeur. En comprenant le sens d’un écart-type,  le programmeur trouvera un outil supplémentaire pour vérifier la cohérence de ses résultats.

1. Des variables continues

La moyenne et l’écart-type sont des outils s’appliquant uniquement aux données numériques, suivant un ordre donné où l’écart entre chacune des valeurs potentielles est toujours le même. On peut donc parler de valeurs continues au sens large du terme.

Ainsi, l’âge d’une personne est une donnée continue qu’elle soit arrondie en années, en mois, en jours, en heure. La moyenne et l’écart-type auront une précision similaire.

2. Définition l’écart-type d’une population

L’écart-type ayant pour but de chiffrer l’écart entre les valeurs  et la moyenne. Il est donc logique de calculer la différence entre chaque valeur et la moyenne. Dans un premier temps, on a autant de différences que de valeurs. Dans un second temps, une valeur moyenne est extraite de ces différences.

1. Mettre au carré les différences : qui dit moyenne, dit somme des valeurs divisé par le nombre de valeur. Hors, la somme de valeurs positives et négatives s’annulent. Et dans notre cas, on a bien des valeurs inférieures et des valeurs supérieures à la moyenne. Dans le cas de l’écart-type, toutes les différences sont rendues positives en les multipliant par elles-mêmes (mises au carré).

C’est probablement pour des faciliter la résolution de calculs mathématiques que la mise au carré est préféré à la prise des valeurs absolu. Si vous avez une autre hypothèse, n’hésitez pas à en faire part.

2. Extraire la moyenne : on souhaite une moyenne. Donc la somme des différences (mises au carré) sont divisées par le nombre de différences. Si on s’arrête là, la statistique s’appelle la variance.

3. Exprimer la dispersion dans la même unité que la moyenne : A présent la somme des différences n’est plus dans la même unité que la moyenne. Pour parler dans la même unité, on prend la racine de l’ensemble du calcul.

3. Estimer l’écart-type d’une population à partir d’un échantillon

Contexte : il est fréquent de ne pas travailler sur la population qui nous intéresse mais sur un échantillon. Par exemple, si on mesure la pression artérielle systolique des patients d’une étude clinique pour savoir si la drogue a permis de la réduire, le statisticien n’est pas intéressé par la moyenne de ces patients mais bien celle de tous les personnes pouvant à l’avenir faire appel à cette drogue.

Le problème : De plus, les recherches statistiques ont permis de démontrer qu’en moyenne, la moyenne de tous les échantillons possibles est la même que celle de la population. Pour l’écart-type, c’est un peu moins simple, puisqu’il la moyenne des écarts-types de tous les échantillons n’est pas exactement égale à celle de la population.

La solution : Mais les chercheurs en statistique sont là ! Ils ont réussi à montrer qu’en enlevant 1 au nombre total de valeurs dans chacun des échantillons, on pouvait retrouver l’écart-type de la population (cf. des cours d’inférence qui semble si théorique au prime abord mais qui permettent d’accéder à l’arrière de la scène).

Vocabulaire : Et pour enrichir votre vocabulaire et surtout comprendre ces spécialistes sachez que si l’écart-type sera appelé un estimateur biaisé si le 1 n’est pas enlevé.

L’écart-type le plus utilisé est donc le second, celui où on divise les différences non pas par le nombre de différences mais le nombre de différences moins 1.

4. Comprendre la différence entre l’écart-type et l’erreur-type

Pour ceux qui auront une formation à composante statistique, vous pourrez être amené à expliquer en entretien ou à vos collègues la différence entre l’écart-type (standard deviation) et l’erreur-type (standard error). 

La première différence, c’est que l’écart-type s’applique à des données, alors que l’erreur-type s’applique à la statistique de la moyenne. 

A chaque fois, qu’un échantillon est pris, sa moyenne va servir à estimer la moyenne de la population. Bien-sûr, toutes les moyennes des échantillons ne sont pas identiques. Il existe une variabilité. Certains sont plus proches de la réalité que d’autre. Cette variabilité des résultats entre les échantillons est donnée par l’erreur-type. Ainsi un intervalle à l’intérieur duquel la moyenne de la population se tient pourra être estimé.

5. En langage mathématique, l’écart-type donne quoi ?

Pour désigner nos valeurs, le mathématicien utilise la lettre X.

  • Xi représente la ième valeur de l’échantillon. Si on a 15 valeurs alors i prend les valeurs de 1 à 15 ou plus généralement les valeurs de 1 à n.
  • La moyenne de ces Xi est symbolisée par un X avec une barre au dessus.

Pour calculer l’écart-type, on a parlé de trois étapes :

  1. sum(Xi-Xbar)2 Tout d’abord la différence entre chaque Xi et la moyenne X barre est calculée. Elles sont mises au carré. Puis, la somme de ces valeurs en est faite. On en profite pour préciser que les valeurs de i vont de 1 à n.
  2. sum(Xi-Xbar)2 / (n-1) Après, il s’agit de calculer la moyenne de ces valeurs
  3. racine(sum(Xi-Xbar)2 / (n-1)) Enfin, la statistique est convertie en une unité comparable à celle de la moyenne via la racine carré.

6. Et en langage SAS, comment trouver la valeur d’un écart-type ?

Dans tous les cas suivant, le dénominateur est n-1.

6.1 Fonction STD : La fonction STD (standard deviation) retourne la valeur de l’écart-type.

proc sql;
   select std(age) as std_age
   from sashelp.class;
quit;

6.2 Calcul manuel : dans un premier temps, la différence avec l’âge moyen est calculée pour chaque record. Chaque différence est mise au carré. Dans un deuxième temps, la somme de ces différences est divisée par le nombre de records moins 1. Enfin, la racine carrée du tout est prise.

proc sql;
   create table step1 as
      select (age-mean(age))**2 as step1
      from sashelp.class;
   select sqrt(sum(step1)/(count(*)-1)) as step2_3
      from step1;
quit;

6.3 Les procédures PROC MEANS et PROC SUMMARY : dans les exemples ci-dessous, j’ai volontairement choisi l’instruction ODS OUTPUT pour extraire les statistiques dans un data set.

proc means data=sashelp.class;
var age;
ods output Summary=proc_means;
run;

proc summary data=sashelp.class print;
   var age;
   ods output Summary=proc_summary;
run;

6.4 La procédure PROC UNIVARIATE : deux sorties fournies par la procédure UNIVARIATE sont indifféremment disponible.

proc univariate data=sashelp.class;
   var age;
   ods output Moments=proc_univ_opt1;
   ods output BasicMeasures=proc_univ_opt2;
run;