formation stata
Transcription
formation stata
Evelyne Fournier - Registre des tumeurs du Doubs CHU Besançon 26-27/11/2012 1 Présentation du logiciel STATA 12 26-27 novembre 2012 Sommaire 1 PREAMBULE 6 2 PRESENTATION DE L'INTERFACE 7 2.1 ECRAN D'ACCUEIL DE STATA 12 7 2.2 L'EDITEUR DE DO-FILES 8 2.3 LE DATA EDITOR 9 3 LA SYNTAXE STATA 10 3.1 ORGANISATION GENERALE 10 3.2 LES OPERATEURS SOUS STATA 12 3.3 GESTION DES VALEURS NUMERIQUES OU TEXTES 12 3.4 STATA HELP 13 4 OUVRIR UN FICHIER DE DONNEES EXTERNES 14 4.1 IMPORTATION D'UN FICHIER DE DONNEES EXCEL 14 4.2 IMPORTATION D'UN FICHIER DE DONNEES TEXTE 14 4.3 IMPORTATION D'UN FICHIER DE DONNEES TEXTE (OU EXCEL) DONT LES EN-TETES DE COLONNES SONT PRESENTES MAIS PAS EN 1 ERE LIGNE 15 4.4 COPIER-COLLER DES DONNEES DEPUIS EXCEL 15 4.5 LES PROBLEMES DE MEMOIRE - POUR LES ANCIENNES VERSIONS DE STATA 15 4.6 SAUVEGARDER/EXPORTER UN FICHIER 16 5 DECRIRE LE FICHIER, EN AVOIR UN APERCU 17 5.1 COMMANDE DESCRIBE 17 5.2 COMMANDE LIST 17 5.3 COMMANDE CODEBOOK 18 5.4 COMMANDE COUNT 19 6 SELECTION OU SUPPRESSION DE DONNEES OU DE VARIABLES 20 6.1 GARDER DES VARIABLES OU DES OBSERVATIONS 20 6.2 SUPPRIMER UNE VARIABLE OU DES OBSERVATIONS 20 6.3 ORGANISER L'ORDRE DES VARIABLES DANS LE FICHIER DE DONNEES 20 6.4 TRIER LES OBSERVATIONS D'UN FICHIER DE DONNEES : SORT, GSORT 21 6.5 CHANGER LE NOM D'UNE VARIABLE 21 6.6 CHANGER SIMULTANEMENT LE NOM DE PLUSIEURS VARIABLES 21 7 CREATION ET MANIPULATION DU CONTENU DE VARIABLES 23 7.1 VARIABLES NUMERIQUES 23 7.1.1 Création de variables dichotomiques 23 7.1.2 Création de variables en classe 23 EF – 26-27/11/2012 2 7.1.3 Créer n variables binaires à partir d'une variable à n modalités 24 7.1.4 Création de variables quantitatives : moyennes, min max d'autres variables 25 7.2 CREATION DE VARIABLES ALEATOIRES 25 7.3 VARIABLES EN TEXTE 27 7.3.1 Modifier la casse, calculer le nombre de caractères d'une chaîne 27 7.3.2 Extraire une chaîne de caractère dans une autre chaîne de caractère 27 7.3.3 Faire un édition rechercher-remplacer 27 7.3.4 Rechercher un texte et renvoyer une valeur si texte présent 28 7.3.5 Concatener du texte : 28 7.3.6 Eclater du texte en plusieurs colonne 28 7.4 VARIABLES SYSTEMES 28 7.5 VARIABLES DATE 29 7.6 CHANGER UNE VARIABLE DE FORMAT 29 7.7 REMPLACER OU RECODER DES VARIABLES 30 8 COMBINER DES FICHIERS DE DONNEES 31 8.1 AJOUTS D'OBSERVATIONS 31 8.2 FUSION DE FICHIERS 32 9 LABEL ET ANNOTATIONS 33 10 CHANGER LA FORME DES DONNEES EN MEMOIRE OU LES TRANSFORMER EN UN FICHIER DE STATISTIQUES 34 10.1 FICHIERS DE SOMMES, DE MOYENNES 34 10.1.1 34 Commande collapse 10.2 CREER UN FICHIER DE FREQUENCE 10.2.1 Commande contract 35 35 10.3 INVERSER LES LIGNES EN COLONNES OU LES COLONNES EN LIGNE 36 11 37 STATISTIQUES DESCRIPTIVES 11.1 TRI A PLAT, TABLEAUX CROISES 37 11.2 DESCRIPTIONS DE VARIABLES CONTINUES 38 11.2.1 Commande summarize 38 11.2.2 Commande tabstat 38 11.2.3 Commande mean 38 11.3 TESTS DE NORMALITES 39 11.4 TESTS D'ASSOCIATIONS 40 11.4.1 Test de la significativité du coefficient de corrélation (pwcorr) 40 11.4.2 Comparaison de deux moyennes (ttest) 40 11.4.3 Comparaison de plus de deux moyennes (oneway anova) 41 11.4.4 Comparaison de la distributions de variables catégorielles (chi2) 41 12 MODELES MULTIVARIES 42 12.1 REGRESSION LOGISTIQUE 42 12.1.1 43 La régression logistique pas à pas ascendant ou descendant 12.2 REGRESSION LINEAIRE 45 12.2.1 Régression pas à pas ascendant 46 12.2.2 Test du rapport de vraisemblance : 46 13 COMMANDES POUR REPETER LES ANALYSES OU FAIRE DES BOUCLES 47 EF – 26-27/11/2012 3 13.1 FOREACH 47 13.2 FORVALUES 47 13.3 FOR VAR 47 14 QUELQUES GRAPHIQUES 48 14.1 A PARTIR DE L'EDITEUR GRAPHIQUE 48 14.2 A PARTIR DE L'EDITEUR DE COMMANDES 48 EF – 26-27/11/2012 4 Description des fichiers utilisés Births Dataset (births.dta) This dataset is distributed with the textbook: Hills M, De Stavola BL. A Short Introduction to Stata for Biostatistics. London, Timberlake Consultants Ltd. 2002. http://www.timberlake.co.uk The dataset concerns 500 mothers who had singleton births in a large London hospital. Codebook Variable id bweight lowbw gestwks preterm matage hyp sex sexalph Labels subject number birth weight (grams) birth weight < 2500 g 1=yes, 0=no gestational age (weeks) gestational age < 37 weeks 1=yes, 0=no maternal age (years) maternal hypertension 1=hypertensive, 0=normal sex of baby 1=male, 2=female sex of baby (alphabetic coding) “male”, “female” Source: Stoddard GJ. Biostatistics and Epidemiology Using Stata: A Course Manual [unpublished manuscript] University of Utah School of Medicine, 2011. http://www.ccts.utah.edu/biostats/?pageId=5385 EF – 26-27/11/2012 5 lbw2.dta Fichier provenant d'une étude portant sur les facteurs de risques associés à un faible poids à la naissance (fichier ressource stata) id : identification code low : birth weight<2500g age : age of mother lwt : weight at last menstrual period race : race smoke : smoked during pregnancy ptl : premature labor history (count) ht : has history of hypertension ui : presence, uterine irritability ftv : number of visits to physician during 1st trimester bwt : birth weight (grams) race2 : race3 : qdv.dta Extraits d'une étude longitudinale portant sur la qdv de patients avec cancer (questionnaire QLQ-C30) suivi : Passation des questionnaires à baseline (suivi 0), 3 mois (suivi 1) 6 mois (suivi 2) 12 mois (suivi 3) rt ct : radiothérapie chimiothérapie effort promenade : items du qlqc30 gh pf.. dimensions du QLQC30 EF – 26-27/11/2012 1 6 PREAMBULE Sur la clef USB se trouvent tous les fichiers utilisés pour ces journées de formation. Copiez les sur un répertoire de votre choix sur votre poste Ouvrez Stata Puis tapez la commande cd + votre chemin ex : cd c:\data2 use births.dta (Data from 500 births) Quand vous appellerez vos fichiers au fur et à mesure de l'avancement de le formation, vous n'aurez plus qu'à saisir leur nom comme dans l'exemple ci-dessus. Par défaut Stata ira les chercher dans le chemin que vous venez de spécifier. EF – 26-27/11/2012 2 7 PRESENTATION DE L'INTERFACE 2.1 Ecran d'accueil de Stata 12 A A- Propriétés des variables liste des commandes B- Propriété du fichier exécutées de données Fenêtre de log liste + label + format des variables présentes dans le fichier de données Fenêtre de saisie manuelle des commandes Log et cmdlog ouverts 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 : Gestion des fichiers : Ouvrir, enregistrer, imprimer (imprime les résultats) 4 5 6 : Commencer / suspendre un log ; nouvelle fenêtre du viewer (fenêtre d'aide), graphique 7 : Ouvrir un fichier de commande (*.do dans le do-file editor) 8 9 : Ouvrir le fichier de données en mode tableur, explorer le fichier de données (voir sans pouvoir le modifier) 10 11 12 : Manager les variables, Arrêter l'exécution d'un programme Raccourcis clavier utiles, curseur placé sur la ligne de commande : - touche page précédente : permet d'aller aux commandes exécutées précédemment - touche page suivante : permet d'aller aux commandes exécutées après la ligne en cours - touches origines et fin : déplacement en début et fin de commande - touche "Esc" : rafraîchi l'écran de commande Les fichiers de log permettent d'enregistrer sous format texte chacune des analyses (commandes et résultats) exécutées depuis un fichier. ils sont très utiles pour faire un suivi des modifications amenées à un fichier ou garder une trace des résultats de son analyse. B EF – 26-27/11/2012 2.2 8 L'éditeur de Do-Files L'éditeur de dofile s'ouvre en cliquant sur l'icône encadré ci-dessous de la barre d'outil. L'éditeur de dofile permet d'ouvrir plusieurs dofile simultanément. Il permet de copier-coller les commandes. Les commandes rédigées dans le dofile sont identiques à celle rédigées dans la zone de commande. Le dofile permet par ailleurs d'ajouter des annotations en fin de ligne (comme ci-dessus), ce que ne permet pas la rédaction commandes dans la zone de commande. La commande "clear all" permet de réinitialiser complètement Stata, c’est-à-dire à la fois ne plus avoir de fichier de données en cours, mais aussi enlever de la mémoire tous les programmes qui pourraient tourner ou les matrices qui pourraient encore être chargées en mémoire. En passant par l'éditeur de programme est alors possible : - d'ajouter des commentaires en faisant précéder la ligne de "*" ou en terminant une commande par " //" (respecter l'espace avant les 2 //) - de créer des macros - de générer des variables qui ne vont exister que le temps du programme - de faire des boucles etc L'éditeur de programme est recommandé quand on veut pouvoir reproduire son analyse autant de fois qu'on le souhaite. EF – 26-27/11/2012 2.3 9 Le Data Editor Le data editor peut soit être appelé par la commande "edit", soit appelé en cliquant sur son icone. Le data editor permet d'afficher le contenu d'un fichier de données et de le modifier directement à l'écran (non recommandé). Il permet aussi de copier-coller les données provenant d'un fichier Excel. Les variables numériques s'affichent en noir, les variables numériques avec label sur les valeurs s'affichent en bleu, les variables de nature texte s'affichent en rouge. Ouvrir le fichier birth.dta et ouvrir le Data Editor En haut à droite se trouvent la liste des variables présentes dans le fichier. On coche/décoche les variables que l'on souhaite (ou non) avoir à l'écran. Au milieu à droite se trouve un éditeur des propriétés des variables. On peut modifier ici directement le label de variable, son type, son format d'affichage, ses étiquettes de valeurs. Exercice : A partir du fichier birth.dta, créez par l'intermédiaire de l'éditeur de données le label sex 1 Garçon 2 Fille pour la variable "sex" EF – 26-27/11/2012 10 Fermez le data Editor et observez ce qui se passe sur l'écran de Log et dans la liste des commandes de l'écran principal. 3 LA SYNTAXE STATA 3.1 Organisation Générale [prefix:] command [varlist] [if] [in] [weight] [, options] [prefix:] : commande de prefix sur d'autres commandes stata [if] et [in] permettent de restreindre l'analyse aux cas répondant aux critères de sélection Exemple : Ouvrez le fichier births.dta situé dans votre répertoire de travail et copiez-collez la syntaxe ci-dessous dans la fenêtre de saisie des commandes use "births.dta", clear list bweight lowbw if sex==2 in 1/5 , noobs où: “list” est la commande qui liste les informations (les informations sont les lignes de données, listées dans le même ordre que celui présent dans le fichier de données) “bweight lowbw” composent la "varlist", la liste des variables devant être listées “if sex==2” est "l'expression", elle informe stata de ne lister que les observations pour lesquelles la variable sex est égale à 2 “in 1/5” est le "range", il informe Stata de ne lister que les observations de 1 à 5. “,” la virgule informe Stata que les options vont suivre “noobs” est une option, elle informe Stata de ne pas numéroter les observations. list bweight lowbw if sex==2 in 1/5 , noobs +-----------------+ | bweight lowbw | |-----------------| | 2974 0 | | 2620 0 | +-----------------+ Le "by varlist" est optionnel, il informe Stata qu'il doit exécuter la commande pour chacune des combinaisons des variables présentes dans le "by varliste". Pour l'utiliser il faut d'abord trier les variables inclues dans le "by varlist". Par exemple (copier-coller cette syntaxe dans votre éditeur de dofile) : * trie des données en préparation du "by" sort sexalph * demande de faire un tri à plat pour chacun des sous-groupes formé par les valeurs de sexalph by sexalph: tabulate lowbw hyp L'utilisation de “*” indique que la ligne entière qui suit est un commentaire. Un commentaire est simplement affiché dans la fenêtre de résultats, sans que Stata cherche à l'exécuter. EF – 26-27/11/2012 11 On peut combiner ces deux commandes en une seule en utilisant bysort bysort sexalph: tabulate lowbw hyp // combine by avec sort * plus besoins du sort devant le by si on utilize la commande bysort bysort sexalph: tabulate lowbw hyp --------------------------------------------------------------------------------------------------------------------------------------------> sexalph = female low birth | hypertens weight | 0 1 | Total -----------+----------------------+---------0 | 182 21 | 203 1 | 25 8 | 33 -----------+----------------------+---------Total | 207 29 | 236 --------------------------------------------------------------------------------------------------------------------------------------------> sexalph = male low birth | hypertens weight | 0 1 | Total -----------+----------------------+---------0 | 206 31 | 237 1 | 15 12 | 27 -----------+----------------------+---------Total | 221 43 | 264 by sex, sort : summarize bweight, detail ---------------------------> sex = 1 birth weight ------------------------------------------------------------Percentiles Smallest 1% 1019 693 5% 2098 981 10% 2497 1019 Obs 264 25% 2922.5 1203 Sum of Wgt. 264 50% 75% 90% 95% 99% 3296 3604 3985 4197 4512 Largest 4501 4512 4516 4553 Mean Std. Dev. 3229.902 633.6428 Variance Skewness Kurtosis 401503.2 -.8376309 4.703001 ---------------------------> sex = 2 birth weight ------------------------------------------------------------Percentiles Smallest 1% 864 628 5% 1618 708 10% 2297 864 Obs 236 25% 2801.5 924 Sum of Wgt. 236 50% 75% 90% 95% 99% 3107 3386 3739 3919 4035 Largest 4027 4035 4133 4300 Mean Std. Dev. 3032.831 626.816 Variance Skewness Kurtosis 392898.3 -1.246149 5.29548 EF – 26-27/11/2012 3.2 12 Les opérateurs sous stata Les signes != veut dire différent & et | ou Ce sont eux qui doivent être utilisés (pas de "and" ou "or" ou "<>") Autres opérateurs : <= >= == 3.3 Gestion des valeurs numériques ou textes Pour signifier une égalité dans une commande if : double égal == Toujours sur le fichier births.dta Copiez collez la syntaxe suivante dans le dofile editor use births.dta gen hypertension="OUI" if hyp==1 // (On note au passage la double guillemet qui entoure le champ de caractère) gen week30=1 if gestwks<30 // On génère un champ week30 si le nombre de semaines de gestation est inférieur à 30 - il faut remplacer les vides par des 0 ensuite replace week30=0 if gestwks>=30 & gestwks!=. * plus avancé (et plus compliqué à gérer, attention) gen week40=gestwks<40 // On créé en une seule commande la variable week40 qui prend la valeur 1 si gestwks<40, 0 sinon. Une variable numérique vide est bien différenciée ici de + l'infini Pour une variable en format texte/caractère, une cellule vide s'écrit "" (doubles guillemets vides). Elle s'écrit "." (point) pour du numérique si var1 est en numérique et que l'on veut cibler les cellules vides : edit if var1==. si var1 est en texte et que l'on veut cibler les cellules non vides : edit if var1!="" Gestion des données manquantes : Pour des variables numériques, les cellules vides seront considérées comme des infinis positifs Pour des variables en texte, les cellules vides sont considérées comme les valeurs les plus faibles Conséquence : si on trie par une variable ayant des valeurs manquantes, celles-ci seront donc triées en début du fichier si cette variable est de nature texte, en fin de fichier si elle est de nature numérique EF – 26-27/11/2012 3.4 13 Stata Help Afin de connaitre la façon de construire une syntaxe, il suffit de taper le nom de cette syntaxe précédée de help ou h h + nom de la commande h h h h egen gen codebook reshape.... Par exemple : help list // look up syntax for list command Si l'on ne sait pas vraiment quelle commande permet d'exécuter ce que l'on souhaite faire, il faut aller dans "Help Contents" puis suivre les liens proposés. Une autre solution est de chercher plus généralement par mot clef findit + nom du mot clef findit time ------------------------------------------------------------search for time (manual: [R] search) -----------------------------------------------------------------------Keywords: Search: time (1) Official help files, FAQs, Examples, SJs, and STBs (2) Web resources from Stata and from other users Exercice : Utiliser le fichier births.dta Exécutez les lignes suivantes permettant de remplacer quelques cellules par des données manquantes replace lowbw = . in 3 replace lowbw = . in 8 replace lowbw = . in 21 replace lowbw = . in 22 replace lowbw = . in 27 replace hyp = . in 5 replace hyp = . in 13 A partir de hyp - l'aide Stata, trouver comment faire un tableau croisé (commande tabulate) des variables lowbw faire afficher des pourcentages en lignes et colonnes faire afficher les classes manquantes faire afficher un test du chi2 et un test de Fisher Exercice : Quelle est le nom de la fonction mathématique Stata qui permet de générer une variable aléatoire uniforme comprise entre 0 et 1 ? EF – 26-27/11/2012 4 14 OUVRIR UN FICHIER DE DONNEES EXTERNES Stata peut lire les fichiers externes Excel, ASCII délimités, créés par un tableur ou un gestionnaire de base ère de données (séparateur de variables différent de l'espace). La 1 ligne du fichier doit contenir les noms de variables. Si ce n'est pas le cas, il faut rajouter l'option "noname" lors de l'importation. 4.1 Importation d'un fichier de données Excel Menu File Import Excel spreadshit, cliquer sur "Browse" et sélectionner le fichier "births_import.xlsx" qui se trouve dans votre répertoire de travail. Ne pas oublier de cocher si votre fichier de données contient les entêtes de colonnes. Ou sinon taper la commande suivante (en adaptant le chemin à votre poste) : import excel "births_import.xlsx", sheet("Sheet1") firstrow clear La commande clear permet d'effacer de l'écran et de la mémoire de Stata le fichier de données en cours d'utilisation (avant ouverture du fichier Excel). Vous pouvez choisir de garder la casse des noms de variables (preserve), de tout mettre en minuscule (lower) ou en majuscule (upper) 4.2 Importation d'un fichier de données texte Ouvrir le fichier base_registre.csv (fichier de données fictives) Menu File Import ASCII data created with a spreadsheet Ne pas oublier de lui spécifier le délimiteur et, si vous avez déjà un fichier à l'écran, spécifier l'instruction "replace data in memory". EF – 26-27/11/2012 15 Ou sinon en tapant la commande "insheet" insheet using "D:\ chemin \base_registre.csv", delimiter(";") clear Si vous avez bien créer votre chemin de travail en début de séance, il vous suffit de taper insheet using "base_registre.csv", delimiter(";") name clear 4.3 Importation d'un fichier de données texte (ou Excel) dont les en-têtes de colonnes sont présentes mais pas en 1ère ligne ère Par défaut Stata utilise la 1 ligne du fichier texte ou Excel pour définir les noms des variables. Si les noms des variables étaient en ligne 3, par défaut à l'importation Stata attribuerait les noms V1 V2 V3…Vn à l'ensemble des variables du fichier. Il serait fastidieux de passer du temps à les renommer. Il existe une astuce pour que Stata récupère tout seul le nom des variables. Cela consiste à importer le fichier de données, éliminer les lignes qui ne servent à rien, exporter le fichier dans un fichier temporaire, importer ce fichier temporaire en spécifiant la lecture du nom des variables. Enfin il faut supprimer le fichier temporaire créé. Exemple de fichier insheet using "heart_rate.csv", delimiter(";") clear edit 1 2 3 4 5 6 7 V1 Controls V2 V3 Id 1 2 3 4 Age 40 48 25 36 heartr 120 125 119 90 drop in 1/2 // * suppression des 2 premières lignes outsheet using temp1.csv, comma nonames replace // exportation d'un fichier temporaire format texte sans les noms de variables insheet using temp1.csv, clear names // importation du fichier temporaire erase temp1.csv // suppression du fichier temporaire 4.4 Copier-coller des données depuis Excel Si vous travaillez sur de petits fichiers, il est possible de copier-coller les données directement depuis Excel. Ouvrez sous Excel le fichier refmonde.xls. Sélectionner les colonnes et copier leur contenu (avec les entêtes de colonnes). Sous stata, tapez clear pour fermer votre fichier de données (si vous en aviez un d'affiché à l'écran). Cliquez sur le bouton "Data editor". Coller. Fermer le data éditor. Enregistrez le fichier save "refmonde.dta" 4.5 Les problèmes de mémoire - Pour les anciennes versions de Stata Stata charge le fichier de données dans la mémoire vive de l'ordinateur. Par défaut, Stata ne réserve qu'une petite partie de mémoire au fichier de données. Il peut être indispensable de rajouter de la mémoire par une instruction de type : EF – 26-27/11/2012 16 set mem 200M, permanent Par ce biais, 200M seront attribués à Stata à chaque ouverture du logiciel. La quantité de mémoire vive attribuable à stata est avant tout limitée par la mémoire vive disponible sur le pc. Depuis la version 12 cette fonction n'est plus nécessaire, Stata s'adapte tout seul à la taille du fichier de données sans que l'utilisateur ait quoi que ce soit à faire. 4.6 Sauvegarder/Exporter un fichier Une fois votre fichier à l'écran vous pouvez le sauvegarder - en cliquant sur l'icône traditionnelle en suivant le chemin File Save as Mon chemin\mon fichier.dta en écrivant dans la fenêtre de commandes save "heart_rate.dta", replace L'option replace permet de remplacer le fichier si celui-ci existe déjà (important pour les programmes utilisant les mêmes noms de fichier). Vous pouvez exporter le fichier - sous format Excel via la commande export export excel using "heart_rate.xls", firstrow(variables) replace - sous format texte via la commande outsheet outsheet using "heart_rate_maj.csv", delimiter(";") replace Ou bien en suivant le menu déroulant File export EF – 26-27/11/2012 5 5.1 17 DECRIRE LE FICHIER, EN AVOIR UN APERCU Commande describe La commande "describe" ("d" de raccourci) permet d'obtenir une description de toutes les variables connues dans le fichier de données (nom, format, étiquettes) Ouvrir le fichier de données births.dta use "births.dta", clear d Contains data from births.dta obs: 500 Data from 500 births vars: 9 30 Oct 2003 22:39 size: 11,500 -------------------------------------------------------------------------------------------------------------------------------------------storage display value variable name type format label variable label -------------------------------------------------------------------------------------------------------------------------------------------id float %9.0g identity number bweight float %8.0g * birth weight lowbw byte %9.0g * low birth weight gestwks float %9.0g * gestation period preterm byte %9.0g * pre-term matage byte %8.0g maternal age hyp byte %8.0g * hypertens sex byte %8.0g * sex of baby sexalph str6 %9s * sex of baby * indicated variables have notes -------------------------------------------------------------------------------------------------------------------------------------------Sorted by: id Comme vu précédemment, afin de voir le contenu du fichier et accéder aux données vous pouvez : - taper "edit" ou cliquer sur le bouton "data editor" : vous accédez à l'ensemble du fichier de données - edit + nom de la variable ou edit + condition : édition de la variable ou des individus répondant aux critères de sélection edit bweight lowbw 5.2 Commande list Si vous souhaitez juste avoir un aperçu des observations, list permet de liste les observations sur l'écran de résultats : list [varlist] [if] [in] [, options] use "births.dta", clear l // list toutes les lignes et toutes les variables contenues dans le fichier l bweight lowbw /*liste toutes les lignes de 2 variables*/ l bweight lowbw, separator(10) /*séparateur entre les lignes - par défaut 5*/ l bweight lowbw in 1/20 /*liste les 20 1ères lignes de 2 variables*/ l sex* /*liste toutes les lignes de toutes les variables commençant par "sex"*/ l if matage<=25 /*liste toutes les variables pour les patientes dont l'âge est inférieur ou égal à 27 */ EF – 26-27/11/2012 18 l if matage<=25 100. 206. 341. 410. 434. 460. 482. +--------------------------------------------------------------------------+ | id bweight lowbw gestwks preterm matage hyp sex sexalph | |--------------------------------------------------------------------------| | 406 3041 0 39.77 0 25 0 1 male | | 164 3261 0 37.63 0 25 1 1 male | | 439 1324 1 31.29 1 25 1 2 female | | 338 2736 0 36.24 1 24 1 2 female | | 314 3376 0 40.64 0 25 0 2 female | |--------------------------------------------------------------------------| | 81 3341 0 38.58 0 25 0 2 female | | 448 3122 0 40.78 0 23 0 2 female | +--------------------------------------------------------------------------+ A noter Stata est sensible à la casse, bweight est différent de Bweight, BWEIGHT etc. 5.3 Commande codebook Permet de décrire le contenu des variables codebook [varlist] [if] [in] [, options] use "births.dta", clear (Data from 500 births) codebook bweight -------------------------------------------------------------------------------------------------------------------------------------------bweight birth weight -------------------------------------------------------------------------------------------------------------------------------------------type: range: unique values: mean: std. dev: percentiles: numeric (float) [628,4553] 438 units: missing .: 1 0/500 3136.88 637.451 10% 2401.5 25% 2861 50% 3188.5 75% 3551.5 90% 3805.5 Important car permet de voir l'existence de valeurs manquantes + les caractéristiques de la variable codebook * : donne des informations sur tout le fichier EF – 26-27/11/2012 5.4 19 Commande count Obtenir quelques chiffres rapides count [if] [in] use "births.dta", clear (Data from 500 births) count if matage>30 401 sort hyp by hyp : count if matage>30 -> hyp = 0 345 --------------------------------------------------------------------------------------------------------------------------------------------> hyp = 1 56 EF – 26-27/11/2012 6 6.1 keep keep keep keep 20 SELECTION OU SUPPRESSION DE DONNEES OU DE VARIABLES Garder des variables ou des observations nomvar nomvar1 nomvarn : garde dans le fichier nomvar1 ET nomvarn nomvar1-nomvarn : garde dans le fichier nomvar1 A nomvarn nomvar* (ne garde dans le fichier que les variables commençant par nomvar) use "births.dta", clear preserve keep if matage>30 restore preserve keep if preterm==1 restore preserve keep if lowbw==1 & restore preterm==1 preserve drop sexalph // suppression d'une variable restore Exercice : Garder dans le fichier les femmes de plus de 40 ans et sans hypertension 6.2 Supprimer une variable ou des observations drop nomvar drop nomvar1 nomvarn : élimine du fichier nomvar1 ET nomvarn drop nomvar1-nomvarn : élimine du fichier nomvar1 A nomvarn drop nomvar* (ne garde dans le fichier que les variables commençant par nomvar) drop diagdate* : enlève toutes les variables dont le nom commence par diagdate diagdateb…) use "births.dta", clear preserve drop if matage>30 restore preserve drop if preterm==1 restore preserve drop if lowbw==1 & restore preterm==1 preserve keep sexalph // ne garde qu'une seule variable dans le fichier restore 6.3 Organiser l'ordre des variables dans le fichier de données (diagdate1, EF – 26-27/11/2012 21 Il est possible de changer l'ordre d'affichage des variables. Soit un fichier de données présentant les variables dans l'ordre suivant : v1 v3 v12 v5 v8 v2 v10 v15 v60 v6 order v8 v2 : le fichier devient organisé de la façon suivante v8 v2 v1 v3 v12 v5 v10 v15 v60 v6 Si l'on veut maintenant que v12 devienne la dernière variable (v12 vient se placer après v6) move v12 v6 v8 v2 v1 v3 v5 v10 v15 v60 v6 v12 Si l'on veut maintenant que v60 soit la 3ème variable : move v60 v2 Si l'on veut maintenant que le fichier soit organisé par ordre alphabétique : aorder Faire des essais sur l'un des fichiers de données Exercices : use "base_registre.dta", clear Organiser le le fichier dans l'ordre suivant : identifiant - année naissance - mois naissance - jour naissance année diagnostic - mois de diag - jour de diag. Déplacer la variable loc vers la variable t_diag_topo. Organiser les variables par ordre alphabétique. 6.4 Trier les observations d'un fichier de données : sort, gsort sort varlist [in] [, stable] sort, gsort use "births.dta", clear sort sex gestwks gsort sex -gestwks Règles de tri : règles courantes vu en début de séance 6.5 Changer le nom d'une variable rename ancien_nom nouveau_nom use "base_registre.dta", clear rename i_sexe sexe save "base_registre.dta", replace 6.6 Changer simultanément le nom de plusieurs variables En utilisant des parenthèses pour spécifier les multiples variables anciennes et nouvelles variables. rename (v1 v2) (v2 v1) Echange le nom de v1 pour v2 et v2 pour v1. Il n'y a pas de limites au nombre de variables listées EF – 26-27/11/2012 22 rename (a b c) (b c a): Echange les noms. Renomme a b, b c, et c a. rename (a b c) (c b a): Renomme a c and c a, mais laisse b comme cela Enlever des préfixes ou des suffixes rename jan* *: Enlève le prefix jan. rename *jan *: Enlève le suffix jan. Stata 12 possède de nouvelles fonctions très développées pour tout ce qui concerne les changements de nom de variables, n'hésitez pas à consulter l'aide. Exercice : use "villes.dta", clear Renommer num_patient en id_pat Enlever le "1" qui est présent à la fin des champs adresse1 cp1 ville1 EF – 26-27/11/2012 7 23 CREATION ET MANIPULATION DU CONTENU DE VARIABLES Vous pouvez taper " h functions" et "h gen " ou "h egen" pour avoir un aperçu plus large des possibilités de stata dans ce domaine. Génération de variables : commande "generate" generate [type] var1 =exp [if] Modification de variables existantes : commande replace replace var1 =exp [if] 7.1 Variables numériques Génération de variables : commande "generate" , modification avec replace + Extention de la commande generate : egen egen [type] newvar = fcn(arguments) [if] [in] [, options] Exemples 7.1.1 Création de variables dichotomiques use births.dta, clear gen faible_poids=inrange( bweight,0,2500) replace risq=0 if risq==. : créer la variable dichotomique enfant qui prend la valeur 1 si le poids à la naissance est inférieur ou égal 2500 grammes, 0 sinon) gen risq=1 if matage>40 & matage!=. & hyp==1 : créé la variable dichotomique risq qui prend la valeur 1 si la mère a un age supérieur à 40 ans mais non vide et a une hypertension, 0 sinon) * autre solution gen risk2=(matage>40 & matage!=. & hyp==1) 7.1.2 Création de variables en classe Exercice : use births.dta, clear A l'aide de la fonction "gen", créer une variable clage qui contient l'âge maternel en classe de 5 ans gen clage=20 if matage>=20 & matage<25 replace clage=25 if matage>=25 & matage<30 etc Vérifions le résultat tabulate clage Mais c'est quand même très long à écrire. EF – 26-27/11/2012 24 "egen" est une fonction importante et très utile de Stata. Regarder dans "h egen" un aperçu de ses possibilités Exercices : use births.dta, clear A l'aide de la fonction "egen", créer la variable clage2 qui contient l'âge maternel en classe de 5 ans (aller dans h egen) Puis créer 4 groupes d'âge maternel de fréquences homogènes: Ne pas regarder tout de suite la solution svp ********************************** egen clage2=cut(matage), at(20(5)110)// Va créer des classes d'âges de 5 ans en partant de 20 jusqu'à 110 ans (il faut regarder la structure des variables avant). tabulate clage2 (ou tab clage) egen clage3=cut(matage), group(4) 7.1.3 Créer n variables binaires à partir d'une variable à n modalités A partir de la variable clage2 créée précédemment, nous allons crééer une variable indicatrice clage_5clac : cette variable sera en fait constituée de 5 sous-variables, et dans une analyse la classe de référence pourra alors simplement être choisie parmi l'une des 5 variables créées (et donc omise de l'analyse). use births.dta, clear egen clage2=cut(matage), at(20(5)110) tab clage2 * Création d'une variable indicatrice tab clage2, gen(clage_5clas) * Créé une variable ageb gen ageb=(matage<40) format 0/1 si age maternel<40 * Créé une combinaison de chacune des modalités des variables spécifiées dans le "group" egen age_preterm=group(ageb preterm) prendra les valeurs 1 à 4 tab ageb age_ | group(ageb preterm) ageb | 1 2 3 4 | Total -----------+--------------------------------------------+---------0 | 29 6 0 0 | 35 1 | 0 0 398 57 | 455 -----------+--------------------------------------------+---------Total | 29 6 398 57 | 490 tab preterm age_ | group(ageb preterm) pre-term | 1 2 3 4 | Total -----------+--------------------------------------------+---------0 | 29 0 398 0 | 427 1 | 0 6 0 57 | 63 -----------+--------------------------------------------+---------Total | 29 6 398 57 | 490 label def age_pr 1 "<40a,norm" 2 "<40a,Préterm" 3 ">40a,norm" 4 ">40a,Préterm" EF – 26-27/11/2012 7.1.4 25 Création de variables quantitatives : moyennes, min max d'autres variables La fonction egen permet aussi de créer des variables à partir soit pour une ligne donnée de la combinaison de plusieurs variables, soit pour une variable donnée de la combinaison de plusieurs lignes. * Création d'une valeur moyenne observée sur l'ensemble du fichier use "egenxmpl.dta", clear describe *Création d'un variable contenant la valeur moyenne de la variable cholestérol egen avg = mean(cholesterol) *Création d'une variable contenant l'écart à la moyenne du taux de cholestérol gen deviation =cholesterol-avg edit * Création d'une valeur médiane prenant compte des sous-groupes de patients use "egenxmpl2.dta", clear describe * Création d'une variable contenant, pour chacun des types de diagnostic, la *durée médiane de séjour by dcode, sort: egen medstay = median(los) *Création d'une variable contenant la différence entre la durée du séjour et la durée médiane du séjour de ce type de diagnostic generate deltalos=los-medstay edit Exercice : A partir du fichier "qdv.dta", créer une variable contenant le nombre de données manquantes pour chaque patient, et chaque temps pour les variables effort promenade lit aide travail loisir souffle mal repos dormir faible appetit etatsante. Créer une variable qui donne le temps pour lequel le score de qdv GH est la plus faible use "qdv.dta", clear Ne pas regarder tout de suite la solution svp ********************************** sort tumeur by tumeur : egen mingh=min(gh) gen temps_min=suivi if mingh==gh & gh!=. edit tumeur suivi gh mingh temps_min 7.2 Création de variables aléatoires Spécifier la valeur initiale de la randomisation avec set seed set seed {#|code} set seed 63520 * création d'une variable aléatoire prenant des valeurs comprises entre 0 et 1 gen alea=runiform() EF – 26-27/11/2012 26 Attention Stata possède une façon particulière de stocker les données en mémoire, notamment les entiers. Exemples d'erreurs qui peuvent arriver. use "base_registre.dta", clear *Créez la variable datediag2, simple copie de la variable "datediag" gen datediag2=datediag *Tapez la commande count if datediag2!= datediag 10093 Que constatez-vous ? Quand vous manipulez certaines données, vérifiez bien que le format de création est compatible avec le format attendu. Ici le format de la date de naissance AAAAMMJJ, 8 digit, est trop long pour être contenu dans le format http://blog.stata.com/2012/04/02/the-penultimate-guide-to-precision/#section3 Integer types 3.1 Stata provides three integer storage formats: byte, int, and long. They are 1 byte, 2 bytes, and 4 bytes, respectively. 3.2 Integers may also be stored in Stata’s IEEE 754-2008 floating-point storage formats float and double. 3.3 Integer values may be stored precisely over the ranges storage type minimum maximum -----------------------------------------------------byte -127 100 int -32,767 32,740 long -2,147,483,647 2,147,483,620 -----------------------------------------------------float -16,777,216 16,777,216 double -9,007,199,254,740,992 9,007,199,254,740,992 -----------------------------------------------------In addition, all storage types can record missing values ., .a, .b, ..., .z. The overall ranges of float and double were shown in (2.4) and are wider than the ranges for them shown here. The ranges shown here are the subsets of the overall ranges over which no rounding of integer values occurs. EF – 26-27/11/2012 7.3 27 Variables en texte help string_functions help functions 7.3.1 Modifier la casse, calculer le nombre de caractères d'une chaîne use "villes.dta", clear gen minuscule=lower(ville) // créer une variable "minuscule" qui contient "nom" transformé en minuscule gen majuscule=upper(minuscule) // créer une variable "majuscule" qui contient "minuscule" transformé en majuscule gen longueur=length(ville) // créer une variable "longueur" qui contient le nombre de caractères contenu dans "ville" 7.3.2 Extraire une chaîne de caractère dans une autre chaîne de caractère gen var2=substr(var1,ni,nbcar) ni = position de départ de l'extraction nbcar : nombre de caractères extraits Exemple : Dans le fichier villes.dta la variable cp contient le code postale et la commune de résidence use "villes.dta", clear gen dep=substr(cp1,1,2) gen ville_tronquee=substr(ville1,8,length(ville1)) enlève les espaces avant et après les chaînes de caractères (ltrim : enlève les espaces à gauche et rtrim ceux à droite) replace ville=trim(ville1) : 7.3.3 Faire un édition rechercher-remplacer subinstr(variablesource, caract_a_chercher, caractere_de_remplacement, toutes les occurrences ou non) (.) : toutes les occurrences sont recherchées puis remplacées dans la chaîne de caractère use "villes.dta", clear replace ville=subinstr(ville," ST ","SAINT ",(.)) // remplace la chaine de caractère "ST" par la chaine "SAINT " replace ville= subinstr(ville,"'"," ",(.)) // remplace la chaine de caractère "'" par un espace " " EF – 26-27/11/2012 7.3.4 28 Rechercher un texte et renvoyer une valeur si texte présent Si vous souhaitez rechercher un mot dans une chaine de caractère et connaitre son début d'emplacement, il existe la fonction index. gen doubs=index(ville1,"DOUBS") // renvoie le caractère à partir duquel commence le mot "DOUBS" 7.3.5 Concatener du texte : use "villes.dta", clear gen adrescpville= adresse1+" / "+ cp1 + " / "+ ville1 7.3.6 Eclater du texte en plusieurs colonne Reprenons la variable adrescpville contenant un code postal séparé d'un tiret puis le nom de la ville. split adrescpville, p("/") (ici le séparateur indiqué est "/") Il va y avoir création d'autant de variables adrescpville que de variables contenues dans la cellule initiales 7.4 Variables systèmes _n : numéro de l'observation courante _N : numéro de la dernière observation _pi : valeur de pi (3.1415926) use "villes.dta", clear sort cp1 gen numlign=_n by cp1 : gen nb_cp=_n by cp1 : gen nbmax_cp=_N by cp1 : egen mx=max(nb_cp) /*la même chose que précédemment, fait autrement*/ Dans le fichier "qdv.dta" La variable dc contient le statut vital du patient et prend la valeur 1 si le patient est décédé au temps i. Objectif : attribuer la valeur 1 à toutes les lignes concernant le patient (si un patient est décédé on veut que toutes les lignes le concernant de la colonne dc prennent la valeur 1) use "qdv.dta", clear gen dc=. replace dc replace dc replace dc replace dc replace dc replace dc replace dc replace dc replace dc replace dc replace dc replace dc replace dc replace dc edit gen dci=dc = = = = = = = = = = = = = = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 in in in in in in in in in in in in in in 3 8 12 13 17 21 26 31 36 40 42 48 50 55 EF – 26-27/11/2012 29 sort tumeur dc by tumeur : replace dc=dc[_n-1] if dc[_n-1]==1 & dc==. sort tumeur suivi by tumeur : gen difgh= gh[_n]- gh[_n+1] edit tumeur suivi gh difgh Cette syntaxe a un gros intéret quand il s'agit de remplacer des valeurs manquantes par des valeurs observées à un temps de mesure proche, parculièrement si les observations ont été relevées dans un ordre bien défini, souvent le temps. sort tumeur suivi If missing values occurred singly, then they could be replaced by the previous value: . replace myvar = myvar[_n-1] if missing(myvar) or by the following value: . replace myvar = myvar[_n+1] if missing(myvar) Here, the subscript notation used is that _n always refers to any given observation, _n-1 to the previous observation and _n+1 to the following observation, given the current sort order. There is not, of course, any observation before the first, or after the last, so myvar[0] is always missing, as is myvar for any observation 7.5 Variables date h date use " base_registre.dta", clear edit gen double date_diag=date(datediagstr,"DMY") format date_diag %d edit Soustraction d'une date connue (ex : date de dernière nouvelle – date de diagnostic pour obtenir une durée de suivie) gen dif= date("31/12/2012","DMY")-date_diag * pour vérifier le calcul, on fait afficher la date de point: gen double datept=date("31/12/2012","DMY") format datept %d edit datept 7.6 Changer une variable de format Pour convertir des variables textes en numériques destring [varlist] , {generate(newvarlist)|replace} [destring_options] Pour convertir des variables numériques en variables textes tostring varlist , {generate(newvarlist)|replace} [tostring_options] use "base_registre.dta", clear destring adiag, gen(adiag_num) tostring t_diag_topo, replace Il faut parfois rajouter l'option force. Attention, cela conduira à la perte de données. Cf aide en ligne EF – 26-27/11/2012 30 Autres fonctions utiles : encode et decode, pour changer des variables numériques avec label en string, ou string en numérique avec label use "qdv.dta", replace edit stade encode stade, gen(stade_num) 7.7 REMPLACER OU RECODER DES VARIABLES replace oldvar =exp [if] [in] recode varlist (rule) [(rule) ...] [, generate(newvar)] where the most common forms for rule are +----------------------------------------------------------+ | rule | Example | Meaning | |----------------+-------------+---------------------------| | # = # | 3 = 1 | 3 recoded to 1 | | # # = # | 2 . = 9 | 2 and . recoded to 9 | | #/# = # | 1/5 = 4 | 1 through 5 recoded to 4 | | nonmissing = # | nonmiss = 8 | all other nonmissing to 8 | | missing = # | miss = 9 | all other missings to 9 | +----------------------------------------------------------+ use "qdv.dta", replace encode stade, gen(stade_num) recode stade_num (1/3=0) (4/5=1), gen(stade_avance) edit stade_num stade_avance EF – 26-27/11/2012 8 8.1 31 COMBINER DES FICHIERS DE DONNEES Ajouts d'observations command append Fichier A use A.dta, clear append using B.dta Fichier A + Fichier B = Fichier B use "qdv.dta", clear keep if loc2==1 save "qdv_colon.dta " use "qdv.dta", clear keep if loc2==2 save "qdv_rectum.dta.dta" use " qdv_colon.dta", clear append using "qdv_rectum.dta.dta" tab loc2 Attention ! Bien lire les notes stata à l'issue du processus de fusion : Ex : "Datediag was byte in using data, will be string now" veut dire tout simplement que toutes les dates de diagnostics du fichier USING ont été supprimées et remplacées par des valeurs manquantes de format texte. Toutes les variables de même nom doivent avoir la même nature. Si une variable n'existe pas dans l'un des deux fichiers les valeurs seront manquantes pour le 2 réciproquement). ème (et EF – 26-27/11/2012 8.2 32 Fusion de fichiers Ajouts de variables à des observations, avec un identifiant commun entre les fichiers fusionnés commande merge Fichier A + Fichier B = Fichier A Fichier B Fichier Master + Fichier Using = Fichier Merge Ex : fusion de 2 fichiers à partir de l'identifiant tumeur. On supprime la date de dernière nouvelle dans l'un, ème on ne garde que cette variable dans le 2 (avec l'identifiant tumeur), puis on fusionne les observations. Les deux fichiers doivent être triés avec la même clef de tri use "qdv.dta", clear sort tumeur drop date_ddn save "qdv_sansddn.dta", replace use "qdv.dta", clear keep if suivi==0 keep tumeur date_ddn sort tumeur save "ddn.dta", replace use "qdv_sansddn.dta", clear merge tumeur using "ddn.dta" merge identifiant using "C:\FT_STATA\exmerge.dta" tab _merge Pour information, sur des fichiers de données plus compliqués : _merge=1 : observations ne provenant que du fichier qui était à l'écran lors de la fusion (ici qdv_sansddn) – appelé MASTER DATA _merge=2 : observations ne provenant que du fichier appelé lors de la fusion (ici fichier ddn.dta) – appelé USING DATA _merge=3 : observations communes aux deux fichiers A noter : le fichier "ddn.dta" ne contient qu'une seule date de dernières nouvelles par tumeur alors que le fichier "qdv_sansddn.dta" contient 4 lignes par tumeur. Stata duplique tout seul les informations. Attention aussi si plusieurs variables portent le même nom dans les deux fichiers, des options sont à choisir er nd (garder les valeurs du 1 fichier, garder les valeurs du 2 ). EF – 26-27/11/2012 9 33 LABEL ET ANNOTATIONS label data ["label"] use "qdv.dta", clear Donner un label à un fichier label data "Etude QDV" gen clage=cut(age), at(0(10)150) tab clage clage | Freq. Percent Cum. ------------+----------------------------------50 | 75 32.05 32.05 60 | 118 50.43 82.48 70 | 41 17.52 100.00 ------------+----------------------------------Total | 234 100.00 Donner un label à une variable label var clage "Classe d'âge" Définir un label pour des valeurs label define clagelab 50 "[50-59]" 60 "[60-69]" 70 "[70+]" Assigner un label aux valeurs d'une variable label values clage clagelab Lister les noms et le contenu des labels label list label l stade5: 1 TIns-I-II 3 III-IV-Incl 5 Inconnu ttt2: 1 2 3 4 CT CTetRT RT niCTniRT dclabel: Supprimer un label label drop loc_col Pour annoter une variable notes [varname]: text notes age : "Cas age inf 50 à vérifier" Pour lire les notes : notes notes age: 1. " Cas age inf 50 à vérifier " Pour supprimer les notes : note drop age [, add modify] EF – 26-27/11/2012 34 10 CHANGER LA FORME DES DONNEES EN MEMOIRE OU LES TRANSFORMER EN UN FICHIER DE STATISTIQUES 10.1 Fichiers de sommes, de moyennes 10.1.1 Commande collapse collapse clist [if] [in] [weight] [, options] transforme un fichier de données en mémoire en un fichier de sommes, de moyennes, de médiane, etc Il est identique à celui obtenu avec la commande table, sauf que le tableau de résultat n'est pas affiché à l'écran. On veut avoir le nombre total de cas et de personnes à risque, par département, sexe, indicateur et localisation use "incidence.dta", clear save "incidence_collapse.dta", replace collapse (sum) su_nbcas=nbcas (sd) sd_nbcas=nbcas (sum) pop, by( sexe dept indic loc) save "incidence_collapse.dta", replace . l in 1/10 dept 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. sexe loc indic su_nbcas sd_nbcas pop | |-------------------------------------------------------------------------------------| | 25 1 Carcinomes Basocellulaires Incidence 373 21.107 259270 | | 25 1 Col utérin (T Invasives) Incidence 0 0 259270 | | 25 1 Colon rectum Incidence 207 14.5531 259270 | | 25 1 Sein (T Invasives) Incidence 2 .323381 259270 | | 25 1 Col utérin (T Invasives) Mortalité 0 0 259270 | |-------------------------------------------------------------------------------------| | 25 1 Colon rectum Mortalité 59 4.62481 259270 | | 25 1 Sein (T Invasives) Mortalité 1 .235702 259270 | | 39 1 Col utérin (T Invasives) Mortalité 0 0 127605 | | 39 1 Colon rectum Mortalité 32 2.62467 127605 | | 39 1 Sein (T Invasives) Mortalité 1 .235702 127605 EF – 26-27/11/2012 35 10.2 Créer un fichier de fréquence 10.2.1 Commande contract contract varlist [if] [in] [weight] [, options] use "base_registre_3.dta", clear l in 1/10 save "base_registre_contract.dta", replace contract sexe clage loc l in 1/10 save "base_registre_contract.dta", replace use "C:\FT_STATA\evo_incidence.dta", clear l in 1/10 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. t_id sexe annee loc age indic clage | |------------------------------------------------------------| | 10012133 1 2000 Vessie 66 incidence 65 | | 10016069 1 2000 Vessie 72 incidence 70 | | 10022079 2 2000 Vessie 87 incidence 85 | | 10026240 1 2000 Vessie 74 incidence 70 | | 10027197 1 2000 Vessie 69 incidence 65 | |------------------------------------------------------------| | 10029706 1 2001 Vessie 78 incidence 75 | | 10030370 1 2000 Vessie 80 incidence 80 | | 10032335 1 2001 Vessie 80 incidence 80 | | 10036382 1 2000 Vessie 65 incidence 65 | | 10037572 1 2000 Vessie 83 incidence 80 | contract sexe clage loc, zero l in 1/10 sexe 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. loc clage _freq | |------------------------------------------------| | 1 Autres 0 1 | | 1 Hémopathies Lymphoides 0 1 | | 1 Système Nerveux Central 0 3 | | 1 Thyroide 0 1 | | 1 Autres 5 1 | |------------------------------------------------| | 1 Mélanome de la peau 5 1 | | 1 Poumon 5 1 | | 1 Autres 10 2 | | 1 Hémopathies Lymphoides 10 7 | | 1 Hémopathies Myéloides 10 1 L'option "zero" permet garder une classe dans le fichier même si l'effectif de cette classe est nul. ATTENTION : ces 2 commandes remplacent votre fichier de données en mémoire, sauvegardez le sous un autre nom avant EF – 26-27/11/2012 36 10.3 Inverser les lignes en colonnes ou les colonnes en ligne reshape long stubnames, i(varlist) [options] reshape wide stubnames, i(varlist) [options] Transforme un fichier organisé en colonnes (format long en anglais) en un fichier organise en lignes (format wide en anglais) et vice versa. (wide form) i ....... x_ij ........ id sex inc80 inc81 inc82 ------------------------------1 0 5000 5500 6000 2 1 2000 2200 3300 3 0 3000 2000 1000 (long form) i j x_ij id year sex inc ----------------------1 80 0 5000 1 81 0 5500 1 82 0 6000 2 80 1 2000 2 81 1 2200 2 82 1 3300 3 80 0 3000 3 81 0 2000 3 82 0 1000 Exemple 1 use "qdv.dta", clear keep tumeur suivi gh pf rf ef cf sf fa na pa a edit Ce fichier est en format long, les suivis sont listés les uns à la suite des autres. Nous allons le transformer en format wide reshape wide gh pf rf ef cf sf fa na pa a, i(tumeur) j(suivi) edit Il est maintenant facile de faire des calculs entre les différents temps de mesure gen difgh=gh2-gh1 * Si on souhaite revenir à la forme long initiale reshape long gh pf rf ef cf sf fa na pa a difgh, i(tumeur) j(nouveausuivi) Exercice : Un taux brut de mortalité ou d'incidence correspond au nombre de cas observé sur une période donnée divisée par la population à risque sur cette période A partir du fichier "incidence_collapse.dta" créé précédemment, effectuez le rapport des taux bruts entre le Doubs et la France Correction : use "incidence_collapse.dta", clear gen taux= su_nbcas/ pop*100000 drop su_nbcas sd_nbcas pop reshape wide taux , i( sexe loc indic) j(dept) gen rapport= taux25/ taux100 EF – 26-27/11/2012 37 11 STATISTIQUES DESCRIPTIVES 11.1 Tri a plat, tableaux croisés tabulate varname1 varname2 [if] [in] [weight] [, options] use "qdv.dta", clear * tri à plat tab rt *tri à plat pour chacune des variables tab1 rt ct tabulation of rt rt | Freq. Percent Cum. ------------+----------------------------------non | 224 88.89 88.89 oui | 28 11.11 100.00 ------------+----------------------------------Total | 252 100.00 -> tabulation of ct ct | Freq. Percent Cum. ------------+----------------------------------non | 164 65.08 65.08 oui | 88 34.92 100.00 ------------+----------------------------------Total | 252 100.00 *tableau croisé sans ou avec options tab rt ct | ct rt | non oui | Total -----------+----------------------+---------non | 148 76 | 224 oui | 16 12 | 28 -----------+----------------------+---------Total | 164 88 | 252 egen clage=cut(age), at(0(15)150) tab pec clage, chi row col mis +-------------------+ | Key | |-------------------| | frequency | | row percentage | | column percentage | +-------------------+ Prise en | clage charge | 45 60 75 . | Total -----------+--------------------------------------------+---------Curative | 55 115 12 10 | 192 | 28.65 59.90 6.25 5.21 | 100.00 | 73.33 78.23 100.00 55.56 | 76.19 -----------+--------------------------------------------+---------Paliative | 20 26 0 6 | 52 | 38.46 50.00 0.00 11.54 | 100.00 | 26.67 17.69 0.00 33.33 | 20.63 -----------+--------------------------------------------+---------Inconnu | 0 6 0 2 | 8 | 0.00 75.00 0.00 25.00 | 100.00 | 0.00 4.08 0.00 11.11 | 3.17 -----------+--------------------------------------------+---------Total | 75 147 12 18 | 252 | 29.76 58.33 4.76 7.14 | 100.00 | 100.00 100.00 100.00 100.00 | 100.00 Pearson chi2(6) = 14.5980 Pr = 0.024 EF – 26-27/11/2012 38 *tableaux croisés successifs : toutes les combinaisons possibles de tableaux croisés entre les variables spécifiées dans la liste tab2 var1 var2 var3 var4 11.2 Descriptions de variables continues 11.2.1 Commande summarize summarize [varlist] [if] [in] [weight] [, options] Commande très utilisée, elle permet de determiner en une seule fois le nombre d'observations, la moyenne arithmétique, l'écart-type, le min et le max des variables specifies use "qdv", clear sum age, detail age ------------------------------------------------------------Percentiles Smallest 1% 53 53 5% 53 53 10% 55 53 Obs 234 25% 58 53 Sum of Wgt. 234 50% 62 75% 90% 95% 99% 68 72 76 77 Largest 77 77 77 77 Mean Std. Dev. 63.07692 6.295518 Variance Skewness Kurtosis 39.63354 .3330125 2.358699 11.2.2 Commande tabstat tabstat varlist [if] [in] [weight] [, options] use "qdv.dta", clear tabstat age, by(pec) stats(n mean sd p25 p50 p75) Summary for variables: age by categories of: pec (Prise en charge) pec | N mean sd p25 p50 p75 ----------+-----------------------------------------------------------Curative | 182 63.6044 6.639708 58 63 69 Paliative | 46 60.69565 4.501208 57 61 62 Inconnu | 6 65.33333 .5163978 65 65 66 ----------+-----------------------------------------------------------Total | 234 63.07692 6.295518 58 62 68 ----------------------------------------------------------------------- 11.2.3 Commande mean mean varlist [if] [in] [weight] [, options] use "qdv.dta", clear mean age means age mean age Mean estimation Number of obs = 234 -------------------------------------------------------------| Mean Std. Err. [95% Conf. Interval] -------------+-----------------------------------------------age | 63.07692 .4115509 62.26609 63.88776 EF – 26-27/11/2012 39 -------------------------------------------------------------means age Variable | Type Obs Mean [95% Conf. Interval] -------------+---------------------------------------------------------age | Arithmetic 234 63.07692 62.26609 63.88776 | Geometric 234 62.76828 61.97265 63.57412 | Harmonic 234 62.46416 61.68291 63.26545 ------------------------------------------------------------------------ 11.3 Tests de normalités sktest varlist [if] [in] [weight] [, noadjust] er Réalise des tests de normalité base en 1 un test de la statistique de Skewness, puis un second test sur la ème statistique de Kurtosis. sktest combine les deux tests pour en disposer d'un 3 H0 : la variable est distribuée selon une loi normale use "qdv.dta", clear sktest spritzer Skewness/Kurtosis tests for Normality ------- joint -----Variable | Obs Pr(Skewness) Pr(Kurtosis) adj chi2(2) Prob>chi2 -------------+--------------------------------------------------------------spitzer | 108 0.0003 0.6945 11.31 0.0035 (pour avoir les valeurs du skewness et du kurtosis il faudra utiliser la commande summarize, option detail) Shapiro-Wilk normality test . optimisé pour des échantillons de 4 à 2000 observations swilk varlist [if] [in] [, options] Shapiro-Francia normality test. optimisé pour des échantillons de 5 à 5000 observations sfrancia varlist [if] [in] Avoir un apercu graphique histogram spitzer, normal GraphDistribution graphHistogram EF – 26-27/11/2012 40 11.4 Tests d'associations 11.4.1 Test de la significativité du coefficient de corrélation (pwcorr) pwcorr [varlist] [if] [in] [weight] [, pwcorr_options] use "qdv.dta", clear pwcorr spitzer gh pf rf ef, sig | spitzer gh pf rf ef -------------+--------------------------------------------spitzer | 1.0000 | | gh | 0.4872 1.0000 | 0.0000 | pf | 0.6277 0.5103 1.0000 | 0.0000 0.0000 | rf | 0.5823 0.5442 0.7309 1.0000 | 0.0000 0.0000 0.0000 | ef | 0.4142 0.4366 0.5683 0.5885 1.0000 | 0.0000 0.0000 0.0000 0.0000 L'option sig permet d'indiquer la significativité du coefficient. 11.4.2 Comparaison de deux moyennes (ttest) * test de student d'égalité à une moyenne our un échantillon ttest varname == # [if] [in] [, level(#)] * test de student pour échantillons appariés ttest varname1 == varname2 [if] [in] [, level(#)] * test de student pour échantillons non-appariés ttest varname [if] [in] , by(groupvar) [options1] Exemple use "qdv.dta", clear ttest age if suivi==0, by(ct) Two-sample t test with equal variances -----------------------------------------------------------------------------Group | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval] ---------+-------------------------------------------------------------------non | 41 65.04878 .9626888 6.164216 63.10311 66.99445 oui | 22 59.68182 1.000836 4.694337 57.60047 61.76317 ---------+-------------------------------------------------------------------combined | 63 63.1746 .7830578 6.215329 61.60929 64.73991 ---------+-------------------------------------------------------------------diff | 5.366962 1.506704 2.354122 8.379803 -----------------------------------------------------------------------------diff = mean(non) - mean(oui) t = 3.5621 Ho: diff = 0 degrees of freedom = 61 Ha: diff < 0 Pr(T < t) = 0.9996 Ha: diff != 0 Pr(|T| > |t|) = 0.0007 Ha: diff > 0 Pr(T > t) = 0.0004 EF – 26-27/11/2012 41 11.4.3 Comparaison de plus de deux moyennes (oneway anova) oneway response_var factor_var [if] [in] [weight] [, options] Permet de faire une analyse de variance univariée : comparaison de moyennes à plus de deux groupes. Oneway permet également de procéder à un test d'égalité des variances use "qdv.dta", clear oneway age ttt if suivi==0, tabulate bonferroni | Summary of age ttt | Mean Std. Dev. Freq. ------------+-----------------------------------CT | 59.473684 4.8000975 19 CTetRT | 61 4.5825757 3 RT | 61 4.0824829 4 niCTniRT | 65.486486 6.2299528 37 ------------+-----------------------------------Total | 63.174603 6.2153288 63 Analysis of Variance Source SS df MS F Prob > F -----------------------------------------------------------------------Between groups 491.09928 3 163.69976 5.07 0.0034 Within groups 1903.98009 59 32.2708489 -----------------------------------------------------------------------Total 2395.07937 62 38.6303123 Bartlett's test for equal variances: chi2(3) = 2.0555 Prob>chi2 = 0.561 Comparison of age by ttt (Bonferroni) Row Mean-| Col Mean | CT CTetRT RT ---------+--------------------------------CTetRT | 1.52632 | 1.000 | RT | 1.52632 0 | 1.000 1.000 | niCTniRT | 6.0128 4.48649 4.48649 | 0.002 1.000 0.833 11.4.4 Comparaison de la distributions de variables catégorielles (chi2) tabulate varname1 varname2 [if] [in] [weight] [, options] use "qdv.dta", clear egen clage=cut(age), at(0(15)150) tab clage statutv if suivi==0, chi exact Enumerating sample-space stage 3: enumerations = stage 2: enumerations = stage 1: enumerations = combinations: 1 1 0 | statutv clage | DCD En vie | Total -----------+----------------------+---------45 | 6 12 | 18 60 | 16 20 | 36 75 | 1 1 | 2 -----------+----------------------+---------Total | 23 33 | 56 Pearson chi2(2) = Fisher's exact = 0.6804 Pr = 0.712 0.783 EF – 26-27/11/2012 42 12 MODELES MULTIVARIES 12.1 Régression logistique logistic depvar indepvars [if] [in] [weight] [, options] use "C:\FT_STATA\exemples_stata\lbw2.dta", clear d * on fait connaissance avec le fichier de données Contains data from lbw2.dta obs: 189 Hosmer & Lemeshow data vars: 13 3 Mar 2005 02:50 size: 4,158 -------------------------------------------------------------------------------------------------------------------------------------------storage display value variable name type format label variable label -------------------------------------------------------------------------------------------------------------------------------------------id int %8.0g identification code low byte %8.0g birth weight<2500g age byte %8.0g age of mother lwt int %8.0g weight at last menstrual period race byte %8.0g race race smoke byte %8.0g smoked during pregnancy ptl byte %8.0g premature labor history (count) ht byte %8.0g has history of hypertension ui byte %8.0g presence, uterine irritability ftv byte %8.0g number of visits to physician during 1st trimester bwt int %8.0g birth weight (grams) race2 float %9.0g race3 float %9.0g -------------------------------------------------------------------------------------------------------------------------------------------Sorted by: codebook tab* logistic low age lwt race smoke ptl ht ui Logistic regression Log likelihood = -102.17373 Number of obs LR chi2(7) Prob > chi2 Pseudo R2 = = = = 189 30.32 0.0001 0.1292 -----------------------------------------------------------------------------low | Odds Ratio Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------age | .9673134 .034602 -0.93 0.353 .9018175 1.037566 lwt | .987978 .0065363 -1.83 0.068 .9752498 1.000872 race | 1.562461 .3359986 2.08 0.038 1.025092 2.381526 smoke | 2.523234 1.00448 2.32 0.020 1.15638 5.505723 ptl | 1.715558 .5951591 1.56 0.120 .8691758 3.386126 ht | 6.045638 4.15468 2.62 0.009 1.572099 23.249 ui | 2.043787 .9471545 1.54 0.123 .8240668 5.068844 ------------------------------------------------------------------------------ Or la variable "race" n'est pas une variable continue et elle possède 3 modalités. tab race race | Freq. Percent Cum. ------------+----------------------------------white | 96 50.79 50.79 black | 26 13.76 64.55 other | 67 35.45 100.00 ------------+----------------------------------Total | 189 100.00 EF – 26-27/11/2012 43 Suite à la commande xi:, création d'une variable indicatrice (dummy variable) pour prendre en compte la structure de la variable race xi : logistic low age lwt i.race smoke ptl ht ui i.race _Irace_1-3 (naturally coded; _Irace_1 omitted) Logistic regression Log likelihood = Number of obs LR chi2(8) Prob > chi2 Pseudo R2 -100.724 = = = = 189 33.22 0.0001 0.1416 -----------------------------------------------------------------------------low | Odds Ratio Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------age | .9732636 .0354759 -0.74 0.457 .9061578 1.045339 lwt | .9849634 .0068217 -2.19 0.029 .9716834 .9984249 _Irace_2 | 3.534767 1.860737 2.40 0.016 1.259736 9.918406 _Irace_3 | 2.368079 1.039949 1.96 0.050 1.001356 5.600207 smoke | 2.517698 1.00916 2.30 0.021 1.147676 5.523162 ptl | 1.719161 .5952579 1.56 0.118 .8721455 3.388787 ht | 6.249602 4.322408 2.65 0.008 1.611152 24.24199 ui | 2.1351 .9808153 1.65 0.099 .8677528 5.2534 ------------------------------------------------------------------------------ A noter :Stata vient de créer les variables _Irace2 et _Irace3. . tab race race2 | race2 race | 0 1 | Total -----------+----------------------+---------white | 96 0 | 96 black | 0 26 | 26 other | 67 0 | 67 -----------+----------------------+---------Total | 163 26 | 189 tab race race3 | race3 race | 0 1 | Total -----------+----------------------+---------white | 96 0 | 96 black | 26 0 | 26 other | 0 67 | 67 -----------+----------------------+---------Total | 122 67 | 189 La modalité race1 sert de classe de référence. 12.1.1 La régression logistique pas à pas ascendant ou descendant stepwise [, options ] : command performs backward-selection estimation for command. by the following option combinations: The stepwise selection method is determined options description --------------------------------------------------------------------------------------------------------------------------------------------------pr(#) backward selection pr(#) hierarchical backward hierarchical selection pr(#) pe(#) backward stepwise pe(#) pe(#) hierarchical pr(#) pe(#) forward forward selection forward hierarchical selection forward stepwise EF – 26-27/11/2012 44 Pas à pas descendant stepwise, pe(.15) pr(.2) : p = 0.4572 >= 0.2000 logistic low age lwt _Irace_2 _Irace_3 smoke ptl ht ui begin with full model removing age Logistic regression Number of obs LR chi2(7) Prob > chi2 Pseudo R2 Log likelihood = -101.00398 = = = = 189 32.66 0.0000 0.1392 -----------------------------------------------------------------------------low | Odds Ratio Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------ui | 2.193846 1.001322 1.72 0.085 .8968046 5.366787 lwt | .9842513 .0067453 -2.32 0.021 .9711192 .997561 _Irace_2 | 3.762976 1.964991 2.54 0.011 1.352203 10.47179 _Irace_3 | 2.453595 1.064462 2.07 0.039 1.048381 5.742306 smoke | 2.556751 1.019338 2.35 0.019 1.170381 5.585338 ptl | 1.654088 .5643944 1.47 0.140 .8474592 3.228484 ht | 6.384589 4.43718 2.67 0.008 1.635168 24.92892 -----------------------------------------------------------------------------Pas à pas ascendant stepwise, pe(.15) pr(.2) forward : p p p p p p p = = = = = = = 0.0115 0.0388 0.0106 0.0584 0.0684 0.0953 0.0386 < < < < < < < 0.1500 0.1500 0.1500 0.1500 0.1500 0.1500 0.1500 logistic low age lwt _Irace_2 _Irace_3 smoke ptl ht ui begin with empty model adding ptl adding ht adding lwt adding _Irace_2 adding ui adding smoke adding _Irace_3 Logistic regression Log likelihood = -101.00398 Number of obs LR chi2(7) Prob > chi2 Pseudo R2 = = = = 189 32.66 0.0000 0.1392 -----------------------------------------------------------------------------low | Odds Ratio Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------ptl | 1.654088 .5643944 1.47 0.140 .8474592 3.228484 ht | 6.384589 4.43718 2.67 0.008 1.635168 24.92892 lwt | .9842513 .0067453 -2.32 0.021 .9711192 .997561 _Irace_2 | 3.762976 1.964991 2.54 0.011 1.352203 10.47179 ui | 2.193846 1.001322 1.72 0.085 .8968046 5.366787 smoke | 2.556751 1.019338 2.35 0.019 1.170381 5.585338 _Irace_3 | 2.453595 1.064462 2.07 0.039 1.048381 5.742306 -----------------------------------------------------------------------------. EF – 26-27/11/2012 45 12.2 Régression linéaire regress depvar [indepvars] [if] [in] [weight] [, options] use "C:\FT_STATA\exemples_stata\lbw2.dta", clear Avant de lancer l'analyse il convient de vérifier la structure des variables qui vont être rentrées dans l'analyse. La variable "race" contient 3 modalités. Il faut la dichotomiser ou utiliser la commande xi tabulate race, gen(race_gr) d Contains data from C:\FT_STATA\exemples_stata\lbw2.dta obs: 189 Hosmer & Lemeshow data vars: 16 3 Mar 2005 02:50 size: 5,481 (99.9% of memory free) -------------------------------------------------------------------------------------------------------------------------storage display value variable name type format label variable label -------------------------------------------------------------------------------------------------------------------------id int %8.0g identification code low byte %8.0g birth weight<2500g age byte %8.0g age of mother lwt int %8.0g weight at last menstrual period race byte %8.0g race race smoke byte %8.0g smoked during pregnancy ptl byte %8.0g premature labor history (count) ht byte %8.0g has history of hypertension ui byte %8.0g presence, uterine irritability ftv byte %8.0g number of visits to physician during 1st trimester bwt int %8.0g birth weight (grams) race2 float %9.0g race3 float %9.0g race_gr1 byte %8.0g race==white race_gr2 byte %8.0g race==black race_gr3 byte %8.0g race==other regress bwt age lwt race_gr2 race_gr3 smoke ptl ht ui Source | SS df MS -------------+-----------------------------Model | 24194411.6 8 3024301.45 Residual | 75720886.9 180 420671.594 -------------+-----------------------------Total | 99915298.6 188 531464.354 Number of obs F( 8, 180) Prob > F R-squared Adj R-squared Root MSE = = = = = = 189 7.19 0.0000 0.2421 0.2085 648.59 -----------------------------------------------------------------------------bwt | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------age | -4.221674 9.438215 -0.45 0.655 -22.84545 14.4021 lwt | 4.302798 1.722382 2.50 0.013 .9041405 7.701455 race_gr2 | -488.786 149.5836 -3.27 0.001 -783.9489 -193.6231 race_gr3 | -355.0911 114.3004 -3.11 0.002 -580.6322 -129.5501 smoke | -350.8583 106.1665 -3.30 0.001 -560.3493 -141.3672 ptl | -47.36242 101.6497 -0.47 0.642 -247.9408 153.216 ht | -586.4044 200.8127 -2.92 0.004 -982.6543 -190.1546 ui | -513.4 138.4656 -3.71 0.000 -786.6246 -240.1753 _cons | 2936.855 311.4374 9.43 0.000 2322.317 3551.393 ------------------------------------------------------------------------------ EF – 26-27/11/2012 46 12.2.1 Régression pas à pas ascendant stepwise, pe(.15) pr(.2) forward : regress bwt age lwt begin with empty model p = 0.0001 < 0.1500 adding ui p = 0.0109 < 0.1500 adding ht p = 0.0060 < 0.1500 adding lwt p = 0.0163 < 0.1500 adding race_gr2 p = 0.0160 < 0.1500 adding smoke p = 0.0022 < 0.1500 adding race_gr3 Source | SS df MS -------------+-----------------------------Model | 23992342.5 6 3998723.74 Residual | 75922956.1 182 417159.099 -------------+-----------------------------Total | 99915298.6 188 531464.354 race_gr2 race_gr3 smoke ptl ht ui Number of obs F( 6, 182) Prob > F R-squared Adj R-squared Root MSE = = = = = = 189 9.59 0.0000 0.2401 0.2151 645.88 -----------------------------------------------------------------------------bwt | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------ui | -523.8869 134.664 -3.89 0.000 -789.5903 -258.1835 ht | -584.6279 199.6238 -2.93 0.004 -978.5024 -190.7533 lwt | 4.238846 1.675414 2.53 0.012 .9331126 7.544579 race_gr2 | -475.22 145.589 -3.26 0.001 -762.4792 -187.9607 smoke | -355.7326 103.4345 -3.44 0.001 -559.8176 -151.6475 race_gr3 | -349.669 112.3456 -3.11 0.002 -571.3363 -128.0018 _cons | 2837.343 243.6806 11.64 0.000 2356.54 3318.145 ------------------------------------------------------------------------------ 12.2.2 Test du rapport de vraisemblance : Test la nullité du coefficient d'une variable dans deux modèles emboîtés. Nous allons tester globalement la nullité de la variable "race" use "C:\FT_STATA\exemples_stata\lbw2.dta", clear er *1 modèle complet regress bwt age lwt estimates store A race_gr2 race_gr3 smoke ptl ht *2ème modèle emboité dans le 1er regress bwt age lwt smoke ptl ht estimates store B lrtest A, stat Likelihood-ratio test (Assumption: B nested in A) LR chi2(2) = Prob > chi2 = 15.28 0.0005 ----------------------------------------------------------------------------Model | Obs ll(null) ll(model) df AIC BIC -------------+--------------------------------------------------------------B | 189 -1513.509 -1501.903 6 3015.805 3035.256 A | 189 -1513.509 -1494.262 8 3004.524 3030.458 ----------------------------------------------------------------------------Note: N=Obs used in calculating BIC; see [R] BIC note Autres modèles : régression de poisson, etc EF – 26-27/11/2012 47 13 COMMANDES POUR REPETER LES ANALYSES OU FAIRE DES BOUCLES 13.1 foreach On va lancer une anova univariée de la variable ttt pour chaque score. use "qdv.dta", clear foreach score in gh pf rf ef cf sf fa na a { oneway `score' ttt if suivi==0, tab bon } 13.2 forvalues On lance le calcul des differences ti-t0 pour la variable gh use "qdv.dta", clear keep tumeur suivi gh reshape wide gh, i(tumeur) j(suivi) forvalue i=1/3 { gen dif`i'=gh`i'-gh0 } 13.3 for var On fait un tableau croisé de chacune des variables listées dans le for var, et dans un 2ème temps on ajoute à toutes les variables listées une valeur aléatoire. use qdv.dta", clear egen clage=cut(age), at(0(15)150) for var ct rt ttt : tab X clage, chi gen alea=runiform()*2 for var gh pf rf ef sf : replace X=X+alea tab ct clage, chi | clage ct | 45 60 75 | Total -----------+---------------------------------+---------non | 31 105 12 | 148 oui | 44 42 0 | 86 -----------+---------------------------------+---------Total | 75 147 12 | 234 Pearson chi2(2) = Etc. 26.7004 Pr = 0.000 EF – 26-27/11/2012 48 14 QUELQUES GRAPHIQUES 14.1 A partir de l'éditeur graphique A partir du fichier births.dta nous allons faire un diagramme de dispersion avec le poids à la naissance sur l'axe des Y et l'age gestationnel sur l'axe des X, tout d'abord en utilisant la barre d'outil graphique de Stata. use "births.dta", clear 3000 2000 1000 birth weight in grams 4000 5000 Graphics Twoway graph (scatter, line, etc.) Plots tab: click on Create… button Plot: Basic plots: (select type): Scatter Plot: Plot type: (scatterplot): Y variable: bweight Plot: Plot type: (scatterplot): X variable: gestwks Accept OK 25 30 35 gestation period 40 45 Nous pouvons quand même regarder ce que l'on obtient en cliquant sur l'icone Cet éditeur de graphique permet de modifier facilement quelques éléments d'un graphique. Cependant si vous devez faire des séries de graphiques vous allez devoir reproduire manuellement systématiquement ces modifications, et l'outil perd alors de son intérêt. Par contre, regardez ce qui a été dans la liste des commandes. twoway (scatter bweight gestwks, sort) 14.2 A partir de l'éditeur de commandes La commande twoways permet de faire générer des graphiques comme les diagrammes de dispersions, mais également beaucoup d'autres types ou combinaisons de graphiques. graph twoway scatter y-variable x-variable Pour obtenir un graphique séparé pour les hommes et les femmes twoway scatter bweight gestwks if sexalph=="female" twoway scatter bweight gestwks if sexalph=="male" * pour obtenir des graphiques cote à cote twoway scatter bweight gestwks ,by(sexalph) EF – 26-27/11/2012 49 male 3000 1000 2000 bweight 4000 5000 f emale 25 30 35 40 45 25 30 35 40 45 gestw ks Graphs by sexalph Nous pouvons également ajouter une courbe de tendance (issue d'une simple régression linéaire) twoway (scatter bweight gestwks) (lfit bweight gestwks) /// , by(sexalph) male 0 bweight/Fitted values 5000 f emale 25 30 35 40 45 25 30 gestw ks bw eight Fitted values Graphs by sexalph twoway (scatter bweight gestwks) (lfit bweight gestwks) /// , title("Birth Weight by Weeks Gestation") /// subtitle("Singleton Births in London Hospital") /// ytitle("Birth Weight (grams)") /// xtitle("Gestational Age (weeks)") /// ylabel(0(500)4000,angle(horizontal)) /// xlabel(25(1)45) /// note("Simple Regression") 35 40 45 EF – 26-27/11/2012 50 Available schemes are s2color s2mono s2manual s2gmanual s1color s1mono s1rcolor s1manual sj economist s2color8 lean1 lean2 see help scheme_s2color <- version 11 default see help scheme_s2mono see help scheme_s2manual see see see see see see help help help help help help scheme_s1color scheme_s1mono scheme_s1rcolor scheme_s1manual scheme_sj scheme_economist <- version 10 default see help scheme_lean1 see help scheme_lean2 twoway (scatter bweight gestwks) (lfit bweight gestwks) /// , title("Birth Weight by Weeks Gestation") /// subtitle("Singleton Births in London Hospital") /// ytitle("Birth Weight (grams)") /// xtitle("Gestational Age (weeks)") /// ylabel(0(500)4000,angle(horizontal)) /// xlabel(25(1)45) /// note("Simple Regression") /// scheme(s1color) EF – 26-27/11/2012 51 La palette de couleur Stata ssc install full_palette Une fois installé saisissez full_palette Pour définir vos couleurs dans les graphiques il faut indiquer l'un des éléments ci-dessus. Il est tout à fait possible de saisir les coordonnées RVB à la place du nom d'une couleur. On peut également jouer sur son intensité en rajoutant un coefficient (blue*2 blue blue*0.5) Exercices pas à pas : A partir du fichier graph_qdv.dta, réaliser un graphique contenant, pour les scores fonctionnels Global health, Physical et Role, les moyennes et intervalles de confiance des scores de qdv pour chacun des temps d'étude des patients avec un cancer du côlon. Descriptif du fichier La variable "suivi" prend la valeur 0 1 2 3 et qui correspondent aux temps 0 3 6 12 mois. Loc et Loc2 sont les localisations colon ou rectum en numérique ou texte score et score2 correspondent au nom du score de qdv en numérique ou texte Faites quelques essais avec les menus déroulant avant de regarder la solution *Tout d'abord on ne garde dans ce fichier que les patients avec un cancer du colon keep if loc2=="Colon" * On ne garde que les scores qui nous intéressent keep if score=="Physical" | score=="Role" | score=="Emotional" | score=="Global health" EF – 26-27/11/2012 52 * L'idée est d'utiliser la variable suivi sur l'axe des abscisses. Or chaque score possède la même valeur de suivi. Si l'on veut "éclater" les différents scores en fonction du suivi il faut retravailler cette variable. replace suivi=suivi+1 tab suivi * Suivi prend maintenant les valeurs de 1 à 4, toujours pour tous les scores * On change la valeur de suivi pour chacun des scores sauf pour Global Health qui s'affichera ainsi en 1er replace suivi=suivi+7 if score=="Physical" replace suivi=suivi+14 if score=="Role" replace suivi=suivi+21 if score=="Emotional" * Il n'y a pas le même intervalle de temps entre T6 et T12 (6 mois au lieu de 3 pour les autres mesures). Il faut l'afficher. replace suivi=suivi+1 if suivi==4 | suivi==11 | suivi==18 | suivi==25 *A partir de maintenant, la valeur de suivi=5 pour le T12 mois de GH, 12 pour le T12 de PF, 19 pour le T12 de RF et 22 pour le T12 de EF. tab suivi twoway (bar mean suivi if score=="Global health" , lcolor(black) color(purple*1.5) ) // (bar mean suivi if score=="Physical", lcolor(black) color(purple) lwidth(thin) msize(vlarge) ) // (bar mean suivi if score=="Role", lcolor(black) color(purple*0.7) lwidth(thin) msize(vlarge) ) // (bar mean suivi if score=="Emotional", lcolor(black) color(purple*0.5) lwidth(thin) msize(vlarge) ) // (rcap low high suivi, lcolor(black)), // legend(row(1) order(1 "Global health" 2 "Physical" 3 "Role" 4 "Emotional" ) symxsize(7) keygap(1) ) // xlabel(1 "T0" 2 "T3" 3 "T6" 5 "T12" 8 "T0" 9 "T3" 10 "T6" 12 "T12" 15 "T0" 16 "T3" 17 "T6" 19 "T12" 22 "T0" 23 "T3" 24 "T6" 26 "T12" , // noticks labsize(medsmall) labcolor(black) labgap(half_tiny) ) // xtitle("Functional dimensions", size(large) color(black) margin(medium)) // ytitle("Mean score" , size(large) color(black) margin(small)) // ylabel(0(10)90, labsize(medium) labcolor(black) ) // graphregion(fcolor(white) lcolor(none) ifcolor(none) ilcolor(none)) // legend(region(fcolor(white) lcolor(white)) color(black) size(large)) // title("Global health and functional dimensions evolution", size(large) color(black) ) // subtitle("Colon cancer (Mean, CI95%)", size(medium large)) // graph export "bar_functioning_colon.wmf", replace EF – 26-27/11/2012 53 Spitzer 8 0 2 4 5 6 Spitzer 10 10 12 15 Exercice: combiner les fonctions graphes avec les fonctions de boucles pour obtenir en un seul programme tous les graphiques suivant (sans taper un à un le nom de tous les scores) 0 20 40 60 Emotional Functioning spitzer loef/hief 80 100 0 20 40 60 80 100 Fatigue Fitted values spitzer lofa/hifa Colon 8 6 Spitzer 0 2 4 5 Spitzer 10 10 12 15 Colon Fitted values 0 20 40 60 Global Health spitzer logh/high 80 100 0 Fitted values Colon 20 40 Nausea and vomiting spitzer lona/hina 60 Fitted values Colon use qdv.dta, clear foreach score in gh pf rf ef cf sf fa na pa a { * on lance une regression simple pour chacun des scores regress spitzer `score' * predict + nom de variable donne la valeur prédite avec le modèle lancé précedemment predict hat`score' * predict + nom de variable suivi de stdf donne l'erreur standard predict stf`score' , stdf * on génère la borne "low" à partir des valeurs calculées précédemment gen lo`score' = hat`score' - 1.96*stf`score' * on génère la borne "high" à partir des valeurs calculées précédemment gen hi`score' = hat`score' + 1.96*stf`score' * on realize le graphique correspondant au score en cours scatter spitzer `score' || line hat`score' lo`score' hi`score' `score' , pstyle(p2 p3 p3) // sort ytitle(Spitzer) caption(Colon) graph export "spitzer_`score'_colon.wmf", replace graph save Graph "spitzer_`score'_colon.gph", replace } Ressources pour les graphiques http://data.princeton.edu/stata/graphics.html http://www.survey-design.com.au/Usergraphs.html 80 EF – 26-27/11/2012 54 Bibliographie : Documentation Stata12 Cahuzac Eric, Bontemps Christophe, Stata par la pratique : statistiques, graphiques et éléments de programmation, Stata Press 2008 Gregory J. Stoddard , Biostatistics and Epidemiology Using Stata: A Course Manual, University of Utah School of Medicine