Ce mooc est à l’adresse https://www.fun-mooc.fr/courses/course-v1:UPSUD+42001+session10/info Les notes de ce MOOC sont publiés sur
A la fin de ce document, un chapitre de note et de bookmarks notamment pour l’utilisation de librairie R externes a été créé.
Terme | Définition |
---|---|
probabilité d’1 evt | Fréquence d’apparition de l’evt |
variable aléatoire discrète | c’est 1 var qui ne prend que quelques modlaités (valeurs): par exemple: 2, 3.2, 0.05 |
variable aléatoire discrète | c’est 1 var dont le nombre de modalité est théroriquement infini (mais peux être compris dans un intervalle) |
Probabilité d’avoir 1 nombre pair lors du tirage d’un dé équilibré à 6 faces | parmi 1,2,3,4,5,6 les modalités paires sont 2,4,6: il y a donc 3 modalités / 6 possibles = 50% de chance |
Distribution normale | c’est la fréquence des modalités d’une variable aléatoire suite à un nombre important de tirage aléatoire de cette variable: elle a une forme de cloche |
Variable qualitative | variable discrète dont les modalités permettent de qualifier: exemple: couleur d’un pull |
Variable quantitative | variable discrète ou quanti qui permet de valoriser: exemple : poids ou age d’un individu |
Qu’est-ce qu’une probabilité ? C’est la fréquence de l’apparition d’un evt
Une variable aléatoire prend uniquement les 3 valeurs suivantes (4.12, 3.08, 0.05). Donner la bonne affirmation. C’est une variable discrète
Soit un dé équilibré, avec autant de chances d’obtenir chacune des valeurs suivantes 1, 2, 3, 4, 5 ou 6 : quelle est la probabilité de l’événement “obtenir un nombre pair” ? 0,5
Une distribution normale a une forme de “cloche”. OUI
Le but est de représenter sur un graphique la distribution de variables qualitatives et quantitatives. Quelques expemples de graphiques:
Avant tout, il faut importer les données:
# Positionnement du répertoire par défaut
#setwd("~/Projets/r-mooc-fun")
#setwd("~/Documents/mooc-fun")
#chargement du fichier
smp<-read.csv2("smp2.csv")
#vérificaiton du contenu du fichier en affichant la struture du data.frame smp
str(smp)
## 'data.frame': 799 obs. of 26 variables:
## $ age : int 31 49 50 47 23 34 24 52 42 45 ...
## $ prof : Factor w/ 8 levels "agriculteur",..: 3 NA 7 6 8 6 3 2 6 6 ...
## $ duree : int 4 NA 5 NA 4 NA NA 5 4 NA ...
## $ discip : int 0 0 0 0 1 0 0 0 1 0 ...
## $ n.enfant : int 2 7 2 0 1 3 5 2 1 2 ...
## $ n.fratrie : int 4 3 2 6 6 2 3 9 12 5 ...
## $ ecole : int 1 2 2 1 1 2 1 2 1 2 ...
## $ separation : int 0 1 0 1 1 0 1 0 1 0 ...
## $ juge.enfant : int 0 0 0 0 NA 0 1 0 1 0 ...
## $ place : int 0 0 0 1 1 0 1 0 0 0 ...
## $ abus : int 0 0 0 0 0 0 0 0 1 1 ...
## $ grav.cons : int 1 2 2 1 2 1 5 1 5 5 ...
## $ dep.cons : int 0 0 0 0 1 0 1 0 1 0 ...
## $ ago.cons : int 1 0 0 0 0 0 0 0 0 0 ...
## $ ptsd.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ alc.cons : int 0 0 0 0 0 0 0 0 1 1 ...
## $ subst.cons : int 0 0 0 0 0 0 1 0 1 0 ...
## $ scz.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ char : int 1 1 1 1 1 1 1 1 4 1 ...
## $ rs : int 2 2 2 2 2 1 3 2 3 2 ...
## $ ed : int 1 2 3 2 2 2 3 2 3 2 ...
## $ dr : int 1 1 2 2 2 1 2 2 1 2 ...
## $ suicide.s : int 0 0 0 1 0 0 3 0 4 0 ...
## $ suicide.hr : int 0 0 0 0 0 0 1 0 1 0 ...
## $ suicide.past: int 0 0 0 0 1 0 1 0 1 0 ...
## $ dur.interv : int NA 70 NA 105 NA NA 105 84 78 60 ...
A ce stade, on observe dans R, dans l’onglet Environnement le dataframe smp que l’on peux manipuler.
Le but est de représenter la distribution d’une variable: Par exemple: le nombre de détenus par métier
#Tout d'abord, on va générer une table afin d'isoler la variable métier
tablemetier<-table(smp$prof)
#Ensuite, on peux générer le barplot
barplot(tablemetier)
C’est le grand classique pour représenter la distribution d’une variable aléatoire quantitative continue
Utile pour les variables quantitatives
Ce n’est pas exactement cela car on peux voir des modalités au dessus de la moustache supérieure. La moustache supérieur n’est pas égale au max des modalités mais : min(max des données, 1,5 X écart-types au dessus du bord supérieur de la boîte).
L’intéret de boxplot est de représenter la distrib d’une var quanti en fonction de sous groupes. Par exemple quelle est la distrib de l’age par rapport à la consommation de substance:
On remarque que les jeunes consomment plus que les vieux
On remarque que en moyenne, plus un détenu est agé, plus son nombre d’enfant est elevé
Les modalités identiques se superposent et ne sont pas visibles. Si on veux voir toutes les modalités même les doublons, on peux décaler visuellement les valeurs identiques avec jitter
## 'data.frame': 1053 obs. of 3 variables:
## $ NUMERO: int 96 96 96 96 96 96 96 96 157 157 ...
## $ VISIT : int 0 4 7 14 21 28 42 56 0 4 ...
## $ HDRS : int 34 26 12 7 5 1 1 1 27 19 ...
On utilise la fonction plotmeans pour représenter l’évolution d’une variable dans le temps
##
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
##
## lowess
Ensuite on utilise plotmeans
## Warning in arrows(x, li, x, pmax(y - gap, li), col = barcol, lwd = lwd, :
## zero-length arrow is of indeterminate angle and so skipped
## Warning in arrows(x, li, x, pmax(y - gap, li), col = barcol, lwd = lwd, :
## zero-length arrow is of indeterminate angle and so skipped
## Warning in arrows(x, ui, x, pmin(y + gap, ui), col = barcol, lwd = lwd, :
## zero-length arrow is of indeterminate angle and so skipped
## Warning in arrows(x, ui, x, pmin(y + gap, ui), col = barcol, lwd = lwd, :
## zero-length arrow is of indeterminate angle and so skipped
On constate que l’état de santé des patients évolue eu fur et à mesure du temps
Si on veux représenter l’évolution de l’état pour chaque patient sur une seule courbe, on utilise interaction.plot. Cette fonction prend 3 paramétres: le temps (VISIT), la variable qui indique chaque sujet (NUMERO), la variable à représenter (HDRS)
legend=FALSE permet d’éviter de faire déborder la légende sur le graphique
Quelle commande faut-il utiliser pour représenter graphiquement la distribution de la taille de 100 individus ?
hist(data)
Quelle commande R permet de tracer graphiquement la distribution du nombre d’enfants en fonction de l’âge ?
plot(age,n.enfant)
Quelle instruction permet d’insérer un titre à un graphique dans R ?
main=“super clean !!”
Comment aggréger les mesures pour synthétiser ? on utilise les mesures de position et de dispersion: moyenne, médiane, écart-type Par exemple: autour de quel age se situe la population des fumeurs de canabis: Pour répondre à cette question, on peux faire une mesure de position. On a également besoin d’évaluer la dispersion: cad la répartition en fonction de sous groupe de position
Mesures de position | Mesures de dispersion |
---|---|
Pour une var catégorielle: il suffit de lister le pourcentage pour chaque catégorie. Pour une var quanti, on peux utiliser la moyenne et la médiane | pour var quanti et cat, on peux utiliser les quartiles ou l’écart-type |
médiane = 50% des obs sont au dessus et 50% au dessous ==> intuitif et robuste (les valeurs extremes ne modifient pas la médiane puisqu’on coupe l’échantillon en 2) moyenne = centre de gravité ==> simple à calculer contrairement à la médiane, propriété mathématique du barycentre, intérêt comptable pour le calcul de KI
les quartiles découpent le jeu d’observation en 4 parties égales. Par exemple pour 20 observations, on aura:
L’écart type est la racine carré de la variance: \(et= \sqrt{variance}\)
La variance est la moyenne des carrés des écarts à la moyenne: \(variance = (\sum_{i=1}^n (x_i-m)^2)/n\)
L’écart type correspond à une inertie et a de bonnes propriétés mathématiques. L’écart-type au carré = variance = moyenne des carrées moins la moyenne au carré: \(et^2=var=(\sum_{i=1}^n x^2_i)/n-(\sum_{i=1}^n x_i)/n)^2\)
ET n’a pas beaucoup de sens , sauf quand la variable a une distribution normale. Dans ce cas, \([m - et ; et + m]\) représente 2/3 des données (le gros de la troupe)
On relève la taille de 10 personnes en mètre : 1.71 m, 1.70 m, 1.65 m, 1.54 m, 1.70 m, 1.63 m, 1.81 m, 400 m, 1.81 m, 1.64 m. On remarque la présence d’une valeur aberrante dans cet échantillon (il est impossible qu’une personne mesure 400 mètres). Quel indice de position est-il préférable d’utiliser pour bien estimer la taille des individus de la population ?
La médiane
#Création du data.frame
taille<-c(1.71,1.70,1.65,1.54,1.70,1.63,1.81,400,1.81,1.64)
#Calcul d'une moyenne qui est polluée par le fat finger du data.frame
mean(taille)
## [1] 41.519
## [1] 125.9574
## [1] 1.7
## Description of structure(list(x = c(1.71, 1.7, 1.65, 1.54, 1.7, 1.63, 1.81, 400, 1.81, 1.64)), .Names = "x", row.names = c(NA, -10L), class = "data.frame")
##
## Numeric
## mean median var sd valid.n
## x 41.52 1.7 15865.27 125.96 10
Nous disposons d’un échantillon issu d’une variable aléatoire gaussienne (autrement dit, qui suit une loi normale). La moyenne de l’échantillon vaut environ 1.7 et son écart-type vaut environ 0.1. Quelle est la part des données comprises entre 1.6 et 1.8 ?
la variable suit une loi normale. Dans ce cas, [m - et ; et + m] (cad [1.6;1.8]) représente 2/3 des données (le gros de la troupe).
Pour une distribution symétrique :
La moyenne est égale à la médiane
Dans quel cas utilisons-nous un écart-type ?
Pour calculer un intervalle de confiance
L’intervalle inter-quartile entre le premier et le troisième quartile
Regroupe la moitié de l’échantillon
## age prof duree discip
## Min. :19.0 ouvrier :227 Min. :1.000 Min. :0.000
## 1st Qu.:28.0 sans emploi :222 1st Qu.:4.000 1st Qu.:0.000
## Median :37.0 employe :135 Median :5.000 Median :0.000
## Mean :38.9 artisan : 90 Mean :4.302 Mean :0.232
## 3rd Qu.:48.0 prof.intermediaire: 58 3rd Qu.:5.000 3rd Qu.:0.000
## Max. :83.0 (Other) : 61 Max. :5.000 Max. :1.000
## NA's :2 NA's : 6 NA's :223 NA's :6
## n.enfant n.fratrie ecole separation
## Min. : 0.000 Min. : 0.000 Min. :1.000 Min. :0.0000
## 1st Qu.: 0.000 1st Qu.: 2.000 1st Qu.:1.000 1st Qu.:0.0000
## Median : 1.000 Median : 3.000 Median :2.000 Median :0.0000
## Mean : 1.755 Mean : 4.287 Mean :1.866 Mean :0.4226
## 3rd Qu.: 3.000 3rd Qu.: 6.000 3rd Qu.:2.000 3rd Qu.:1.0000
## Max. :13.000 Max. :21.000 Max. :5.000 Max. :1.0000
## NA's :26 NA's :5 NA's :11
## juge.enfant place abus grav.cons
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:2.000
## Median :0.0000 Median :0.0000 Median :0.0000 Median :4.000
## Mean :0.2771 Mean :0.2285 Mean :0.2778 Mean :3.643
## 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:5.000
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :7.000
## NA's :5 NA's :7 NA's :7 NA's :4
## dep.cons ago.cons ptsd.cons alc.cons
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.0000 Median :0.0000 Median :0.0000 Median :0.0000
## Mean :0.3967 Mean :0.1665 Mean :0.2165 Mean :0.1865
## 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:0.0000 3rd Qu.:0.0000
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
##
## subst.cons scz.cons char rs
## Min. :0.0000 Min. :0.0000 Min. :1.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:1.000 1st Qu.:1.000
## Median :0.0000 Median :0.0000 Median :1.000 Median :2.000
## Mean :0.2653 Mean :0.0826 Mean :1.512 Mean :2.057
## 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:2.000 3rd Qu.:3.000
## Max. :1.0000 Max. :1.0000 Max. :4.000 Max. :3.000
## NA's :96 NA's :103
## ed dr suicide.s suicide.hr
## Min. :1.000 Min. :1.000 Min. :0.0000 Min. :0.0000
## 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :2.000 Median :2.000 Median :0.0000 Median :0.0000
## Mean :1.866 Mean :2.153 Mean :0.7942 Mean :0.2013
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :3.000 Max. :3.000 Max. :5.0000 Max. :1.0000
## NA's :107 NA's :111 NA's :41 NA's :39
## suicide.past dur.interv
## Min. :0.0000 Min. : 0.00
## 1st Qu.:0.0000 1st Qu.: 48.00
## Median :0.0000 Median : 60.00
## Mean :0.2841 Mean : 61.89
## 3rd Qu.:1.0000 3rd Qu.: 75.00
## Max. :1.0000 Max. :120.00
## NA's :14 NA's :50
On peux observer: * pour les var quanti: le min, le max, les quartiles, la médiane, la moyenne, le nb de données manquantes * pour les var cat: le nb de sujet pour chaque modalité et le nb de données manquantes
Summary n’est pas très pratique quand le nb de variables est important. Pour éviter cela on utilise describe (package de prettyR)
## Description of smp
##
## Numeric
## mean median var sd valid.n
## age 38.90 37 176.38 13.28 797
## duree 4.30 5 0.75 0.87 576
## discip 0.23 0 0.18 0.42 793
## n.enfant 1.76 1 3.36 1.83 773
## n.fratrie 4.29 3 11.84 3.44 799
## ecole 1.87 2 0.96 0.98 794
## separation 0.42 0 0.24 0.49 788
## juge.enfant 0.28 0 0.20 0.45 794
## place 0.23 0 0.18 0.42 792
## abus 0.28 0 0.20 0.45 792
## grav.cons 3.64 4 2.73 1.65 795
## dep.cons 0.40 0 0.24 0.49 799
## ago.cons 0.17 0 0.14 0.37 799
## ptsd.cons 0.22 0 0.17 0.41 799
## alc.cons 0.19 0 0.15 0.39 799
## subst.cons 0.27 0 0.20 0.44 799
## scz.cons 0.08 0 0.08 0.28 799
## char 1.51 1 0.73 0.85 703
## rs 2.06 2 0.77 0.88 696
## ed 1.87 2 0.76 0.87 692
## dr 2.15 2 0.69 0.83 688
## suicide.s 0.79 0 2.06 1.44 758
## suicide.hr 0.20 0 0.16 0.40 760
## suicide.past 0.28 0 0.20 0.45 785
## dur.interv 61.89 60 386.89 19.67 749
##
## Factor
##
## prof ouvrier sans emploi employe artisan prof.intermediaire autre
## Count 227.00 222.00 135.0 90.00 58.00 31.00
## Percent 28.41 27.78 16.9 11.26 7.26 3.88
##
## prof cadre agriculteur <NA>
## Count 24 6.00 6.00
## Percent 3 0.75 0.75
## Mode ouvrier
On peux calculer isolémment les valeurs pour les var quant:
Attention, pour aboutir à un résultat, il faut rejeter les données manquantes avec l’option na.rm=TRUE
## [1] 38.89962
## [1] 13.28098
## [1] 19
## [1] 83
pour les var cat, on utilise la commande table
Attention pour les données manquantes, on peux utiliser l’option useNA=“always” afin de savoir combien de données manquantes existent dans l’échantillon
##
## agriculteur artisan autre
## 6 90 31
## cadre employe ouvrier
## 24 135 227
## prof.intermediaire sans emploi <NA>
## 58 222 6
# deparse.level=2 permet d'afficher le nom de la variable calculée
table(smp$prof, deparse.level=2, useNA="always")
## smp$prof
## agriculteur artisan autre
## 6 90 31
## cadre employe ouvrier
## 24 135 227
## prof.intermediaire sans emploi <NA>
## 58 222 6
En complément, on peux utiliser la librairie Knitr qui fournit la fonction kable pour faire des affichages plus sympa des tableaux
Var1 | Freq |
---|---|
agriculteur | 6 |
artisan | 90 |
autre | 31 |
cadre | 24 |
employe | 135 |
ouvrier | 227 |
prof.intermediaire | 58 |
sans emploi | 222 |
NA | 6 |
On peux également utiliser une extension rmarkdown qui permet de manipuler des dataframe ou des tableaux avec beaucoup de lignes
La fonction datatable du package DT propose également son propre formatage
A noter, qu’il existe de nombreuses librairies qui facilitent le formatage des tableaux:
Comment représenter une donnée manquante dans R ? NA
Quelle fonction permet de faire le résumé des variables du jeu de données “data”, en affichant les quantiles et le nombre de valeurs manquantes de chaque variable ? summary(data)
Quelle fonction simple permet d’afficher le type des variables et les 10 premières observations de chaque variable du jeu de données “data” ? str(data)
Quelle fonction permet de calculer spécifiquement la moyenne d’une variable numérique ? mean(variable)
Que permet de faire la fonction table ? générer le tableau d’effectif (effectifs pour chaque variable avec option valeurs manquantes: useNA=“always”)
## [1] "age" "prof" "duree" "discip"
## [5] "n.enfant" "n.fratrie" "ecole" "separation"
## [9] "juge.enfant" "place" "abus" "grav.cons"
## [13] "dep.cons" "ago.cons" "ptsd.cons" "alc.cons"
## [17] "subst.cons" "scz.cons" "char" "rs"
## [21] "ed" "dr" "suicide.s" "suicide.hr"
## [25] "suicide.past" "dur.interv"
## 'data.frame': 799 obs. of 26 variables:
## $ age : int 31 49 50 47 23 34 24 52 42 45 ...
## $ prof : Factor w/ 8 levels "agriculteur",..: 3 NA 7 6 8 6 3 2 6 6 ...
## $ duree : int 4 NA 5 NA 4 NA NA 5 4 NA ...
## $ discip : int 0 0 0 0 1 0 0 0 1 0 ...
## $ n.enfant : int 2 7 2 0 1 3 5 2 1 2 ...
## $ n.fratrie : int 4 3 2 6 6 2 3 9 12 5 ...
## $ ecole : int 1 2 2 1 1 2 1 2 1 2 ...
## $ separation : int 0 1 0 1 1 0 1 0 1 0 ...
## $ juge.enfant : int 0 0 0 0 NA 0 1 0 1 0 ...
## $ place : int 0 0 0 1 1 0 1 0 0 0 ...
## $ abus : int 0 0 0 0 0 0 0 0 1 1 ...
## $ grav.cons : int 1 2 2 1 2 1 5 1 5 5 ...
## $ dep.cons : int 0 0 0 0 1 0 1 0 1 0 ...
## $ ago.cons : int 1 0 0 0 0 0 0 0 0 0 ...
## $ ptsd.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ alc.cons : int 0 0 0 0 0 0 0 0 1 1 ...
## $ subst.cons : int 0 0 0 0 0 0 1 0 1 0 ...
## $ scz.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ char : int 1 1 1 1 1 1 1 1 4 1 ...
## $ rs : int 2 2 2 2 2 1 3 2 3 2 ...
## $ ed : int 1 2 3 2 2 2 3 2 3 2 ...
## $ dr : int 1 1 2 2 2 1 2 2 1 2 ...
## $ suicide.s : int 0 0 0 1 0 0 3 0 4 0 ...
## $ suicide.hr : int 0 0 0 0 0 0 1 0 1 0 ...
## $ suicide.past: int 0 0 0 0 1 0 1 0 1 0 ...
## $ dur.interv : int NA 70 NA 105 NA NA 105 84 78 60 ...
## age prof duree discip
## Min. :19.0 ouvrier :227 Min. :1.000 Min. :0.000
## 1st Qu.:28.0 sans emploi :222 1st Qu.:4.000 1st Qu.:0.000
## Median :37.0 employe :135 Median :5.000 Median :0.000
## Mean :38.9 artisan : 90 Mean :4.302 Mean :0.232
## 3rd Qu.:48.0 prof.intermediaire: 58 3rd Qu.:5.000 3rd Qu.:0.000
## Max. :83.0 (Other) : 61 Max. :5.000 Max. :1.000
## NA's :2 NA's : 6 NA's :223 NA's :6
## n.enfant n.fratrie ecole separation
## Min. : 0.000 Min. : 0.000 Min. :1.000 Min. :0.0000
## 1st Qu.: 0.000 1st Qu.: 2.000 1st Qu.:1.000 1st Qu.:0.0000
## Median : 1.000 Median : 3.000 Median :2.000 Median :0.0000
## Mean : 1.755 Mean : 4.287 Mean :1.866 Mean :0.4226
## 3rd Qu.: 3.000 3rd Qu.: 6.000 3rd Qu.:2.000 3rd Qu.:1.0000
## Max. :13.000 Max. :21.000 Max. :5.000 Max. :1.0000
## NA's :26 NA's :5 NA's :11
## juge.enfant place abus grav.cons
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:2.000
## Median :0.0000 Median :0.0000 Median :0.0000 Median :4.000
## Mean :0.2771 Mean :0.2285 Mean :0.2778 Mean :3.643
## 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:5.000
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :7.000
## NA's :5 NA's :7 NA's :7 NA's :4
## dep.cons ago.cons ptsd.cons alc.cons
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.0000 Median :0.0000 Median :0.0000 Median :0.0000
## Mean :0.3967 Mean :0.1665 Mean :0.2165 Mean :0.1865
## 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:0.0000 3rd Qu.:0.0000
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
##
## subst.cons scz.cons char rs
## Min. :0.0000 Min. :0.0000 Min. :1.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:1.000 1st Qu.:1.000
## Median :0.0000 Median :0.0000 Median :1.000 Median :2.000
## Mean :0.2653 Mean :0.0826 Mean :1.512 Mean :2.057
## 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:2.000 3rd Qu.:3.000
## Max. :1.0000 Max. :1.0000 Max. :4.000 Max. :3.000
## NA's :96 NA's :103
## ed dr suicide.s suicide.hr
## Min. :1.000 Min. :1.000 Min. :0.0000 Min. :0.0000
## 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :2.000 Median :2.000 Median :0.0000 Median :0.0000
## Mean :1.866 Mean :2.153 Mean :0.7942 Mean :0.2013
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :3.000 Max. :3.000 Max. :5.0000 Max. :1.0000
## NA's :107 NA's :111 NA's :41 NA's :39
## suicide.past dur.interv
## Min. :0.0000 Min. : 0.00
## 1st Qu.:0.0000 1st Qu.: 48.00
## Median :0.0000 Median : 60.00
## Mean :0.2841 Mean : 61.89
## 3rd Qu.:1.0000 3rd Qu.: 75.00
## Max. :1.0000 Max. :120.00
## NA's :14 NA's :50
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 19.0 28.0 37.0 38.9 48.0 83.0 2
## [1] 31
## [1] 31 49 50 47 23 34 24 52 42 45
## [1] 19
## [1] 0 0 0 0 0 0 0 0 1 1
## [1] 0 1
## [1] 0 0 0 0 0 0 0 0 1 1
## [1] 799
##
## 0 1
## 572 220
##
## 0 1 <NA>
## 572 220 7
Dans le fichier suite à l’import, abus est une var cat qui a été importée comme une variable numérique. Cela est confirmé avec la commande summary:
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.0000 0.0000 0.0000 0.2778 1.0000 1.0000 7
Si on souhaite la traiter comme une var quali (cat), on peux utiliser pour cela la commande factor. R va alors associer des niveaux pour chaque modalité différente de la variable
## [1] 0 0 0 0 0 0
## [1] 0 0 0 0 0 0
## Levels: 0 1
abus.factor <-factor(smp$abus, levels=c(0,1), labels=c("Non", "Oui"))
table(smp$abus, useNA = "always") # sans niveau on a 1 affichage peu intuitif
##
## 0 1 <NA>
## 572 220 7
## abus.factor
## Non Oui <NA>
## 572 220 7
A noter que abus.factor a été ajouté à l’espace de travail
On peux créer des aggrégations et diminuer le nb de modaliés en créant des catégories. Par exemple, on va créer 5 catégories de détenus à partir du nombre d’enfants qu’ils ont: on peux créer 6 niveaux niveau 1: 1 enfant, niveau 2: 2 enfants, etc. A partir de 6 enfants et plus on pourra aggréger en 1 seul niveau. Tout d’abord on observe la variable:
## [1] "age" "prof" "duree" "discip"
## [5] "n.enfant" "n.fratrie" "ecole" "separation"
## [9] "juge.enfant" "place" "abus" "grav.cons"
## [13] "dep.cons" "ago.cons" "ptsd.cons" "alc.cons"
## [17] "subst.cons" "scz.cons" "char" "rs"
## [21] "ed" "dr" "suicide.s" "suicide.hr"
## [25] "suicide.past" "dur.interv"
## [1] 2 7 2 0 1 3
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.000 0.000 1.000 1.755 3.000 13.000 26
##
## 0 1 2 3 4 5 6 7 8 9 10 11 13
## 214 220 125 101 55 31 7 7 7 2 2 1 1
##
## FALSE TRUE
## 715 58
Ensuite, on va créer une nouvelle variable n.enfant.cat traitée comme un facteur R:
## [1] 2 7 2 0 1 3 5 2 1 2 0 <NA> 0 3
## [15] 3 0 2 1 <NA> 1 1 0 0 3 1 3 1 2
## [29] 3 0 1 3 2 1 2 1 1 3 1 0 0 1
## [43] 0 1 2 2 1 1 0 2 0 2 0 1 1 0
## [57] 2 2 0 0 0 0 1 0 1 3 1 0 1 1
## [71] 1 0 0 1 0 1 1 0 0 0 1 0 0 0
## [85] 0 2 1 4 4 0 1 7 1 0 0 1 0 4
## [99] 1 3 2 4 0 1 0 0 1 1 3 1 0 2
## [113] 2 1 0 0 1 3 5 2 3 2 1 1 0 3
## [127] 10 4 2 2 0 1 3 0 1 0 1 0 0 3
## [141] 0 1 1 0 0 11 2 0 0 1 0 1 2 2
## [155] 2 0 1 4 2 0 0 1 0 1 1 0 2 1
## [169] 2 1 0 0 1 5 0 1 0 0 0 3 3 3
## [183] 1 0 5 1 3 1 1 1 0 6 0 0 0 3
## [197] 1 0 2 5 2 3 3 1 1 1 1 7 2 5
## [211] 4 0 2 0 0 1 0 2 3 0 2 3 4 1
## [225] 0 0 1 1 3 1 0 1 3 3 3 2 8 2
## [239] 4 3 0 1 0 1 0 2 0 0 2 9 3 0
## [253] 1 1 2 4 0 1 7 4 0 8 1 1 2 0
## [267] 8 5 2 1 8 1 2 3 3 8 2 1 1 4
## [281] 0 3 0 2 3 1 <NA> <NA> 2 <NA> 3 2 0 0
## [295] 1 5 1 3 3 <NA> 5 4 <NA> <NA> 2 <NA> <NA> <NA>
## [309] <NA> <NA> 2 3 1 2 1 0 2 <NA> 1 3 0 1
## [323] 0 5 7 3 2 3 <NA> 4 4 1 0 0 <NA> 0
## [337] 5 1 <NA> 3 2 1 3 2 1 <NA> 0 0 1 0
## [351] 3 1 <NA> <NA> 0 1 <NA> 3 0 0 1 3 0 5
## [365] 2 1 5 4 0 1 2 0 0 1 0 4 2 0
## [379] 0 5 3 2 2 2 6 0 1 1 0 5 3 1
## [393] 0 0 2 1 1 1 1 0 2 1 1 0 2 4
## [407] 2 2 2 3 3 4 3 0 0 0 1 0 0 4
## [421] 0 1 0 0 0 4 0 1 0 2 3 0 0 3
## [435] 1 2 2 4 0 2 0 5 8 0 2 1 1 3
## [449] 2 4 0 4 0 0 5 1 3 1 1 3 3 1
## [463] 4 4 1 1 9 0 1 1 1 1 3 1 2 5
## [477] 0 2 4 4 0 0 3 10 3 2 2 0 0 2
## [491] 5 2 0 1 0 1 2 4 0 1 2 13 4 3
## [505] 1 1 0 6 2 0 1 4 3 0 1 2 0 0
## [519] 2 3 1 0 3 1 1 5 1 1 1 0 4 3
## [533] 2 0 4 2 1 1 2 1 0 3 1 1 2 3
## [547] 1 3 3 5 0 0 0 0 3 4 0 0 1 5
## [561] 0 0 1 1 3 0 1 1 1 0 4 1 1 0
## [575] 2 4 1 2 1 5 1 1 4 1 1 1 2 0
## [589] 2 0 4 5 0 0 1 0 2 4 1 4 2 0
## [603] 1 0 0 1 0 2 1 1 2 0 1 0 2 1
## [617] 1 0 1 1 1 0 1 1 1 0 0 0 3 1
## [631] 0 0 1 0 1 4 1 1 2 1 2 4 1 2
## [645] 6 1 1 2 1 3 1 0 1 1 2 0 1 0
## [659] 0 2 0 1 0 0 1 0 0 3 3 1 6 <NA>
## [673] 2 1 3 1 1 0 <NA> 2 1 1 1 3 1 2
## [687] 3 4 1 2 <NA> 2 2 0 4 0 0 3 1 3
## [701] 3 0 2 1 1 4 0 3 4 1 1 0 1 2
## [715] 1 2 4 3 2 1 4 2 4 1 <NA> 0 7 2
## [729] 1 1 3 4 3 2 3 2 1 0 2 3 3 4
## [743] 3 0 6 6 3 5 4 4 <NA> 1 3 2 4 3
## [757] 2 3 0 0 8 0 3 0 0 0 5 5 5 1
## [771] 2 5 1 1 5 4 3 0 0 3 0 0 0 2
## [785] 2 3 3 7 2 3 0 1 5 2 1 1 3 0
## [799] 2
## Levels: 0 1 2 3 4 5 6 7 8 9 10 11 13
smp$n.enfant.cat<-factor(smp$n.enfant)
table(smp$n.enfant.cat) # on voit que 14 factors ont été crées: on va regrouper en 6 factors: 1, 2, 3, 4, 5, 5+
##
## 0 1 2 3 4 5 6 7 8 9 10 11 13
## 214 220 125 101 55 31 7 7 7 2 2 1 1
## [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "13"
## [1] 13
## [1] "5" "6" "7" "8" "9" "10" "11" "13"
levels(smp$n.enfant.cat)[6:13]<-"5+" # Création d'une seule modalité de la variable levels pour les niveaux aggrégé appellé "5+"
table(smp$n.enfant.cat) # on vérifie que pour cette variable créée, on a bien 6 niveaux au lieu de 13 : les niveaux 6 à 13 ont été aggrégés en 1 seul niveau
##
## 0 1 2 3 4 5+
## 214 220 125 101 55 58
load("smp.sav") #Rechargement d'une sauvegarde effectuée avec save
names(smp) # liste des variables du dataframe
## [1] "age" "prof" "duree" "discip"
## [5] "n.enfant" "n.fratrie" "ecole" "separation"
## [9] "juge.enfant" "place" "abus" "grav.cons"
## [13] "dep.cons" "ago.cons" "ptsd.cons" "alc.cons"
## [17] "subst.cons" "scz.cons" "char" "rs"
## [21] "ed" "dr" "suicide.s" "suicide.hr"
## [25] "suicide.past" "dur.interv" "n.enfant.cat"
## [1] 31
## [1] 31
## [1] 31
## [1] autre
## 8 Levels: agriculteur artisan autre cadre employe ... sans emploi
## [1] autre <NA> prof.intermediaire
## [4] ouvrier sans emploi ouvrier
## 8 Levels: agriculteur artisan autre cadre employe ... sans emploi
## [1] FALSE NA FALSE FALSE FALSE FALSE
##
## FALSE TRUE
## 787 6
## [1] 15 312 384 391 439 442
## [1] 64 42 37 36 35 79
Cette commande permet de filtrer les observations du dataframe directement avec une expression. 3 parametres donc:
## age
## 15 64
## 312 42
## 384 37
## 391 36
## 439 35
## 442 79
## age prof duree discip n.enfant
## 15 64 agriculteur NA 0 3
## 312 42 agriculteur 4 0 3
## 384 37 agriculteur 5 1 2
## 391 36 agriculteur 4 1 3
## 439 35 agriculteur 3 0 0
## 442 79 agriculteur 5 0 5
## [1] "age" "prof" "duree" "discip" "n.enfant"
## age duree discip n.enfant
## 15 64 NA 0 3
## 312 42 4 0 3
## 384 37 5 1 2
## 391 36 4 1 3
## 439 35 3 0 0
## 442 79 5 0 5
## age duree discip n.enfant
## 15 64 NA 0 3
## 312 42 4 0 3
## 391 36 4 1 3
## 442 79 5 0 5
Filtre encore plus complexe: On filtre les valeurs manquantes pour la variable duree
## age prof duree discip n.enfant n.fratrie ecole separation
## 15 64 agriculteur NA 0 3 2 1 0
## 312 42 agriculteur 4 0 3 6 1 0
## 391 36 agriculteur 4 1 3 4 3 1
## 442 79 agriculteur 5 0 5 6 2 0
## juge.enfant place abus grav.cons dep.cons ago.cons ptsd.cons alc.cons
## 15 0 0 0 1 0 0 0 0
## 312 0 0 0 4 1 1 0 1
## 391 1 1 0 2 0 0 1 0
## 442 0 0 0 NA 0 0 0 0
## subst.cons scz.cons char rs ed dr suicide.s suicide.hr suicide.past
## 15 0 0 1 1 1 3 0 0 0
## 312 0 0 2 1 3 2 3 1 0
## 391 1 0 1 NA 3 1 0 0 0
## 442 0 0 1 2 1 1 0 0 0
## dur.interv n.enfant.cat
## 15 80 3
## 312 NA 3
## 391 NA 3
## 442 85 5+
Création d’un tableau d’effectif à partir de la commande table
table.n.enfant.cat<-table(smp$n.enfant.cat) # création d'un tableau d'effectif
sum(table.n.enfant.cat) #calcul de l'effectif
## [1] 773
##
## 0 1 2 3 4 5+
## 27.684347 28.460543 16.170763 13.065977 7.115136 7.503234
##
## 0 1 2 3 4 5+
## 27.684347 28.460543 16.170763 13.065977 7.115136 7.503234
##
## 0 1 2 3 4 5+
## 0.277 0.285 0.162 0.131 0.071 0.075
enfant.cat.freq<-100*prop.table(table.n.enfant.cat)
barplot(enfant.cat.freq)#représentation graphique du tableau de fréquences relatives
## [1] 31 49 50 47 23 34
hist(smp$age, nclass=8, prob=TRUE, las=1) #covnersion de l'historgramme en historgramme de densité
lines(density(smp$age, na.rm=TRUE)) #utilisation de la densité non paramétrique qui permet de ne pas trop oberver les classes mais uniquement une forme de densité générale
Nous souhaitons afficher la valeur minimale observée dans une série de 10 observations incluant 2 valeurs manquantes. La variable est appelée x. L’instruction min(x) fournit-elle le résultat escompté ? NON
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.00 3.25 5.50 5.50 7.75 10.00 2
## [1] NA
## [1] 1
Nous souhaitons associer les étiquettes « Non » et « Oui » aux valeurs 0 et 1, respectivement, d’une variable appelée z. Quelle commande pouvons-nous utiliser ? factor
## [1] OUI NON OUI OUI OUI NON NON OUI NON
## Levels: OUI NON
## z
## 0 1
## 5 4
Pour une variable qualitative z présentant des valeurs manquantes, la commande sum(table(z)) fournit : L’effectif total observé (sans les individus ayant des données manquantes)
## z
## bleu cramoisi jaune rouge taupe vert <NA>
## 1 1 1 1 1 1 1
## [1] 6
Ouvrez le fichier smp1.csv dans un éditeur de texte (type bloc-note, Word…) et cochez la proposition correspondant à la première ligne (avec ou sans sans guillemets autour des noms de variables) : age;prof;dep.cons;scz.cons;grav.cons;n.enfant;rs;ed;dr
Donnez la borne supérieure de l’intervalle interquartile pour la variable dur.interv en considérant l’ensemble des individus. 75
## Length Class Mode
## 0 NULL NULL
Nous souhaitons recoder la taille de la fratrie (n.fratrie) en variable binaire : « moins de 5 enfants » (‘<5’) et « 5 enfants ou plus » (‘5+’). Quelle commande peut-on utiliser ? (Dans les expressions suivantes, le point-virgule sert à délimiter deux instructions). la commande : factor(smp$n.fratrie>=5, labels=c(‘<5’,‘5+’))
## < table of extent 0 >
#smp$n.fratrie.bin<-factor(smp$n.fratrie>=5, labels=c('<5','5+'))
#table(smp$n.fratrie.bin) #vérification du tableau d'effectif
Donnez le nombre de lignes du tableau de données pour lesquelles la variable ecole vaut 1, 2 ou 3: 731
## NULL
## < table of extent 0 >
## < table of extent 0 >
Donnez le nombre d’individus sans emploi 222 détenus sans emploit et 6 détenus avec données manquantes
##
## agriculteur artisan autre
## 0 0 0
## cadre employe ouvrier
## 0 0 0
## prof.intermediaire sans emploi <NA>
## 0 222 6
Pour afficher les 10 premières observations d’une variable suivi, nous utilisons la commande suivante : suivi[1:10]
suivi<-c(1,34,22,33,21,67,37,45,34,89,4,2) # data de 12 observations
suivi #affiche de toutes les observations
## [1] 1 34 22 33 21 67 37 45 34 89 4 2
## [1] 1 34 22 33 21 67 37 45 34 89
Quelle commande permet d’obtenir le nombre total d’individus sans données manquantes ? sum(complete.cases(smp) = 403
## [1] 653
Quel est l’âge moyen des dix premiers individus du tableau de données? 39.7
## [1] 39.7
Quelle est la valeur médiane pour la durée d’intervention (dur.interv) en ne considérant que les 300 premières observations du data frame smp ? 50
## Warning in is.na(x): is.na() applied to non-(list or vector) of type 'NULL'
## NULL
Un intervalle de confiance permet d’estimer la borne min et la borne max de la prévalence d’une modalité sur une population à partir d’un échantillon et selon un niveau de probabilité donné. Par exemple: il y a 95% de chances que la proportion de “déprimés” dans le milieu carcéral soit comprise entre 8% et 64%. Cette estimation étant faite à partir d’un échantillon de 10 détenus tirés au sort la formule de calcul de l’intervalle de confiance 95% est:\([M - 1.96 * ET ; M + 1.96 * ET]\) M est la modalité à estimer ET est l’écart type de m pour l’échantillon.
## Description of structure(list(x = c(31L, 49L, 50L, 47L, 23L, 34L, 24L, 52L, 42L, 45L, 31L, NA, 21L, 40L, 64L, 67L, 60L, 63L, NA, 28L, 20L, 30L, 32L, 31L, 26L, 42L, 32L, 40L, 41L, 27L, 24L, 38L, 39L, 36L, 29L, 41L, 36L, 41L, 21L, 21L, 46L, 22L, 21L, 35L, 45L, 38L, 19L, 21L, 27L, 40L, 39L, 47L, 24L, 36L, 39L, 22L, 38L, 37L, 29L, 23L, 36L, 42L, 56L, 28L, 36L, 38L, 43L, 29L, 64L, 25L, 51L, 35L, 30L, 37L, 26L, 36L, 58L, 32L, 30L, 26L, 27L, 23L, 24L, 39L, 43L, 39L, 26L, 44L, 37L, 40L, 24L, 46L, 26L, 38L, 37L, 30L, 39L, 36L, 39L, 28L, 27L, 51L, 48L, 47L, 41L, 35L, 25L, 31L, 44L, 40L, 29L, 34L, 49L, 57L, 33L, 35L, 32L, 34L, 46L, 45L, 31L, 42L, 48L, 34L, 34L, 64L, 50L, 53L, 49L, 53L, 37L, 42L, 55L, 32L, 33L, 40L, 29L, 32L, 23L, 61L, 39L, 30L, 37L, 30L, 39L, 49L, 44L, 40L, 56L, 43L, 27L, 21L, 44L, 50L, 50L, 20L, 37L, 42L, 27L, 22L, 25L, 20L, 21L, 19L, 25L, 24L, 49L, 24L, 26L, 35L, 22L, 24L, 23L, 46L, 26L, 41L, 51L, 20L, 30L, 37L, 49L, 28L, 28L, 51L, 40L, 33L, 25L, 29L, 40L, 43L, 35L, 50L, 44L, 35L, 24L, 43L, 26L, 45L, 42L, 45L, 48L, 45L, 34L, 31L, 40L, 22L, 42L, 38L, 38L, 40L, 46L, 26L, 29L, 25L, 40L, 43L, 28L, 29L, 32L, 28L, 57L, 31L, 71L, 33L, 24L, 22L, 25L, 26L, 52L, 33L, 38L, 39L, 41L, 52L, 33L, 39L, 59L, 33L, 50L, 58L, 23L, 41L, 43L, 42L, 22L, 57L, 41L, 30L, 66L, 49L, 46L, 28L, 59L, 35L, 44L, 83L, 34L, 49L, 60L, 56L, 46L, 62L, 41L, 27L, 53L, 48L, 66L, 66L, 55L, 61L, 43L, 54L, 38L, 51L, 51L, 50L, 56L, 53L, 49L, 41L, 44L, 64L, 42L, 52L, 72L, 43L, 30L, 32L, 43L, 25L, 27L, 25L, 52L, 39L, 42L, 59L, 46L, 62L, 50L, 24L, 43L, 32L, 67L, 28L, 44L, 19L, 20L, 23L, 26L, 28L, 31L, 42L, 57L, 30L, 36L, 53L, 33L, 25L, 22L, 42L, 25L, 32L, 23L, 45L, 48L, 35L, 37L, 38L, 24L, 47L, 61L, 38L, 27L, 27L, 26L, 30L, 47L, 37L, 30L, 41L, 29L, 37L, 28L, 47L, 26L, 50L, 23L, 60L, 37L, 48L, 41L, 28L, 54L, 61L, 33L, 31L, 25L, 66L, 26L, 29L, 29L, 53L, 24L, 48L, 40L, 47L, 40L, 41L, 54L, 25L, 36L, 44L, 32L, 27L, 31L, 34L, 34L, 71L, 20L, 54L, 39L, 50L, 36L, 37L, 43L, 28L, 21L, 35L, 36L, 53L, 36L, 38L, 66L, 62L, 38L, 24L, 49L, 21L, 34L, 29L, 36L, 29L, 33L, 34L, 57L, 65L, 25L, 36L, 31L, 54L, 49L, 42L, 30L, 20L, 23L, 21L, 23L, 39L, 45L, 29L, 21L, 54L, 77L, 23L, 32L, 58L, 49L, 26L, 40L, 51L, 62L, 45L, 41L, 30L, 52L, 20L, 36L, 34L, 35L, 30L, 46L, 79L, 66L, 19L, 41L, 51L, 26L, 56L, 33L, 39L, 72L, 45L, 59L, 21L, 41L, 43L, 55L, 26L, 49L, 29L, 26L, 28L, 77L, 61L, 63L, 30L, 49L, 48L, 45L, 32L, 56L, 48L, 64L, 73L, 33L, 74L, 54L, 27L, 49L, 45L, 27L, 53L, 62L, 54L, 37L, 56L, 60L, 33L, 34L, 32L, 44L, 49L, 46L, 67L, 39L, 59L, 63L, 81L, 38L, 58L, 42L, 73L, 48L, 41L, 28L, 44L, 45L, 46L, 50L, 27L, 56L, 46L, 42L, 25L, 23L, 26L, 19L, 24L, 24L, 32L, 23L, 24L, 33L, 21L, 33L, 41L, 24L, 31L, 19L, 25L, 51L, 39L, 22L, 20L, 30L, 34L, 28L, 20L, 20L, 33L, 24L, 32L, 37L, 25L, 24L, 29L, 19L, 37L, 56L, 49L, 60L, 29L, 22L, 20L, 49L, 33L, 30L, 29L, 25L, 62L, 41L, 33L, 44L, 60L, 24L, 24L, 33L, 27L, 45L, 33L, 44L, 23L, 23L, 35L, 36L, 28L, 24L, 27L, 27L, 28L, 27L, 40L, 52L, 19L, 31L, 21L, 33L, 23L, 30L, 23L, 31L, 48L, 24L, 24L, 26L, 32L, 29L, 38L, 23L, 50L, 26L, 47L, 38L, 24L, 24L, 19L, 25L, 31L, 33L, 26L, 38L, 23L, 37L, 19L, 49L, 33L, 30L, 38L, 30L, 26L, 27L, 21L, 31L, 19L, 26L, 28L, 49L, 35L, 25L, 32L, 27L, 20L, 30L, 25L, 21L, 54L, 27L, 22L, 39L, 21L, 54L, 49L, 23L, 36L, 59L, 50L, 24L, 47L, 42L, 41L, 33L, 46L, 23L, 19L, 39L, 38L, 40L, 39L, 40L, 44L, 26L, 48L, 47L, 23L, 25L, 20L, 45L, 44L, 57L, 39L, 55L, 19L, 34L, 28L, 33L, 19L, 33L, 27L, 46L, 47L, 22L, 27L, 26L, 52L, 56L, 44L, 63L, 34L, 41L, 38L, 37L, 58L, 37L, 24L, 60L, 26L, 21L, 52L, 20L, 37L, 32L, 32L, 58L, 49L, 32L, 37L, 46L, 50L, 44L, 47L, 37L, 38L, 50L, 56L, 30L, 34L, 43L, 55L, 43L, 31L, 55L, 41L, 68L, 45L, 48L, 42L, 71L, 38L, 46L, 65L, 51L, 57L, 57L, 71L, 40L, 43L, 71L, 48L, 34L, 69L, 43L, 35L, 62L, 34L, 51L, 48L, 36L, 44L, 49L, 74L, 19L, 56L, 57L, 65L, 52L, 77L, 29L, 37L, 45L, 40L, 72L, 27L, 56L, 35L, 30L, 37L, 30L, 40L, 54L, 26L, 48L, 83L, 32L, 22L, 48L, 67L, 58L, 37L, 24L, 34L, 39L, 38L, 39L, 56L, 35L, 26L, 70L, 68L, 42L, 41L, 40L, 26L, 50L, 27L, 28L, 44L, 31L, 38L, 71L)), .Names = "x", row.names = c(NA, -799L), class = "data.frame")
##
## Numeric
## mean median var sd valid.n
## x 38.9 37 176.38 13.28 797
la moyenne (mean)de l’age est: 38.9 ans
l’écart type (sd) de l’age des détenus est: 13.28
l’écart type de la moyenne de l’age est: \(13.28/\sqrt{797}\)
l’intervalle de confiance 95% de l’age des détenus est donc [37.98 : 39.82]
## [1] 37.97801
## [1] 39.82199
L’intervalle de confiance d’un pourcentage peut être estimé à partir de méthodes qui convergent lorsque la taille de l’échantillon est importante. pour 3 individus présentant une modalité commune (par exemple dépression) parmi un échantillon de 10 personnes tirées au sort. Quel est l’intervalle de confiance de la prévalence de la dépression: 30% ?
## method x n mean lower upper
## 1 agresti-coull 3 10 0.3000000 0.10333842 0.6076747
## 2 asymptotic 3 10 0.3000000 0.01597423 0.5840258
## 3 bayes 3 10 0.3181818 0.07454423 0.5794516
## 4 cloglog 3 10 0.3000000 0.07113449 0.5778673
## 5 exact 3 10 0.3000000 0.06673951 0.6524529
## 6 logit 3 10 0.3000000 0.09976832 0.6236819
## 7 probit 3 10 0.3000000 0.08991347 0.6150429
## 8 profile 3 10 0.3000000 0.08470272 0.6065091
## 9 lrt 3 10 0.3000000 0.08458545 0.6065389
## 10 prop.test 3 10 0.3000000 0.08094782 0.6463293
## 11 wilson 3 10 0.3000000 0.10779127 0.6032219
## method x n mean lower upper
## 1 prop.test 3 10 0.3 0.08094782 0.6463293
## method x n mean lower upper
## 1 exact 3 10 0.3 0.06673951 0.6524529
## method x n mean lower upper
## 1 agresti-coull 300 1000 0.3000000 0.2723966 0.3291341
## 2 asymptotic 300 1000 0.3000000 0.2715974 0.3284026
## 3 bayes 300 1000 0.3001998 0.2719448 0.3286787
## 4 cloglog 300 1000 0.3000000 0.2718595 0.3285966
## 5 exact 300 1000 0.3000000 0.2717211 0.3294617
## 6 logit 300 1000 0.3000000 0.2723865 0.3291466
## 7 probit 300 1000 0.3000000 0.2722277 0.3289871
## 8 profile 300 1000 0.3000000 0.2721340 0.3288893
## 9 lrt 300 1000 0.3000000 0.2721419 0.3289000
## 10 prop.test 300 1000 0.3000000 0.2719222 0.3296354
## 11 wilson 300 1000 0.3000000 0.2724068 0.3291239
Qu’est-ce qu’un intervalle de confiance ? L’intervalle de confiance à 95% est un intervalle de valeurs qui a 95% de chance de contenir la vraie valeur du paramètre estimé
Quelles conditions doit remplir l’estimateur d’un paramètre pour que nous puissions calculer l’intervalle de confiance à partir de la moyenne et de l’écart type ? l’estimateur du paramètre doit suivre une distribution normale
Si une étude retrouve 6% de troubles schizophréniques dans un échantillon de détenus français, quel est le pourcentage exact de ces troubles dans la population globale de détenus français ? Impossible à savoir
L’étendue de l’intervalle de confiance augmente : Si le nombre de sujets de l’échantillon diminue
Comment l’échantillonnage doit-il être réalisé pour que le calcul de l’intervalle de confiance ait un sens ? L’échantillonnage doit être réalisé de manière aléatoire
L’objectif est de pouvoir estimer la force de corrélation entre 2 variables. Cette force peut être estimée par le coefficient de corrélation de Pearson: r * Si r = 0 la corrélation est nulle: les variables sous jacentes sont indépendantes (ssi elle suivent une loi normale) * Si r = +/- 1 x et y sont mutuellement déterminées: \(y=ax+b\)
L’interprétation de ce coeff n’est pas facile. Le plus simple est de représenter graphiquement les 2 variables X et y afin de visualiser leur corrélation
## 'data.frame': 799 obs. of 26 variables:
## $ age : int 31 49 50 47 23 34 24 52 42 45 ...
## $ prof : Factor w/ 8 levels "agriculteur",..: 3 NA 7 6 8 6 3 2 6 6 ...
## $ duree : int 4 NA 5 NA 4 NA NA 5 4 NA ...
## $ discip : int 0 0 0 0 1 0 0 0 1 0 ...
## $ n.enfant : int 2 7 2 0 1 3 5 2 1 2 ...
## $ n.fratrie : int 4 3 2 6 6 2 3 9 12 5 ...
## $ ecole : int 1 2 2 1 1 2 1 2 1 2 ...
## $ separation : int 0 1 0 1 1 0 1 0 1 0 ...
## $ juge.enfant : int 0 0 0 0 NA 0 1 0 1 0 ...
## $ place : int 0 0 0 1 1 0 1 0 0 0 ...
## $ abus : int 0 0 0 0 0 0 0 0 1 1 ...
## $ grav.cons : int 1 2 2 1 2 1 5 1 5 5 ...
## $ dep.cons : int 0 0 0 0 1 0 1 0 1 0 ...
## $ ago.cons : int 1 0 0 0 0 0 0 0 0 0 ...
## $ ptsd.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ alc.cons : int 0 0 0 0 0 0 0 0 1 1 ...
## $ subst.cons : int 0 0 0 0 0 0 1 0 1 0 ...
## $ scz.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ char : int 1 1 1 1 1 1 1 1 4 1 ...
## $ rs : int 2 2 2 2 2 1 3 2 3 2 ...
## $ ed : int 1 2 3 2 2 2 3 2 3 2 ...
## $ dr : int 1 1 2 2 2 1 2 2 1 2 ...
## $ suicide.s : int 0 0 0 1 0 0 3 0 4 0 ...
## $ suicide.hr : int 0 0 0 0 0 0 1 0 1 0 ...
## $ suicide.past: int 0 0 0 0 1 0 1 0 1 0 ...
## $ dur.interv : int NA 70 NA 105 NA NA 105 84 78 60 ...
## [1] 0.4326039
Une corrélation très forte entre deux variables signifie que : Il est possible que les deux variables soient liées par une relation de causalité
Le coefficient de corrélation entre 2 variables qui suivent une loi normale est r=0, signifie que : Les 2 variables sont indépendantes
Le coefficient de corrélation entre 2 variables est r=0.4, signifie que : Le pourcentage de variance partagé entre ces 2 variables est de 16%
La relation entre les 2 variables X et Y est plus forte dans : Le nuage des points B car on voit visuellement que le nuage se répartit autour d’une droite
Quelle option devons-nous ajouter dans la commande “cor” en cas de données manquantes dans R ? complete.obs
## [1] NA
## [1] 0.4326039
soit les données d’enquêtes suivantes: ||Enrhumés| |:-:|:-:|:-:| ||Oui|Non| |Tabac: Oui|30|600| |Tabac: Non|30|300|
La question est d’évaluer la prévalence du rhume selon que l’on est fumeur ou pas
RR = (30 / 330) / (30 / 630) #Calcul du Risque Relatif
OD = (30 / 300) / (30 / 600) #Calcul de l'ODDSRATIO
RR
## [1] 1.909091
## [1] 2
Pour RR, on peut dire que les fumeurs on 1,9 plus de chance d’être enrhumés que les non fumeurs.
Pour ODDSRATIO, c’est à peu près la même chose surtout si l’échantillon est important
La corrélation entre le niveau d’évitement du danger et la dépression dans la population Il faut tout d’abord transformer le niveau d’évitement du danger en variable binaire
## 'data.frame': 799 obs. of 27 variables:
## $ age : int 31 49 50 47 23 34 24 52 42 45 ...
## $ prof : Factor w/ 8 levels "agriculteur",..: 3 NA 7 6 8 6 3 2 6 6 ...
## $ duree : int 4 NA 5 NA 4 NA NA 5 4 NA ...
## $ discip : int 0 0 0 0 1 0 0 0 1 0 ...
## $ n.enfant : int 2 7 2 0 1 3 5 2 1 2 ...
## $ n.fratrie : int 4 3 2 6 6 2 3 9 12 5 ...
## $ ecole : int 1 2 2 1 1 2 1 2 1 2 ...
## $ separation : int 0 1 0 1 1 0 1 0 1 0 ...
## $ juge.enfant : int 0 0 0 0 NA 0 1 0 1 0 ...
## $ place : int 0 0 0 1 1 0 1 0 0 0 ...
## $ abus : int 0 0 0 0 0 0 0 0 1 1 ...
## $ grav.cons : int 1 2 2 1 2 1 5 1 5 5 ...
## $ dep.cons : int 0 0 0 0 1 0 1 0 1 0 ...
## $ ago.cons : int 1 0 0 0 0 0 0 0 0 0 ...
## $ ptsd.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ alc.cons : int 0 0 0 0 0 0 0 0 1 1 ...
## $ subst.cons : int 0 0 0 0 0 0 1 0 1 0 ...
## $ scz.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ char : int 1 1 1 1 1 1 1 1 4 1 ...
## $ rs : int 2 2 2 2 2 1 3 2 3 2 ...
## $ ed : int 1 2 3 2 2 2 3 2 3 2 ...
## $ dr : int 1 1 2 2 2 1 2 2 1 2 ...
## $ suicide.s : int 0 0 0 1 0 0 3 0 4 0 ...
## $ suicide.hr : int 0 0 0 0 0 0 1 0 1 0 ...
## $ suicide.past: int 0 0 0 0 1 0 1 0 1 0 ...
## $ dur.interv : int NA 70 NA 105 NA NA 105 84 78 60 ...
## $ ed.bin : num 0 0 1 0 0 0 1 0 1 0 ...
## smp$ed
## smp$ed.bin 1 2 3 <NA>
## 0 315 155 0 0
## 1 0 0 222 0
## <NA> 0 0 0 107
On peux ensuite chercher à calculer la corrélation entre smp\(ed.bin et smp\)dep.cons
La fonction twoby2 permet de calculer la corrélation:
## 2 by 2 table analysis:
## ------------------------------------------------------
## Outcome : 0
## Comparing : 0 vs. 1
##
## 0 1 P(0) 95% conf. interval
## 0 126 96 0.5676 0.5016 0.6312
## 1 135 335 0.2872 0.2481 0.3298
##
## 95% conf. interval
## Relative Risk: 1.9760 1.6456 2.3726
## Sample Odds Ratio: 3.2569 2.3361 4.5408
## Conditional MLE Odds Ratio: 3.2508 2.3037 4.6035
## Probability difference: 0.2803 0.2020 0.3549
##
## Exact P-value: 0
## Asymptotic P-value: 0
## ------------------------------------------------------
L’Odds ratio (OR) vaut : ( a/b) /(c/d)
Dans quel cas ne pouvons nous pas calculer le Risque Relatif (RR) ? Étude cas-témoins: le principe de ce tye d’étude est d’utiliser une taille d’échantillon faible (moins cher…)
Si la prévalence de la maladie est rare, l’OR est-il équivalent au RR ? OUI
Quelle est la fonction R qui permet le calcul des RR et OR ? twoby2
## 2 by 2 table analysis:
## ------------------------------------------------------
## Outcome : 0
## Comparing : 0 vs. 1
##
## 0 1 P(0) 95% conf. interval
## 0 63 90 0.4118 0.3366 0.4913
## 1 147 453 0.2450 0.2122 0.2810
##
## 95% conf. interval
## Relative Risk: 1.6807 1.3276 2.1276
## Sample Odds Ratio: 2.1571 1.4873 3.1287
## Conditional MLE Odds Ratio: 2.1547 1.4577 3.1764
## Probability difference: 0.1668 0.0837 0.2525
##
## Exact P-value: 1e-04
## Asymptotic P-value: 1e-04
## ------------------------------------------------------
Ce lab présente R Markdown. Toutes les notes de cours sont déjà en R Markdown.
Quel est le nombre moyen d’enfants (variable n.enfant) chez les individus diagnostiqués comme dépressifs (dep.cons = 1) (2 chiffres après la virgule) ?
## Description of subset(smp, smp$dep.cons == 1, select = n.enfant)
##
## Numeric
## mean median var sd valid.n
## n.enfant 1.76 1 2.81 1.68 310
Autre solution
## [1] 1.764516
Donner la borne supérieure de l’intervalle interquartile pour la variable duree chez les individus dont l’âge est strictement inférieur à 35 ans (2 chiffres après la virgule). Borne supérieure :
## duree
## Min. :1.000
## 1st Qu.:3.250
## Median :4.000
## Mean :4.005
## 3rd Qu.:5.000
## Max. :5.000
## NA's :129
À partir du data frame smp, nous souhaitons recoder l’âge (variable age) en variable catégorielle en considérant 4 intervalles de classe dont les bornes intermédiaires sont définies à partir des 1er, 2ème et 3ème quartiles. Les bornes inférieures et supérieures de la première et dernière classe seront naturellement les valeurs minimale et maximale observées pour la variable age. À l’exception de la première classe dont les deux bornes d’intervalle seront fermées (c’est-à-dire que les bornes seront inclues dans l’intervalle), les bornes inférieures des classes suivantes (2 à 4) seront ouvertes, et les bornes supérieures fermées. Indiquer l’effectif associé à la 3ème classe ainsi constituée.
on cherche tout d’abord à connaître les valeurs min, max de chaque quartile pour la variable age. Les 4 intervalles de classe sont:
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 19.0 28.0 37.0 38.9 48.0 83.0 2
Pou répondre à la question, on peux:
## Description of structure(list(x = c(47L, 42L, 45L, NA, 40L, NA, 42L, 40L, 41L, 38L, 39L, 41L, 41L, 46L, 45L, 38L, 40L, 39L, 47L, 39L, 38L, 42L, 38L, 43L, 39L, 43L, 39L, 44L, 40L, 46L, 38L, 39L, 39L, 48L, 47L, 41L, 44L, 40L, 46L, 45L, 42L, 48L, 42L, 40L, 39L, 39L, 44L, 40L, 43L, 44L, 42L, 46L, 41L, 40L, 40L, 43L, 44L, 43L, 45L, 42L, 45L, 48L, 45L, 40L, 42L, 38L, 38L, 40L, 46L, 40L, 43L, 38L, 39L, 41L, 39L, 41L, 43L, 42L, 41L, 46L, 44L, 46L, 41L, 48L, 43L, 38L, 41L, 44L, 42L, 43L, 43L, 39L, 42L, 46L, 43L, 44L, 42L, 42L, 45L, 48L, 38L, 47L, 38L, 47L, 41L, 47L, 48L, 41L, 48L, 40L, 47L, 40L, 41L, 44L, 39L, 43L, 38L, 38L, 42L, 39L, 45L, 40L, 45L, 41L, 46L, 41L, 39L, 45L, 41L, 43L, 48L, 45L, 48L, 45L, 44L, 46L, 39L, 38L, 42L, 48L, 41L, 44L, 45L, 46L, 46L, 42L, 41L, 39L, 41L, 44L, 45L, 44L, 40L, 48L, 38L, 47L, 38L, 38L, 38L, 39L, 47L, 42L, 41L, 46L, 39L, 38L, 40L, 39L, 40L, 44L, 48L, 47L, 45L, 44L, 39L, 46L, 47L, 44L, 41L, 38L, 46L, 44L, 47L, 38L, 43L, 43L, 41L, 45L, 48L, 42L, 38L, 46L, 40L, 43L, 48L, 43L, 48L, 44L, 45L, 40L, 40L, 48L, 48L, 39L, 38L, 39L, 42L, 41L, 40L, 44L, 38L)), .Names = "x", row.names = c(NA, -211L), class = "data.frame")
##
## Numeric
## mean median var sd valid.n
## x 42.48 42 9.94 3.15 209
La réponse est 209
na.fail part en échec si il recoit des informations contenant NA
## age prof duree discip n.enfant n.fratrie ecole separation
## 20 28 ouvrier 5 0 1 1 2 0
## 221 57 sans emploi 5 0 2 2 2 0
## 342 37 sans emploi 4 0 1 2 1 1
## 446 51 ouvrier 3 0 1 3 3 0
## 531 51 artisan 5 0 4 5 1 0
## juge.enfant place abus grav.cons dep.cons ago.cons ptsd.cons alc.cons
## 20 0 0 0 2 0 0 0 0
## 221 0 0 1 5 1 0 0 0
## 342 0 0 0 1 0 0 0 0
## 446 0 0 0 2 0 0 0 0
## 531 0 0 1 6 1 0 0 0
## subst.cons scz.cons char rs ed dr suicide.s suicide.hr suicide.past
## 20 1 0 1 2 2 2 0 0 1
## 221 0 0 2 1 3 3 4 1 1
## 342 0 0 1 1 2 2 0 0 0
## 446 0 0 1 2 2 2 0 0 0
## 531 0 1 2 3 3 3 3 1 0
## dur.interv ed.bin
## 20 95 0
## 221 50 1
## 342 30 0
## 446 85 0
## 531 68 1
La réponse est NON
Pour obtenir un résumé
## Number of cases in table: 242
## Number of factors: 1
Rappel sur le chargement d’un fichier de donnée
Nous testons statistiquement la différence de pourcentages des individus malades dans les groupes A et B, que représente p (p-value) ? La probabilité que le hasard puisse expliquer à lui seul une différence au moins aussi importante que celle qui a été observée. Si le p est supérieur à 0.05, alors cette probabilité est considérée comme importante et alors on considère que le hasard peux expliquer
Si la taille de l’échantillon diminue, le p (p-value) obtenu par le test de Fisher : Augmente: la taille ne sera pas suffisante pour estimer
Hors contexte spécifique, quelle doit être la valeur de p pour que le résultat soit significatif ? <5%
Vous êtes appelé comme expert dans une affaire de dopage, vous decouvrez que le test est positif avec un p égal à 0,101. Que dites vous ? Vous ne pouvez affirmer ni sa culpabilité, ni son innocence.
Les tests d’hypothèses reposent sur la formulation de 2 hyothèses: * H0: c’est le status quo. Par exemple: 2 médicaments testés ont la même efficacité * H1: c’est le but de l’expérience (ce que la personne souhaite démontrer). Par exemple: les 2 médicaments ont une efficacité différente.
Il y a donc 1 choix entre 2 hypothèses et donc 2 risques d’erreur: accepter H0 alors que H1 est vrai ou l’inverse. Les 2 risques correspondants sont:
L’objectif est de proposer une règle permettant de minimiser \(\alpha\) et \(\beta\). Il y a de nombreuses possiblités Neyman et Pearson proposent de minimiser \(\beta\) en fixant \(\alpha\) (par exemple 5%). L’idée est de dire que l’expérimentateur sera tenté d’accepter H1. Donc la proposition de minimiser \(\alpha\) permet de protéger la communauté des expérimentateurs trop enthousiastes sur leur H1. Cela permet. On minimise donc le risque \(\alpha\) cad minimiser le risque d’accepter H1 alors que l’hypothèse est fausse.
En pratique, à partir de H0 et H1, on fixe \(\alpha\) à 5%, \(\beta\) aura alors une valeur, on calcul alors le p-value.
Comment appelle-t-on l’hypothèse que nous voulons démontrer ? H1
Nous collectons des données sur l’efficacité d’un médicament, nous souhaitons savoir si ces données nous permettraient oui ou non d’affirmer à des cliniciens que le médicament est efficace. Quelle approche statistique utiliseriez-vous pour répondre à cette question ? le médicament est efficace est l’hypothèse H1 de l’approche Neyman et Pearson
Alpha, le risque de première espèce, est la probabilité d’accepter : H0 alors que H1 est vrai
Dans un test de Neyman et Pearson, le résultat est plus significatif si p : La valeur de p n’importe pas du moment qu’il est inférieur à 5%
La prévalence de la dépression (dep.cons) est-elle plus elevée chez les détenus qui ont un haut niveau d’évitement du danger (variable ed) que chez les détenus qui ont un bas niveau d’évitement du danger.
Création d’une variable binaire dans le dataframe smp
Description de la dataframe smp
## 'data.frame': 799 obs. of 27 variables:
## $ age : int 31 49 50 47 23 34 24 52 42 45 ...
## $ prof : Factor w/ 8 levels "agriculteur",..: 3 NA 7 6 8 6 3 2 6 6 ...
## $ duree : int 4 NA 5 NA 4 NA NA 5 4 NA ...
## $ discip : int 0 0 0 0 1 0 0 0 1 0 ...
## $ n.enfant : int 2 7 2 0 1 3 5 2 1 2 ...
## $ n.fratrie : int 4 3 2 6 6 2 3 9 12 5 ...
## $ ecole : int 1 2 2 1 1 2 1 2 1 2 ...
## $ separation : int 0 1 0 1 1 0 1 0 1 0 ...
## $ juge.enfant : int 0 0 0 0 NA 0 1 0 1 0 ...
## $ place : int 0 0 0 1 1 0 1 0 0 0 ...
## $ abus : int 0 0 0 0 0 0 0 0 1 1 ...
## $ grav.cons : int 1 2 2 1 2 1 5 1 5 5 ...
## $ dep.cons : int 0 0 0 0 1 0 1 0 1 0 ...
## $ ago.cons : int 1 0 0 0 0 0 0 0 0 0 ...
## $ ptsd.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ alc.cons : int 0 0 0 0 0 0 0 0 1 1 ...
## $ subst.cons : int 0 0 0 0 0 0 1 0 1 0 ...
## $ scz.cons : int 0 0 0 0 0 0 0 0 0 0 ...
## $ char : int 1 1 1 1 1 1 1 1 4 1 ...
## $ rs : int 2 2 2 2 2 1 3 2 3 2 ...
## $ ed : int 1 2 3 2 2 2 3 2 3 2 ...
## $ dr : int 1 1 2 2 2 1 2 2 1 2 ...
## $ suicide.s : int 0 0 0 1 0 0 3 0 4 0 ...
## $ suicide.hr : int 0 0 0 0 0 0 1 0 1 0 ...
## $ suicide.past: int 0 0 0 0 1 0 1 0 1 0 ...
## $ dur.interv : int NA 70 NA 105 NA NA 105 84 78 60 ...
## $ ed.bin : num 0 0 1 0 0 0 1 0 1 0 ...
Création d’une table de travail pour croiser les variables ed.b (évitement du danger) et dep.cons (état dépressif)
## smp$dep.cons
## smp$ed.bin 0 1 <NA>
## 0 335 135 0
## 1 96 126 0
## <NA> 51 56 0
Stockage de la table dans une variable temporaire et calcul des pourcentages plutôt que des valeurs absolues
Pourcentage de dépression selon que les détenus qui ont ou pas un haut niveau d’évitement du danger: On constate que les détenus à faible niveau d’évitement du danger (ed.bin=0) sont 2 fois moins déprimés (28,7%) que ceux ayant 1 haut niveau d’évitement du danger (56,7%)
## smp$dep.cons
## smp$ed.bin 0 1
## 0 71.27660 28.72340
## 1 43.24324 56.75676
Pourcentage des détenus ayant 1 haut niveau de ed selon qu’ils sont ou pas déprimés: On constate la même chose
## smp$dep.cons
## smp$ed.bin 0 1
## 0 77.72622 51.72414
## 1 22.27378 48.27586
Pour s’assurer que cette proportion n’est pas due au hasard, on fait un test chi-2. On constate que le p est très faible.
##
## Pearson's Chi-squared test
##
## data: smp$ed.bin and smp$dep.cons
## X-squared = 50.442, df = 1, p-value = 1.228e-12
On peux également faire une test exact de Fisher: On constate que p est également très faible.
##
## Fisher's Exact Test for Count Data
##
## data: smp$ed.bin and smp$dep.cons
## p-value = 2.033e-12
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 2.303664 4.603460
## sample estimates:
## odds ratio
## 3.250819
Avant de réaliser un test du Khi² sur R, que faut-il vérifier ? Les conditions de validité du test khi2 sont effectuées par R automatiquement
Quelle est la différence entre un test de Fisher et un test du Khi² ? Le test de Fisher permet de comparer 2 proportions quand les conditions de validité du test du Khi² ne sont pas respectées (Au moins un effectif théorique est inférieur à 5)
Quelle commande R faut-il utiliser pour réaliser un test du Khi² à partir des 2 variables var1 et var2 ? chisq.test(var1,var2,correct = FALSE)
Le lien entre les variables var1 et var2 a été testé à partir d’un test du Khi². Le p est égal 0,02. Que cela signifie-il ? Les deux variables sont dépendantes l’une de l’autre
Existe-t-il en moyenne, une différence significative d’age entre les détenus ayant un haut niveau d’évitement du danger et les autres ? Pour cela, on peux comparer la moyenne d’age des 2 groupes (haut niveau d’évitement et bas niveau d’évitement) Pour savoir si cette comparaison est pertinente, on effectue un test t de Student. Les conditions de validité de ce test sont : (au moins 30 sujets par groupe OU la variable suit une loi normale) ET (la variance de la variable est identique dans chaque groupe)
Comment se répartit l’age chez les détenus: Il y a une vague forme de loi normale
Pour mieux vérifier la normalité, on peux faire une diagramme de normalité
Pour vérifier l’égalité de la variance () ou l’écart type (sd), on utilise by
## smp$ed.bin: 0
## [1] 13.38593
## --------------------------------------------------------
## smp$ed.bin: 1
## [1] 13.29636
Après avoir vérifié les conditions de valité du test t, on effectue enfin ce test (on vérifie que les variances de chaque groupe sont proches avec l’option var.equal = TRUE)
##
## Two Sample t-test
##
## data: smp$age and smp$ed.bin
## t = 76.369, df = 1487, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 37.58791 39.56972
## sample estimates:
## mean of x mean of y
## 38.8996236 0.3208092
SI on ne peux pas utiliser de test t (n< 30 ET la variable ne suit pas de loi normale), alors on peux vérifier avec 1 test de Wilcox ou de Man Witney
##
## Wilcoxon rank sum test with continuity correction
##
## data: smp$age by smp$ed.bin
## W = 56770, p-value = 0.06091
## alternative hypothesis: true location shift is not equal to 0
Dans quel cas utilisons-nous un test t de Student ?
Pouvons-nous réaliser un test t de Student pour comparer 2 variables ayant une distribution en forme de U ?
Pour vérifier si la distribution d’une variable quantitative est normale, qu’est-il conseillé de faire ?
Quelle commande R faut-il utiliser pour comparer les écarts-types d’une variable “taille” entre les hommes et les femmes (variable “sexe”) ?
Les moyennes d’une variable continue ont été comparées entre deux groupes. Le p obtenu avec un test t de Student est égal à 0,01. Que cela signifie-t-il ?
Dans quel cas utilisons-nous un test de Wilcoxon ?
la distrib de x OU de y doit suivre une loi normale
##
## Pearson's product-moment correlation
##
## data: smp$age and smp$rs
## t = -6.02, df = 694, p-value = 2.825e-09
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2922516 -0.1509579
## sample estimates:
## cor
## -0.2227744
Si ni x, ni y ne suivent une loi normale, alors on peux faire un test de nullité avec la méthode de spearman
## Warning in cor.test.default(smp$age, smp$rs, method = "spearman"): Cannot
## compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: smp$age and smp$rs
## S = 68743000, p-value = 2.567e-09
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.2233474
Comparaison d’une moyenne à une référence: comparer la moyenne des ages à un age de référence
##
## One Sample t-test
##
## data: smp$age
## t = 31.672, df = 796, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 24
## 95 percent confidence interval:
## 37.97618 39.82307
## sample estimates:
## mean of x
## 38.89962
Comparaison d’une variable associée à une population mesurée en 2 temps (avant et après): ce sont les tests appariés
Quelles sont les conditions de validité d’un test de corrélation de Pearson ?
La commande pour réaliser un test de corrélation de Pearson entre les variables var 1 et var 2 est :
Quand les conditions de validité d’un test de corrélation de Pearson ne sont pas remplies, on doit réaliser :
Le test de Spearman pose parfois un problème car :
La commande pour tester si la moyenne d’une variable aléatoire est différente d’une valeur connue est :
Le test de comparaison de proportions pour deux échantillons appariés est :
Le test de comparaison de moyennes pour deux échantillons appariés est :
Pour réaliser un test t de Student pour échantillons appariés, il faut ajouter dans la commande :
Croisement de 2 variables 2 variables qual (tableau de contigence) 1 var qual et 1 var numerique ==> permet de faire par exemple des moyennes
##
## 0 1
## 0 441 140
## 1 131 80
##
## 0 1
## 0 0.5568182 0.1767677
## 1 0.1654040 0.1010101
##
## 0 1
## 0 0.7590361 0.2409639
## 1 0.6208531 0.3791469
##
## 0 1
## 0 0.7709790 0.6363636
## 1 0.2290210 0.3636364
## abus
## subst.cons 0 1
## 0 441 140
## 1 131 80
Test khi2
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab
## X-squared = 14.052, df = 1, p-value = 0.0001779
Affichage des effectifs observés
##
## 0 1
## 0 441 140
## 1 131 80
##
## 0 1
## 0 419.6111 161.38889
## 1 152.3889 58.61111
Test de Fisher
##
## Fisher's Exact Test for Count Data
##
## data: tab
## p-value = 0.0002193
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.351339 2.728231
## sample estimates:
## odds ratio
## 1.921985
Croisement age et subst.cons
## [1] 31 49 50 47 23 34
##
## 0 1 <NA>
## 587 212 0
Décire la variable age en fonction des 2 modalités de la variable subst.cons (0 ou 1)
## 0 1
## 41.97099 30.36967
Pour réaliser un test t de student
##
## Two Sample t-test
##
## data: smp$age[smp$subst.cons == 0] and smp$age[smp$subst.cons == 1]
## t = 11.785, df = 795, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 9.668959 13.533684
## sample estimates:
## mean of x mean of y
## 41.97099 30.36967
Ecriture plus rapide (comme avec xtabs)
##
## Welch Two Sample t-test
##
## data: age by subst.cons
## t = 15.24, df = 666.83, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 10.10664 13.09600
## sample estimates:
## mean in group 0 mean in group 1
## 41.97099 30.36967
Notation par formule pour faire une moyenne (mean)
## subst.cons age
## 1 0 41.97099
## 2 1 30.36967
Estimation de la durée d’interview selon que la personne est dépressive ou pas la variable durée d’interview : smp\(dur.interv état dépressif: smp\)dep.cons
## dep.cons dur.interv
## 1 0 60
## 2 1 65
Donner la borne inférieure d’un intervalle de confiance à 95 % pour la corrélation linéaire (Pearson) entre les variables durée d’interview (dur.interv) et âge (age) (3 chiffres après la virgule).
##
## Pearson's product-moment correlation
##
## data: smp$age and smp$dur.interv
## t = 2.3487, df = 745, p-value = 0.0191
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.01408787 0.15650345
## sample estimates:
## cor
## 0.08573358
Nous souhaitons vérifier si la durée d’interview (dur.interv) diffère sensiblement selon que les individus ont déjà effectué une tentative de suicide dans le passé ou non (suicide.past) à l’aide d’un test de Wilcoxon. Quel degré de significativité ?
##
## Wilcoxon rank sum test with continuity correction
##
## data: smp$dur.interv by smp$suicide.past
## W = 41892, p-value = 1.355e-07
## alternative hypothesis: true location shift is not equal to 0
Quelle est la valeur de la statistique de test (c’est-à-dire la valeur du « t », que l’on donnera pour simplifier en valeur absolue) pour un test de Student comparant les durées moyennes d’intervention (dur.interv) selon le diagnostic de dépression (dep.cons). Nous supposerons l’égalité des variances dans les deux groupes (3 chiffres après la virgule).
##
## Two Sample t-test
##
## data: smp$dur.interv by smp$dep.cons
## t = -5.2583, df = 747, p-value = 1.9e-07
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -10.457001 -4.771515
## sample estimates:
## mean in group 0 mean in group 1
## 58.92341 66.53767
Le fisher test permet d’obtenir l’ODDS RATIO
Chargement du fichier
Affichage d’un nuage de points
Avec jitter on fait apparaître les points qui sont masqués par d’autres points On peux également augmenter le jitter
Dessin de la droite de régression linéraire: durée = a + b * age
plot(jitter(smp.long$age,factor = 10),jitter(smp.long$dur.inter,factor = 10))
abline(lm(smp.long$dur.interv~smp.long$age))
Création du modéle de régression linéaie simple: il introduit du bruit à la droite: durée = a + b * age + bruit Pour savoir si b est statistiquement <> 0, il faut estimer le petit p du modèle
##
## Call:
## lm(formula = dur.interv ~ age, data = smp.long)
##
## Residuals:
## Min 1Q Median 3Q Max
## -62.470 -14.402 -1.712 12.341 60.055
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 57.04091 2.22028 25.691 <2e-16 ***
## age 0.12625 0.05375 2.349 0.0191 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.57 on 745 degrees of freedom
## (52 observations deleted due to missingness)
## Multiple R-squared: 0.00735, Adjusted R-squared: 0.006018
## F-statistic: 5.516 on 1 and 745 DF, p-value: 0.0191
Le modèle indique que a=57.05091 et b=0.12625 le p de a est <2e-16: c’est le résultat du test de nullité de a le p de b est 0.0191: c’est le résultat du test de nullité de b qui est p<5% ==> Donc a et b sont statistiquement <> 0
Nous construisons la droite de régression d’un nuage de points de façon à : Minimiser la somme des carrés des distances verticales entre les points et cette droite
La fonction “jitter” introduit du bruit sur les valeurs d’une variable pour : Eviter d’avoir trop de points superposés dans un graphique
Quelle est la commande qui permet d’obtenir sur un nuage de points la droite de régression ? abline (lm (Y~X))
Quelle est la commande qui permet d’obtenir les valeurs p des coefficients de régression d’un modèle linéaire mod1 ? summary (mod1)
Dans une régression linéaire, de quel type est la variable à expliquer (Y) ? Quantitative
Quelle est l’équation d’un modèle de régression linéaire simple ?
\(Y = a + b X + bruit\)
Dans un modèle de régression simple, le coefficient de la variable X vaut -0.7 (avec un p < à 0.05). Que cela signifie-t-il ? Pour le gain d’une unité de X, Y diminue de 0.7 unité Pour le gain d’une unité de X, Y diminue de 0.7 unité - correct
Quand l’age du détenu augmente alors la durée de l’entretien augmente. Les 2 variables sont effectivement corrélées.
##
## Call:
## lm(formula = smp.long$dur.interv ~ smp.long$age)
##
## Residuals:
## Min 1Q Median 3Q Max
## -62.470 -14.402 -1.712 12.341 60.055
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 57.04091 2.22028 25.691 <2e-16 ***
## smp.long$age 0.12625 0.05375 2.349 0.0191 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.57 on 745 degrees of freedom
## (52 observations deleted due to missingness)
## Multiple R-squared: 0.00735, Adjusted R-squared: 0.006018
## F-statistic: 5.516 on 1 and 745 DF, p-value: 0.0191
Le test de nullité présente p tres petit Est-ce que le test de la nullité de la corrélation entre la durée d’interview et l’age des détenus présente la meme résutlat ?
##
## Pearson's product-moment correlation
##
## data: smp.long$dur.interv and smp.long$age
## t = 2.3487, df = 745, p-value = 0.0191
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.01408787 0.15650345
## sample estimates:
## cor
## 0.08573358
On constate que le p est très faible et on peux rejeter la nullité de la corrélation. Donc les 2 vaiables sont corrélées et le p du test de nullité de la corrélation = strictement au p du test de non nullité
A noter que cor = b * ET(age)/ET(durée)
Régression linéarie avec un variable binaire: la durée de l’interviwe est-elle liée à l’état dépressif ?
plot(smp.long$dep.cons,jitter(smp.long$dur.inter))
abline(lm(smp.long$dur.interv~smp.long$dep.cons))
La variation de durée des entretiens entre le groupe des déprimés et ceux des non déprimés
##
## Call:
## lm(formula = dur.interv ~ dep.cons, data = smp.long)
##
## Residuals:
## Min 1Q Median 3Q Max
## -62.538 -13.923 1.077 12.077 61.077
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 58.9234 0.9041 65.171 < 2e-16 ***
## dep.cons 7.6143 1.4481 5.258 1.9e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.33 on 747 degrees of freedom
## (50 observations deleted due to missingness)
## Multiple R-squared: 0.03569, Adjusted R-squared: 0.0344
## F-statistic: 27.65 on 1 and 747 DF, p-value: 1.9e-07
Dans un modèle linéaire simple, nous testons la nullité du coefficient de régression b de la variable à expliquer Y sur la variable explicative quantitative X. A quel test cela s’apparente-t-il ? Tester la nullité du coefficient de correlation entre la variable X et la variable Y
Quelles sont les conditions si nous voulons tester par un modèle de régression linéaire simple, la différence de moyennes entre les modalités d’une variable explicative X qualitative ? X doit être une variable binaire (à deux classes)
variable à expliquer: durée entretien ==> quantitative variable explicative: age (quant), dépression (binaire), abus de substance (binaire), schizophrnie (binaire)
##
## Call:
## lm(formula = dur.interv ~ age + dep.cons + subst.cons + scz.cons,
## data = smp)
##
## Residuals:
## Min 1Q Median 3Q Max
## -63.654 -14.522 -1.193 11.482 62.482
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48.90105 2.62213 18.649 < 2e-16 ***
## age 0.22096 0.05708 3.871 0.000118 ***
## dep.cons 7.38932 1.44783 5.104 4.24e-07 ***
## subst.cons 5.25157 1.74318 3.013 0.002678 **
## scz.cons 2.27256 2.52323 0.901 0.368062
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.1 on 742 degrees of freedom
## (52 observations deleted due to missingness)
## Multiple R-squared: 0.05833, Adjusted R-squared: 0.05325
## F-statistic: 11.49 on 4 and 742 DF, p-value: 4.692e-09
Si on veut utiliser une variable profession comme variable explicative, il faut la recoder en plusieurs variables binaires avec une des modalités définie commme modalité de référence (par exemple agriculteur) ==> R le fait automatiquement
##
## Call:
## lm(formula = dur.interv ~ age + dep.cons + subst.cons + scz.cons +
## prof, data = smp)
##
## Residuals:
## Min 1Q Median 3Q Max
## -63.280 -14.164 -1.337 10.959 63.184
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 62.79202 10.20779 6.151 1.26e-09 ***
## age 0.21289 0.05884 3.618 0.000317 ***
## dep.cons 7.36792 1.45840 5.052 5.53e-07 ***
## subst.cons 5.34589 1.76902 3.022 0.002599 **
## scz.cons 2.50439 2.54734 0.983 0.325863
## profartisan -11.48515 9.82936 -1.168 0.243005
## profautre -10.28748 10.33482 -0.995 0.319862
## profcadre -19.29636 10.38568 -1.858 0.063574 .
## profemploye -13.55809 9.76340 -1.389 0.165358
## profouvrier -14.01270 9.72111 -1.441 0.149880
## profprof.intermediaire -13.01926 9.96911 -1.306 0.191977
## profsans emploi -14.27866 9.71782 -1.469 0.142174
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.11 on 731 degrees of freedom
## (56 observations deleted due to missingness)
## Multiple R-squared: 0.06595, Adjusted R-squared: 0.05189
## F-statistic: 4.692 on 11 and 731 DF, p-value: 5.825e-07
Pour changer la modalité de référence: on choisit celle qui est la plus fréquente
smp$prof<-relevel(smp$prof, ref="ouvrier")
mod5<-lm(dur.interv~age+dep.cons+subst.cons+scz.cons+prof, data = smp)
summary(mod5)
##
## Call:
## lm(formula = dur.interv ~ age + dep.cons + subst.cons + scz.cons +
## prof, data = smp)
##
## Residuals:
## Min 1Q Median 3Q Max
## -63.280 -14.164 -1.337 10.959 63.184
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48.77932 2.83938 17.180 < 2e-16 ***
## age 0.21289 0.05884 3.618 0.000317 ***
## dep.cons 7.36792 1.45840 5.052 5.53e-07 ***
## subst.cons 5.34589 1.76902 3.022 0.002599 **
## scz.cons 2.50439 2.54734 0.983 0.325863
## profagriculteur 14.01270 9.72111 1.441 0.149880
## profartisan 2.52755 2.48989 1.015 0.310381
## profautre 3.72522 3.99637 0.932 0.351567
## profcadre -5.28366 4.25567 -1.242 0.214798
## profemploye 0.45460 2.12659 0.214 0.830785
## profprof.intermediaire 0.99344 2.95809 0.336 0.737089
## profsans emploi -0.26596 1.87727 -0.142 0.887375
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.11 on 731 degrees of freedom
## (56 observations deleted due to missingness)
## Multiple R-squared: 0.06595, Adjusted R-squared: 0.05189
## F-statistic: 4.692 on 11 and 731 DF, p-value: 5.825e-07
## Single term deletions
##
## Model:
## dur.interv ~ age + dep.cons + subst.cons + scz.cons + prof
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 266846 4395.6
## age 1 4778.4 271624 4406.8 13.0899 0.0003173 ***
## dep.cons 1 9317.1 276163 4419.1 25.5233 5.527e-07 ***
## subst.cons 1 3333.6 270180 4402.8 9.1322 0.0025992 **
## scz.cons 1 352.8 267199 4394.6 0.9666 0.3258633
## prof 7 2295.5 269142 4388.0 0.8983 0.5071556
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Pas d’effet de la profession sur la durée de l’interview (p>5%)
Si il y a un lien entre dépression et abus de substance de façon combinée sur la durée de l’entretien ? On peux le vérifier et le tester avec l’instruction *
##
## Call:
## lm(formula = dur.interv ~ age + dep.cons * subst.cons + scz.cons,
## data = smp)
##
## Residuals:
## Min 1Q Median 3Q Max
## -62.032 -14.251 -1.163 11.472 62.313
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 49.51693 2.65788 18.630 < 2e-16 ***
## age 0.21728 0.05711 3.805 0.000154 ***
## dep.cons 6.15780 1.69775 3.627 0.000306 ***
## subst.cons 3.17244 2.29849 1.380 0.167931
## scz.cons 1.97233 2.53094 0.779 0.436059
## dep.cons:subst.cons 4.49688 3.24296 1.387 0.165963
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.08 on 741 degrees of freedom
## (52 observations deleted due to missingness)
## Multiple R-squared: 0.06077, Adjusted R-squared: 0.05443
## F-statistic: 9.588 on 5 and 741 DF, p-value: 7.024e-09
Il y a une nouvelle ligne dep.cons:subst.cons. Au bout de cette ligne le p vaut 16% ! Donc statistiquement il n’y a pas d’interaction entre dépression et substance sur la durée de l’interview ==> donc quand un détenu est déprimé et consomme des substances, alors la durée est augmentée de 7 + 5 minutes Attention, l’ajout du terme d’interaction empêche d’interpréter les lignes dep et subst
Analyse de variance = régression linéaire multiple ou toutes les variables explicatives sont catégorielles (ou qualitatives) C’est un cas particulier qui n’a qu’un intérêt historique L’intérêt réside uniquement quand on veux comparer la moyenne d’une variable quanti à plus de 2 groupes: Exemple: comparer la durée moyenne d’interview en fonction des professions (pas de test t possible car il y a plus de 2 professions)
##
## Call:
## lm(formula = dur.interv ~ prof, data = smp)
##
## Residuals:
## Min 1Q Median 3Q Max
## -61.731 -13.826 -1.731 12.947 58.912
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 61.7315 1.3359 46.211 <2e-16 ***
## profagriculteur 17.0185 9.9071 1.718 0.0863 .
## profartisan 2.0941 2.5033 0.837 0.4031
## profautre 2.4993 4.0755 0.613 0.5399
## profcadre -4.7750 4.3063 -1.109 0.2679
## profemploye 0.3220 2.1742 0.148 0.8823
## profprof.intermediaire 1.3440 3.0096 0.447 0.6553
## profsans emploi -0.6432 1.9168 -0.336 0.7373
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.63 on 735 degrees of freedom
## (56 observations deleted due to missingness)
## Multiple R-squared: 0.008295, Adjusted R-squared: -0.001149
## F-statistic: 0.8783 on 7 and 735 DF, p-value: 0.5231
## Single term deletions
##
## Model:
## dur.interv ~ prof
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 283316 4432.1
## prof 7 2369.9 285686 4424.3 0.8783 0.5231
Comment faire pour comparer un pourcentage quand on a plusieurs sous groupes. Par exemple comparer la prévalence de la dépression en fonction des professions:
## Warning in chisq.test(smp$dep.cons, smp$prof): Chi-squared approximation
## may be incorrect
##
## Pearson's Chi-squared test
##
## data: smp$dep.cons and smp$prof
## X-squared = 6.7205, df = 7, p-value = 0.4586
3 conditions principales * normalité du terme de bruit * variance du bruit ne doit dépendre ni des valeurs de la variable à expliquer ni des valeurs des variables explicatives * le bruit ne doit pas avoir de structure de corrélation interne
mod3<-lm(dur.interv~age+dep.cons+subst.cons+scz.cons, data = smp)
hist(resid(mod3), col="grey",main="normalité du bruit")
Dans quel cas une régression linéaire peut-elle être considérée comme une régression linéaire multiple ? S’il y a plusieurs variables explicatives
Quel type de variables explicatives pouvons-nous introduire dans une régression linéaire multiple ? Quantitatives et qualitatives
Quelle commande faut-il pour obtenir un modèle de régression linéaire multiple ? lm (y~x1+x2+x3)
Quelle commande permettrait de vérifier la normalité des résidus d’un modèle linéaire “model” ? hist(resid(model))
En combien de variables binaires R recode-t-il une variable catégorielle à 5 modalités ? 4 variables, létat de la 5éme est déduit de l’état des 4 autres
Quelle commande permettrait de désigner “artisan” comme modalité de référence pour la variable catégorielle “prof”? prof < - relevel (prof, ref=“artisan”)
Comment ajouter un terme d’interaction entre deux variables ? var1 * var2
Si, dans un modèle linéaire, nous ajoutons un terme d’interaction entre deux variables et que celui-ci est significativement non nul, alors les effets principaux de ces variables : Ne peuvent pas être interprétés simplement
Comment expliquer un risque suicidaire élevé par la durée de la peine, l’existence de mesures disciplinaires; l’existence d’abus. Les variables explicatives sont “emmelées”. Un modèle de régression linéaire multiple ne permet pas d’estimer le risque. haut risque de suicide = a + bdurée + cdiscipl + d*abus + bruit cette équation ne fonctionne pas car la variable à expliquer est binaire Il faudrait une variable quanti. pour éviter ce problème on remplace la variable binaire à expliquer par: \(log (prob(HRsuicide=oui)/(1-prob(HRsuicide=oui))= a + b*durée + c*discipl + d*abus\)
Pour un premier modèle simple ou la seule variable explicative est abus log (prob(HRsuicide=oui)/(1-prob(HRsuicide=oui))= a + b*durée
##
## Call:
## glm(formula = suicide.hr ~ abus, family = "binomial", data = smp)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.8446 -0.6020 -0.6020 -0.6020 1.8959
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.6161 0.1154 -14.003 < 2e-16 ***
## abus 0.7688 0.1897 4.052 5.07e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 760.21 on 752 degrees of freedom
## Residual deviance: 744.26 on 751 degrees of freedom
## (46 observations deleted due to missingness)
## AIC: 748.26
##
## Number of Fisher Scoring iterations: 4
le p est très faible: au risque de 5%, il existe une association statistiquement significative entre des antécédents d’abus dans l’enfance et un haut risque suicidaire pour un détenu incarcéré le coéf b = 0.7688: est facile à interpréter uniquement avec une variable explicative binaire: exp(b) = exp(0.7688) = 2.16 = ODDSRATIO qui associe la variable explicative à la variable à expliquée. Cela ne fonctionne que si la variable à expliquer est suffisament rare (détenus à haut risque suicidaire). Dans ce cas, les antécédents d’abus multiplient par 2 le risque suicidaire
Calcul de l’ODDRATIO directement avec twoby2
## [1] 2.157176
## 2 by 2 table analysis:
## ------------------------------------------------------
## Outcome : 0
## Comparing : 0 vs. 1
##
## 0 1 P(0) 95% conf. interval
## 0 63 90 0.4118 0.3366 0.4913
## 1 147 453 0.2450 0.2122 0.2810
##
## 95% conf. interval
## Relative Risk: 1.6807 1.3276 2.1276
## Sample Odds Ratio: 2.1571 1.4873 3.1287
## Conditional MLE Odds Ratio: 2.1547 1.4577 3.1764
## Probability difference: 0.1668 0.0837 0.2525
##
## Exact P-value: 1e-04
## Asymptotic P-value: 1e-04
## ------------------------------------------------------
##
## Call:
## glm(formula = suicide.hr ~ abus + discip + duree, family = "binomial",
## data = smp)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.3200 -0.6655 -0.6012 -0.4997 2.0700
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.02462 0.49635 -0.050 0.960439
## abus 0.62289 0.22764 2.736 0.006213 **
## discip 0.52809 0.23767 2.222 0.026287 *
## duree -0.39862 0.11723 -3.400 0.000673 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 555.94 on 549 degrees of freedom
## Residual deviance: 533.26 on 546 degrees of freedom
## (249 observations deleted due to missingness)
## AIC: 541.26
##
## Number of Fisher Scoring iterations: 4
Tous les p sont < 5% ==> les 3 variables explicatives sont statistiquement associées à un haut risque suicidaire et ce toute chose égale par ailleurs: antécédents d’abus est statistiquement associé à un haut risque suicidaire
signe des coefficients: 1 abus / 0 pas d’abus : coef positif ==> abus augmente le 1 mesure disciplinaire / 0 absence de mesures: coeff positif ==> mesure disciplinaire durée : de 1 à 5 : coeff négatif ==> 1 durée elevée diminue la probabilité d’être à haut risque suicidaire
amplitude des coefficients Il faut faire exp(coeff) Pour les variables binaires avec 1 comme facteur de risque on peux interpreter directement le exp: on interprete comme les ODDSRATIO: l’existence d’antécédents d’abus dans l’enfance multiplie par 2 le risque d’être à haut risque suicidaire. pour les variables non binaires: la durée : on a 0.7 ==> quand on passe d’un cran dans la durée d’incarcération (1 à 5), le niveau de haut risque suicidaire diminue de 30% (1-0.7)
## (Intercept) abus discip duree
## 0.9756803 1.8643147 1.6956873 0.6712485
les variables catégorielles à plus de 2 classes peuvent être utilisées pour connaître l’effet global d’une var catégorielle, on fait drop1(mod1,.~.,test=“Chisq”) pour trouver une synergie entre variable explicative: interaction(smp\(duree*smp\)discipl)
il faut au moins 5 à 10 evenements par variable explicative. Par exemple : explication de la variable “forme de schizophrenie” : 54 détenus de cette sorte utilisons les variables explicatives: age , trauma, prof. cela correspond à 1+1+ 8 classes recodée en 7 varaibles binaires (8 métiers) = 9 variables explicatives 10 événements par variable explicative: 910 = 90 mais on a 54 détenus 5 évenements par variable explicative: 95 = 45 et on a 54 détenus: donc on est bon
Quel type de variable à expliquer est utilisé pour un modèle de régression logistique ? Binaire (2 modalités)
Le modèle logistique intègre t-il une erreur résiduelle ? NON
Quelle commande R faut-il utiliser pour réaliser une régression logistique ? glm(y~x, family=binomial)
Un modèle de régression logistique reliant Y : obésité (Oui/Non) à X : sédentarité (Oui/Non), donne un coefficient de 1.95 (où “Non” est la référence) et une p-value de 0,04. Donner la bonne interprétation (en faisant l’hypothèse que la prévalence de l’obésité est très faible) :
A quoi pouvons-nous apparenter la régression logistique ?
Log (Probabilité d’un événement X/ (1-Probabilité d’un événement X)) varie entre :
Un modèle de régression logistique multiple est réalisé pour étudier les liens entre l’obésité (Oui/Non) en fonction des variables explicatives suivantes : âge (continue) ; sexe (F/H) ; origine géographique (5 classes). La condition de validité d’un tel modèle est elle vérifiée sachant qu’il y a 20 personnes obèse dans l’échantillon : On a 1 + 1 + 4 = 6 variables explicatives et il faut 5 à 10 evts par variable explicatives soit au minimum 6*5 = 30 evts et on a que 20 obèses
Chargement du fichier smp
Extraction d’un subset
## age n.enfant prof
## 3 50 2 prof.intermediaire
## 5 23 1 sans emploi
## 11 31 0 prof.intermediaire
## 17 60 2 prof.intermediaire
## 23 32 0 sans emploi
## 27 32 1 sans emploi
smpb<-subset(smp,prof=="sans emploi" | prof=="cadre" | prof=="prof.intermediaire", c(age,n.enfant, prof))
summary(smpb)
## age n.enfant prof
## Min. :19.00 Min. : 0.000 sans emploi :222
## 1st Qu.:27.00 1st Qu.: 0.000 prof.intermediaire: 58
## Median :36.00 Median : 1.000 cadre : 24
## Mean :38.42 Mean : 1.648 ouvrier : 0
## 3rd Qu.:47.25 3rd Qu.: 3.000 agriculteur : 0
## Max. :83.00 Max. :13.000 artisan : 0
## NA's :11 (Other) : 0
##
## ouvrier agriculteur artisan
## 227 6 90
## autre cadre employe
## 31 24 135
## prof.intermediaire sans emploi
## 58 222
##
## cadre prof.intermediaire sans emploi
## 24 58 222
Résumer le nb enfant moyen en fonction de la profession:
## prof n.enfant
## 1 cadre 2.166667
## 2 prof.intermediaire 2.107143
## 3 sans emploi 1.469484
Création d’une ANOVA avec la commande lm
##
## Call:
## lm(formula = n.enfant ~ prof, data = smpb)
##
## Coefficients:
## (Intercept) profprof.intermediaire profsans emploi
## 2.16667 -0.05952 -0.69718
## Single term deletions
##
## Model:
## n.enfant ~ prof
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 947.74 349.96
## prof 2 25.05 972.79 353.60 3.8325 0.02276 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Explication de n.enfant par une variable numérique
m<-lm(n.enfant~age, data = smpb)
m #affiche intercept cad le terme d'ordonnée à l'origine et age qui représente la pente
##
## Call:
## lm(formula = n.enfant ~ age, data = smpb)
##
## Coefficients:
## (Intercept) age
## -1.00902 0.06849
##
## Call:
## lm(formula = n.enfant ~ age, data = smpb)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.2646 -0.9087 -0.2511 0.5708 9.0094
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.009022 0.262696 -3.841 0.00015 ***
## age 0.068488 0.006357 10.773 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.546 on 291 degrees of freedom
## (11 observations deleted due to missingness)
## Multiple R-squared: 0.2851, Adjusted R-squared: 0.2827
## F-statistic: 116.1 on 1 and 291 DF, p-value: < 2.2e-16
Création du modele à partir d’un subset
m<-lm(n.enfant~age, smp, subset = prof=="sans emploi" | prof=="cadre" | prof=="prof.intermediaire")
summary(m)
##
## Call:
## lm(formula = n.enfant ~ age, data = smp, subset = prof == "sans emploi" |
## prof == "cadre" | prof == "prof.intermediaire")
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.2646 -0.9087 -0.2511 0.5708 9.0094
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.009022 0.262696 -3.841 0.00015 ***
## age 0.068488 0.006357 10.773 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.546 on 291 degrees of freedom
## (17 observations deleted due to missingness)
## Multiple R-squared: 0.2851, Adjusted R-squared: 0.2827
## F-statistic: 116.1 on 1 and 291 DF, p-value: < 2.2e-16
## (Intercept) age
## -1.00902159 0.06848829
## age
## 0.06848829
## age
## 0.06848829
## 2.5 % 97.5 %
## (Intercept) -1.52604619 -0.49199700
## age 0.05597581 0.08100076
## Analysis of Variance Table
##
## Response: n.enfant
## Df Sum Sq Mean Sq F value Pr(>F)
## age 1 277.35 277.35 116.05 < 2.2e-16 ***
## Residuals 291 695.44 2.39
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## fit lwr upr
## 1 0.3607441 0.06588459 0.6556037
## 2 1.0456270 0.83652266 1.2547313
## 3 1.7305099 1.55212966 1.9088901
fit valeurs prédites lwr et upr correspondent aux intervalles de confiance de la prédiction
Régression logistique avec variable binaire
##
## 0 1 2 3 4 5 6 7 8 9 10 11 13
## 214 220 125 101 55 31 7 7 7 2 2 1 1
##
## 0 1
## 559 214
commange glm
#help(glm)
m<-glm(n.enfant.bin~age,smp,family=binomial("logit")) #création d'un modèle de régresion logistique avec comme échelle de lien le logit
summary(m) #affichage d'un résumé des coeffs de régression
##
## Call:
## glm(formula = n.enfant.bin ~ age, family = binomial("logit"),
## data = smp)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.8551 -0.7525 -0.5326 0.8763 2.1301
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.827089 0.312803 -12.235 <2e-16 ***
## age 0.069487 0.007016 9.904 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 912.06 on 772 degrees of freedom
## Residual deviance: 794.16 on 771 degrees of freedom
## (26 observations deleted due to missingness)
## AIC: 798.16
##
## Number of Fisher Scoring iterations: 4
Pour réaliser une ANOVA à un facteur entre les variables y (réponse) et z (facteur) dans le data frame d, nous utilisons la commande
Nous considérons l’âge (age) des individus ayant 4 enfants ou plus (n.enfant) et dont la catégorie socio-professionnelle (prof) figure parmi les modalités suivantes : « sans emploi », « ouvrier », « cadre » et « employé ». Pour ce sous-ensemble de l’échantillon du data frame smp, le rapport entre les deux variances les plus extrêmes dans ces 4 groupes est :
mysubset<-subset(smp,(prof=="sans emploi" | prof=="cadre" | prof=="ouvrier" | prof=="employe") & n.enfant>=4, c(age,prof,n.enfant)) #extraction du subset
table(mysubset$prof)
##
## ouvrier agriculteur artisan
## 28 0 0
## autre cadre employe
## 0 4 16
## prof.intermediaire sans emploi
## 0 26
## age prof n.enfant
## 89 37 ouvrier 4
## 119 46 ouvrier 5
## 127 50 ouvrier 10
## 128 53 sans emploi 4
## 146 49 ouvrier 11
## 158 42 ouvrier 4
## prof age
## 1 ouvrier 88.22619
## 2 cadre 158.00000
## 3 employe 135.71667
## 4 sans emploi 281.22615
## [1] 3.187559
281.22615/88.22619 = 3.187559>3
Nous souhaitons réaliser une ANOVA à un facteur en considérant l’âge (age) comme variable réponse, et la taille de la fratrie (n.fratrie) recodée en 3 classes (0-2, 3-4, 5+) comme variable explicative. Les bornes des intervalles sont inclues pour chacune des trois classes. Indiquer le résultat du test F de Fisher-Snedecor d’égalité des moyennes :
smp$n.fratrie.cat<-factor(smp$n.fratrie)
table(smp$n.fratrie.cat) # on voit que 21 factors ont été crées: on va regrouper en 3 factors: (0-2, 3-4, 5+)
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18
## 76 86 111 129 90 75 63 41 33 31 22 14 10 4 3 3 1 2
## 19 20 21
## 3 1 1
## [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13"
## [15] "14" "16" "17" "18" "19" "20" "21"
## [1] 21
levels(smp$n.fratrie.cat)[1:3]<-"0-2"
levels(smp$n.fratrie.cat)[2:3]<-"3-4"
levels(smp$n.fratrie.cat)[3:18]<-"5+"
table(smp$n.fratrie.cat)
##
## 0-2 3-4 5+
## 273 219 307
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
## extra argument 'family' will be disregarded
##
## Call:
## lm(formula = age ~ n.fratrie.cat, data = smp, family = binomial("logit"))
##
## Residuals:
## Min 1Q Median 3Q Max
## -21.251 -10.995 -1.251 8.749 44.005
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 40.2509 0.8049 50.005 <2e-16 ***
## n.fratrie.cat3-4 -1.2555 1.2040 -1.043 0.2974
## n.fratrie.cat5+ -2.6125 1.1045 -2.365 0.0183 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.25 on 794 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.007017, Adjusted R-squared: 0.004516
## F-statistic: 2.805 on 2 and 794 DF, p-value: 0.06109
## Analysis of Variance Table
##
## Response: age
## Df Sum Sq Mean Sq F value Pr(>F)
## n.fratrie.cat 2 985 492.59 2.8053 0.06109 .
## Residuals 794 139417 175.59
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Single term deletions
##
## Model:
## age ~ n.fratrie.cat
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 139417 4122.0
## n.fratrie.cat 2 985.17 140402 4123.6 2.8053 0.06109 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Nous nous intéressons à la relation entre la variable séparation (separation) et l’âge (age) des individus, que l’on modélise à l’aide d’une régression logistique. Donner la borne inférieure de l’intervalle de confiance à 95 % pour l’odds-ratio (3 chiffres après la virgule).
##
## Call:
## glm(formula = separation ~ age, family = "binomial", data = smp)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.1529 -1.0567 -0.9597 1.2748 1.5691
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.187954 0.224813 0.836 0.4031
## age -0.012936 0.005536 -2.337 0.0195 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1073.4 on 787 degrees of freedom
## Residual deviance: 1067.9 on 786 degrees of freedom
## (11 observations deleted due to missingness)
## AIC: 1071.9
##
## Number of Fisher Scoring iterations: 4
## Waiting for profiling to be done...
## 2.5 % 97.5 %
## (Intercept) -0.25167204 0.630369847
## age -0.02388803 -0.002161716
## [1] 0.976395
À partir d’un modèle de régression linéaire dont les résultats ont été enregistrés dans une variable appelée mod, l’instruction fitted(mod) permet de fournir : Les valeurs prédites de la variable réponse pour les valeurs observées de la variable explicative
Pour obtenir un intervalle de confiance à 90 % pour les coefficients d’un modèle de régression logistique stocké dans une variable appelée mod, on utilise la commande: confint(mod, level=0.90)
Pour le modèle de régression linéaire simple dans lequel la variable durée d’interview (dur.interv) tient lieu de variable à expliquer et la variable âge (age) de variable explicative, indiquer la borne supérieure de l’intervalle de confiance à 90 % pour la pente de régression (3 chiffres après la virgule).
m<-lm(dur.interv~age, data = subset(smp,age==35,c("dur.interv","age"))) #création d'un modèle de régression linéaire simple
confint(m, level=0.90)
## 5 % 95 %
## (Intercept) 47.28359 62.71641
## age NA NA
## Single term deletions
##
## Model:
## dur.interv ~ age
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 4650 92.753
## age 0 0 4650 92.753
À partir du modèle de régression logistique considérant la variable suicide.hr comme variable à expliquer et age comme variable explicative, en ne considérant que les individus pour lesquels dep.cons = 1, indiquer la probabilité de haut risque suicidaire d’un individu âgé de 35 ans (3 chiffres après la virgule). [question difficile]
##
## Call:
## glm(formula = suicide.hr ~ age, family = "binomial", data = smp[])
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.8044 -0.7189 -0.6405 -0.5200 2.1255
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.552663 0.288027 -1.919 0.05501 .
## age -0.021565 0.007377 -2.923 0.00347 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 762.48 on 757 degrees of freedom
## Residual deviance: 753.42 on 756 degrees of freedom
## (41 observations deleted due to missingness)
## AIC: 757.42
##
## Number of Fisher Scoring iterations: 4
point commun avec la reg linéaire multiple et la reg logisitique: * utilisation de var catégorielle à plus de 2 classes : elles seront recodées en var binaires * utilisation de termes d’interaction (smp$duree*smp$discip)
durée jusqu’à survenue d’un evt: par exemple durée de chomage d’un group d’individu au chomage les durées sont censurées: on ne connait pas sa valeur
survie = délai jusqu’à survenue d’un evt censures = les exclus vivants / les perdus de vue (le fait qu’un patient déménage) la fonction de survie S(t) = pourcentage de sujets survivants au cours du temps le risque instantané de déces h(t) = c’est une fonction mathématique
Méthode Kaplan Meier:
## 'data.frame': 125 obs. of 5 variables:
## $ t : int 121 121 40 39 66 64 5 30 34 5 ...
## $ SEVRE : int 0 0 0 0 0 0 1 0 0 0 ...
## $ AGE : int 53 52 45 48 45 42 35 35 41 37 ...
## $ SEXE : int 1 2 2 1 1 1 1 1 1 1 ...
## $ EDVNEG: int 0 0 0 1 0 0 0 0 0 0 ...
library(survival) #la variable censurée étudiée est :"délai jusqu'à la rechute de la maladie alcoolique"
plot(survfit(Surv(alc$t, alc$SEVRE)~1),mark.time = TRUE, main="Courbe de maintien dans l'abstinence")
temps de rechute par groupe: H et F
Statistique aggrégés spécifiques: Médiane de survie = moment ou 50% des sujets sont vivants et 50% de sujets sont décédés
## Call: survfit(formula = Surv(alc$t, alc$SEVRE) ~ 1)
##
## n events median 0.95LCL 0.95UCL
## 125 27 NA 160 NA
Dans cet exemple: la Median n’est pas obtenue car à la fin de l’étude plus de 50% des patients n’ont pas rechuté
Sur quelles données appliquez-vous une analyse de survie ? Données longitudinales
Que sont les données censurées ?
Les perdus de vue avant l’apparition de l’évènement en question
Les individus qui n’ont pas subi l’évènement avant la fin de l’étude
Un exclu vivant qui n’a pas encore subi l’évènement
Avec des données dites de “survie”, l’évènement est- il toujours un décès ? Non: c’est une métaphore
La fonction h(t) (risque instantané de l’évènement) correspond à : La densité de probabilité d’avoir l’évènement à l’instant t
Quelle méthode est-elle utilisée pour tracer une fonction de survie ? Méthode de Kaplan-Meier
Quelle est la statistique classiquement utilisée avec les données de survie ? Médiane de survie
La fonction de survie est une fonction : Décroissante variant de 1 à 0
Quelle est la commande pour obtenir une courbe de Kaplan Meier ? plot(survfit(Surv(durée,évènement)~1))
A quoi correspondent les signes “+” sur une courbe de Kaplan Meier ? Données censurées
On souhaiterais estimer la différence de taux de rechute entre hommes et femmes. On utilise un test du log rank (à assimiler à un test de rang - rang entre les temps de déces) conditions de validité: * nombreux temps de decés OU * nombreux mort à chaque temps de decés
## Call:
## survdiff(formula = Surv(t, SEVRE) ~ SEXE, data = alc)
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## SEXE=1 107 24 23.74 0.00281 0.0235
## SEXE=2 18 3 3.26 0.02046 0.0235
##
## Chisq= 0 on 1 degrees of freedom, p= 0.878
la dernière ligne affiche un petit p qui prouve qu’il n’y pas de différence évidente.
On souhaite tester l’association entre la survie et une variable quant. Par exemple : risque de rechute de la maladie alcoolique et l’age. ex: les jeunes se connaisant mal pourraient rechuter plus souvent ou au contraire les vieux alcooliques auraient du mal à résister et rechuteraient plus souvent. On utilise le modèle de COX
## Call:
## coxph(formula = Surv(t, SEVRE) ~ AGE, data = alc)
##
## coef exp(coef) se(coef) z p
## AGE -0.0467 0.9544 0.0235 -1.99 0.047
##
## Likelihood ratio test=4.09 on 1 df, p=0.0431
## n= 125, number of events= 27
sur la ligne AGE, on peux dire que au risque de 5%, il y a une association significative entre l’age et le risque de rechute. En effet le p < 5%. On regarde le coef qui de est de-0.0467 le coef négatif signifie que la survenue d’une rechute alcoolique pour les personnes plus agées
Tester l’association de la survie à une liste de variables explicatives. Par exemple la rechute en fonction de l’age, du sexe, de la survenue d’evts de vie On utilise encore COX
## Call:
## coxph(formula = Surv(t, SEVRE) ~ AGE + SEXE + EDVNEG, data = alc)
##
## coef exp(coef) se(coef) z p
## AGE -0.0473 0.9538 0.0237 -2.00 0.046
## SEXE -0.0151 0.9850 0.6206 -0.02 0.981
## EDVNEG -0.4428 0.6422 1.0240 -0.43 0.665
##
## Likelihood ratio test=4.31 on 3 df, p=0.23
## n= 125, number of events= 27
seul l’age est statistiquement associé au risque de rechute. Le sexe et les evts de vie ne sont donc pas associé au risque. Il faut relativiser compte tenu du nombre d’ovservation (faible puissance) Les coeffs sont difficiles à interpréter mais leur exp est intéreprétable surtout si la var explicative est binaire
## AGE SEXE EDVNEG
## 0.9537763 0.9850037 0.6422475
Si on prend la variable EDVNEG, sont exp est 0,64 ce qui signifie que nous avons 36% de chance de moins de présenter un risque de rechute à un instant donné quand on a eu un evt de vie négatif. ce 0,64 correspond à un hazard ratio (rapport des risques instantanés de déces).
Si les 3 courbes sont globalement horizontales, alors on considère que l’hypothèse des risques proportionnels est vérifiée
Quelle commande faut-il utiliser pour réaliser un log-Rank ? survdiff
Dans quelle situation faut-il utiliser le modèle de Cox ? étudier l’association entre le délai de survenue de l’évènement et une variable explicative
Parmi les conditions de validité suivantes, quelle est celle qui doit être vérifier dans le cas d’un modèle de Cox ? Hypothèse des risques proportionnels
La validité d’un test du log-rank dépend : Du nombre d’évènements
L’exponentielle du coefficient issu d’un modèle de Cox correspond à un rapport des risques instantanés (HR). VRAI
Quelle commande faut-il utiliser pour réaliser un modèle de Cox? coxph(Surv(delai,évènement)~variable)
Quelle commande faut-il utiliser pour vérifier graphiquement l’hypothèse des risques proportionnels d’un modèle de Cox (model1) ? plot(cox.zph(model1))
avec var quant: OUI, avec var bin: OUI, avec var ordonnées: OUI, var cat: NON Attention pour les données manquantes: * on peux retirer les sujets qui ont des données manquantes. On utilisera l’option de cor use =“complete.obs” * on peux retirer les sujets uniquement pour l’utilisation des use=pairwise.complete.obs
var<-c("age","n.enfant","scz.cons","dep.cons","grav.cons","rs","ed","dr")
round(cor(smp[,var],use="complete.obs"),digit=3)
## age n.enfant scz.cons dep.cons grav.cons rs ed dr
## age 1.000 0.441 -0.044 -0.110 -0.139 -0.223 -0.038 0.003
## n.enfant 0.441 1.000 0.003 0.002 -0.055 -0.126 0.011 0.015
## scz.cons -0.044 0.003 1.000 0.064 0.290 0.021 0.077 -0.009
## dep.cons -0.110 0.002 0.064 1.000 0.439 0.107 0.259 0.093
## grav.cons -0.139 -0.055 0.290 0.439 1.000 0.151 0.234 0.001
## rs -0.223 -0.126 0.021 0.107 0.151 1.000 0.093 0.088
## ed -0.038 0.011 0.077 0.259 0.234 0.093 1.000 0.115
## dr 0.003 0.015 -0.009 0.093 0.001 0.088 0.115 1.000
Pour examiner les corrélation de façon graphique
## corrplot 0.84 loaded
Le schema représente les corrélations sous forme de disque : la couleur et la taille sont directement liées au niveau de corrélation. Ici on voit visuellement que les corrélations les plus importantes sont: * age et n.enfant * schizophrénie, dépression et score de gravité * évitement du danger et dépression et score de gravité
Que valent les termes diagonaux d’une matrice de corrélation ? 1
Pour quel type de données ne pouvons-nous pas calculer la matrice de corrélation ? Les variables catégorielles
La matrice de données comporte beaucoup de données manquantes : quelle option faut-il utiliser dans la commande cor pour calculer la matrice de corrélation ? use=“pairwise.complete.obs”
Dans la commande “cor” permettant de calculer la matrice de corrélation entre plusieurs variables, quel est l’effet de l’option use=“complete.obs” ? Les observations comportant au moins une donnée manquante parmi toutes les variables sont retirées du calcul de la corrélation entre deux variables
Dans la commande “cor” permettant de calculer la matrice de corrélation entre plusieurs variables, quelle est l’utilité de l’option use=“pairwise.complete.obs” ? Seules les observations comportant au moins une donnée manquante parmi les deux variables considérées dans le calcul de la corrélation sont retirées du calcul de la corrélation. Cette option retire beaucoup de propriétés mathématiques à l’échantillon.
Comment représentons-nous visuellement une matrice de corrélation ? library(corrplot) ; corrplot(cor(mamatrice))
Le principe: les variables d’une matrice de corrélation sont comme des points sur une sphere. Plus les variables sont corréllées, plus les points sont proches sur la sphere. Attetntion: Lorsqu’il y a plus de 4 variables, la sphere correspondante est une hyper-sphere. Pour se représenter graphiquement une matrice de corrélation, il suffirait donc de dessinner les points sur la sphere. Mais cela est impossible car cette réprésentation générerait des déformations. Il faut donc projeter les points sur un plan avec un minimum de distortion => c’est la méthode de l’ACP.
Soit la matrice de corrélation 5 X 5 suivante: \[\left[ \begin{array} {rrr} 1 & 0.9 & 0.1 & -0.2 & -0.7 \\ 0.9 & 1 & 0.1 & -0.1 & -0.6 \\ 0.1 & 0.1 & 1 & 0.2 & -0.8 \\ -0.2 & -0.1 & 0.2 & 1 & -0.4 \\ -0.7 & -0.6 & -0.8 & -0.4 & 1 \end{array} \right]\]
On peux appliquer une transformation simple qui permet de passer des corrélations (niveaux de similitudes entre variables ): \(\sqrt(1-r)\) (r est le coeeficient de corrélation) On obtient alors la matrice de distance suivante: \[\left[ \begin{array} {rrr} 0 & 0.4 & 1.3 & 1.5 & 1.8 \\ 0.4 & 0 & 1.3 & 1.5 & 1. \\ 1.3 & 1.3 & 0 & 0.9 & 1.9 \\ 1.5 & 1.5 & 0.2 & 0 & 1.7 \\ 1.8 & 1.8 & 0.9 & 1.7 & 0 \end{array} \right]\]
Cette matrice contient des distances qui varient de 0 à 2: * quand la corrélation vaut 1: la distance vaut 0 * quand la corrélation vaut -1: la distance vaut 2
Donc quand les distances sont proches de 2, alors les variables sont très fortement négativement corrélées. Quand la distance est proche de 0, les variables sont très corrélées. Cette matrice de distance a des propriétés mathématiques très intéressantes. Cette matrice définit 5 points: A, B, C, D, E qui peuvent être positionnnés sur une hypersphere donc la représentation grpahique de ces points permet de comprendre la matrice de corrélation. Pour cela, on va faire un projection grâce à l’ACP.
Pour savoir si les distances entre les points projetés peuvent être interpretées comme les distances entre les points situés sur l’hypersphere: quand les points projetés sont très proches du cercle correspondant à l’intersection entre le plan principal et l’hypersphere
Interprétation des positions relatives: * proche du cercle ET proche l’un de l’autre ==> les distances entre les points projetés sont une représentation fiable de la corrélation ET les variables sont fortement correllées * proche du cercle ET diamétralement opposés (donc leur distance = 2 x rayon, soit 2). Si d = 2, alors r = -1 les variables sous jacentes sont correlées négativement * proche du cercle ET à 90° par rapport au centre (donc leur distance = \(\sqrt(2)\)) ==> si d = \(\sqrt(2)\) alors r = 0 et donc les variables sont non corrélées (indépendantes)
Attnetion: si un des 2 points est proche du centre, on ne peux plus interptéter les résultats de l’ACP.
var<-c("age","n.enfant","scz.cons","dep.cons","grav.cons","rs","ed","dr") #définition du vecteur des vairables dont on souhaite examiner les corrélations.
library(psy) #chargement library psy permettant de faire l'ACP
mdspca(smp[,var])
On voit que: * gravité et dépression sont proches du bord et proche l’une de l’autre: donc elles sont correllées * age et nb enfant sont corrélées * le groupe de variables (age et n efant) est à 90° du groupe de variable (gravité et dépression): elles sont donc globalement indépendantes
pourcentages de variance expliquée relative à l’axe X et Y: x = F1 = 23% var et y = F2 = 17% var. La somme vaut 40% et peut être interpreté comme le pourcentage d’information capturée lors de l’ACP
Combien de variables peuvent être utilisées lors d’une ACP ? on évitera de dépasser 12-15 variables. C’est la malédiction dimensionnelle car l’ACP est une méthode exploratoire multidimensionnelle mais quand il y a trop de vairables, la représentation grpahique n’est plus utilisable
Représentation spherique de la matrice de corrélation: on projette les points de l’hypersphere sur une sphere en 3D. l’interprétation se fait de la même façon que l’ACP classique.
Quelle est la qualité de représentation de chaque point ? on ne sait pas si les variables sont au bord du cercle ! Pour pallier ce pb, on utilise l’ACP focalisée Très utilie pour 1 vairable à expliquer et plusieurs vairables explicatives
expliquer<-"grav.cons"
explicatives<-c("age","n.enfant","dep.cons","scz.cons","rs","ed","dr")
fpca(data=smp,y=expliquer,x=explicatives,partial="No")
* La variable à expliquer est au centre * entre la variable dep.cons et grav.cons, la corrélation = 0.4. de plus elle est statistiquement significative au seuil de 5% car dep.cons est à l’interieur du cercle rouge qui correspond à la limite de significativité des corrélations au seuil de 5% * dep.cons est symbolisée par un point vert ce qui représente une corrélation positive entre dep.cons et grav.cons. * Le orange indique une corrélation négative * dep.cons, scz.cons, ed, dr sont tous proches les uns des autres donc les variables explicatives sous-jacentes sont statistiquement corrélées. * idem pour age et n enfant. A noter que n.enfant est en deça du cercle rouge, donc statistiquement non corrélées à la gravité de la symptomatologie psychiatrique du détenu. * les paquets (n enfant et age) et (dep.cons, scz.cons, ed, dr) sont à 90°: ces 2 paquets sont donc statistiquement indépendant * rs et (age et n enfant) sont diamétralement opposés donc les variables explicatives sous jacentes sont corrélées négativement
Type de représentation très adaptée quant on envisage de faire une régression linéaire multiple ou une régression logistique. En effet, on a directement: * représentation claire de la variable à expliquer et des variables explicatives * une estimation des relations entre la variable à expliquer et les var explicatives avec la mise en évidence du cercle de significativté * les patterns de corrélation entre les différentes vairables explicatives
L’analyse en composantes principales est une technique : Qui ne permet pas de faire de tests statistiques
Laquelle de ces affirmations est fausse ? L’analyse en composantes principales : Permet de représenter des relations entre tous types de variables
Laquelle de ces affirmations est fausse ? Quand on interprète les résultats d’une analyse en composantes principales : Des points proches correspondent à des variables fortement corrélées
Laquelle de ces affirmations est fausse ? Une représentation sphérique d’une matrice de corrélation : Produit une représentation moins informative (en terme de variance expliquée) qu’une analyse en composante principale
Laquelle de ces affirmations est fausse ? Une analyse en composantes principales focalisée: Est une technique exclusivement exploratoire (aucune inférence (test) n’étant envisageable)
Sur quelle intuition se base l’ACP et les méthodes graphiques qui en découlent ? Il existe une correspondance entre les variables d’une matrice de corrélation et des points sur une hypersphère
Pourquoi ne peut on pas utiliser une représentation graphique d’une ACP pour un nombre de variables trop important (supérieur à 15) ? les points sur la représentation graphiques se rassemblent au centre du cercle, on ne peut donc rien interpréter
Quels sont les commandes pour effectuer une ACP en 2D ? library(psy); commande mdspca(variable)
Quels sont les commandes pour effectuer une ACP en 3D (représentation sphérique) ? library(psy); commande sphpca()
Quelle affirmation est correcte ? Une ACP focalisée est utile si l’on dispose d’une variable à expliquer et des plusieurs variables explicatives
On parle aussi d’analyse en clusters Son objectif : réaliser des groupes homogènes de sujets ou des groupes de variables corrélées Partitionnement hiérarchique possible des sujets via un arbre * les points 2 et 3 sont regroupés à une hauteur D1 en un point 6 * les points 4 et 5 sont regroupés à une hauteur D2 en un point 7 * le point 1 est fusionné au point 6 à une hauteur D3 en un point 8 * pour finir les points 7 et 8 seront fusionnés à une hauteur égale à D4
il y a plusieurs façons de regrouper les différents points. La méhode la plus utilisée est celle dite de Warb
En principe les points que l on partitionne peuvent etre des variables ou des sujets Ex : On peut vouloir représenter 100 points dans un plan à 3 dimensions pour une table comprenant 100 observations sur 3 variables (et inversement) Pour cela on utilisera Méthode de Ward
Ex : * création d’un vecteur var avec l ensemble des varb que l’on souhaite analyser * classification avec toutes les options nécessaires : * scale : cette fonction centre et divise par l ecart type des variables et permet d’éliminer les pb d hétérogénités des mesures des variables. Cela facilite ainsi la représentation graphique * t : la class porte sur les vraibles et non les sujets * dist : permet de calculer la matrice de distance entre les différents points variables * option ward : permet de déterminer comment agréger les différents points
var<-c("age","n.enfant","scz.cons","dep.cons","grav.cons","rs","ed","dr") #sélection des variables cibles
cah<-hclust(dist(t(scale(smp.long[,var]))),method="ward") #Classification hiérarchique
## The "ward" method has been renamed to "ward.D"; note new "ward.D2"
précisions sur hclust: * scale permet de cnetrer et diviser par l’écart type toutes les variables. * On précise la fonction t qui permet d’activer la classification de variables et non pas de sujets * On utilise la fonction distance qui va calculer la matrice de distance entre les différents points variables * la methode choisie pour le regroupement est celle de Ward
On obtient un arbre classant qui regroupe les variables de manière automatique: * 1 paquet de 6 varb cliniques avec plus particulièrement : 2 varb de tempéramment puis 4 autres varb parmi lesqelles sont regroupées les 2 varb de score * A l écart sont regroupées 2 autres variables non cliniques : age et n.enfant
L’avantage de la CAH est de bien fonctionner avec un nb important de variabl mieux que que l’ACP pour un grand nombre de variable
Représentation graphique des corrélations avec la CAH
Les corr sont symbolisées par les couleurs , plus c’est foncé, plus les variables sont corrélées
A quoi sert l’analyse ascendante hiérarchique ? L’analyse ascendante hiérarchique permet de déterminer des groupes homogènes de sujets ou des groupes de variables plus fortement corrélées que les autres
Quelle commande utiliser pour effectuer une classification hiérarchique des variables, lorsque ces variables sont en colonnes dans notre matrice des données nommée “data” ? hclust(dist(t(scale(data)))
Quelle commande utiliser pour effectuer une classification hiérarchique des sujets, lorsque ces sujets sont en lignes dans notre matrice des données nommée “data” ? la fonction t porte sur une classification de variables (qui sont en colonne) hclust(dist(scale(data))
Quelle affirmation est vraie ? Contrairement à l’analyse en composante principale, l’analyse ascendante hiérarchique fonctionne bien quand il y a un très grand nombre de variables
Quelle fonction peut-on utiliser pour représenter graphiquement les corrélations dans un grand jeu de données ? heatmap(cor(data)
- On souhaite comparer le risque de rechute de la maladie alcoolique dans deux sous-groupes: le groupe des plus de 50 ans (strictement plus de 50 ans, recodé en “1”) et le groupe des moins de 50 ans (50 ou moins, recodé en “0”). Donner la p-value associée au test statistique correspondant (4 chiffres après la virgule): Cette étude correspond à une mesure de durée: durée jusqu’à survenue de l’évenement rechute (ou d’abstinence) A noter que cette durée est dite censurée. Cad, que on n’est pas certain d’avoir une rechute pendant la durée de l’étude (la rechute peux se faire très tardivement ou pas du tout). Pour illustrer la réponse on peut utiliser le data.frame alc: p= 0.0219
## 'data.frame': 125 obs. of 6 variables:
## $ t : int 121 121 40 39 66 64 5 30 34 5 ...
## $ SEVRE : int 0 0 0 0 0 0 1 0 0 0 ...
## $ AGE : int 53 52 45 48 45 42 35 35 41 37 ...
## $ SEXE : int 1 2 2 1 1 1 1 1 1 1 ...
## $ EDVNEG : int 0 0 0 1 0 0 0 0 0 0 ...
## $ AGE.BIN: num 1 1 0 0 0 0 0 0 0 0 ...
## alc$AGE
## alc$AGE.BIN 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
## 0 1 1 4 2 5 4 2 2 5 4 3 4 4 4 6 8 1 7 4 2 0
## 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8
## <NA> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## alc$AGE
## alc$AGE.BIN 52 53 54 55 56 57 58 59 60 62 63 64 65 <NA>
## 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 1 3 6 5 4 5 4 2 3 2 2 5 2 1 0
## <NA> 0 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 0 1
## 73 52
alc$AGE.BIN<-factor(alc$AGE.BIN, levels=c(0,1), labels=c("Moins de 50 ans", "Plus de 50 ans"))
survdiff(Surv(t, SEVRE)~AGE.BIN, data=alc)
## Call:
## survdiff(formula = Surv(t, SEVRE) ~ AGE.BIN, data = alc)
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## AGE.BIN=Moins de 50 ans 73 21 15.1 2.30 5.25
## AGE.BIN=Plus de 50 ans 52 6 11.9 2.92 5.25
##
## Chisq= 5.3 on 1 degrees of freedom, p= 0.0219
- On souhaite tester l’association entre le risque de rechute de la maladie alcoolique et les variables SEXE, AGE et l’interaction entre les variables SEXE et AGE. Donner la p-value associée à l’interaction entre les variables SEXE et AGE dans le test correspondant (2 chiffres après la virgule):
## Call:
## coxph(formula = Surv(t, SEVRE) ~ AGE + SEXE + SEXE * AGE, data = alc)
##
## coef exp(coef) se(coef) z p
## AGE 0.0317 1.0322 0.0873 0.36 0.72
## SEXE 3.2147 24.8958 3.3685 0.95 0.34
## AGE:SEXE -0.0711 0.9313 0.0763 -0.93 0.35
##
## Likelihood ratio test=4.96 on 3 df, p=0.175
## n= 125, number of events= 27
p-value=0.35
- Le dataframe “exdata” contient des variables quantitatives et ordonnées. Il ne compte par ailleurs que très peu de données manquantes. Pour calculer la matrice de corrélation des variables de “exdata” et afficher ces corrélations avec 2 décimales, quelle instruction faut-il utiliser ? round(cor(exdata, use = ‘pairwise’), digits = 2)
- Pour représenter graphiquement la matrice de corrélation des variables de “exdata” à l’aide d’une analyse en composantes principales, quelle instruction faut-il utiliser ? mdspca(exdata)
- Toujours pour les variables de “exdata”, on se propose de réaliser une classification hiérarchique avec la métrique de Ward et de stocker le résultat obtenu dans l’objet appelé ‘cah’. Quelle commande faut-il utiliser ? cah <- hclust(dist(t(scale(exdata))), method = ‘ward’)
- Représentez graphiquement cette classification hiérarchique. plot(cah)
URL | Description |
---|---|
http://larmarange.github.io/analyse-R/rmarkdown-les-rapports-automatises.html | Présentation de Markdown |
https://www.calvin.edu/~rpruim/courses/s341/S17/from-class/MathinRmd.html | Syntaxe Markdown pour les expressions mathématiques |