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
GraphDistribution graphHistogram
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

Documents pareils