Upload
lenhan
View
217
Download
0
Embed Size (px)
Citation preview
Introduction agrave R pour la recherche biomeacutedicale
Exercices corrigeacutes
Le langage R
1 Comme il nest pas preacuteciseacute pas si le facteur doit ecirctre eacutequili-
breacute etou preacutealablement trieacute on peut utiliser sample Autres
possibiliteacutes
gt x lt- gl(2 10 labels=c(tototiti))
gt relevel(x ref=titi)
[1] toto toto toto toto toto toto toto toto toto
[10] toto titi titi titi titi titi titi titi titi
[19] titi titi
Levels titi toto
2 Le plus simple est dutiliser matrix et apply
gt m lt- matrix(c(672159834) nr=3 byrow=TRUE)
gt apply(m 1 sum) lignes
[1] 15 15 15
gt apply(m 2 sum) colonnes
[1] 15 15 15
3 On peut utiliser rbinom ou sample Dans le premier cas une
reacutealisation de leacuteveacutenement rdquotirer 20 fois une piegravecerdquo seacutecrit
gt rbinom(20 1 p=05)
[1] 0 0 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 0
Dans le second cas
gt sample(01 20 replace=TRUE)
[1] 1 1 0 1 1 1 0 0 0 1 0 0 0 0 1 1 0 1 0 1
On peut inseacuterer ces commandes dans une boucle par exem-
ple
gt k lt- seq(10 10000 by=100)
gt res lt- numeric(length(k))
gt for (i in seq_along(k))
+ res[i] lt- sum(rbinom(k[i] 1 p=05))k[i]
ou alors en plus eacuteleacutegant
gt tails lt- function(n=5 p=05) sum(rbinom(n 1 p))n
gt res lt- sapply(k tails)
Ci-dessous figure leacutevolution du rdquonombre de pilesrdquo lorsque k
augmente avec un intervalle de confiance agrave 95 asympto-
tique baseacute sur la loi normale 119901 plusmn 111378911137971113794radic119901(1113789 minus 119901)119899
Nombre de lancers
Pro
port
ion
de p
iles
050
055
060
0 2000 4000 6000 8000 10000
4 Une solution de base
gt n lt- 10
gt a lt- dataframe(x1=rnorm(n 10) x2=rnorm(n 12)
+ x3=gl(2 n2))
gt writecsv(a file=acsv)
5 On peut utiliser lindexation par exemple
gt d$class[which(d$height==max(d$height))]
[1] B
Levels A B
Ou alors trier les donneacutees
gt d[docall(order d)class][40]
[1] B
Levels A B
On peut ajouter ascharacter pour supprimer laffichage des
attributs du facteur
6 La solution simple consiste agrave creacuteer le scheacutema dallocation de
base des niveaux du facteur et agrave le dupliquer pour obtenir
la taille voulue Par exemple
gt tx lt- factor(rep(rep(c(stdnew) each=3) 10))
Comme le motif est reacutegulier (3 std suivi de 3 new) on peut
utiliser gl directement
gt tx lt- gl(2 3 60 labels=c(stdnew))
Pour la suite il sagit de manipulation des niveaux du fac-
teur
gt levels(tx)[1] lt- old
gt tx lt- relevel(tx ref=new)
gt head(tx lt- sample(tx))
[1] old old new old new old
Levels new old
7 Quelques suggestions veacuterifier le format du fichier agrave laide
dun eacutediteur de texte (en particulier ligne den-tecircte seacutepara-
teur de champ seacuteparateur deacutecimal) afin de deacutefinir la com-
mande agrave utiliser pour charger le fichier veacuterifier le type des
variables que R a lu afficher un reacutesumeacute numeacuterique (sum-
mary) et examiner si les distributions univarieacutees semblent
coheacuterentes
Ici on ne se souciera pas dimputation les valeurs sus-
pectes seront converties en valeurs manquantes
gt WD lt- pub
gt lung lt- readtable(paste(WD lungcancertxt sep=)
+ header=TRUE nastrings=)
gt summary(lung) str(lung)
time age cens
Min -20 Min 500 Min 00000
1st Qu 730 1st Qu5300 1st Qu00000
Median 1670 Median 5900 Median 10000
Mean 1861 Mean 5902 Mean 05191
3rd Qu2750 3rd Qu6600 3rd Qu10000
Max 5580 Max 7800 Max 20000
NAs 20 NAs 200
1
vitalcapac
high95
low 35
low 1
gt head(sort(lung$time))
[1] -2 0 0 1 1 2
gt head(sort(lung$age))
[1] 5 35 36 38 39 40
gt table(lung$cens)
0 1 2
64 66 1
gt table(lung$vitalcapac)
high low low
95 35 1
gt lung lt- within(lung
+ time[timelt0] lt- NA
+ age[age==5] lt- NA
+ cens[cens==2] lt- NA
+ cens lt- factor(cens)
+ levels(vitalcapac)[23] lt- low
+ )
Apregraves ces modifications on peut veacuterifier que tout semble
normal
gt summary(lung)
time age cens
Min 00 Min 3500 0 64
1st Qu 745 1st Qu5300 1 66
Median 1675 Median 5950 NAs 1
Mean 1876 Mean 5944
3rd Qu2770 3rd Qu6600
Max 5580 Max 7800
NAs 30 NAs 300
vitalcapac
high95
low 36
8 Pour charger des fichiers de donneacutees SPSS (sav) on a be-
soin du package foreign Voir aussi R Data ImportExport
sect 31 (httpbitlyyRnVit)
gt library(foreign)
gt adl lt- readspss(paste(WD adlsav sep=)
+ todataframe=TRUE)
gt names(adl)
[1] id group gender age
[5] los diabetic hypertns afib
[9] priorstr smoker psd travel
[13] cooking housekpg
gt apply(adl 2 function(x) sum(isna(x)))
id group gender age los
0 0 0 0 0
diabetic hypertns afib priorstr smoker
0 0 0 0 0
psd travel cooking housekpg
0 0 0 0
gt table(adl$group)
Control Treatment
46 54
9 Mecircme principe que ci-dessus On charge dabord les don-
neacutees
gt anorex lt- readspss(paste(WD anorecticsav sep=)
+ todataframe=TRUE)
gt names(anorex)
[1] weight mens fast binge vomit
[6] purge hyper fami eman frie
[11] school satt sbeh mood preo
[16] body time diag tidi number
[21] diag2 time2
gt anorex lt- anorex[-c(2122)]
gt table(anorex$time)
1 2 3 4
55 53 54 55
gt class(anorex$time)
[1] numeric
gt anorex$time lt- factor(anorex$time ordered=TRUE)
Les donneacutees sont stockeacutees au format rdquolongrdquo cest-agrave-dire
quon dispose dune variable codant la peacuteriode dacquisition
des donneacutees pour chaque cas (ligne) Sous reacuteserve quil
ny ait pas de valeurs manquantes isoleacutees un tableau de
freacutequence de lidentifiant patient (number) doit nous per-
mettre de savoir de combien de cas complets nous dis-
posons
gt any(apply(anorex 1 function(x) sum(isna(x))) = 0)
[1] FALSE
gt unique(table(anorex$number))
[1] 4 3
gt table(table(anorex$number)==4)
FALSE TRUE
3 52
gt names(which(table(anorex$number) lt 4))
[1] 47 71 76
Pour connaicirctre la reacutepartition par groupe clinique il faut bien
sucircr filtrer sur la peacuteriode (time)
gt with(subset(anorex time==1) table(diag))
diag
Anorexia Nervosa
25
Anorexia with Bulimia Nervosa
9
Bullimia Nervosa after Anorexia
14
Atypical Eating Disorder
7
Enfin pour le score mood comme rien nest preacuteciseacute on va
calculer le score moyen aux quatre dates
gt with(subset(anorex diag==Anorexia Nervosa)
+ tapply(mood time mean))
1 2 3 4
2360000 2652174 2791667 2840000
10 Ici il sagit dun jeu de fichier propre agrave R que lon peut
charger avec la commande data eacuteventuellement en preacute-
cisant le package dans lequel se trouve le jeu de donneacutees
gt data(birthwt package=MASS)
gt summary(birthwt)
low age lwt
Min 00000 Min 1400 Min 800
1st Qu00000 1st Qu1900 1st Qu1100
Median 00000 Median 2300 Median 1210
Mean 03122 Mean 2324 Mean 1298
2
3rd Qu10000 3rd Qu2600 3rd Qu1400
Max 10000 Max 4500 Max 2500
race smoke
Min 1000 Min 00000
1st Qu1000 1st Qu00000
Median 1000 Median 00000
Mean 1847 Mean 03915
3rd Qu3000 3rd Qu10000
Max 3000 Max 10000
ptl ht
Min 00000 Min 000000
1st Qu00000 1st Qu000000
Median 00000 Median 000000
Mean 01958 Mean 006349
3rd Qu00000 3rd Qu000000
Max 30000 Max 100000
ui ftv bwt
Min 00000 Min 00000 Min 709
1st Qu00000 1st Qu00000 1st Qu2414
Median 00000 Median 00000 Median 2977
Mean 01481 Mean 07937 Mean 2945
3rd Qu00000 3rd Qu10000 3rd Qu3487
Max 10000 Max 60000 Max 4990
On peut deacutecider de recoder les variables low race smoke
ui et ht en facteurs
gt yesno lt- c(NoYes)
gt ethn lt- c(WhiteBlackOther)
gt birthwt lt- within(birthwt
+ low lt- factor(low labels=yesno)
+ race lt- factor(race labels=ethn)
+ smoke lt- factor(smoke labels=yesno)
+ ui lt- factor(ui labels=yesno)
+ ht lt- factor(ht labels=yesno)
+ )
Pour les tableaux croiseacutes on peut utiliser table ou xtabs
(parfois plus commode car on peut utiliser des notations
par formule agrave partir du dataframe)
gt xtabs(~ low + race data=birthwt)
race
low White Black Other
No 73 15 42
Yes 23 11 25
gt with(birthwt table(low smoke))
smoke
low No Yes
No 86 44
Yes 29 30
On peut eacutegalement profiter des commandes tregraves pratiques
dans le package Hmisc1 par exemple la commande sum-
maryformula qui permet deffectuer des reacutesumeacutes de vari-
ables quantitative ou qualitative conditionnellement aux
niveaux dun facteur
Surtout ne pas oublier de lire laide en ligne
help(summaryformula)
gt library(Hmisc)
gt summary(low ~ race + smoke + ui + ht + age
+ data=birthwt method=reverse)
1C Alzola and F Harrell An Introduction to S and The Hmisc and Design Libraries
2006 URL httpbiostatmcvanderbilteduwikiMainRS
Descriptive Statistics by low
+------------+--------------+--------------+
| |No |Yes |
| |(N=130) |(N=59) |
+------------+--------------+--------------+
|race White| 56 (73) | 39 (23) |
+------------+--------------+--------------+
| Black | 12 (15) | 19 (11) |
+------------+--------------+--------------+
| Other | 32 (42) | 42 (25) |
+------------+--------------+--------------+
|smoke Yes | 34 (44) | 51 (30) |
+------------+--------------+--------------+
|ui Yes | 11 ( 14) | 24 ( 14) |
+------------+--------------+--------------+
|ht Yes | 4 ( 5) | 12 ( 7) |
+------------+--------------+--------------+
|age |190230280|195220250|
+------------+--------------+--------------+
Analyse exploratoire
11 Le fichier eacutetant au format csv on le charge avec readcsv
gt WD lt- pub agrave adapter
gt cereal lt- readcsv(paste(WD cerealcsv sep=))
Plusieurs solutions pour afficher les distributions his-
togrammes matrice de dispersion La derniegravere agrave lavantage
de combiner les deux approches Consideacuterons par exemple
les 6 premiegraveres variables numeacuteriques
gt p lt- splom(~ cereal[38] type=c(psmooth)
+ diagpanel=panelhistsplom xlab=
+ pscale=0 varnamecex=07 cex=8
+ col=grey60)
size
calories
Xfat
fat
Na
K
Notons que lon a supprimeacute laffichage des uniteacutes (pscale=0)
par souci de lisibiliteacute et parce que dans une optique rdquoex-
ploratoire visuellerdquo on nen a pas vraiment besoin Lorsque
le nombre dobservations est beaucoup plus important on
peut avantageusement remplacer le nuage de points par un
nuage en densiteacute en ajoutant panel=panelhexbinplot (apregraves
avoir chargeacute le package hexbin) Enfin on peut avoir une ap-
proche plus interactive et eacutetudier les distributions bivarieacutees
3
une agrave une Le code suivant permet de seacutelectionner interac-
tivement les points et afficher le nom de la compagnie2
gt xyplot(cost ~ calories cereal)
gt while (isnull(fp lt- trellisfocus()))
+ if (fp$col gt 0 amp fp$row gt 0)
+ panelidentify(labels=cereal$company)
+
12 On sinteacuteresse aux donneacutees agrave linclusion (time=1) donc dans
un premier temps il est inteacuteressant de reacuteduire le tableau agrave
ces seules donneacutees Voir lexercice 9 pour le chargement
du fichier et le recodage de time en facteur Notons que la
commande summary ne renvoit pas leacutecart-type Elle reste
toutefois utile pour reacutesumer les distributions univarieacutees
veacuterifier leur symeacutetrie et la preacutesence dobservations atyp-
iques
gt anorexscorest1 lt- subset(anorex time==1
+ select=weightbody)
gt sapply(anorexscorest1
+ function(x) c(mean=mean(x) sd=sd(x)))
weight mens fast binge
mean 16545455 1218182 14363636 3254545
sd 09854155 0533712 08336363 1294120
vomit purge hyper fami
mean 36727273 2763636 19636364 18727273
sd 09438798 1477782 06074731 08400738
eman frie school satt
mean 17818182 24727273 20181818 21454545
sd 06580248 08131909 07325983 07556744
sbeh mood preo body
mean 1818182 22727273 14363636 1890909
sd 0434226 07806584 05362295 0785817
13 Ici lideacutee est de construire la matrice de correacutelation des 16
items en utilisant le coefficient de Spearman Cette matrice
119883 est symeacutetrique cest-dire que119883119894119895 = 119883119895119894 et sa diagonale necontient que des 1 (puisquil sagit de la correacutelation de litem
avec lui-mecircme) Si lon veut filtrer les coefficients il faut
consideacuterer soit la partie infeacuterieure soit la partie supeacuterieure
(hors diagonale)
gt correlt1 lt- cor(anorexscorest1 method=spearman)
gt correlt1[uppertri(correlt1 diag=TRUE)] lt- NA
Agrave partir de lagrave une instruction comme apply(correlt1 1 func-
tion(x) x gt 03) indiquerait preacuteciseacutement quelles paires de vari-
ables ont un coefficient de correacutelation gt 11137881113791 Pour extrairedirectement les paires de variables qui nous inteacuteressent on
peut faire
gt names(unlist(apply(correlt1 1
+ function(x) which(abs(x) gt 3))))
[1] fastweight bingeweight bingemens
[4] bingefast purgeweight purgemens
[7] purgebinge purgevomit famibinge
[10] famivomit famipurge emanfami
[13] frieeman sattschool sbehsatt
[16] moodeman preofast bodypreo
mais ce nest pas tregraves eacuteleacutegant Une autre solution est de
convertir la matrice de correacutelation en dataframe
gt library(reshape)
gt subset(melt(correlt1) abs(value) gt 3)
2D Sarkar Lattice Multivariate Data Visualization with R Springer 2008 p 219
X1 X2 value
3 fast weight 03340665
4 binge weight -05726599
6 purge weight -04260873
20 binge mens -03201155
22 purge mens -04378354
36 binge fast -03103808
47 preo fast 03106862
54 purge binge 07043708
56 fami binge -03792735
70 purge vomit 04230144
72 fami vomit -03332859
88 fami purge -04151892
121 eman fami 03269283
138 frie eman 04245090
142 mood eman -03887455
172 satt school 07405494
189 sbeh satt 04015018
240 body preo 04195842
14 Il faut dans un premier temps calculer les scores moyens par
peacuteriode Il existe plusieurs faccedilons daborder le problegraveme
proceacuteder colonne par colonne et utiliser tapply pour cal-
culer les scores moyens conditionnellement agrave time passer
du format rdquowiderdquo au format rdquolongrdquo (en utilisant le package
reshape)
Pour la premiegravere approache voici une solution possible
gt items lt- 116
gt res lt- matrix(nr=16 nc=4
+ dimnames=list(colnames(anorex[items])
+ levels(anorex$time)))
gt for (i in items)
+ res[i] lt- tapply(anorex[i] anorex[time] mean)
Dans ce cas on effectue les opeacuterations item par item soit
16 opeacuterations au total On pourrait eacutegalement calculer les
moyennes pour chaque niveau du facteur time soit 4 opeacutera-
tions seulement
gt for (i in levels(anorex$time))
+ res[i] lt- apply(subset(anorex time==i items)
+ 2 mean)
Quant agrave la second approche on utilise une combinaison de
melt et cast pour passer du format rdquowiderdquo au format rdquolongrdquo
et revenir avec les donneacutees moyenneacutees au format rdquowiderdquo
gt anorexscores lt- melt(anorex[117] idvars=17)
gt res lt- with(anorexscores
+ aggregate(value
+ list(item=variable time=time)
+ mean))
gt cast(res item ~ time)
item 1 2 3 4
1 weight 1654545 2641509 2759259 3036364
2 mens 1218182 1773585 2222222 2381818
3 fast 1436364 2660377 2833333 2963636
4 binge 3254545 3584906 3500000 3600000
5 vomit 3672727 3735849 3777778 3709091
6 purge 2763636 3452830 3444444 3581818
7 hyper 1963636 2339623 2537037 2709091
8 fami 1872727 2301887 2500000 2709091
9 eman 1781818 2283019 2462963 2672727
10 frie 2472727 2509434 2537037 2600000
4
11 school 2018182 2188679 2462963 2454545
12 satt 2145455 2245283 2314815 2400000
13 sbeh 1818182 2433962 2351852 2490909
14 mood 2272727 2528302 2814815 2727273
15 preo 1436364 2188679 2333333 2400000
16 body 1890909 2188679 2407407 2363636
En fait cette derniegravere approche est inteacuteressante lorsque lon
utilise lattice car elle permet de travailler directement agrave par-
tir de formule Quoi quil en soit il est toujours plus inteacuteres-
sant davoir des donneacutees au format rdquolongrdquo pour faire des
graphiques avec lattice Avec les deux premiegraveres solutions
on peut convertir la matrice res en dataframe en tapant
asdataframe(astable(res))
gt p lt- xyplot(value ~ time data=anorexscores
+ groups=variable type=a
+ ylab=Score moyen
+ autokey=list(space=right
+ lines=TRUE points=FALSE))
time
Sco
re m
oyen
10
15
20
25
30
35
40
1 2 3 4
weightmensfastbingevomitpurgehyperfamiemanfrieschoolsattsbehmoodpreobody
15 Voir lexercice 8 pour le chargement des donneacutees On a tou-
jours deux options proceacuteder variable par variable en util-
isant table ou utiliser des fonctions speacutecifiques (reshape ou
Hmisc)
gt adlbin lt- subset(adl select=c(group diabeticpsd))
gt library(Hmisc)
gt summary(group ~ data=adlbin method=reverse)
Descriptive Statistics by group
+--------------+---------+----------+
| |Control |Treatment |
| |(N=46) |(N=54) |
+--------------+---------+----------+
|diabetic Yes| 17 ( 8)| 13 ( 7) |
+--------------+---------+----------+
|hypertns Yes| 28 (13)| 37 (20) |
+--------------+---------+----------+
|afib Yes | 7 ( 3)| 2 ( 1) |
+--------------+---------+----------+
|priorstr Yes| 0 ( 0)| 2 ( 1) |
+--------------+---------+----------+
|smoker Yes | 2 ( 1)| 0 ( 0) |
+--------------+---------+----------+
|psd Yes | 33 (15)| 35 (19) |
+--------------+---------+----------+
Lavantage de cette approche est que lon peut utiliser plot
sur le reacutesultat de la commande ci-dessus pour obtenir un
graphique de type dotplot comme illustreacute ci-dessous
gt adlnum lt- subset(adl select=c(group travelhousekpg))
gt plot(summary(group ~ data=adlnum method=reverse))
Proportion
00 02 04 06 08 10
Same as before illness Gets out if someone else drives
Gets out in wheelchair Home or hospital bound
Bedminusridden
Plans and prepares meals Some cooking but less than normal
Gets food out if prepared by other Does nothing for meals
Never did any
As before Does at least 12 usual
Occasional dusting of small jobs No longer keeps house
Never did any
travel
cooking
housekpg
Proportions Stratified by group
16 Voir lexercice 11 pour le chargement des donneacutees On
procegravede dans un premier au recodage des compagnies
gt company2 lt- factor(cereal$company)
gt levels(company2)[c(248)] lt- other
On pourrait remplacer la derniegravere instruction par
gt levels(company2)[(levels(company2) in
+ c(g millskellogs))] lt- other
qui paraicirct plus compliqueacutee mais qui preacutesente lavantage de
ne pas avoir agrave se soucier du nom des variables agrave regrouper
Ensuite le graphique est assez simple agrave reacutealiser
gt p lt- parallel(~ cereal[38] groups=company2
+ horizontalaxis=FALSE autokey=TRUE)
Min
Max
size calories Xfat fat Na K
g millsotherkellogs
Agrave la lecture de ce graphique il apparaicirct clairement que les
deux marques g mills et kellogs diffegraverent systeacutematiquement
dans la teneur en graisses (staureacutees ou non) et contraire-
ment aux autres marques celles-ci ont des teneurs en Na
supeacuterieures aux autres marques
5
17 On part avec les donneacutees preacute-traiteacutees agrave lexercice 14 les
donneacutees aggreacutegeacutees par temps se trouve dans la variable res
gt p lt- dotplot(reorder(item x min) ~ x data=res
+ group=time autokey=list(column=2)
+ xlab=Score moyen aspect=6)
Score moyen
mensfast
preoweightemansbehfami
bodyhyper
schoolsatt
moodfrie
purgebingevomit
15 20 25 30 35
12
34
On peut choisir de trier les scores par nimporte quelle fonc-
tion Ici on a choisi le score minimum qui est apparemment
toujours observeacute agrave linclusion
18 Consideacuterant que les donneacutees sont deacutejagrave chargeacutees sous R (ex-
ercice 8) pour afficher la distribution des effectifs on utilise
type=count autrement on a par deacutefaut des freacutequences rel-
atives
gt p lt- histogram(~ age | group data=adl
+ type=count aspect=1)
age
Cou
nt
0
5
10
15
20
25
65 70 75 80 85 90
Control
65 70 75 80 85 90
Treatment
Notons quil est souvent avantageux de remplacer les his-
togrammes par des densiteacutes (voir densityplot)
Pour la fonction de reacutepartition
gt p lt- qqmath(~ age data=adl group=group
+ distribution=qunif aspect=5
+ autokey=list(x=05 y=95))
qunif
age
65
70
75
80
85
90
00 02 04 06 08 10
ControlTreatment
Pour les QQ plots
gt p lt- qqmath(~ age | group data=adl aspect=1
+ prepanel=prepanelqqmathline
+ panel=function(x )
+ panelqqmathline(x )
+ panelqqmath(x )
+ )
qnorm
age
65
70
75
80
85
90
minus2 minus1 0 1 2
Control
minus2 minus1 0 1 2
Treatment
On notera que par deacutefault lattice propose un arrangement
des sous-figures (rdquopanelsrdquo) utilisant des axes verticaux com-
muns Cela fait souvent sens mais on peut sen affranchir en
controcirclant largument scale= comme dans lexemple suiv-
ant
gt update(p scale=list(relation=free))
19 Ici on peut envisager deux solutions la premiegravere consiste agrave
afficher en parallegravele les distributions avant et apregraves traite-
ment pour chaque groupe de traitement La seconde con-
siste agrave montrer plus explicitement la covariation des scores
au niveau individuel et elle est plus avantageurse pour deacute-
tecter des patterns dassociation speacutecifiques ou des indi-
vidus atypiques
gt data(anorexia package=MASS)
gt p lt- bwplot(value22 ~ variable | Treat
+ data=melt(anorexia) aspect=12
+ layout=c(31) ylab=Weight (kg))
Wei
ght (
kg)
35
40
45
Prewt Postwt
CBT
Prewt Postwt
Cont
Prewt Postwt
FT
Voici la seconde solution qui utilise simplement un dia-
gramme de dispersion auquel on ajoute la rdquodroite iden-
titeacuterdquo (119910 = 119909) pour faciliter la lecture les points au dessusde celle-ci deacutenotent des patients dont le poids a augmenteacute
apregraves traitement
gt anorexia lt- transform(anorexia Prewt=Prewt22
+ Postwt=Postwt22)
gt p lt- xyplot(Postwt ~ Prewt | Treat data=anorexia
+ layout=c(31) aspect=iso)
gt p lt- update(p
+ panel=function()
+ panelxyplot()
+ panelabline(0 1 col=lightgrey)
+ )
6
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBT
15 16 17 18 19
Cont
15 16 17 18 19
FT
On calcule les scores de diffeacuterence assez simplement
comme suit
gt anorexia$andiff lt- with(anorexia Postwt-Prewt)
et on les reacutesume aussi simplement
gt with(anorexia tapply(andiff Treat summary
+ digits=2))
$CBT
Min 1st Qu Median Mean 3rd Qu Max
-190 -014 029 062 081 430
$Cont
Min 1st Qu Median Mean 3rd Qu Max
-2500 -1400 -0072 -0093 0740 3300
$FT
Min 1st Qu Median Mean 3rd Qu Max
-110 081 190 150 240 440
20 Ici il sagit globalement de la seconde option de visualisa-
tion eacutevoqueacutee agrave lexercice preacuteceacutedent mais en superposant les
graphiques dans la mecircme figure soit
gt p lt- xyplot(Postwt ~ Prewt data=anorexia
+ group=Treat span=8
+ type=c(pgsmooth)
+ autokey=list(space=right points=TRUE
+ lines=TRUE))
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Le paramegravetre span permet de controcircler le degreacute de lissage
des courbes rdquoloessrdquo
En utilisant des droites de reacutegression soit en supposant
lineacuteariteacute de la relation fonctionnelle entre les deux seacuteries
de mesure (typiquement dans le cadre dune analyse de co-
variance) on a les reacutesultats suivants
gt p lt- update(p type=c(pgr) aspect=5)
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Mesures et tests dassociation
21 Puisque les mesures sont collecteacutees sur les 10 mecircmes sujets
le test approprieacute est un test pour donneacutees apparieacutees
gt with(sleep tapply(extra group mean))
1 2
075 233
gt ttest(extra ~ group data=sleep paired=TRUE)
Paired t-test
data extra by group
t = -40621 df = 9 p-value = 0002833
alternative hypothesis true difference in means is not equal to 0
95 percent confidence interval
-24598858 -07001142
sample estimates
mean of the differences
-158
Le reacutesultat du test indique quil y a bien une diffeacuterence sig-
nificative (119901 = 1113788111378811137881113791) en faveur du deuxiegraveme traitement(augmentation de une heure et demie de sommeil environ)
Si les groupes eacutetaient consideacutereacutes comme indeacutependants (soit
20 sujets au total) on obtient une p-valeur gt 005 dougrave
limportance de prendre en consideacuteration lappariement
lorsquil est preacutesent
gt ttest(extra ~ group data=sleep)$pvalue
[1] 007939414
22 Lideacutee geacuteneacuterale est destimer la preacutecision dun estimateur ici
une moyenne de diffeacuterences en se servant de leacutechantillon
disponible par une meacutethode que lon appelle le bootstrap
gt di lt- with(sleep abs(diff(tapply(extra
+ group mean))))
gt sleep2 lt- with(sleep cbind(extra[group==1]
+ extra[group==2]))
gt B lt- 499
gt res lt- numeric(B)
gt for (i in 1B)
+ res[i] lt- mean(apply(sleep2[sample(10 rep=TRUE)]
+ 1 diff))
gt quantile(res c(025 975))
25 975
10090 23765
Cou
nt
0
20
40
60
80
100
10 15 20 25
7
On peut veacuterifier que lon obtient sensiblement les mecircmes
reacutesultats en utilisant les fonctions R deacutedieacutees
gt library(boot)
gt d lt- function(d x) mean(apply(d[x] 1 diff))
gt bootci(boot(sleep2 d R=499) type=perc)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 499 bootstrap replicates
CALL
bootci(bootout = boot(sleep2 d R = 499) type = perc)
Intervals
Level Percentile
95 ( 0985 2450 )
Calculations and Intervals on Original Scale
23 Dans un premier temps on filtre les donneacutees qui nous in-
teacuteressent agrave savoir mood agrave 1199051113789 et 1199051113792 On a eacutegalement besoinde lidentifiant patient pour sassurer du bon appariement
des scores
gt anorex0 lt- subset(anorex time in c(14) amp
+ diag==Anorexia Nervosa
+ select=c(numbertimemood))
gt all(table(anorex0$number)==2)
[1] TRUE
gt xtabs(~ time + mood data=anorex0)
mood
time 1 2 3
1 5 6 14
2 0 0 0
3 0 0 0
4 1 2 22
gt wilcoxtest(mood ~ time data=anorex0 paired=TRUE
+ exact=FALSE)
Wilcoxon signed rank test with continuity
correction
data mood by time
V = 9 p-value = 001628
alternative hypothesis true location shift is not equal to 0
Le reacutesultat suggegravere que les scores ont tendance agrave eacutevoluer
dans le sens de valeurs plus eacuteleveacutees entre linclusion et
la fin de leacutetude Ceci eacutetant en regardant les don-
neacutees brutes il apparaicirct clairement que les scores se
concentrent autour de 3 agrave 1199051113792 (88 des observations)
mood
time
1
4
1 2 3
24 Encore une fois on seacutelectionne dans un premier temps les
donneacutees qui nous inteacuteressent
gt anorex1 lt- subset(anorex time==1
+ select=c(weightbingepurge))
gt round(resc lt- cor(anorex1 method=spearman) 3)
weight binge vomit purge
weight 1000 -0573 -0120 -0426
binge -0573 1000 0170 0704
vomit -0120 0170 1000 0423
purge -0426 0704 0423 1000
Ici il existe plusieurs faccedilons de proceacuteder pour tester les cor-
reacutelations des variables prises deux agrave deux (on rappelle quil
y a ∁119896119899 =1113792
1113790(1113792minus1113790)= 1113794 maniegraveres de combiner deux eacuteleacutements
pris parmi n) En voici une selon laquelle on seacutelectionne les
colonnes de anorex1 agrave tester agrave partir dun tableau reacutesumant
les combinaisons possibles
gt cb lt- combn(4 2)
gt resp lt- numeric(ncol(cb))
gt for (i in 1ncol(cb))
+ resp[i] lt- cortest(anorex1[cb[1i]]
+ anorex1[cb[2i]]
+ method=spearman
+ exact=FALSE)$pvalue
Enfin voici une faccedilon possible pour regrouper les reacutesultats
dans un dataframe qui repose globalement sur ce qui a eacuteteacute
vu agrave lexercice 13
gt resc[uppertri(resc diag=TRUE)] lt- NA
gt resc lt- subset(melt(resc) isna(value))
gt resc$p lt- resp
gt resc$padj lt- ifelse(resc$p6 lt 1 resc$p6 1)
On pourra veacuterifier que la derniegravere colonne peut eacutegalement
ecirctre obtenue par la commande suivante
gt padjust(resc$p bonf)
Le reacutesultat ci-dessous indique que agrave lexception de
weightvomit et bingevomit toutes les associations testeacutees
sont significatives mecircme apregraves une correction (tregraves conser-
vative) pour les comparaisons multiples
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight -0573 000000491182 00000294709
3 vomit weight -0120 038353694716 10000000000
4 purge weight -0426 000118078100 00070846860
7 vomit binge 0170 021490582189 10000000000
8 purge binge 0704 000000000197 00000000118
12 purge vomit 0423 000129263518 00077558111
La mecircme proceacutedure peut ecirctre exploiteacutee pour refaire les cal-
culs agrave 1199051113792 il suffit de changer le filtre initial time==4 Onobtiendrait les reacutesultats suivants
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight 02910 003113317414 01867990449
3 vomit weight 00597 066515436534 10000000000
4 purge weight 02406 007684707553 04610824532
7 vomit binge 03536 000808064175 00484838505
8 purge binge 06880 000000000647 00000000388
12 purge vomit 04811 000020071774 00012043065
Cette fois-ci toutes les associations sont positives en par-
ticulier la correacutelation entre binge et weight est passeacutee de
-0573 agrave 0291 alors que celle entre purge et weight est passeacutee
de -0426 agrave 0241 et seraient juger non-significatives agrave 1199051113792selon le critegravere de Bonferroni Toutefois on a un peu tricheacute
car on a appliqueacute les corrections sur 6 comparaisons alors
quen reacutealiteacute on en a reacutealiseacute 12
25 Les donneacutees ont deacutejagrave eacuteteacute reacutesumeacutees visuellement sous forme
de boicirctes agrave moustaches agrave lexercice 19 Le modegravele dANOVA
est assez simple agrave reacutealiser
8
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
vitalcapac
high95
low 35
low 1
gt head(sort(lung$time))
[1] -2 0 0 1 1 2
gt head(sort(lung$age))
[1] 5 35 36 38 39 40
gt table(lung$cens)
0 1 2
64 66 1
gt table(lung$vitalcapac)
high low low
95 35 1
gt lung lt- within(lung
+ time[timelt0] lt- NA
+ age[age==5] lt- NA
+ cens[cens==2] lt- NA
+ cens lt- factor(cens)
+ levels(vitalcapac)[23] lt- low
+ )
Apregraves ces modifications on peut veacuterifier que tout semble
normal
gt summary(lung)
time age cens
Min 00 Min 3500 0 64
1st Qu 745 1st Qu5300 1 66
Median 1675 Median 5950 NAs 1
Mean 1876 Mean 5944
3rd Qu2770 3rd Qu6600
Max 5580 Max 7800
NAs 30 NAs 300
vitalcapac
high95
low 36
8 Pour charger des fichiers de donneacutees SPSS (sav) on a be-
soin du package foreign Voir aussi R Data ImportExport
sect 31 (httpbitlyyRnVit)
gt library(foreign)
gt adl lt- readspss(paste(WD adlsav sep=)
+ todataframe=TRUE)
gt names(adl)
[1] id group gender age
[5] los diabetic hypertns afib
[9] priorstr smoker psd travel
[13] cooking housekpg
gt apply(adl 2 function(x) sum(isna(x)))
id group gender age los
0 0 0 0 0
diabetic hypertns afib priorstr smoker
0 0 0 0 0
psd travel cooking housekpg
0 0 0 0
gt table(adl$group)
Control Treatment
46 54
9 Mecircme principe que ci-dessus On charge dabord les don-
neacutees
gt anorex lt- readspss(paste(WD anorecticsav sep=)
+ todataframe=TRUE)
gt names(anorex)
[1] weight mens fast binge vomit
[6] purge hyper fami eman frie
[11] school satt sbeh mood preo
[16] body time diag tidi number
[21] diag2 time2
gt anorex lt- anorex[-c(2122)]
gt table(anorex$time)
1 2 3 4
55 53 54 55
gt class(anorex$time)
[1] numeric
gt anorex$time lt- factor(anorex$time ordered=TRUE)
Les donneacutees sont stockeacutees au format rdquolongrdquo cest-agrave-dire
quon dispose dune variable codant la peacuteriode dacquisition
des donneacutees pour chaque cas (ligne) Sous reacuteserve quil
ny ait pas de valeurs manquantes isoleacutees un tableau de
freacutequence de lidentifiant patient (number) doit nous per-
mettre de savoir de combien de cas complets nous dis-
posons
gt any(apply(anorex 1 function(x) sum(isna(x))) = 0)
[1] FALSE
gt unique(table(anorex$number))
[1] 4 3
gt table(table(anorex$number)==4)
FALSE TRUE
3 52
gt names(which(table(anorex$number) lt 4))
[1] 47 71 76
Pour connaicirctre la reacutepartition par groupe clinique il faut bien
sucircr filtrer sur la peacuteriode (time)
gt with(subset(anorex time==1) table(diag))
diag
Anorexia Nervosa
25
Anorexia with Bulimia Nervosa
9
Bullimia Nervosa after Anorexia
14
Atypical Eating Disorder
7
Enfin pour le score mood comme rien nest preacuteciseacute on va
calculer le score moyen aux quatre dates
gt with(subset(anorex diag==Anorexia Nervosa)
+ tapply(mood time mean))
1 2 3 4
2360000 2652174 2791667 2840000
10 Ici il sagit dun jeu de fichier propre agrave R que lon peut
charger avec la commande data eacuteventuellement en preacute-
cisant le package dans lequel se trouve le jeu de donneacutees
gt data(birthwt package=MASS)
gt summary(birthwt)
low age lwt
Min 00000 Min 1400 Min 800
1st Qu00000 1st Qu1900 1st Qu1100
Median 00000 Median 2300 Median 1210
Mean 03122 Mean 2324 Mean 1298
2
3rd Qu10000 3rd Qu2600 3rd Qu1400
Max 10000 Max 4500 Max 2500
race smoke
Min 1000 Min 00000
1st Qu1000 1st Qu00000
Median 1000 Median 00000
Mean 1847 Mean 03915
3rd Qu3000 3rd Qu10000
Max 3000 Max 10000
ptl ht
Min 00000 Min 000000
1st Qu00000 1st Qu000000
Median 00000 Median 000000
Mean 01958 Mean 006349
3rd Qu00000 3rd Qu000000
Max 30000 Max 100000
ui ftv bwt
Min 00000 Min 00000 Min 709
1st Qu00000 1st Qu00000 1st Qu2414
Median 00000 Median 00000 Median 2977
Mean 01481 Mean 07937 Mean 2945
3rd Qu00000 3rd Qu10000 3rd Qu3487
Max 10000 Max 60000 Max 4990
On peut deacutecider de recoder les variables low race smoke
ui et ht en facteurs
gt yesno lt- c(NoYes)
gt ethn lt- c(WhiteBlackOther)
gt birthwt lt- within(birthwt
+ low lt- factor(low labels=yesno)
+ race lt- factor(race labels=ethn)
+ smoke lt- factor(smoke labels=yesno)
+ ui lt- factor(ui labels=yesno)
+ ht lt- factor(ht labels=yesno)
+ )
Pour les tableaux croiseacutes on peut utiliser table ou xtabs
(parfois plus commode car on peut utiliser des notations
par formule agrave partir du dataframe)
gt xtabs(~ low + race data=birthwt)
race
low White Black Other
No 73 15 42
Yes 23 11 25
gt with(birthwt table(low smoke))
smoke
low No Yes
No 86 44
Yes 29 30
On peut eacutegalement profiter des commandes tregraves pratiques
dans le package Hmisc1 par exemple la commande sum-
maryformula qui permet deffectuer des reacutesumeacutes de vari-
ables quantitative ou qualitative conditionnellement aux
niveaux dun facteur
Surtout ne pas oublier de lire laide en ligne
help(summaryformula)
gt library(Hmisc)
gt summary(low ~ race + smoke + ui + ht + age
+ data=birthwt method=reverse)
1C Alzola and F Harrell An Introduction to S and The Hmisc and Design Libraries
2006 URL httpbiostatmcvanderbilteduwikiMainRS
Descriptive Statistics by low
+------------+--------------+--------------+
| |No |Yes |
| |(N=130) |(N=59) |
+------------+--------------+--------------+
|race White| 56 (73) | 39 (23) |
+------------+--------------+--------------+
| Black | 12 (15) | 19 (11) |
+------------+--------------+--------------+
| Other | 32 (42) | 42 (25) |
+------------+--------------+--------------+
|smoke Yes | 34 (44) | 51 (30) |
+------------+--------------+--------------+
|ui Yes | 11 ( 14) | 24 ( 14) |
+------------+--------------+--------------+
|ht Yes | 4 ( 5) | 12 ( 7) |
+------------+--------------+--------------+
|age |190230280|195220250|
+------------+--------------+--------------+
Analyse exploratoire
11 Le fichier eacutetant au format csv on le charge avec readcsv
gt WD lt- pub agrave adapter
gt cereal lt- readcsv(paste(WD cerealcsv sep=))
Plusieurs solutions pour afficher les distributions his-
togrammes matrice de dispersion La derniegravere agrave lavantage
de combiner les deux approches Consideacuterons par exemple
les 6 premiegraveres variables numeacuteriques
gt p lt- splom(~ cereal[38] type=c(psmooth)
+ diagpanel=panelhistsplom xlab=
+ pscale=0 varnamecex=07 cex=8
+ col=grey60)
size
calories
Xfat
fat
Na
K
Notons que lon a supprimeacute laffichage des uniteacutes (pscale=0)
par souci de lisibiliteacute et parce que dans une optique rdquoex-
ploratoire visuellerdquo on nen a pas vraiment besoin Lorsque
le nombre dobservations est beaucoup plus important on
peut avantageusement remplacer le nuage de points par un
nuage en densiteacute en ajoutant panel=panelhexbinplot (apregraves
avoir chargeacute le package hexbin) Enfin on peut avoir une ap-
proche plus interactive et eacutetudier les distributions bivarieacutees
3
une agrave une Le code suivant permet de seacutelectionner interac-
tivement les points et afficher le nom de la compagnie2
gt xyplot(cost ~ calories cereal)
gt while (isnull(fp lt- trellisfocus()))
+ if (fp$col gt 0 amp fp$row gt 0)
+ panelidentify(labels=cereal$company)
+
12 On sinteacuteresse aux donneacutees agrave linclusion (time=1) donc dans
un premier temps il est inteacuteressant de reacuteduire le tableau agrave
ces seules donneacutees Voir lexercice 9 pour le chargement
du fichier et le recodage de time en facteur Notons que la
commande summary ne renvoit pas leacutecart-type Elle reste
toutefois utile pour reacutesumer les distributions univarieacutees
veacuterifier leur symeacutetrie et la preacutesence dobservations atyp-
iques
gt anorexscorest1 lt- subset(anorex time==1
+ select=weightbody)
gt sapply(anorexscorest1
+ function(x) c(mean=mean(x) sd=sd(x)))
weight mens fast binge
mean 16545455 1218182 14363636 3254545
sd 09854155 0533712 08336363 1294120
vomit purge hyper fami
mean 36727273 2763636 19636364 18727273
sd 09438798 1477782 06074731 08400738
eman frie school satt
mean 17818182 24727273 20181818 21454545
sd 06580248 08131909 07325983 07556744
sbeh mood preo body
mean 1818182 22727273 14363636 1890909
sd 0434226 07806584 05362295 0785817
13 Ici lideacutee est de construire la matrice de correacutelation des 16
items en utilisant le coefficient de Spearman Cette matrice
119883 est symeacutetrique cest-dire que119883119894119895 = 119883119895119894 et sa diagonale necontient que des 1 (puisquil sagit de la correacutelation de litem
avec lui-mecircme) Si lon veut filtrer les coefficients il faut
consideacuterer soit la partie infeacuterieure soit la partie supeacuterieure
(hors diagonale)
gt correlt1 lt- cor(anorexscorest1 method=spearman)
gt correlt1[uppertri(correlt1 diag=TRUE)] lt- NA
Agrave partir de lagrave une instruction comme apply(correlt1 1 func-
tion(x) x gt 03) indiquerait preacuteciseacutement quelles paires de vari-
ables ont un coefficient de correacutelation gt 11137881113791 Pour extrairedirectement les paires de variables qui nous inteacuteressent on
peut faire
gt names(unlist(apply(correlt1 1
+ function(x) which(abs(x) gt 3))))
[1] fastweight bingeweight bingemens
[4] bingefast purgeweight purgemens
[7] purgebinge purgevomit famibinge
[10] famivomit famipurge emanfami
[13] frieeman sattschool sbehsatt
[16] moodeman preofast bodypreo
mais ce nest pas tregraves eacuteleacutegant Une autre solution est de
convertir la matrice de correacutelation en dataframe
gt library(reshape)
gt subset(melt(correlt1) abs(value) gt 3)
2D Sarkar Lattice Multivariate Data Visualization with R Springer 2008 p 219
X1 X2 value
3 fast weight 03340665
4 binge weight -05726599
6 purge weight -04260873
20 binge mens -03201155
22 purge mens -04378354
36 binge fast -03103808
47 preo fast 03106862
54 purge binge 07043708
56 fami binge -03792735
70 purge vomit 04230144
72 fami vomit -03332859
88 fami purge -04151892
121 eman fami 03269283
138 frie eman 04245090
142 mood eman -03887455
172 satt school 07405494
189 sbeh satt 04015018
240 body preo 04195842
14 Il faut dans un premier temps calculer les scores moyens par
peacuteriode Il existe plusieurs faccedilons daborder le problegraveme
proceacuteder colonne par colonne et utiliser tapply pour cal-
culer les scores moyens conditionnellement agrave time passer
du format rdquowiderdquo au format rdquolongrdquo (en utilisant le package
reshape)
Pour la premiegravere approache voici une solution possible
gt items lt- 116
gt res lt- matrix(nr=16 nc=4
+ dimnames=list(colnames(anorex[items])
+ levels(anorex$time)))
gt for (i in items)
+ res[i] lt- tapply(anorex[i] anorex[time] mean)
Dans ce cas on effectue les opeacuterations item par item soit
16 opeacuterations au total On pourrait eacutegalement calculer les
moyennes pour chaque niveau du facteur time soit 4 opeacutera-
tions seulement
gt for (i in levels(anorex$time))
+ res[i] lt- apply(subset(anorex time==i items)
+ 2 mean)
Quant agrave la second approche on utilise une combinaison de
melt et cast pour passer du format rdquowiderdquo au format rdquolongrdquo
et revenir avec les donneacutees moyenneacutees au format rdquowiderdquo
gt anorexscores lt- melt(anorex[117] idvars=17)
gt res lt- with(anorexscores
+ aggregate(value
+ list(item=variable time=time)
+ mean))
gt cast(res item ~ time)
item 1 2 3 4
1 weight 1654545 2641509 2759259 3036364
2 mens 1218182 1773585 2222222 2381818
3 fast 1436364 2660377 2833333 2963636
4 binge 3254545 3584906 3500000 3600000
5 vomit 3672727 3735849 3777778 3709091
6 purge 2763636 3452830 3444444 3581818
7 hyper 1963636 2339623 2537037 2709091
8 fami 1872727 2301887 2500000 2709091
9 eman 1781818 2283019 2462963 2672727
10 frie 2472727 2509434 2537037 2600000
4
11 school 2018182 2188679 2462963 2454545
12 satt 2145455 2245283 2314815 2400000
13 sbeh 1818182 2433962 2351852 2490909
14 mood 2272727 2528302 2814815 2727273
15 preo 1436364 2188679 2333333 2400000
16 body 1890909 2188679 2407407 2363636
En fait cette derniegravere approche est inteacuteressante lorsque lon
utilise lattice car elle permet de travailler directement agrave par-
tir de formule Quoi quil en soit il est toujours plus inteacuteres-
sant davoir des donneacutees au format rdquolongrdquo pour faire des
graphiques avec lattice Avec les deux premiegraveres solutions
on peut convertir la matrice res en dataframe en tapant
asdataframe(astable(res))
gt p lt- xyplot(value ~ time data=anorexscores
+ groups=variable type=a
+ ylab=Score moyen
+ autokey=list(space=right
+ lines=TRUE points=FALSE))
time
Sco
re m
oyen
10
15
20
25
30
35
40
1 2 3 4
weightmensfastbingevomitpurgehyperfamiemanfrieschoolsattsbehmoodpreobody
15 Voir lexercice 8 pour le chargement des donneacutees On a tou-
jours deux options proceacuteder variable par variable en util-
isant table ou utiliser des fonctions speacutecifiques (reshape ou
Hmisc)
gt adlbin lt- subset(adl select=c(group diabeticpsd))
gt library(Hmisc)
gt summary(group ~ data=adlbin method=reverse)
Descriptive Statistics by group
+--------------+---------+----------+
| |Control |Treatment |
| |(N=46) |(N=54) |
+--------------+---------+----------+
|diabetic Yes| 17 ( 8)| 13 ( 7) |
+--------------+---------+----------+
|hypertns Yes| 28 (13)| 37 (20) |
+--------------+---------+----------+
|afib Yes | 7 ( 3)| 2 ( 1) |
+--------------+---------+----------+
|priorstr Yes| 0 ( 0)| 2 ( 1) |
+--------------+---------+----------+
|smoker Yes | 2 ( 1)| 0 ( 0) |
+--------------+---------+----------+
|psd Yes | 33 (15)| 35 (19) |
+--------------+---------+----------+
Lavantage de cette approche est que lon peut utiliser plot
sur le reacutesultat de la commande ci-dessus pour obtenir un
graphique de type dotplot comme illustreacute ci-dessous
gt adlnum lt- subset(adl select=c(group travelhousekpg))
gt plot(summary(group ~ data=adlnum method=reverse))
Proportion
00 02 04 06 08 10
Same as before illness Gets out if someone else drives
Gets out in wheelchair Home or hospital bound
Bedminusridden
Plans and prepares meals Some cooking but less than normal
Gets food out if prepared by other Does nothing for meals
Never did any
As before Does at least 12 usual
Occasional dusting of small jobs No longer keeps house
Never did any
travel
cooking
housekpg
Proportions Stratified by group
16 Voir lexercice 11 pour le chargement des donneacutees On
procegravede dans un premier au recodage des compagnies
gt company2 lt- factor(cereal$company)
gt levels(company2)[c(248)] lt- other
On pourrait remplacer la derniegravere instruction par
gt levels(company2)[(levels(company2) in
+ c(g millskellogs))] lt- other
qui paraicirct plus compliqueacutee mais qui preacutesente lavantage de
ne pas avoir agrave se soucier du nom des variables agrave regrouper
Ensuite le graphique est assez simple agrave reacutealiser
gt p lt- parallel(~ cereal[38] groups=company2
+ horizontalaxis=FALSE autokey=TRUE)
Min
Max
size calories Xfat fat Na K
g millsotherkellogs
Agrave la lecture de ce graphique il apparaicirct clairement que les
deux marques g mills et kellogs diffegraverent systeacutematiquement
dans la teneur en graisses (staureacutees ou non) et contraire-
ment aux autres marques celles-ci ont des teneurs en Na
supeacuterieures aux autres marques
5
17 On part avec les donneacutees preacute-traiteacutees agrave lexercice 14 les
donneacutees aggreacutegeacutees par temps se trouve dans la variable res
gt p lt- dotplot(reorder(item x min) ~ x data=res
+ group=time autokey=list(column=2)
+ xlab=Score moyen aspect=6)
Score moyen
mensfast
preoweightemansbehfami
bodyhyper
schoolsatt
moodfrie
purgebingevomit
15 20 25 30 35
12
34
On peut choisir de trier les scores par nimporte quelle fonc-
tion Ici on a choisi le score minimum qui est apparemment
toujours observeacute agrave linclusion
18 Consideacuterant que les donneacutees sont deacutejagrave chargeacutees sous R (ex-
ercice 8) pour afficher la distribution des effectifs on utilise
type=count autrement on a par deacutefaut des freacutequences rel-
atives
gt p lt- histogram(~ age | group data=adl
+ type=count aspect=1)
age
Cou
nt
0
5
10
15
20
25
65 70 75 80 85 90
Control
65 70 75 80 85 90
Treatment
Notons quil est souvent avantageux de remplacer les his-
togrammes par des densiteacutes (voir densityplot)
Pour la fonction de reacutepartition
gt p lt- qqmath(~ age data=adl group=group
+ distribution=qunif aspect=5
+ autokey=list(x=05 y=95))
qunif
age
65
70
75
80
85
90
00 02 04 06 08 10
ControlTreatment
Pour les QQ plots
gt p lt- qqmath(~ age | group data=adl aspect=1
+ prepanel=prepanelqqmathline
+ panel=function(x )
+ panelqqmathline(x )
+ panelqqmath(x )
+ )
qnorm
age
65
70
75
80
85
90
minus2 minus1 0 1 2
Control
minus2 minus1 0 1 2
Treatment
On notera que par deacutefault lattice propose un arrangement
des sous-figures (rdquopanelsrdquo) utilisant des axes verticaux com-
muns Cela fait souvent sens mais on peut sen affranchir en
controcirclant largument scale= comme dans lexemple suiv-
ant
gt update(p scale=list(relation=free))
19 Ici on peut envisager deux solutions la premiegravere consiste agrave
afficher en parallegravele les distributions avant et apregraves traite-
ment pour chaque groupe de traitement La seconde con-
siste agrave montrer plus explicitement la covariation des scores
au niveau individuel et elle est plus avantageurse pour deacute-
tecter des patterns dassociation speacutecifiques ou des indi-
vidus atypiques
gt data(anorexia package=MASS)
gt p lt- bwplot(value22 ~ variable | Treat
+ data=melt(anorexia) aspect=12
+ layout=c(31) ylab=Weight (kg))
Wei
ght (
kg)
35
40
45
Prewt Postwt
CBT
Prewt Postwt
Cont
Prewt Postwt
FT
Voici la seconde solution qui utilise simplement un dia-
gramme de dispersion auquel on ajoute la rdquodroite iden-
titeacuterdquo (119910 = 119909) pour faciliter la lecture les points au dessusde celle-ci deacutenotent des patients dont le poids a augmenteacute
apregraves traitement
gt anorexia lt- transform(anorexia Prewt=Prewt22
+ Postwt=Postwt22)
gt p lt- xyplot(Postwt ~ Prewt | Treat data=anorexia
+ layout=c(31) aspect=iso)
gt p lt- update(p
+ panel=function()
+ panelxyplot()
+ panelabline(0 1 col=lightgrey)
+ )
6
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBT
15 16 17 18 19
Cont
15 16 17 18 19
FT
On calcule les scores de diffeacuterence assez simplement
comme suit
gt anorexia$andiff lt- with(anorexia Postwt-Prewt)
et on les reacutesume aussi simplement
gt with(anorexia tapply(andiff Treat summary
+ digits=2))
$CBT
Min 1st Qu Median Mean 3rd Qu Max
-190 -014 029 062 081 430
$Cont
Min 1st Qu Median Mean 3rd Qu Max
-2500 -1400 -0072 -0093 0740 3300
$FT
Min 1st Qu Median Mean 3rd Qu Max
-110 081 190 150 240 440
20 Ici il sagit globalement de la seconde option de visualisa-
tion eacutevoqueacutee agrave lexercice preacuteceacutedent mais en superposant les
graphiques dans la mecircme figure soit
gt p lt- xyplot(Postwt ~ Prewt data=anorexia
+ group=Treat span=8
+ type=c(pgsmooth)
+ autokey=list(space=right points=TRUE
+ lines=TRUE))
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Le paramegravetre span permet de controcircler le degreacute de lissage
des courbes rdquoloessrdquo
En utilisant des droites de reacutegression soit en supposant
lineacuteariteacute de la relation fonctionnelle entre les deux seacuteries
de mesure (typiquement dans le cadre dune analyse de co-
variance) on a les reacutesultats suivants
gt p lt- update(p type=c(pgr) aspect=5)
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Mesures et tests dassociation
21 Puisque les mesures sont collecteacutees sur les 10 mecircmes sujets
le test approprieacute est un test pour donneacutees apparieacutees
gt with(sleep tapply(extra group mean))
1 2
075 233
gt ttest(extra ~ group data=sleep paired=TRUE)
Paired t-test
data extra by group
t = -40621 df = 9 p-value = 0002833
alternative hypothesis true difference in means is not equal to 0
95 percent confidence interval
-24598858 -07001142
sample estimates
mean of the differences
-158
Le reacutesultat du test indique quil y a bien une diffeacuterence sig-
nificative (119901 = 1113788111378811137881113791) en faveur du deuxiegraveme traitement(augmentation de une heure et demie de sommeil environ)
Si les groupes eacutetaient consideacutereacutes comme indeacutependants (soit
20 sujets au total) on obtient une p-valeur gt 005 dougrave
limportance de prendre en consideacuteration lappariement
lorsquil est preacutesent
gt ttest(extra ~ group data=sleep)$pvalue
[1] 007939414
22 Lideacutee geacuteneacuterale est destimer la preacutecision dun estimateur ici
une moyenne de diffeacuterences en se servant de leacutechantillon
disponible par une meacutethode que lon appelle le bootstrap
gt di lt- with(sleep abs(diff(tapply(extra
+ group mean))))
gt sleep2 lt- with(sleep cbind(extra[group==1]
+ extra[group==2]))
gt B lt- 499
gt res lt- numeric(B)
gt for (i in 1B)
+ res[i] lt- mean(apply(sleep2[sample(10 rep=TRUE)]
+ 1 diff))
gt quantile(res c(025 975))
25 975
10090 23765
Cou
nt
0
20
40
60
80
100
10 15 20 25
7
On peut veacuterifier que lon obtient sensiblement les mecircmes
reacutesultats en utilisant les fonctions R deacutedieacutees
gt library(boot)
gt d lt- function(d x) mean(apply(d[x] 1 diff))
gt bootci(boot(sleep2 d R=499) type=perc)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 499 bootstrap replicates
CALL
bootci(bootout = boot(sleep2 d R = 499) type = perc)
Intervals
Level Percentile
95 ( 0985 2450 )
Calculations and Intervals on Original Scale
23 Dans un premier temps on filtre les donneacutees qui nous in-
teacuteressent agrave savoir mood agrave 1199051113789 et 1199051113792 On a eacutegalement besoinde lidentifiant patient pour sassurer du bon appariement
des scores
gt anorex0 lt- subset(anorex time in c(14) amp
+ diag==Anorexia Nervosa
+ select=c(numbertimemood))
gt all(table(anorex0$number)==2)
[1] TRUE
gt xtabs(~ time + mood data=anorex0)
mood
time 1 2 3
1 5 6 14
2 0 0 0
3 0 0 0
4 1 2 22
gt wilcoxtest(mood ~ time data=anorex0 paired=TRUE
+ exact=FALSE)
Wilcoxon signed rank test with continuity
correction
data mood by time
V = 9 p-value = 001628
alternative hypothesis true location shift is not equal to 0
Le reacutesultat suggegravere que les scores ont tendance agrave eacutevoluer
dans le sens de valeurs plus eacuteleveacutees entre linclusion et
la fin de leacutetude Ceci eacutetant en regardant les don-
neacutees brutes il apparaicirct clairement que les scores se
concentrent autour de 3 agrave 1199051113792 (88 des observations)
mood
time
1
4
1 2 3
24 Encore une fois on seacutelectionne dans un premier temps les
donneacutees qui nous inteacuteressent
gt anorex1 lt- subset(anorex time==1
+ select=c(weightbingepurge))
gt round(resc lt- cor(anorex1 method=spearman) 3)
weight binge vomit purge
weight 1000 -0573 -0120 -0426
binge -0573 1000 0170 0704
vomit -0120 0170 1000 0423
purge -0426 0704 0423 1000
Ici il existe plusieurs faccedilons de proceacuteder pour tester les cor-
reacutelations des variables prises deux agrave deux (on rappelle quil
y a ∁119896119899 =1113792
1113790(1113792minus1113790)= 1113794 maniegraveres de combiner deux eacuteleacutements
pris parmi n) En voici une selon laquelle on seacutelectionne les
colonnes de anorex1 agrave tester agrave partir dun tableau reacutesumant
les combinaisons possibles
gt cb lt- combn(4 2)
gt resp lt- numeric(ncol(cb))
gt for (i in 1ncol(cb))
+ resp[i] lt- cortest(anorex1[cb[1i]]
+ anorex1[cb[2i]]
+ method=spearman
+ exact=FALSE)$pvalue
Enfin voici une faccedilon possible pour regrouper les reacutesultats
dans un dataframe qui repose globalement sur ce qui a eacuteteacute
vu agrave lexercice 13
gt resc[uppertri(resc diag=TRUE)] lt- NA
gt resc lt- subset(melt(resc) isna(value))
gt resc$p lt- resp
gt resc$padj lt- ifelse(resc$p6 lt 1 resc$p6 1)
On pourra veacuterifier que la derniegravere colonne peut eacutegalement
ecirctre obtenue par la commande suivante
gt padjust(resc$p bonf)
Le reacutesultat ci-dessous indique que agrave lexception de
weightvomit et bingevomit toutes les associations testeacutees
sont significatives mecircme apregraves une correction (tregraves conser-
vative) pour les comparaisons multiples
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight -0573 000000491182 00000294709
3 vomit weight -0120 038353694716 10000000000
4 purge weight -0426 000118078100 00070846860
7 vomit binge 0170 021490582189 10000000000
8 purge binge 0704 000000000197 00000000118
12 purge vomit 0423 000129263518 00077558111
La mecircme proceacutedure peut ecirctre exploiteacutee pour refaire les cal-
culs agrave 1199051113792 il suffit de changer le filtre initial time==4 Onobtiendrait les reacutesultats suivants
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight 02910 003113317414 01867990449
3 vomit weight 00597 066515436534 10000000000
4 purge weight 02406 007684707553 04610824532
7 vomit binge 03536 000808064175 00484838505
8 purge binge 06880 000000000647 00000000388
12 purge vomit 04811 000020071774 00012043065
Cette fois-ci toutes les associations sont positives en par-
ticulier la correacutelation entre binge et weight est passeacutee de
-0573 agrave 0291 alors que celle entre purge et weight est passeacutee
de -0426 agrave 0241 et seraient juger non-significatives agrave 1199051113792selon le critegravere de Bonferroni Toutefois on a un peu tricheacute
car on a appliqueacute les corrections sur 6 comparaisons alors
quen reacutealiteacute on en a reacutealiseacute 12
25 Les donneacutees ont deacutejagrave eacuteteacute reacutesumeacutees visuellement sous forme
de boicirctes agrave moustaches agrave lexercice 19 Le modegravele dANOVA
est assez simple agrave reacutealiser
8
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
3rd Qu10000 3rd Qu2600 3rd Qu1400
Max 10000 Max 4500 Max 2500
race smoke
Min 1000 Min 00000
1st Qu1000 1st Qu00000
Median 1000 Median 00000
Mean 1847 Mean 03915
3rd Qu3000 3rd Qu10000
Max 3000 Max 10000
ptl ht
Min 00000 Min 000000
1st Qu00000 1st Qu000000
Median 00000 Median 000000
Mean 01958 Mean 006349
3rd Qu00000 3rd Qu000000
Max 30000 Max 100000
ui ftv bwt
Min 00000 Min 00000 Min 709
1st Qu00000 1st Qu00000 1st Qu2414
Median 00000 Median 00000 Median 2977
Mean 01481 Mean 07937 Mean 2945
3rd Qu00000 3rd Qu10000 3rd Qu3487
Max 10000 Max 60000 Max 4990
On peut deacutecider de recoder les variables low race smoke
ui et ht en facteurs
gt yesno lt- c(NoYes)
gt ethn lt- c(WhiteBlackOther)
gt birthwt lt- within(birthwt
+ low lt- factor(low labels=yesno)
+ race lt- factor(race labels=ethn)
+ smoke lt- factor(smoke labels=yesno)
+ ui lt- factor(ui labels=yesno)
+ ht lt- factor(ht labels=yesno)
+ )
Pour les tableaux croiseacutes on peut utiliser table ou xtabs
(parfois plus commode car on peut utiliser des notations
par formule agrave partir du dataframe)
gt xtabs(~ low + race data=birthwt)
race
low White Black Other
No 73 15 42
Yes 23 11 25
gt with(birthwt table(low smoke))
smoke
low No Yes
No 86 44
Yes 29 30
On peut eacutegalement profiter des commandes tregraves pratiques
dans le package Hmisc1 par exemple la commande sum-
maryformula qui permet deffectuer des reacutesumeacutes de vari-
ables quantitative ou qualitative conditionnellement aux
niveaux dun facteur
Surtout ne pas oublier de lire laide en ligne
help(summaryformula)
gt library(Hmisc)
gt summary(low ~ race + smoke + ui + ht + age
+ data=birthwt method=reverse)
1C Alzola and F Harrell An Introduction to S and The Hmisc and Design Libraries
2006 URL httpbiostatmcvanderbilteduwikiMainRS
Descriptive Statistics by low
+------------+--------------+--------------+
| |No |Yes |
| |(N=130) |(N=59) |
+------------+--------------+--------------+
|race White| 56 (73) | 39 (23) |
+------------+--------------+--------------+
| Black | 12 (15) | 19 (11) |
+------------+--------------+--------------+
| Other | 32 (42) | 42 (25) |
+------------+--------------+--------------+
|smoke Yes | 34 (44) | 51 (30) |
+------------+--------------+--------------+
|ui Yes | 11 ( 14) | 24 ( 14) |
+------------+--------------+--------------+
|ht Yes | 4 ( 5) | 12 ( 7) |
+------------+--------------+--------------+
|age |190230280|195220250|
+------------+--------------+--------------+
Analyse exploratoire
11 Le fichier eacutetant au format csv on le charge avec readcsv
gt WD lt- pub agrave adapter
gt cereal lt- readcsv(paste(WD cerealcsv sep=))
Plusieurs solutions pour afficher les distributions his-
togrammes matrice de dispersion La derniegravere agrave lavantage
de combiner les deux approches Consideacuterons par exemple
les 6 premiegraveres variables numeacuteriques
gt p lt- splom(~ cereal[38] type=c(psmooth)
+ diagpanel=panelhistsplom xlab=
+ pscale=0 varnamecex=07 cex=8
+ col=grey60)
size
calories
Xfat
fat
Na
K
Notons que lon a supprimeacute laffichage des uniteacutes (pscale=0)
par souci de lisibiliteacute et parce que dans une optique rdquoex-
ploratoire visuellerdquo on nen a pas vraiment besoin Lorsque
le nombre dobservations est beaucoup plus important on
peut avantageusement remplacer le nuage de points par un
nuage en densiteacute en ajoutant panel=panelhexbinplot (apregraves
avoir chargeacute le package hexbin) Enfin on peut avoir une ap-
proche plus interactive et eacutetudier les distributions bivarieacutees
3
une agrave une Le code suivant permet de seacutelectionner interac-
tivement les points et afficher le nom de la compagnie2
gt xyplot(cost ~ calories cereal)
gt while (isnull(fp lt- trellisfocus()))
+ if (fp$col gt 0 amp fp$row gt 0)
+ panelidentify(labels=cereal$company)
+
12 On sinteacuteresse aux donneacutees agrave linclusion (time=1) donc dans
un premier temps il est inteacuteressant de reacuteduire le tableau agrave
ces seules donneacutees Voir lexercice 9 pour le chargement
du fichier et le recodage de time en facteur Notons que la
commande summary ne renvoit pas leacutecart-type Elle reste
toutefois utile pour reacutesumer les distributions univarieacutees
veacuterifier leur symeacutetrie et la preacutesence dobservations atyp-
iques
gt anorexscorest1 lt- subset(anorex time==1
+ select=weightbody)
gt sapply(anorexscorest1
+ function(x) c(mean=mean(x) sd=sd(x)))
weight mens fast binge
mean 16545455 1218182 14363636 3254545
sd 09854155 0533712 08336363 1294120
vomit purge hyper fami
mean 36727273 2763636 19636364 18727273
sd 09438798 1477782 06074731 08400738
eman frie school satt
mean 17818182 24727273 20181818 21454545
sd 06580248 08131909 07325983 07556744
sbeh mood preo body
mean 1818182 22727273 14363636 1890909
sd 0434226 07806584 05362295 0785817
13 Ici lideacutee est de construire la matrice de correacutelation des 16
items en utilisant le coefficient de Spearman Cette matrice
119883 est symeacutetrique cest-dire que119883119894119895 = 119883119895119894 et sa diagonale necontient que des 1 (puisquil sagit de la correacutelation de litem
avec lui-mecircme) Si lon veut filtrer les coefficients il faut
consideacuterer soit la partie infeacuterieure soit la partie supeacuterieure
(hors diagonale)
gt correlt1 lt- cor(anorexscorest1 method=spearman)
gt correlt1[uppertri(correlt1 diag=TRUE)] lt- NA
Agrave partir de lagrave une instruction comme apply(correlt1 1 func-
tion(x) x gt 03) indiquerait preacuteciseacutement quelles paires de vari-
ables ont un coefficient de correacutelation gt 11137881113791 Pour extrairedirectement les paires de variables qui nous inteacuteressent on
peut faire
gt names(unlist(apply(correlt1 1
+ function(x) which(abs(x) gt 3))))
[1] fastweight bingeweight bingemens
[4] bingefast purgeweight purgemens
[7] purgebinge purgevomit famibinge
[10] famivomit famipurge emanfami
[13] frieeman sattschool sbehsatt
[16] moodeman preofast bodypreo
mais ce nest pas tregraves eacuteleacutegant Une autre solution est de
convertir la matrice de correacutelation en dataframe
gt library(reshape)
gt subset(melt(correlt1) abs(value) gt 3)
2D Sarkar Lattice Multivariate Data Visualization with R Springer 2008 p 219
X1 X2 value
3 fast weight 03340665
4 binge weight -05726599
6 purge weight -04260873
20 binge mens -03201155
22 purge mens -04378354
36 binge fast -03103808
47 preo fast 03106862
54 purge binge 07043708
56 fami binge -03792735
70 purge vomit 04230144
72 fami vomit -03332859
88 fami purge -04151892
121 eman fami 03269283
138 frie eman 04245090
142 mood eman -03887455
172 satt school 07405494
189 sbeh satt 04015018
240 body preo 04195842
14 Il faut dans un premier temps calculer les scores moyens par
peacuteriode Il existe plusieurs faccedilons daborder le problegraveme
proceacuteder colonne par colonne et utiliser tapply pour cal-
culer les scores moyens conditionnellement agrave time passer
du format rdquowiderdquo au format rdquolongrdquo (en utilisant le package
reshape)
Pour la premiegravere approache voici une solution possible
gt items lt- 116
gt res lt- matrix(nr=16 nc=4
+ dimnames=list(colnames(anorex[items])
+ levels(anorex$time)))
gt for (i in items)
+ res[i] lt- tapply(anorex[i] anorex[time] mean)
Dans ce cas on effectue les opeacuterations item par item soit
16 opeacuterations au total On pourrait eacutegalement calculer les
moyennes pour chaque niveau du facteur time soit 4 opeacutera-
tions seulement
gt for (i in levels(anorex$time))
+ res[i] lt- apply(subset(anorex time==i items)
+ 2 mean)
Quant agrave la second approche on utilise une combinaison de
melt et cast pour passer du format rdquowiderdquo au format rdquolongrdquo
et revenir avec les donneacutees moyenneacutees au format rdquowiderdquo
gt anorexscores lt- melt(anorex[117] idvars=17)
gt res lt- with(anorexscores
+ aggregate(value
+ list(item=variable time=time)
+ mean))
gt cast(res item ~ time)
item 1 2 3 4
1 weight 1654545 2641509 2759259 3036364
2 mens 1218182 1773585 2222222 2381818
3 fast 1436364 2660377 2833333 2963636
4 binge 3254545 3584906 3500000 3600000
5 vomit 3672727 3735849 3777778 3709091
6 purge 2763636 3452830 3444444 3581818
7 hyper 1963636 2339623 2537037 2709091
8 fami 1872727 2301887 2500000 2709091
9 eman 1781818 2283019 2462963 2672727
10 frie 2472727 2509434 2537037 2600000
4
11 school 2018182 2188679 2462963 2454545
12 satt 2145455 2245283 2314815 2400000
13 sbeh 1818182 2433962 2351852 2490909
14 mood 2272727 2528302 2814815 2727273
15 preo 1436364 2188679 2333333 2400000
16 body 1890909 2188679 2407407 2363636
En fait cette derniegravere approche est inteacuteressante lorsque lon
utilise lattice car elle permet de travailler directement agrave par-
tir de formule Quoi quil en soit il est toujours plus inteacuteres-
sant davoir des donneacutees au format rdquolongrdquo pour faire des
graphiques avec lattice Avec les deux premiegraveres solutions
on peut convertir la matrice res en dataframe en tapant
asdataframe(astable(res))
gt p lt- xyplot(value ~ time data=anorexscores
+ groups=variable type=a
+ ylab=Score moyen
+ autokey=list(space=right
+ lines=TRUE points=FALSE))
time
Sco
re m
oyen
10
15
20
25
30
35
40
1 2 3 4
weightmensfastbingevomitpurgehyperfamiemanfrieschoolsattsbehmoodpreobody
15 Voir lexercice 8 pour le chargement des donneacutees On a tou-
jours deux options proceacuteder variable par variable en util-
isant table ou utiliser des fonctions speacutecifiques (reshape ou
Hmisc)
gt adlbin lt- subset(adl select=c(group diabeticpsd))
gt library(Hmisc)
gt summary(group ~ data=adlbin method=reverse)
Descriptive Statistics by group
+--------------+---------+----------+
| |Control |Treatment |
| |(N=46) |(N=54) |
+--------------+---------+----------+
|diabetic Yes| 17 ( 8)| 13 ( 7) |
+--------------+---------+----------+
|hypertns Yes| 28 (13)| 37 (20) |
+--------------+---------+----------+
|afib Yes | 7 ( 3)| 2 ( 1) |
+--------------+---------+----------+
|priorstr Yes| 0 ( 0)| 2 ( 1) |
+--------------+---------+----------+
|smoker Yes | 2 ( 1)| 0 ( 0) |
+--------------+---------+----------+
|psd Yes | 33 (15)| 35 (19) |
+--------------+---------+----------+
Lavantage de cette approche est que lon peut utiliser plot
sur le reacutesultat de la commande ci-dessus pour obtenir un
graphique de type dotplot comme illustreacute ci-dessous
gt adlnum lt- subset(adl select=c(group travelhousekpg))
gt plot(summary(group ~ data=adlnum method=reverse))
Proportion
00 02 04 06 08 10
Same as before illness Gets out if someone else drives
Gets out in wheelchair Home or hospital bound
Bedminusridden
Plans and prepares meals Some cooking but less than normal
Gets food out if prepared by other Does nothing for meals
Never did any
As before Does at least 12 usual
Occasional dusting of small jobs No longer keeps house
Never did any
travel
cooking
housekpg
Proportions Stratified by group
16 Voir lexercice 11 pour le chargement des donneacutees On
procegravede dans un premier au recodage des compagnies
gt company2 lt- factor(cereal$company)
gt levels(company2)[c(248)] lt- other
On pourrait remplacer la derniegravere instruction par
gt levels(company2)[(levels(company2) in
+ c(g millskellogs))] lt- other
qui paraicirct plus compliqueacutee mais qui preacutesente lavantage de
ne pas avoir agrave se soucier du nom des variables agrave regrouper
Ensuite le graphique est assez simple agrave reacutealiser
gt p lt- parallel(~ cereal[38] groups=company2
+ horizontalaxis=FALSE autokey=TRUE)
Min
Max
size calories Xfat fat Na K
g millsotherkellogs
Agrave la lecture de ce graphique il apparaicirct clairement que les
deux marques g mills et kellogs diffegraverent systeacutematiquement
dans la teneur en graisses (staureacutees ou non) et contraire-
ment aux autres marques celles-ci ont des teneurs en Na
supeacuterieures aux autres marques
5
17 On part avec les donneacutees preacute-traiteacutees agrave lexercice 14 les
donneacutees aggreacutegeacutees par temps se trouve dans la variable res
gt p lt- dotplot(reorder(item x min) ~ x data=res
+ group=time autokey=list(column=2)
+ xlab=Score moyen aspect=6)
Score moyen
mensfast
preoweightemansbehfami
bodyhyper
schoolsatt
moodfrie
purgebingevomit
15 20 25 30 35
12
34
On peut choisir de trier les scores par nimporte quelle fonc-
tion Ici on a choisi le score minimum qui est apparemment
toujours observeacute agrave linclusion
18 Consideacuterant que les donneacutees sont deacutejagrave chargeacutees sous R (ex-
ercice 8) pour afficher la distribution des effectifs on utilise
type=count autrement on a par deacutefaut des freacutequences rel-
atives
gt p lt- histogram(~ age | group data=adl
+ type=count aspect=1)
age
Cou
nt
0
5
10
15
20
25
65 70 75 80 85 90
Control
65 70 75 80 85 90
Treatment
Notons quil est souvent avantageux de remplacer les his-
togrammes par des densiteacutes (voir densityplot)
Pour la fonction de reacutepartition
gt p lt- qqmath(~ age data=adl group=group
+ distribution=qunif aspect=5
+ autokey=list(x=05 y=95))
qunif
age
65
70
75
80
85
90
00 02 04 06 08 10
ControlTreatment
Pour les QQ plots
gt p lt- qqmath(~ age | group data=adl aspect=1
+ prepanel=prepanelqqmathline
+ panel=function(x )
+ panelqqmathline(x )
+ panelqqmath(x )
+ )
qnorm
age
65
70
75
80
85
90
minus2 minus1 0 1 2
Control
minus2 minus1 0 1 2
Treatment
On notera que par deacutefault lattice propose un arrangement
des sous-figures (rdquopanelsrdquo) utilisant des axes verticaux com-
muns Cela fait souvent sens mais on peut sen affranchir en
controcirclant largument scale= comme dans lexemple suiv-
ant
gt update(p scale=list(relation=free))
19 Ici on peut envisager deux solutions la premiegravere consiste agrave
afficher en parallegravele les distributions avant et apregraves traite-
ment pour chaque groupe de traitement La seconde con-
siste agrave montrer plus explicitement la covariation des scores
au niveau individuel et elle est plus avantageurse pour deacute-
tecter des patterns dassociation speacutecifiques ou des indi-
vidus atypiques
gt data(anorexia package=MASS)
gt p lt- bwplot(value22 ~ variable | Treat
+ data=melt(anorexia) aspect=12
+ layout=c(31) ylab=Weight (kg))
Wei
ght (
kg)
35
40
45
Prewt Postwt
CBT
Prewt Postwt
Cont
Prewt Postwt
FT
Voici la seconde solution qui utilise simplement un dia-
gramme de dispersion auquel on ajoute la rdquodroite iden-
titeacuterdquo (119910 = 119909) pour faciliter la lecture les points au dessusde celle-ci deacutenotent des patients dont le poids a augmenteacute
apregraves traitement
gt anorexia lt- transform(anorexia Prewt=Prewt22
+ Postwt=Postwt22)
gt p lt- xyplot(Postwt ~ Prewt | Treat data=anorexia
+ layout=c(31) aspect=iso)
gt p lt- update(p
+ panel=function()
+ panelxyplot()
+ panelabline(0 1 col=lightgrey)
+ )
6
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBT
15 16 17 18 19
Cont
15 16 17 18 19
FT
On calcule les scores de diffeacuterence assez simplement
comme suit
gt anorexia$andiff lt- with(anorexia Postwt-Prewt)
et on les reacutesume aussi simplement
gt with(anorexia tapply(andiff Treat summary
+ digits=2))
$CBT
Min 1st Qu Median Mean 3rd Qu Max
-190 -014 029 062 081 430
$Cont
Min 1st Qu Median Mean 3rd Qu Max
-2500 -1400 -0072 -0093 0740 3300
$FT
Min 1st Qu Median Mean 3rd Qu Max
-110 081 190 150 240 440
20 Ici il sagit globalement de la seconde option de visualisa-
tion eacutevoqueacutee agrave lexercice preacuteceacutedent mais en superposant les
graphiques dans la mecircme figure soit
gt p lt- xyplot(Postwt ~ Prewt data=anorexia
+ group=Treat span=8
+ type=c(pgsmooth)
+ autokey=list(space=right points=TRUE
+ lines=TRUE))
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Le paramegravetre span permet de controcircler le degreacute de lissage
des courbes rdquoloessrdquo
En utilisant des droites de reacutegression soit en supposant
lineacuteariteacute de la relation fonctionnelle entre les deux seacuteries
de mesure (typiquement dans le cadre dune analyse de co-
variance) on a les reacutesultats suivants
gt p lt- update(p type=c(pgr) aspect=5)
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Mesures et tests dassociation
21 Puisque les mesures sont collecteacutees sur les 10 mecircmes sujets
le test approprieacute est un test pour donneacutees apparieacutees
gt with(sleep tapply(extra group mean))
1 2
075 233
gt ttest(extra ~ group data=sleep paired=TRUE)
Paired t-test
data extra by group
t = -40621 df = 9 p-value = 0002833
alternative hypothesis true difference in means is not equal to 0
95 percent confidence interval
-24598858 -07001142
sample estimates
mean of the differences
-158
Le reacutesultat du test indique quil y a bien une diffeacuterence sig-
nificative (119901 = 1113788111378811137881113791) en faveur du deuxiegraveme traitement(augmentation de une heure et demie de sommeil environ)
Si les groupes eacutetaient consideacutereacutes comme indeacutependants (soit
20 sujets au total) on obtient une p-valeur gt 005 dougrave
limportance de prendre en consideacuteration lappariement
lorsquil est preacutesent
gt ttest(extra ~ group data=sleep)$pvalue
[1] 007939414
22 Lideacutee geacuteneacuterale est destimer la preacutecision dun estimateur ici
une moyenne de diffeacuterences en se servant de leacutechantillon
disponible par une meacutethode que lon appelle le bootstrap
gt di lt- with(sleep abs(diff(tapply(extra
+ group mean))))
gt sleep2 lt- with(sleep cbind(extra[group==1]
+ extra[group==2]))
gt B lt- 499
gt res lt- numeric(B)
gt for (i in 1B)
+ res[i] lt- mean(apply(sleep2[sample(10 rep=TRUE)]
+ 1 diff))
gt quantile(res c(025 975))
25 975
10090 23765
Cou
nt
0
20
40
60
80
100
10 15 20 25
7
On peut veacuterifier que lon obtient sensiblement les mecircmes
reacutesultats en utilisant les fonctions R deacutedieacutees
gt library(boot)
gt d lt- function(d x) mean(apply(d[x] 1 diff))
gt bootci(boot(sleep2 d R=499) type=perc)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 499 bootstrap replicates
CALL
bootci(bootout = boot(sleep2 d R = 499) type = perc)
Intervals
Level Percentile
95 ( 0985 2450 )
Calculations and Intervals on Original Scale
23 Dans un premier temps on filtre les donneacutees qui nous in-
teacuteressent agrave savoir mood agrave 1199051113789 et 1199051113792 On a eacutegalement besoinde lidentifiant patient pour sassurer du bon appariement
des scores
gt anorex0 lt- subset(anorex time in c(14) amp
+ diag==Anorexia Nervosa
+ select=c(numbertimemood))
gt all(table(anorex0$number)==2)
[1] TRUE
gt xtabs(~ time + mood data=anorex0)
mood
time 1 2 3
1 5 6 14
2 0 0 0
3 0 0 0
4 1 2 22
gt wilcoxtest(mood ~ time data=anorex0 paired=TRUE
+ exact=FALSE)
Wilcoxon signed rank test with continuity
correction
data mood by time
V = 9 p-value = 001628
alternative hypothesis true location shift is not equal to 0
Le reacutesultat suggegravere que les scores ont tendance agrave eacutevoluer
dans le sens de valeurs plus eacuteleveacutees entre linclusion et
la fin de leacutetude Ceci eacutetant en regardant les don-
neacutees brutes il apparaicirct clairement que les scores se
concentrent autour de 3 agrave 1199051113792 (88 des observations)
mood
time
1
4
1 2 3
24 Encore une fois on seacutelectionne dans un premier temps les
donneacutees qui nous inteacuteressent
gt anorex1 lt- subset(anorex time==1
+ select=c(weightbingepurge))
gt round(resc lt- cor(anorex1 method=spearman) 3)
weight binge vomit purge
weight 1000 -0573 -0120 -0426
binge -0573 1000 0170 0704
vomit -0120 0170 1000 0423
purge -0426 0704 0423 1000
Ici il existe plusieurs faccedilons de proceacuteder pour tester les cor-
reacutelations des variables prises deux agrave deux (on rappelle quil
y a ∁119896119899 =1113792
1113790(1113792minus1113790)= 1113794 maniegraveres de combiner deux eacuteleacutements
pris parmi n) En voici une selon laquelle on seacutelectionne les
colonnes de anorex1 agrave tester agrave partir dun tableau reacutesumant
les combinaisons possibles
gt cb lt- combn(4 2)
gt resp lt- numeric(ncol(cb))
gt for (i in 1ncol(cb))
+ resp[i] lt- cortest(anorex1[cb[1i]]
+ anorex1[cb[2i]]
+ method=spearman
+ exact=FALSE)$pvalue
Enfin voici une faccedilon possible pour regrouper les reacutesultats
dans un dataframe qui repose globalement sur ce qui a eacuteteacute
vu agrave lexercice 13
gt resc[uppertri(resc diag=TRUE)] lt- NA
gt resc lt- subset(melt(resc) isna(value))
gt resc$p lt- resp
gt resc$padj lt- ifelse(resc$p6 lt 1 resc$p6 1)
On pourra veacuterifier que la derniegravere colonne peut eacutegalement
ecirctre obtenue par la commande suivante
gt padjust(resc$p bonf)
Le reacutesultat ci-dessous indique que agrave lexception de
weightvomit et bingevomit toutes les associations testeacutees
sont significatives mecircme apregraves une correction (tregraves conser-
vative) pour les comparaisons multiples
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight -0573 000000491182 00000294709
3 vomit weight -0120 038353694716 10000000000
4 purge weight -0426 000118078100 00070846860
7 vomit binge 0170 021490582189 10000000000
8 purge binge 0704 000000000197 00000000118
12 purge vomit 0423 000129263518 00077558111
La mecircme proceacutedure peut ecirctre exploiteacutee pour refaire les cal-
culs agrave 1199051113792 il suffit de changer le filtre initial time==4 Onobtiendrait les reacutesultats suivants
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight 02910 003113317414 01867990449
3 vomit weight 00597 066515436534 10000000000
4 purge weight 02406 007684707553 04610824532
7 vomit binge 03536 000808064175 00484838505
8 purge binge 06880 000000000647 00000000388
12 purge vomit 04811 000020071774 00012043065
Cette fois-ci toutes les associations sont positives en par-
ticulier la correacutelation entre binge et weight est passeacutee de
-0573 agrave 0291 alors que celle entre purge et weight est passeacutee
de -0426 agrave 0241 et seraient juger non-significatives agrave 1199051113792selon le critegravere de Bonferroni Toutefois on a un peu tricheacute
car on a appliqueacute les corrections sur 6 comparaisons alors
quen reacutealiteacute on en a reacutealiseacute 12
25 Les donneacutees ont deacutejagrave eacuteteacute reacutesumeacutees visuellement sous forme
de boicirctes agrave moustaches agrave lexercice 19 Le modegravele dANOVA
est assez simple agrave reacutealiser
8
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
une agrave une Le code suivant permet de seacutelectionner interac-
tivement les points et afficher le nom de la compagnie2
gt xyplot(cost ~ calories cereal)
gt while (isnull(fp lt- trellisfocus()))
+ if (fp$col gt 0 amp fp$row gt 0)
+ panelidentify(labels=cereal$company)
+
12 On sinteacuteresse aux donneacutees agrave linclusion (time=1) donc dans
un premier temps il est inteacuteressant de reacuteduire le tableau agrave
ces seules donneacutees Voir lexercice 9 pour le chargement
du fichier et le recodage de time en facteur Notons que la
commande summary ne renvoit pas leacutecart-type Elle reste
toutefois utile pour reacutesumer les distributions univarieacutees
veacuterifier leur symeacutetrie et la preacutesence dobservations atyp-
iques
gt anorexscorest1 lt- subset(anorex time==1
+ select=weightbody)
gt sapply(anorexscorest1
+ function(x) c(mean=mean(x) sd=sd(x)))
weight mens fast binge
mean 16545455 1218182 14363636 3254545
sd 09854155 0533712 08336363 1294120
vomit purge hyper fami
mean 36727273 2763636 19636364 18727273
sd 09438798 1477782 06074731 08400738
eman frie school satt
mean 17818182 24727273 20181818 21454545
sd 06580248 08131909 07325983 07556744
sbeh mood preo body
mean 1818182 22727273 14363636 1890909
sd 0434226 07806584 05362295 0785817
13 Ici lideacutee est de construire la matrice de correacutelation des 16
items en utilisant le coefficient de Spearman Cette matrice
119883 est symeacutetrique cest-dire que119883119894119895 = 119883119895119894 et sa diagonale necontient que des 1 (puisquil sagit de la correacutelation de litem
avec lui-mecircme) Si lon veut filtrer les coefficients il faut
consideacuterer soit la partie infeacuterieure soit la partie supeacuterieure
(hors diagonale)
gt correlt1 lt- cor(anorexscorest1 method=spearman)
gt correlt1[uppertri(correlt1 diag=TRUE)] lt- NA
Agrave partir de lagrave une instruction comme apply(correlt1 1 func-
tion(x) x gt 03) indiquerait preacuteciseacutement quelles paires de vari-
ables ont un coefficient de correacutelation gt 11137881113791 Pour extrairedirectement les paires de variables qui nous inteacuteressent on
peut faire
gt names(unlist(apply(correlt1 1
+ function(x) which(abs(x) gt 3))))
[1] fastweight bingeweight bingemens
[4] bingefast purgeweight purgemens
[7] purgebinge purgevomit famibinge
[10] famivomit famipurge emanfami
[13] frieeman sattschool sbehsatt
[16] moodeman preofast bodypreo
mais ce nest pas tregraves eacuteleacutegant Une autre solution est de
convertir la matrice de correacutelation en dataframe
gt library(reshape)
gt subset(melt(correlt1) abs(value) gt 3)
2D Sarkar Lattice Multivariate Data Visualization with R Springer 2008 p 219
X1 X2 value
3 fast weight 03340665
4 binge weight -05726599
6 purge weight -04260873
20 binge mens -03201155
22 purge mens -04378354
36 binge fast -03103808
47 preo fast 03106862
54 purge binge 07043708
56 fami binge -03792735
70 purge vomit 04230144
72 fami vomit -03332859
88 fami purge -04151892
121 eman fami 03269283
138 frie eman 04245090
142 mood eman -03887455
172 satt school 07405494
189 sbeh satt 04015018
240 body preo 04195842
14 Il faut dans un premier temps calculer les scores moyens par
peacuteriode Il existe plusieurs faccedilons daborder le problegraveme
proceacuteder colonne par colonne et utiliser tapply pour cal-
culer les scores moyens conditionnellement agrave time passer
du format rdquowiderdquo au format rdquolongrdquo (en utilisant le package
reshape)
Pour la premiegravere approache voici une solution possible
gt items lt- 116
gt res lt- matrix(nr=16 nc=4
+ dimnames=list(colnames(anorex[items])
+ levels(anorex$time)))
gt for (i in items)
+ res[i] lt- tapply(anorex[i] anorex[time] mean)
Dans ce cas on effectue les opeacuterations item par item soit
16 opeacuterations au total On pourrait eacutegalement calculer les
moyennes pour chaque niveau du facteur time soit 4 opeacutera-
tions seulement
gt for (i in levels(anorex$time))
+ res[i] lt- apply(subset(anorex time==i items)
+ 2 mean)
Quant agrave la second approche on utilise une combinaison de
melt et cast pour passer du format rdquowiderdquo au format rdquolongrdquo
et revenir avec les donneacutees moyenneacutees au format rdquowiderdquo
gt anorexscores lt- melt(anorex[117] idvars=17)
gt res lt- with(anorexscores
+ aggregate(value
+ list(item=variable time=time)
+ mean))
gt cast(res item ~ time)
item 1 2 3 4
1 weight 1654545 2641509 2759259 3036364
2 mens 1218182 1773585 2222222 2381818
3 fast 1436364 2660377 2833333 2963636
4 binge 3254545 3584906 3500000 3600000
5 vomit 3672727 3735849 3777778 3709091
6 purge 2763636 3452830 3444444 3581818
7 hyper 1963636 2339623 2537037 2709091
8 fami 1872727 2301887 2500000 2709091
9 eman 1781818 2283019 2462963 2672727
10 frie 2472727 2509434 2537037 2600000
4
11 school 2018182 2188679 2462963 2454545
12 satt 2145455 2245283 2314815 2400000
13 sbeh 1818182 2433962 2351852 2490909
14 mood 2272727 2528302 2814815 2727273
15 preo 1436364 2188679 2333333 2400000
16 body 1890909 2188679 2407407 2363636
En fait cette derniegravere approche est inteacuteressante lorsque lon
utilise lattice car elle permet de travailler directement agrave par-
tir de formule Quoi quil en soit il est toujours plus inteacuteres-
sant davoir des donneacutees au format rdquolongrdquo pour faire des
graphiques avec lattice Avec les deux premiegraveres solutions
on peut convertir la matrice res en dataframe en tapant
asdataframe(astable(res))
gt p lt- xyplot(value ~ time data=anorexscores
+ groups=variable type=a
+ ylab=Score moyen
+ autokey=list(space=right
+ lines=TRUE points=FALSE))
time
Sco
re m
oyen
10
15
20
25
30
35
40
1 2 3 4
weightmensfastbingevomitpurgehyperfamiemanfrieschoolsattsbehmoodpreobody
15 Voir lexercice 8 pour le chargement des donneacutees On a tou-
jours deux options proceacuteder variable par variable en util-
isant table ou utiliser des fonctions speacutecifiques (reshape ou
Hmisc)
gt adlbin lt- subset(adl select=c(group diabeticpsd))
gt library(Hmisc)
gt summary(group ~ data=adlbin method=reverse)
Descriptive Statistics by group
+--------------+---------+----------+
| |Control |Treatment |
| |(N=46) |(N=54) |
+--------------+---------+----------+
|diabetic Yes| 17 ( 8)| 13 ( 7) |
+--------------+---------+----------+
|hypertns Yes| 28 (13)| 37 (20) |
+--------------+---------+----------+
|afib Yes | 7 ( 3)| 2 ( 1) |
+--------------+---------+----------+
|priorstr Yes| 0 ( 0)| 2 ( 1) |
+--------------+---------+----------+
|smoker Yes | 2 ( 1)| 0 ( 0) |
+--------------+---------+----------+
|psd Yes | 33 (15)| 35 (19) |
+--------------+---------+----------+
Lavantage de cette approche est que lon peut utiliser plot
sur le reacutesultat de la commande ci-dessus pour obtenir un
graphique de type dotplot comme illustreacute ci-dessous
gt adlnum lt- subset(adl select=c(group travelhousekpg))
gt plot(summary(group ~ data=adlnum method=reverse))
Proportion
00 02 04 06 08 10
Same as before illness Gets out if someone else drives
Gets out in wheelchair Home or hospital bound
Bedminusridden
Plans and prepares meals Some cooking but less than normal
Gets food out if prepared by other Does nothing for meals
Never did any
As before Does at least 12 usual
Occasional dusting of small jobs No longer keeps house
Never did any
travel
cooking
housekpg
Proportions Stratified by group
16 Voir lexercice 11 pour le chargement des donneacutees On
procegravede dans un premier au recodage des compagnies
gt company2 lt- factor(cereal$company)
gt levels(company2)[c(248)] lt- other
On pourrait remplacer la derniegravere instruction par
gt levels(company2)[(levels(company2) in
+ c(g millskellogs))] lt- other
qui paraicirct plus compliqueacutee mais qui preacutesente lavantage de
ne pas avoir agrave se soucier du nom des variables agrave regrouper
Ensuite le graphique est assez simple agrave reacutealiser
gt p lt- parallel(~ cereal[38] groups=company2
+ horizontalaxis=FALSE autokey=TRUE)
Min
Max
size calories Xfat fat Na K
g millsotherkellogs
Agrave la lecture de ce graphique il apparaicirct clairement que les
deux marques g mills et kellogs diffegraverent systeacutematiquement
dans la teneur en graisses (staureacutees ou non) et contraire-
ment aux autres marques celles-ci ont des teneurs en Na
supeacuterieures aux autres marques
5
17 On part avec les donneacutees preacute-traiteacutees agrave lexercice 14 les
donneacutees aggreacutegeacutees par temps se trouve dans la variable res
gt p lt- dotplot(reorder(item x min) ~ x data=res
+ group=time autokey=list(column=2)
+ xlab=Score moyen aspect=6)
Score moyen
mensfast
preoweightemansbehfami
bodyhyper
schoolsatt
moodfrie
purgebingevomit
15 20 25 30 35
12
34
On peut choisir de trier les scores par nimporte quelle fonc-
tion Ici on a choisi le score minimum qui est apparemment
toujours observeacute agrave linclusion
18 Consideacuterant que les donneacutees sont deacutejagrave chargeacutees sous R (ex-
ercice 8) pour afficher la distribution des effectifs on utilise
type=count autrement on a par deacutefaut des freacutequences rel-
atives
gt p lt- histogram(~ age | group data=adl
+ type=count aspect=1)
age
Cou
nt
0
5
10
15
20
25
65 70 75 80 85 90
Control
65 70 75 80 85 90
Treatment
Notons quil est souvent avantageux de remplacer les his-
togrammes par des densiteacutes (voir densityplot)
Pour la fonction de reacutepartition
gt p lt- qqmath(~ age data=adl group=group
+ distribution=qunif aspect=5
+ autokey=list(x=05 y=95))
qunif
age
65
70
75
80
85
90
00 02 04 06 08 10
ControlTreatment
Pour les QQ plots
gt p lt- qqmath(~ age | group data=adl aspect=1
+ prepanel=prepanelqqmathline
+ panel=function(x )
+ panelqqmathline(x )
+ panelqqmath(x )
+ )
qnorm
age
65
70
75
80
85
90
minus2 minus1 0 1 2
Control
minus2 minus1 0 1 2
Treatment
On notera que par deacutefault lattice propose un arrangement
des sous-figures (rdquopanelsrdquo) utilisant des axes verticaux com-
muns Cela fait souvent sens mais on peut sen affranchir en
controcirclant largument scale= comme dans lexemple suiv-
ant
gt update(p scale=list(relation=free))
19 Ici on peut envisager deux solutions la premiegravere consiste agrave
afficher en parallegravele les distributions avant et apregraves traite-
ment pour chaque groupe de traitement La seconde con-
siste agrave montrer plus explicitement la covariation des scores
au niveau individuel et elle est plus avantageurse pour deacute-
tecter des patterns dassociation speacutecifiques ou des indi-
vidus atypiques
gt data(anorexia package=MASS)
gt p lt- bwplot(value22 ~ variable | Treat
+ data=melt(anorexia) aspect=12
+ layout=c(31) ylab=Weight (kg))
Wei
ght (
kg)
35
40
45
Prewt Postwt
CBT
Prewt Postwt
Cont
Prewt Postwt
FT
Voici la seconde solution qui utilise simplement un dia-
gramme de dispersion auquel on ajoute la rdquodroite iden-
titeacuterdquo (119910 = 119909) pour faciliter la lecture les points au dessusde celle-ci deacutenotent des patients dont le poids a augmenteacute
apregraves traitement
gt anorexia lt- transform(anorexia Prewt=Prewt22
+ Postwt=Postwt22)
gt p lt- xyplot(Postwt ~ Prewt | Treat data=anorexia
+ layout=c(31) aspect=iso)
gt p lt- update(p
+ panel=function()
+ panelxyplot()
+ panelabline(0 1 col=lightgrey)
+ )
6
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBT
15 16 17 18 19
Cont
15 16 17 18 19
FT
On calcule les scores de diffeacuterence assez simplement
comme suit
gt anorexia$andiff lt- with(anorexia Postwt-Prewt)
et on les reacutesume aussi simplement
gt with(anorexia tapply(andiff Treat summary
+ digits=2))
$CBT
Min 1st Qu Median Mean 3rd Qu Max
-190 -014 029 062 081 430
$Cont
Min 1st Qu Median Mean 3rd Qu Max
-2500 -1400 -0072 -0093 0740 3300
$FT
Min 1st Qu Median Mean 3rd Qu Max
-110 081 190 150 240 440
20 Ici il sagit globalement de la seconde option de visualisa-
tion eacutevoqueacutee agrave lexercice preacuteceacutedent mais en superposant les
graphiques dans la mecircme figure soit
gt p lt- xyplot(Postwt ~ Prewt data=anorexia
+ group=Treat span=8
+ type=c(pgsmooth)
+ autokey=list(space=right points=TRUE
+ lines=TRUE))
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Le paramegravetre span permet de controcircler le degreacute de lissage
des courbes rdquoloessrdquo
En utilisant des droites de reacutegression soit en supposant
lineacuteariteacute de la relation fonctionnelle entre les deux seacuteries
de mesure (typiquement dans le cadre dune analyse de co-
variance) on a les reacutesultats suivants
gt p lt- update(p type=c(pgr) aspect=5)
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Mesures et tests dassociation
21 Puisque les mesures sont collecteacutees sur les 10 mecircmes sujets
le test approprieacute est un test pour donneacutees apparieacutees
gt with(sleep tapply(extra group mean))
1 2
075 233
gt ttest(extra ~ group data=sleep paired=TRUE)
Paired t-test
data extra by group
t = -40621 df = 9 p-value = 0002833
alternative hypothesis true difference in means is not equal to 0
95 percent confidence interval
-24598858 -07001142
sample estimates
mean of the differences
-158
Le reacutesultat du test indique quil y a bien une diffeacuterence sig-
nificative (119901 = 1113788111378811137881113791) en faveur du deuxiegraveme traitement(augmentation de une heure et demie de sommeil environ)
Si les groupes eacutetaient consideacutereacutes comme indeacutependants (soit
20 sujets au total) on obtient une p-valeur gt 005 dougrave
limportance de prendre en consideacuteration lappariement
lorsquil est preacutesent
gt ttest(extra ~ group data=sleep)$pvalue
[1] 007939414
22 Lideacutee geacuteneacuterale est destimer la preacutecision dun estimateur ici
une moyenne de diffeacuterences en se servant de leacutechantillon
disponible par une meacutethode que lon appelle le bootstrap
gt di lt- with(sleep abs(diff(tapply(extra
+ group mean))))
gt sleep2 lt- with(sleep cbind(extra[group==1]
+ extra[group==2]))
gt B lt- 499
gt res lt- numeric(B)
gt for (i in 1B)
+ res[i] lt- mean(apply(sleep2[sample(10 rep=TRUE)]
+ 1 diff))
gt quantile(res c(025 975))
25 975
10090 23765
Cou
nt
0
20
40
60
80
100
10 15 20 25
7
On peut veacuterifier que lon obtient sensiblement les mecircmes
reacutesultats en utilisant les fonctions R deacutedieacutees
gt library(boot)
gt d lt- function(d x) mean(apply(d[x] 1 diff))
gt bootci(boot(sleep2 d R=499) type=perc)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 499 bootstrap replicates
CALL
bootci(bootout = boot(sleep2 d R = 499) type = perc)
Intervals
Level Percentile
95 ( 0985 2450 )
Calculations and Intervals on Original Scale
23 Dans un premier temps on filtre les donneacutees qui nous in-
teacuteressent agrave savoir mood agrave 1199051113789 et 1199051113792 On a eacutegalement besoinde lidentifiant patient pour sassurer du bon appariement
des scores
gt anorex0 lt- subset(anorex time in c(14) amp
+ diag==Anorexia Nervosa
+ select=c(numbertimemood))
gt all(table(anorex0$number)==2)
[1] TRUE
gt xtabs(~ time + mood data=anorex0)
mood
time 1 2 3
1 5 6 14
2 0 0 0
3 0 0 0
4 1 2 22
gt wilcoxtest(mood ~ time data=anorex0 paired=TRUE
+ exact=FALSE)
Wilcoxon signed rank test with continuity
correction
data mood by time
V = 9 p-value = 001628
alternative hypothesis true location shift is not equal to 0
Le reacutesultat suggegravere que les scores ont tendance agrave eacutevoluer
dans le sens de valeurs plus eacuteleveacutees entre linclusion et
la fin de leacutetude Ceci eacutetant en regardant les don-
neacutees brutes il apparaicirct clairement que les scores se
concentrent autour de 3 agrave 1199051113792 (88 des observations)
mood
time
1
4
1 2 3
24 Encore une fois on seacutelectionne dans un premier temps les
donneacutees qui nous inteacuteressent
gt anorex1 lt- subset(anorex time==1
+ select=c(weightbingepurge))
gt round(resc lt- cor(anorex1 method=spearman) 3)
weight binge vomit purge
weight 1000 -0573 -0120 -0426
binge -0573 1000 0170 0704
vomit -0120 0170 1000 0423
purge -0426 0704 0423 1000
Ici il existe plusieurs faccedilons de proceacuteder pour tester les cor-
reacutelations des variables prises deux agrave deux (on rappelle quil
y a ∁119896119899 =1113792
1113790(1113792minus1113790)= 1113794 maniegraveres de combiner deux eacuteleacutements
pris parmi n) En voici une selon laquelle on seacutelectionne les
colonnes de anorex1 agrave tester agrave partir dun tableau reacutesumant
les combinaisons possibles
gt cb lt- combn(4 2)
gt resp lt- numeric(ncol(cb))
gt for (i in 1ncol(cb))
+ resp[i] lt- cortest(anorex1[cb[1i]]
+ anorex1[cb[2i]]
+ method=spearman
+ exact=FALSE)$pvalue
Enfin voici une faccedilon possible pour regrouper les reacutesultats
dans un dataframe qui repose globalement sur ce qui a eacuteteacute
vu agrave lexercice 13
gt resc[uppertri(resc diag=TRUE)] lt- NA
gt resc lt- subset(melt(resc) isna(value))
gt resc$p lt- resp
gt resc$padj lt- ifelse(resc$p6 lt 1 resc$p6 1)
On pourra veacuterifier que la derniegravere colonne peut eacutegalement
ecirctre obtenue par la commande suivante
gt padjust(resc$p bonf)
Le reacutesultat ci-dessous indique que agrave lexception de
weightvomit et bingevomit toutes les associations testeacutees
sont significatives mecircme apregraves une correction (tregraves conser-
vative) pour les comparaisons multiples
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight -0573 000000491182 00000294709
3 vomit weight -0120 038353694716 10000000000
4 purge weight -0426 000118078100 00070846860
7 vomit binge 0170 021490582189 10000000000
8 purge binge 0704 000000000197 00000000118
12 purge vomit 0423 000129263518 00077558111
La mecircme proceacutedure peut ecirctre exploiteacutee pour refaire les cal-
culs agrave 1199051113792 il suffit de changer le filtre initial time==4 Onobtiendrait les reacutesultats suivants
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight 02910 003113317414 01867990449
3 vomit weight 00597 066515436534 10000000000
4 purge weight 02406 007684707553 04610824532
7 vomit binge 03536 000808064175 00484838505
8 purge binge 06880 000000000647 00000000388
12 purge vomit 04811 000020071774 00012043065
Cette fois-ci toutes les associations sont positives en par-
ticulier la correacutelation entre binge et weight est passeacutee de
-0573 agrave 0291 alors que celle entre purge et weight est passeacutee
de -0426 agrave 0241 et seraient juger non-significatives agrave 1199051113792selon le critegravere de Bonferroni Toutefois on a un peu tricheacute
car on a appliqueacute les corrections sur 6 comparaisons alors
quen reacutealiteacute on en a reacutealiseacute 12
25 Les donneacutees ont deacutejagrave eacuteteacute reacutesumeacutees visuellement sous forme
de boicirctes agrave moustaches agrave lexercice 19 Le modegravele dANOVA
est assez simple agrave reacutealiser
8
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
11 school 2018182 2188679 2462963 2454545
12 satt 2145455 2245283 2314815 2400000
13 sbeh 1818182 2433962 2351852 2490909
14 mood 2272727 2528302 2814815 2727273
15 preo 1436364 2188679 2333333 2400000
16 body 1890909 2188679 2407407 2363636
En fait cette derniegravere approche est inteacuteressante lorsque lon
utilise lattice car elle permet de travailler directement agrave par-
tir de formule Quoi quil en soit il est toujours plus inteacuteres-
sant davoir des donneacutees au format rdquolongrdquo pour faire des
graphiques avec lattice Avec les deux premiegraveres solutions
on peut convertir la matrice res en dataframe en tapant
asdataframe(astable(res))
gt p lt- xyplot(value ~ time data=anorexscores
+ groups=variable type=a
+ ylab=Score moyen
+ autokey=list(space=right
+ lines=TRUE points=FALSE))
time
Sco
re m
oyen
10
15
20
25
30
35
40
1 2 3 4
weightmensfastbingevomitpurgehyperfamiemanfrieschoolsattsbehmoodpreobody
15 Voir lexercice 8 pour le chargement des donneacutees On a tou-
jours deux options proceacuteder variable par variable en util-
isant table ou utiliser des fonctions speacutecifiques (reshape ou
Hmisc)
gt adlbin lt- subset(adl select=c(group diabeticpsd))
gt library(Hmisc)
gt summary(group ~ data=adlbin method=reverse)
Descriptive Statistics by group
+--------------+---------+----------+
| |Control |Treatment |
| |(N=46) |(N=54) |
+--------------+---------+----------+
|diabetic Yes| 17 ( 8)| 13 ( 7) |
+--------------+---------+----------+
|hypertns Yes| 28 (13)| 37 (20) |
+--------------+---------+----------+
|afib Yes | 7 ( 3)| 2 ( 1) |
+--------------+---------+----------+
|priorstr Yes| 0 ( 0)| 2 ( 1) |
+--------------+---------+----------+
|smoker Yes | 2 ( 1)| 0 ( 0) |
+--------------+---------+----------+
|psd Yes | 33 (15)| 35 (19) |
+--------------+---------+----------+
Lavantage de cette approche est que lon peut utiliser plot
sur le reacutesultat de la commande ci-dessus pour obtenir un
graphique de type dotplot comme illustreacute ci-dessous
gt adlnum lt- subset(adl select=c(group travelhousekpg))
gt plot(summary(group ~ data=adlnum method=reverse))
Proportion
00 02 04 06 08 10
Same as before illness Gets out if someone else drives
Gets out in wheelchair Home or hospital bound
Bedminusridden
Plans and prepares meals Some cooking but less than normal
Gets food out if prepared by other Does nothing for meals
Never did any
As before Does at least 12 usual
Occasional dusting of small jobs No longer keeps house
Never did any
travel
cooking
housekpg
Proportions Stratified by group
16 Voir lexercice 11 pour le chargement des donneacutees On
procegravede dans un premier au recodage des compagnies
gt company2 lt- factor(cereal$company)
gt levels(company2)[c(248)] lt- other
On pourrait remplacer la derniegravere instruction par
gt levels(company2)[(levels(company2) in
+ c(g millskellogs))] lt- other
qui paraicirct plus compliqueacutee mais qui preacutesente lavantage de
ne pas avoir agrave se soucier du nom des variables agrave regrouper
Ensuite le graphique est assez simple agrave reacutealiser
gt p lt- parallel(~ cereal[38] groups=company2
+ horizontalaxis=FALSE autokey=TRUE)
Min
Max
size calories Xfat fat Na K
g millsotherkellogs
Agrave la lecture de ce graphique il apparaicirct clairement que les
deux marques g mills et kellogs diffegraverent systeacutematiquement
dans la teneur en graisses (staureacutees ou non) et contraire-
ment aux autres marques celles-ci ont des teneurs en Na
supeacuterieures aux autres marques
5
17 On part avec les donneacutees preacute-traiteacutees agrave lexercice 14 les
donneacutees aggreacutegeacutees par temps se trouve dans la variable res
gt p lt- dotplot(reorder(item x min) ~ x data=res
+ group=time autokey=list(column=2)
+ xlab=Score moyen aspect=6)
Score moyen
mensfast
preoweightemansbehfami
bodyhyper
schoolsatt
moodfrie
purgebingevomit
15 20 25 30 35
12
34
On peut choisir de trier les scores par nimporte quelle fonc-
tion Ici on a choisi le score minimum qui est apparemment
toujours observeacute agrave linclusion
18 Consideacuterant que les donneacutees sont deacutejagrave chargeacutees sous R (ex-
ercice 8) pour afficher la distribution des effectifs on utilise
type=count autrement on a par deacutefaut des freacutequences rel-
atives
gt p lt- histogram(~ age | group data=adl
+ type=count aspect=1)
age
Cou
nt
0
5
10
15
20
25
65 70 75 80 85 90
Control
65 70 75 80 85 90
Treatment
Notons quil est souvent avantageux de remplacer les his-
togrammes par des densiteacutes (voir densityplot)
Pour la fonction de reacutepartition
gt p lt- qqmath(~ age data=adl group=group
+ distribution=qunif aspect=5
+ autokey=list(x=05 y=95))
qunif
age
65
70
75
80
85
90
00 02 04 06 08 10
ControlTreatment
Pour les QQ plots
gt p lt- qqmath(~ age | group data=adl aspect=1
+ prepanel=prepanelqqmathline
+ panel=function(x )
+ panelqqmathline(x )
+ panelqqmath(x )
+ )
qnorm
age
65
70
75
80
85
90
minus2 minus1 0 1 2
Control
minus2 minus1 0 1 2
Treatment
On notera que par deacutefault lattice propose un arrangement
des sous-figures (rdquopanelsrdquo) utilisant des axes verticaux com-
muns Cela fait souvent sens mais on peut sen affranchir en
controcirclant largument scale= comme dans lexemple suiv-
ant
gt update(p scale=list(relation=free))
19 Ici on peut envisager deux solutions la premiegravere consiste agrave
afficher en parallegravele les distributions avant et apregraves traite-
ment pour chaque groupe de traitement La seconde con-
siste agrave montrer plus explicitement la covariation des scores
au niveau individuel et elle est plus avantageurse pour deacute-
tecter des patterns dassociation speacutecifiques ou des indi-
vidus atypiques
gt data(anorexia package=MASS)
gt p lt- bwplot(value22 ~ variable | Treat
+ data=melt(anorexia) aspect=12
+ layout=c(31) ylab=Weight (kg))
Wei
ght (
kg)
35
40
45
Prewt Postwt
CBT
Prewt Postwt
Cont
Prewt Postwt
FT
Voici la seconde solution qui utilise simplement un dia-
gramme de dispersion auquel on ajoute la rdquodroite iden-
titeacuterdquo (119910 = 119909) pour faciliter la lecture les points au dessusde celle-ci deacutenotent des patients dont le poids a augmenteacute
apregraves traitement
gt anorexia lt- transform(anorexia Prewt=Prewt22
+ Postwt=Postwt22)
gt p lt- xyplot(Postwt ~ Prewt | Treat data=anorexia
+ layout=c(31) aspect=iso)
gt p lt- update(p
+ panel=function()
+ panelxyplot()
+ panelabline(0 1 col=lightgrey)
+ )
6
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBT
15 16 17 18 19
Cont
15 16 17 18 19
FT
On calcule les scores de diffeacuterence assez simplement
comme suit
gt anorexia$andiff lt- with(anorexia Postwt-Prewt)
et on les reacutesume aussi simplement
gt with(anorexia tapply(andiff Treat summary
+ digits=2))
$CBT
Min 1st Qu Median Mean 3rd Qu Max
-190 -014 029 062 081 430
$Cont
Min 1st Qu Median Mean 3rd Qu Max
-2500 -1400 -0072 -0093 0740 3300
$FT
Min 1st Qu Median Mean 3rd Qu Max
-110 081 190 150 240 440
20 Ici il sagit globalement de la seconde option de visualisa-
tion eacutevoqueacutee agrave lexercice preacuteceacutedent mais en superposant les
graphiques dans la mecircme figure soit
gt p lt- xyplot(Postwt ~ Prewt data=anorexia
+ group=Treat span=8
+ type=c(pgsmooth)
+ autokey=list(space=right points=TRUE
+ lines=TRUE))
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Le paramegravetre span permet de controcircler le degreacute de lissage
des courbes rdquoloessrdquo
En utilisant des droites de reacutegression soit en supposant
lineacuteariteacute de la relation fonctionnelle entre les deux seacuteries
de mesure (typiquement dans le cadre dune analyse de co-
variance) on a les reacutesultats suivants
gt p lt- update(p type=c(pgr) aspect=5)
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Mesures et tests dassociation
21 Puisque les mesures sont collecteacutees sur les 10 mecircmes sujets
le test approprieacute est un test pour donneacutees apparieacutees
gt with(sleep tapply(extra group mean))
1 2
075 233
gt ttest(extra ~ group data=sleep paired=TRUE)
Paired t-test
data extra by group
t = -40621 df = 9 p-value = 0002833
alternative hypothesis true difference in means is not equal to 0
95 percent confidence interval
-24598858 -07001142
sample estimates
mean of the differences
-158
Le reacutesultat du test indique quil y a bien une diffeacuterence sig-
nificative (119901 = 1113788111378811137881113791) en faveur du deuxiegraveme traitement(augmentation de une heure et demie de sommeil environ)
Si les groupes eacutetaient consideacutereacutes comme indeacutependants (soit
20 sujets au total) on obtient une p-valeur gt 005 dougrave
limportance de prendre en consideacuteration lappariement
lorsquil est preacutesent
gt ttest(extra ~ group data=sleep)$pvalue
[1] 007939414
22 Lideacutee geacuteneacuterale est destimer la preacutecision dun estimateur ici
une moyenne de diffeacuterences en se servant de leacutechantillon
disponible par une meacutethode que lon appelle le bootstrap
gt di lt- with(sleep abs(diff(tapply(extra
+ group mean))))
gt sleep2 lt- with(sleep cbind(extra[group==1]
+ extra[group==2]))
gt B lt- 499
gt res lt- numeric(B)
gt for (i in 1B)
+ res[i] lt- mean(apply(sleep2[sample(10 rep=TRUE)]
+ 1 diff))
gt quantile(res c(025 975))
25 975
10090 23765
Cou
nt
0
20
40
60
80
100
10 15 20 25
7
On peut veacuterifier que lon obtient sensiblement les mecircmes
reacutesultats en utilisant les fonctions R deacutedieacutees
gt library(boot)
gt d lt- function(d x) mean(apply(d[x] 1 diff))
gt bootci(boot(sleep2 d R=499) type=perc)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 499 bootstrap replicates
CALL
bootci(bootout = boot(sleep2 d R = 499) type = perc)
Intervals
Level Percentile
95 ( 0985 2450 )
Calculations and Intervals on Original Scale
23 Dans un premier temps on filtre les donneacutees qui nous in-
teacuteressent agrave savoir mood agrave 1199051113789 et 1199051113792 On a eacutegalement besoinde lidentifiant patient pour sassurer du bon appariement
des scores
gt anorex0 lt- subset(anorex time in c(14) amp
+ diag==Anorexia Nervosa
+ select=c(numbertimemood))
gt all(table(anorex0$number)==2)
[1] TRUE
gt xtabs(~ time + mood data=anorex0)
mood
time 1 2 3
1 5 6 14
2 0 0 0
3 0 0 0
4 1 2 22
gt wilcoxtest(mood ~ time data=anorex0 paired=TRUE
+ exact=FALSE)
Wilcoxon signed rank test with continuity
correction
data mood by time
V = 9 p-value = 001628
alternative hypothesis true location shift is not equal to 0
Le reacutesultat suggegravere que les scores ont tendance agrave eacutevoluer
dans le sens de valeurs plus eacuteleveacutees entre linclusion et
la fin de leacutetude Ceci eacutetant en regardant les don-
neacutees brutes il apparaicirct clairement que les scores se
concentrent autour de 3 agrave 1199051113792 (88 des observations)
mood
time
1
4
1 2 3
24 Encore une fois on seacutelectionne dans un premier temps les
donneacutees qui nous inteacuteressent
gt anorex1 lt- subset(anorex time==1
+ select=c(weightbingepurge))
gt round(resc lt- cor(anorex1 method=spearman) 3)
weight binge vomit purge
weight 1000 -0573 -0120 -0426
binge -0573 1000 0170 0704
vomit -0120 0170 1000 0423
purge -0426 0704 0423 1000
Ici il existe plusieurs faccedilons de proceacuteder pour tester les cor-
reacutelations des variables prises deux agrave deux (on rappelle quil
y a ∁119896119899 =1113792
1113790(1113792minus1113790)= 1113794 maniegraveres de combiner deux eacuteleacutements
pris parmi n) En voici une selon laquelle on seacutelectionne les
colonnes de anorex1 agrave tester agrave partir dun tableau reacutesumant
les combinaisons possibles
gt cb lt- combn(4 2)
gt resp lt- numeric(ncol(cb))
gt for (i in 1ncol(cb))
+ resp[i] lt- cortest(anorex1[cb[1i]]
+ anorex1[cb[2i]]
+ method=spearman
+ exact=FALSE)$pvalue
Enfin voici une faccedilon possible pour regrouper les reacutesultats
dans un dataframe qui repose globalement sur ce qui a eacuteteacute
vu agrave lexercice 13
gt resc[uppertri(resc diag=TRUE)] lt- NA
gt resc lt- subset(melt(resc) isna(value))
gt resc$p lt- resp
gt resc$padj lt- ifelse(resc$p6 lt 1 resc$p6 1)
On pourra veacuterifier que la derniegravere colonne peut eacutegalement
ecirctre obtenue par la commande suivante
gt padjust(resc$p bonf)
Le reacutesultat ci-dessous indique que agrave lexception de
weightvomit et bingevomit toutes les associations testeacutees
sont significatives mecircme apregraves une correction (tregraves conser-
vative) pour les comparaisons multiples
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight -0573 000000491182 00000294709
3 vomit weight -0120 038353694716 10000000000
4 purge weight -0426 000118078100 00070846860
7 vomit binge 0170 021490582189 10000000000
8 purge binge 0704 000000000197 00000000118
12 purge vomit 0423 000129263518 00077558111
La mecircme proceacutedure peut ecirctre exploiteacutee pour refaire les cal-
culs agrave 1199051113792 il suffit de changer le filtre initial time==4 Onobtiendrait les reacutesultats suivants
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight 02910 003113317414 01867990449
3 vomit weight 00597 066515436534 10000000000
4 purge weight 02406 007684707553 04610824532
7 vomit binge 03536 000808064175 00484838505
8 purge binge 06880 000000000647 00000000388
12 purge vomit 04811 000020071774 00012043065
Cette fois-ci toutes les associations sont positives en par-
ticulier la correacutelation entre binge et weight est passeacutee de
-0573 agrave 0291 alors que celle entre purge et weight est passeacutee
de -0426 agrave 0241 et seraient juger non-significatives agrave 1199051113792selon le critegravere de Bonferroni Toutefois on a un peu tricheacute
car on a appliqueacute les corrections sur 6 comparaisons alors
quen reacutealiteacute on en a reacutealiseacute 12
25 Les donneacutees ont deacutejagrave eacuteteacute reacutesumeacutees visuellement sous forme
de boicirctes agrave moustaches agrave lexercice 19 Le modegravele dANOVA
est assez simple agrave reacutealiser
8
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
17 On part avec les donneacutees preacute-traiteacutees agrave lexercice 14 les
donneacutees aggreacutegeacutees par temps se trouve dans la variable res
gt p lt- dotplot(reorder(item x min) ~ x data=res
+ group=time autokey=list(column=2)
+ xlab=Score moyen aspect=6)
Score moyen
mensfast
preoweightemansbehfami
bodyhyper
schoolsatt
moodfrie
purgebingevomit
15 20 25 30 35
12
34
On peut choisir de trier les scores par nimporte quelle fonc-
tion Ici on a choisi le score minimum qui est apparemment
toujours observeacute agrave linclusion
18 Consideacuterant que les donneacutees sont deacutejagrave chargeacutees sous R (ex-
ercice 8) pour afficher la distribution des effectifs on utilise
type=count autrement on a par deacutefaut des freacutequences rel-
atives
gt p lt- histogram(~ age | group data=adl
+ type=count aspect=1)
age
Cou
nt
0
5
10
15
20
25
65 70 75 80 85 90
Control
65 70 75 80 85 90
Treatment
Notons quil est souvent avantageux de remplacer les his-
togrammes par des densiteacutes (voir densityplot)
Pour la fonction de reacutepartition
gt p lt- qqmath(~ age data=adl group=group
+ distribution=qunif aspect=5
+ autokey=list(x=05 y=95))
qunif
age
65
70
75
80
85
90
00 02 04 06 08 10
ControlTreatment
Pour les QQ plots
gt p lt- qqmath(~ age | group data=adl aspect=1
+ prepanel=prepanelqqmathline
+ panel=function(x )
+ panelqqmathline(x )
+ panelqqmath(x )
+ )
qnorm
age
65
70
75
80
85
90
minus2 minus1 0 1 2
Control
minus2 minus1 0 1 2
Treatment
On notera que par deacutefault lattice propose un arrangement
des sous-figures (rdquopanelsrdquo) utilisant des axes verticaux com-
muns Cela fait souvent sens mais on peut sen affranchir en
controcirclant largument scale= comme dans lexemple suiv-
ant
gt update(p scale=list(relation=free))
19 Ici on peut envisager deux solutions la premiegravere consiste agrave
afficher en parallegravele les distributions avant et apregraves traite-
ment pour chaque groupe de traitement La seconde con-
siste agrave montrer plus explicitement la covariation des scores
au niveau individuel et elle est plus avantageurse pour deacute-
tecter des patterns dassociation speacutecifiques ou des indi-
vidus atypiques
gt data(anorexia package=MASS)
gt p lt- bwplot(value22 ~ variable | Treat
+ data=melt(anorexia) aspect=12
+ layout=c(31) ylab=Weight (kg))
Wei
ght (
kg)
35
40
45
Prewt Postwt
CBT
Prewt Postwt
Cont
Prewt Postwt
FT
Voici la seconde solution qui utilise simplement un dia-
gramme de dispersion auquel on ajoute la rdquodroite iden-
titeacuterdquo (119910 = 119909) pour faciliter la lecture les points au dessusde celle-ci deacutenotent des patients dont le poids a augmenteacute
apregraves traitement
gt anorexia lt- transform(anorexia Prewt=Prewt22
+ Postwt=Postwt22)
gt p lt- xyplot(Postwt ~ Prewt | Treat data=anorexia
+ layout=c(31) aspect=iso)
gt p lt- update(p
+ panel=function()
+ panelxyplot()
+ panelabline(0 1 col=lightgrey)
+ )
6
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBT
15 16 17 18 19
Cont
15 16 17 18 19
FT
On calcule les scores de diffeacuterence assez simplement
comme suit
gt anorexia$andiff lt- with(anorexia Postwt-Prewt)
et on les reacutesume aussi simplement
gt with(anorexia tapply(andiff Treat summary
+ digits=2))
$CBT
Min 1st Qu Median Mean 3rd Qu Max
-190 -014 029 062 081 430
$Cont
Min 1st Qu Median Mean 3rd Qu Max
-2500 -1400 -0072 -0093 0740 3300
$FT
Min 1st Qu Median Mean 3rd Qu Max
-110 081 190 150 240 440
20 Ici il sagit globalement de la seconde option de visualisa-
tion eacutevoqueacutee agrave lexercice preacuteceacutedent mais en superposant les
graphiques dans la mecircme figure soit
gt p lt- xyplot(Postwt ~ Prewt data=anorexia
+ group=Treat span=8
+ type=c(pgsmooth)
+ autokey=list(space=right points=TRUE
+ lines=TRUE))
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Le paramegravetre span permet de controcircler le degreacute de lissage
des courbes rdquoloessrdquo
En utilisant des droites de reacutegression soit en supposant
lineacuteariteacute de la relation fonctionnelle entre les deux seacuteries
de mesure (typiquement dans le cadre dune analyse de co-
variance) on a les reacutesultats suivants
gt p lt- update(p type=c(pgr) aspect=5)
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Mesures et tests dassociation
21 Puisque les mesures sont collecteacutees sur les 10 mecircmes sujets
le test approprieacute est un test pour donneacutees apparieacutees
gt with(sleep tapply(extra group mean))
1 2
075 233
gt ttest(extra ~ group data=sleep paired=TRUE)
Paired t-test
data extra by group
t = -40621 df = 9 p-value = 0002833
alternative hypothesis true difference in means is not equal to 0
95 percent confidence interval
-24598858 -07001142
sample estimates
mean of the differences
-158
Le reacutesultat du test indique quil y a bien une diffeacuterence sig-
nificative (119901 = 1113788111378811137881113791) en faveur du deuxiegraveme traitement(augmentation de une heure et demie de sommeil environ)
Si les groupes eacutetaient consideacutereacutes comme indeacutependants (soit
20 sujets au total) on obtient une p-valeur gt 005 dougrave
limportance de prendre en consideacuteration lappariement
lorsquil est preacutesent
gt ttest(extra ~ group data=sleep)$pvalue
[1] 007939414
22 Lideacutee geacuteneacuterale est destimer la preacutecision dun estimateur ici
une moyenne de diffeacuterences en se servant de leacutechantillon
disponible par une meacutethode que lon appelle le bootstrap
gt di lt- with(sleep abs(diff(tapply(extra
+ group mean))))
gt sleep2 lt- with(sleep cbind(extra[group==1]
+ extra[group==2]))
gt B lt- 499
gt res lt- numeric(B)
gt for (i in 1B)
+ res[i] lt- mean(apply(sleep2[sample(10 rep=TRUE)]
+ 1 diff))
gt quantile(res c(025 975))
25 975
10090 23765
Cou
nt
0
20
40
60
80
100
10 15 20 25
7
On peut veacuterifier que lon obtient sensiblement les mecircmes
reacutesultats en utilisant les fonctions R deacutedieacutees
gt library(boot)
gt d lt- function(d x) mean(apply(d[x] 1 diff))
gt bootci(boot(sleep2 d R=499) type=perc)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 499 bootstrap replicates
CALL
bootci(bootout = boot(sleep2 d R = 499) type = perc)
Intervals
Level Percentile
95 ( 0985 2450 )
Calculations and Intervals on Original Scale
23 Dans un premier temps on filtre les donneacutees qui nous in-
teacuteressent agrave savoir mood agrave 1199051113789 et 1199051113792 On a eacutegalement besoinde lidentifiant patient pour sassurer du bon appariement
des scores
gt anorex0 lt- subset(anorex time in c(14) amp
+ diag==Anorexia Nervosa
+ select=c(numbertimemood))
gt all(table(anorex0$number)==2)
[1] TRUE
gt xtabs(~ time + mood data=anorex0)
mood
time 1 2 3
1 5 6 14
2 0 0 0
3 0 0 0
4 1 2 22
gt wilcoxtest(mood ~ time data=anorex0 paired=TRUE
+ exact=FALSE)
Wilcoxon signed rank test with continuity
correction
data mood by time
V = 9 p-value = 001628
alternative hypothesis true location shift is not equal to 0
Le reacutesultat suggegravere que les scores ont tendance agrave eacutevoluer
dans le sens de valeurs plus eacuteleveacutees entre linclusion et
la fin de leacutetude Ceci eacutetant en regardant les don-
neacutees brutes il apparaicirct clairement que les scores se
concentrent autour de 3 agrave 1199051113792 (88 des observations)
mood
time
1
4
1 2 3
24 Encore une fois on seacutelectionne dans un premier temps les
donneacutees qui nous inteacuteressent
gt anorex1 lt- subset(anorex time==1
+ select=c(weightbingepurge))
gt round(resc lt- cor(anorex1 method=spearman) 3)
weight binge vomit purge
weight 1000 -0573 -0120 -0426
binge -0573 1000 0170 0704
vomit -0120 0170 1000 0423
purge -0426 0704 0423 1000
Ici il existe plusieurs faccedilons de proceacuteder pour tester les cor-
reacutelations des variables prises deux agrave deux (on rappelle quil
y a ∁119896119899 =1113792
1113790(1113792minus1113790)= 1113794 maniegraveres de combiner deux eacuteleacutements
pris parmi n) En voici une selon laquelle on seacutelectionne les
colonnes de anorex1 agrave tester agrave partir dun tableau reacutesumant
les combinaisons possibles
gt cb lt- combn(4 2)
gt resp lt- numeric(ncol(cb))
gt for (i in 1ncol(cb))
+ resp[i] lt- cortest(anorex1[cb[1i]]
+ anorex1[cb[2i]]
+ method=spearman
+ exact=FALSE)$pvalue
Enfin voici une faccedilon possible pour regrouper les reacutesultats
dans un dataframe qui repose globalement sur ce qui a eacuteteacute
vu agrave lexercice 13
gt resc[uppertri(resc diag=TRUE)] lt- NA
gt resc lt- subset(melt(resc) isna(value))
gt resc$p lt- resp
gt resc$padj lt- ifelse(resc$p6 lt 1 resc$p6 1)
On pourra veacuterifier que la derniegravere colonne peut eacutegalement
ecirctre obtenue par la commande suivante
gt padjust(resc$p bonf)
Le reacutesultat ci-dessous indique que agrave lexception de
weightvomit et bingevomit toutes les associations testeacutees
sont significatives mecircme apregraves une correction (tregraves conser-
vative) pour les comparaisons multiples
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight -0573 000000491182 00000294709
3 vomit weight -0120 038353694716 10000000000
4 purge weight -0426 000118078100 00070846860
7 vomit binge 0170 021490582189 10000000000
8 purge binge 0704 000000000197 00000000118
12 purge vomit 0423 000129263518 00077558111
La mecircme proceacutedure peut ecirctre exploiteacutee pour refaire les cal-
culs agrave 1199051113792 il suffit de changer le filtre initial time==4 Onobtiendrait les reacutesultats suivants
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight 02910 003113317414 01867990449
3 vomit weight 00597 066515436534 10000000000
4 purge weight 02406 007684707553 04610824532
7 vomit binge 03536 000808064175 00484838505
8 purge binge 06880 000000000647 00000000388
12 purge vomit 04811 000020071774 00012043065
Cette fois-ci toutes les associations sont positives en par-
ticulier la correacutelation entre binge et weight est passeacutee de
-0573 agrave 0291 alors que celle entre purge et weight est passeacutee
de -0426 agrave 0241 et seraient juger non-significatives agrave 1199051113792selon le critegravere de Bonferroni Toutefois on a un peu tricheacute
car on a appliqueacute les corrections sur 6 comparaisons alors
quen reacutealiteacute on en a reacutealiseacute 12
25 Les donneacutees ont deacutejagrave eacuteteacute reacutesumeacutees visuellement sous forme
de boicirctes agrave moustaches agrave lexercice 19 Le modegravele dANOVA
est assez simple agrave reacutealiser
8
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBT
15 16 17 18 19
Cont
15 16 17 18 19
FT
On calcule les scores de diffeacuterence assez simplement
comme suit
gt anorexia$andiff lt- with(anorexia Postwt-Prewt)
et on les reacutesume aussi simplement
gt with(anorexia tapply(andiff Treat summary
+ digits=2))
$CBT
Min 1st Qu Median Mean 3rd Qu Max
-190 -014 029 062 081 430
$Cont
Min 1st Qu Median Mean 3rd Qu Max
-2500 -1400 -0072 -0093 0740 3300
$FT
Min 1st Qu Median Mean 3rd Qu Max
-110 081 190 150 240 440
20 Ici il sagit globalement de la seconde option de visualisa-
tion eacutevoqueacutee agrave lexercice preacuteceacutedent mais en superposant les
graphiques dans la mecircme figure soit
gt p lt- xyplot(Postwt ~ Prewt data=anorexia
+ group=Treat span=8
+ type=c(pgsmooth)
+ autokey=list(space=right points=TRUE
+ lines=TRUE))
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Le paramegravetre span permet de controcircler le degreacute de lissage
des courbes rdquoloessrdquo
En utilisant des droites de reacutegression soit en supposant
lineacuteariteacute de la relation fonctionnelle entre les deux seacuteries
de mesure (typiquement dans le cadre dune analyse de co-
variance) on a les reacutesultats suivants
gt p lt- update(p type=c(pgr) aspect=5)
Prewt
Pos
twt
16
18
20
15 16 17 18 19
CBTContFT
Mesures et tests dassociation
21 Puisque les mesures sont collecteacutees sur les 10 mecircmes sujets
le test approprieacute est un test pour donneacutees apparieacutees
gt with(sleep tapply(extra group mean))
1 2
075 233
gt ttest(extra ~ group data=sleep paired=TRUE)
Paired t-test
data extra by group
t = -40621 df = 9 p-value = 0002833
alternative hypothesis true difference in means is not equal to 0
95 percent confidence interval
-24598858 -07001142
sample estimates
mean of the differences
-158
Le reacutesultat du test indique quil y a bien une diffeacuterence sig-
nificative (119901 = 1113788111378811137881113791) en faveur du deuxiegraveme traitement(augmentation de une heure et demie de sommeil environ)
Si les groupes eacutetaient consideacutereacutes comme indeacutependants (soit
20 sujets au total) on obtient une p-valeur gt 005 dougrave
limportance de prendre en consideacuteration lappariement
lorsquil est preacutesent
gt ttest(extra ~ group data=sleep)$pvalue
[1] 007939414
22 Lideacutee geacuteneacuterale est destimer la preacutecision dun estimateur ici
une moyenne de diffeacuterences en se servant de leacutechantillon
disponible par une meacutethode que lon appelle le bootstrap
gt di lt- with(sleep abs(diff(tapply(extra
+ group mean))))
gt sleep2 lt- with(sleep cbind(extra[group==1]
+ extra[group==2]))
gt B lt- 499
gt res lt- numeric(B)
gt for (i in 1B)
+ res[i] lt- mean(apply(sleep2[sample(10 rep=TRUE)]
+ 1 diff))
gt quantile(res c(025 975))
25 975
10090 23765
Cou
nt
0
20
40
60
80
100
10 15 20 25
7
On peut veacuterifier que lon obtient sensiblement les mecircmes
reacutesultats en utilisant les fonctions R deacutedieacutees
gt library(boot)
gt d lt- function(d x) mean(apply(d[x] 1 diff))
gt bootci(boot(sleep2 d R=499) type=perc)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 499 bootstrap replicates
CALL
bootci(bootout = boot(sleep2 d R = 499) type = perc)
Intervals
Level Percentile
95 ( 0985 2450 )
Calculations and Intervals on Original Scale
23 Dans un premier temps on filtre les donneacutees qui nous in-
teacuteressent agrave savoir mood agrave 1199051113789 et 1199051113792 On a eacutegalement besoinde lidentifiant patient pour sassurer du bon appariement
des scores
gt anorex0 lt- subset(anorex time in c(14) amp
+ diag==Anorexia Nervosa
+ select=c(numbertimemood))
gt all(table(anorex0$number)==2)
[1] TRUE
gt xtabs(~ time + mood data=anorex0)
mood
time 1 2 3
1 5 6 14
2 0 0 0
3 0 0 0
4 1 2 22
gt wilcoxtest(mood ~ time data=anorex0 paired=TRUE
+ exact=FALSE)
Wilcoxon signed rank test with continuity
correction
data mood by time
V = 9 p-value = 001628
alternative hypothesis true location shift is not equal to 0
Le reacutesultat suggegravere que les scores ont tendance agrave eacutevoluer
dans le sens de valeurs plus eacuteleveacutees entre linclusion et
la fin de leacutetude Ceci eacutetant en regardant les don-
neacutees brutes il apparaicirct clairement que les scores se
concentrent autour de 3 agrave 1199051113792 (88 des observations)
mood
time
1
4
1 2 3
24 Encore une fois on seacutelectionne dans un premier temps les
donneacutees qui nous inteacuteressent
gt anorex1 lt- subset(anorex time==1
+ select=c(weightbingepurge))
gt round(resc lt- cor(anorex1 method=spearman) 3)
weight binge vomit purge
weight 1000 -0573 -0120 -0426
binge -0573 1000 0170 0704
vomit -0120 0170 1000 0423
purge -0426 0704 0423 1000
Ici il existe plusieurs faccedilons de proceacuteder pour tester les cor-
reacutelations des variables prises deux agrave deux (on rappelle quil
y a ∁119896119899 =1113792
1113790(1113792minus1113790)= 1113794 maniegraveres de combiner deux eacuteleacutements
pris parmi n) En voici une selon laquelle on seacutelectionne les
colonnes de anorex1 agrave tester agrave partir dun tableau reacutesumant
les combinaisons possibles
gt cb lt- combn(4 2)
gt resp lt- numeric(ncol(cb))
gt for (i in 1ncol(cb))
+ resp[i] lt- cortest(anorex1[cb[1i]]
+ anorex1[cb[2i]]
+ method=spearman
+ exact=FALSE)$pvalue
Enfin voici une faccedilon possible pour regrouper les reacutesultats
dans un dataframe qui repose globalement sur ce qui a eacuteteacute
vu agrave lexercice 13
gt resc[uppertri(resc diag=TRUE)] lt- NA
gt resc lt- subset(melt(resc) isna(value))
gt resc$p lt- resp
gt resc$padj lt- ifelse(resc$p6 lt 1 resc$p6 1)
On pourra veacuterifier que la derniegravere colonne peut eacutegalement
ecirctre obtenue par la commande suivante
gt padjust(resc$p bonf)
Le reacutesultat ci-dessous indique que agrave lexception de
weightvomit et bingevomit toutes les associations testeacutees
sont significatives mecircme apregraves une correction (tregraves conser-
vative) pour les comparaisons multiples
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight -0573 000000491182 00000294709
3 vomit weight -0120 038353694716 10000000000
4 purge weight -0426 000118078100 00070846860
7 vomit binge 0170 021490582189 10000000000
8 purge binge 0704 000000000197 00000000118
12 purge vomit 0423 000129263518 00077558111
La mecircme proceacutedure peut ecirctre exploiteacutee pour refaire les cal-
culs agrave 1199051113792 il suffit de changer le filtre initial time==4 Onobtiendrait les reacutesultats suivants
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight 02910 003113317414 01867990449
3 vomit weight 00597 066515436534 10000000000
4 purge weight 02406 007684707553 04610824532
7 vomit binge 03536 000808064175 00484838505
8 purge binge 06880 000000000647 00000000388
12 purge vomit 04811 000020071774 00012043065
Cette fois-ci toutes les associations sont positives en par-
ticulier la correacutelation entre binge et weight est passeacutee de
-0573 agrave 0291 alors que celle entre purge et weight est passeacutee
de -0426 agrave 0241 et seraient juger non-significatives agrave 1199051113792selon le critegravere de Bonferroni Toutefois on a un peu tricheacute
car on a appliqueacute les corrections sur 6 comparaisons alors
quen reacutealiteacute on en a reacutealiseacute 12
25 Les donneacutees ont deacutejagrave eacuteteacute reacutesumeacutees visuellement sous forme
de boicirctes agrave moustaches agrave lexercice 19 Le modegravele dANOVA
est assez simple agrave reacutealiser
8
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
On peut veacuterifier que lon obtient sensiblement les mecircmes
reacutesultats en utilisant les fonctions R deacutedieacutees
gt library(boot)
gt d lt- function(d x) mean(apply(d[x] 1 diff))
gt bootci(boot(sleep2 d R=499) type=perc)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 499 bootstrap replicates
CALL
bootci(bootout = boot(sleep2 d R = 499) type = perc)
Intervals
Level Percentile
95 ( 0985 2450 )
Calculations and Intervals on Original Scale
23 Dans un premier temps on filtre les donneacutees qui nous in-
teacuteressent agrave savoir mood agrave 1199051113789 et 1199051113792 On a eacutegalement besoinde lidentifiant patient pour sassurer du bon appariement
des scores
gt anorex0 lt- subset(anorex time in c(14) amp
+ diag==Anorexia Nervosa
+ select=c(numbertimemood))
gt all(table(anorex0$number)==2)
[1] TRUE
gt xtabs(~ time + mood data=anorex0)
mood
time 1 2 3
1 5 6 14
2 0 0 0
3 0 0 0
4 1 2 22
gt wilcoxtest(mood ~ time data=anorex0 paired=TRUE
+ exact=FALSE)
Wilcoxon signed rank test with continuity
correction
data mood by time
V = 9 p-value = 001628
alternative hypothesis true location shift is not equal to 0
Le reacutesultat suggegravere que les scores ont tendance agrave eacutevoluer
dans le sens de valeurs plus eacuteleveacutees entre linclusion et
la fin de leacutetude Ceci eacutetant en regardant les don-
neacutees brutes il apparaicirct clairement que les scores se
concentrent autour de 3 agrave 1199051113792 (88 des observations)
mood
time
1
4
1 2 3
24 Encore une fois on seacutelectionne dans un premier temps les
donneacutees qui nous inteacuteressent
gt anorex1 lt- subset(anorex time==1
+ select=c(weightbingepurge))
gt round(resc lt- cor(anorex1 method=spearman) 3)
weight binge vomit purge
weight 1000 -0573 -0120 -0426
binge -0573 1000 0170 0704
vomit -0120 0170 1000 0423
purge -0426 0704 0423 1000
Ici il existe plusieurs faccedilons de proceacuteder pour tester les cor-
reacutelations des variables prises deux agrave deux (on rappelle quil
y a ∁119896119899 =1113792
1113790(1113792minus1113790)= 1113794 maniegraveres de combiner deux eacuteleacutements
pris parmi n) En voici une selon laquelle on seacutelectionne les
colonnes de anorex1 agrave tester agrave partir dun tableau reacutesumant
les combinaisons possibles
gt cb lt- combn(4 2)
gt resp lt- numeric(ncol(cb))
gt for (i in 1ncol(cb))
+ resp[i] lt- cortest(anorex1[cb[1i]]
+ anorex1[cb[2i]]
+ method=spearman
+ exact=FALSE)$pvalue
Enfin voici une faccedilon possible pour regrouper les reacutesultats
dans un dataframe qui repose globalement sur ce qui a eacuteteacute
vu agrave lexercice 13
gt resc[uppertri(resc diag=TRUE)] lt- NA
gt resc lt- subset(melt(resc) isna(value))
gt resc$p lt- resp
gt resc$padj lt- ifelse(resc$p6 lt 1 resc$p6 1)
On pourra veacuterifier que la derniegravere colonne peut eacutegalement
ecirctre obtenue par la commande suivante
gt padjust(resc$p bonf)
Le reacutesultat ci-dessous indique que agrave lexception de
weightvomit et bingevomit toutes les associations testeacutees
sont significatives mecircme apregraves une correction (tregraves conser-
vative) pour les comparaisons multiples
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight -0573 000000491182 00000294709
3 vomit weight -0120 038353694716 10000000000
4 purge weight -0426 000118078100 00070846860
7 vomit binge 0170 021490582189 10000000000
8 purge binge 0704 000000000197 00000000118
12 purge vomit 0423 000129263518 00077558111
La mecircme proceacutedure peut ecirctre exploiteacutee pour refaire les cal-
culs agrave 1199051113792 il suffit de changer le filtre initial time==4 Onobtiendrait les reacutesultats suivants
gt format(resc digits=3 scientific=FALSE)
X1 X2 value p padj
2 binge weight 02910 003113317414 01867990449
3 vomit weight 00597 066515436534 10000000000
4 purge weight 02406 007684707553 04610824532
7 vomit binge 03536 000808064175 00484838505
8 purge binge 06880 000000000647 00000000388
12 purge vomit 04811 000020071774 00012043065
Cette fois-ci toutes les associations sont positives en par-
ticulier la correacutelation entre binge et weight est passeacutee de
-0573 agrave 0291 alors que celle entre purge et weight est passeacutee
de -0426 agrave 0241 et seraient juger non-significatives agrave 1199051113792selon le critegravere de Bonferroni Toutefois on a un peu tricheacute
car on a appliqueacute les corrections sur 6 comparaisons alors
quen reacutealiteacute on en a reacutealiseacute 12
25 Les donneacutees ont deacutejagrave eacuteteacute reacutesumeacutees visuellement sous forme
de boicirctes agrave moustaches agrave lexercice 19 Le modegravele dANOVA
est assez simple agrave reacutealiser
8
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
gt with(anorexia tapply(Prewt Treat var))
CBT Cont FT
1002272 1390382 1074346
gt summary(aov(Prewt ~ Treat anorexia))
Df Sum Sq Mean Sq F value Pr(gtF)
Treat 2 139 06952 0599 0552
Residuals 69 8001 11596
Agrave leacutevidence rien ne permet de rejeter lhypothegravese nulle
dabsence de diffeacuterence de poids lors de lentreacutee dans leacutetude
chez ces 72 patientes
26 Avant toute chose il est utile de caracteacuteriser numeacuterique-
ment et visuellement les distributions uni- et bivarieacutees
gt paint lt- readtable(paste(WD PAINTDAT sep=)
+ header=TRUE)
gt summary(paint)
HAEMO PCV WBC
Min 1320 Min 3800 Min 3100
1st Qu1460 1st Qu4400 1st Qu4500
Median 1500 Median 4500 Median 5100
Mean 1517 Mean 4525 Mean 5384
3rd Qu1585 3rd Qu4700 3rd Qu6000
Max 1740 Max 5200 Max 9899
LYMPHO NEUTRO LEAD
Min 800 Min 900 Min 1300
1st Qu1700 1st Qu2000 1st Qu1700
Median 2200 Median 2400 Median 1900
Mean 2383 Mean 2489 Mean 2027
3rd Qu2750 3rd Qu2900 3rd Qu2300
Max 6900 Max 4200 Max 6200
gt p lt- splom(~ paint)
Le test de correacutelation ne pose pas de difficulteacutes sans au-
cune hypothegravese sur la direction de lassociation (positive ou
neacutegative) un test bilateacuteral simpose
gt with(paint cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 147823 df = 101 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07541505 08797144
sample estimates
cor
08269801
Un simple diagramme de dispersion met en eacutevidence une
observation assez eacuteloigneacutee des autres (aux coordonneacutees
(1113797111379611137971113797 11137941113797)) On peut recalculer la correacutelation lineacuteaire sansles points appartenant agrave lenveloppe du nuage de dispersion
comme suit
gt chi lt- with(paint chull(LYMPHO WBC))
gt with(paint[-chi] cortest(LYMPHO WBC))
Pearsons product-moment correlation
data LYMPHO and WBC
t = 129676 df = 92 p-value lt 22e-16
alternative hypothesis true correlation is not equal to 0
95 percent confidence interval
07183762 08655857
sample estimates
cor
0803971
WBC
LYM
PH
O
10
20
30
40
50
60
70
4000 6000 8000 10000
Finalement la correacutelation entre LYMPHO etWBC ajusteacutee sur
le volume moyen dheacutemoglobine ne varie pas sensiblement
des calculs ci-dessus
gt library(ppcor)
gt with(paint pcortest(LYMPHO WBC HAEMO))
estimate pvalue statistic n gp Method
1 08261682 110664e-48 1466336 103 1 pearson
27 Le chargement des donneacutees ne pose pas de problegraveme parti-
culier puisque les donneacutees sont deacutejagrave stockeacutees sous forme de
dataframe format manipulable avec la commande xtabs
gt blood lt- readtable(paste(WD bloodtxt sep=)
+ header=TRUE)
gt bg lt- c(ABABO)
gt blood$mother lt- factor(blood$mother labels=bg)
gt blood$father lt- factor(blood$father labels=bg)
gt blood$sex lt- factor(blood$sex
+ labels=c(femalemale))
gt (chsq lt- chisqtest(xtabs(count ~ mother + father
+ data=blood)))
Pearsons Chi-squared test
data xtabs(count ~ mother + father data = blood)
X-squared = 208776 df = 9 p-value =
00132
Le reacutesultat du test est significatif et suggegravere une association
entre les groupes sanguins Linspection des reacutesidus resid-
uals(chsq) indique des eacutecarts particuliers agrave lindeacutependance
avec une plus grande contribution au 1205941113790 des groupes AA etBA (megraverepegravere)
28 Reconstruisons dans un premier temps le tableau de contin-
gence et reacutealisons un test du 1205941113790 pour tester lindeacutependanceentre les deux variables
gt snp lt- matrix(c(3030246130380184) ncol=3)
gt dimnames(snp) lt- list(BMI=c(lt= 25gt 25)
+ Geno=c(AAGAGG))
gt chisqtest(snp)
Pearsons Chi-squared test
data snp
X-squared = 72638 df = 2 p-value =
002647
Le reacutesultat du test est significatif (119901 = 1113788111378811137901113794) et suggegravereque le geacutenotype est associeacute au BMI des sujets Ce test utlise
9
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
(1113790 minus 1113789) times (1113791 minus 1113789) = 1113790 degreacutes de liberteacutes On peut faire mieuxet surtout rendre compte de la nature mecircme de la variable
Geno sous un modegravele de dosage alleacutelique en recodant celle-
ci comme une variable ordinale AA=0 GA=1 GG=2 Il est
neacutecessaire de passer au format rdquolongrdquo (en utilisant le pack-
age reshape)
gt snpdf lt- asdataframe(astable(snp))
gt snpdf lt- untable(snpdf snpdf$Freq)
gt snpdf$Geno lt- ordered(snpdf$Geno)
gt teststats lt- sum(snp) with(snpdf
+ cor(asnumeric(BMI) asnumeric(Geno))^2)
gt pchisq(teststats df=1 lowertail=FALSE)
[1] 003396257
Le test est ici encore significatif Agrave la diffeacuterence du
1205941113790 dindeacutependance ici on a tenu compte de la na-ture ordinale de Geno et gagner un degreacute de liberteacute
Genotype
BMI less or equal to 25
BMI above 25
AA GA GG
On peut comparer le reacutesultat preacuteceacutedent avec un test de
Cochran-Armitage (version conditionnelle)
gt library(coin)
gt independence_test(BMI ~ Geno data=snpdf
+ teststat=quad
+ scores=list(Geno=c(012)))
Asymptotic General Independence Test
data BMI by Geno (AA lt GA lt GG)
chi-squared = 44921 df = 1 p-value =
003405
29 La diffeacuterence de moyenne mecircme minime meacuterite decirctre
testeacutee puisque la dureacutee de seacutejour est un facteur pronostic
On peut reacutesumer les donneacutees de maniegravere numeacuterique avec
tapply ou bien en utilisant le package Hmisc
gt summary(los ~ group data=adl fun=mean)
los N=100
+-------+---------+---+--------+
| | |N |los |
+-------+---------+---+--------+
|group |Control | 46|1782609|
| |Treatment| 54|1675926|
+-------+---------+---+--------+
|Overall| |100|1725000|
+-------+---------+---+--------+
gt (dm lt- asnumeric(diff(with(adl tapply(los group
+ mean)))))
[1] -1066828
los
Den
sity
000
005
010
015
10 15 20 25
ControlTreatment
Il est tout agrave fait possible dutiliser un test 119905 pour comparerles dureacutees moyennes de seacutejour Toutefois consideacuterons la
strateacutegie suivante on permute aleacuteatoirement les labels du
facteur group et on recalcule la diffeacuterence de moyennes
cette proceacutedure est reacutepeacuteteacutee 999 fois Il sagit donc dune
approximation car le nombre total de permutations est de(11137921113794+11137931113792)1113792111379411137931113792
gt permdiff lt- replicate(999
+ with(adl
+ diff(tapply(los
+ sample(group)
+ mean))))
gt sum(permdiff lt= dm)1000
[1] 0027C
ount
0
50
100
150
200
minus2 minus1 0 1
Ce reacutesultat peut ecirctre compareacute agrave ce que donneraient des
fonctions plus sophistiqueacutees de R pour les tests de permu-
tation Par exemple
gt library(coin)
gt oneway_test(los ~ group data=adl
+ distribution=approximate(B=999))
Approximative 2-Sample Permutation Test
data los by
group (Control Treatment)
Z = 20488 p-value = 004605
alternative hypothesis true mu is not equal to 0
Un test exact donnerait une 119901-valeur de 004381 Notre testrdquomanuelrdquo avec 99999 reacuteeacutechantillonnages donne 004546
(en bilateacuteral) Un test 119905 nous donnerait 119901 = 111378811137881113791111379711137961113793 ensupposant lhomogeacuteneacuteiteacute des variances
30 Lideacutee est de veacuterifier empiriquement le taux de faux positifs
(risque de premiegravere espegravece) que lon observerait hypotheacute-
tiquement en reacutepeacutetant le processus de deacutecision associeacute au
test dhypothegravese
La commande suivante permet dappeler la fonction
simdata en fixant dm=0 et en variant n de 10 agrave 20 (par pas
de 1) Elle renvoit les 119901-valeurs associeacutees au test de StudentCela ne suffit toutefois pas pour eacutevaluer la freacutequence de re-
jet de1198671113788 car il faudrait reacutepliquer lexpeacuterience plusieurs foispour chaque paramegravetre manipuleacute
10
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
gt sapply(1020 simdata dm=05)
[1] 022592951 006750175 004390103 086025844
[5] 019966900 036742708 020093824 023607682
[9] 024345003 026565522 006743805
Dans lexemple ci-dessous on simule 100 tests sur la dif-
feacuterence de moyenne observeacutee alors quen reacutealiteacute les deux
eacutechantillons proviennent de la mecircme population (dm=0)
gt sum(replicate(100 simdata(n=15 dm=0
+ varequal=TRUE))lt05)100
[1] 004
On rejetterait donc 1198671113788 (agrave tort) dans 4 cas sur les 100 maiscela reste en deccedilagrave du risque de premiegravere espegravece fixeacute agrave 5
Voici un autre exemple de simulation ougrave lon fait varier si-
multaneacutement n et dm Les freacutequences de rejet de 1198671113788 sur100 simulations sont reacutesumeacutees dans la figure suivante
gt k lt- 100
gt desparams lt- expandgrid(n=seq(10 100 by=10)
+ dm=seq(0 1 by=2))
gt res lt- replicate(k apply(desparams 1
+ function(x) simdata(n=x[1] dm=x[2]
+ varequal=TRUE)))
gt res lt- dataframe(desparams
+ perc=apply(res 1
+ function(x) sum(xlt05))k)
n
r
ejet
H0
00
02
04
06
08
10
20 40 60 80 100
dm0020406081
Modegravele lineacuteaire et applications
31 La formule R de base reste la mecircme dans les trois cas agrave
luniteacute de mesure pregraves On notera que lopeacuterateur sert
agrave deacutesigner les relations demboicirctement dans les formules
donc il faut utiliser I() pour empecirccher une telle interpreacuteta-
tion3
gt mod lt- list()
gt mod[[1]] lt- lm(bwt ~ lwt data=birthwt)
gt mod[[2]] lt- lm(I(bwt1000) ~ I(lwt22) data=birthwt)
gt mod[[3]] lt- lm(bwt ~ scale(lwt scale=F) data=birthwt)
gt lapply(mod coef)
[[1]]
(Intercept) lwt
3JM Chambers and TJ Hastie eds Statistical Models in S Wadsworth amp Brooks
1992 pp 28 et 31
2369623518 4429108
[[2]]
(Intercept) I(lwt22)
2369623518 0009744037
[[3]]
(Intercept) scale(lwt scale = F)
2944587302 4429108
gt summary(mod[[3]])
Call
lm(formula = bwt ~ scale(lwt scale = F) data = birthwt)
Residuals
Min 1Q Median 3Q Max
-219212 -49797 -384 50832 207560
Coefficients
Estimate Std Error t value
(Intercept) 2944587 52259 56346
scale(lwt scale = F) 4429 1713 2585
Pr(gt|t|)
(Intercept) lt2e-16
scale(lwt scale = F) 00105
Residual standard error 7184 on 187 degrees of freedom
Multiple R-squared 00345 Adjusted R-squared 002933
F-statistic 6681 on 1 and 187 DF p-value 00105
Lexamen des coefficients de reacutegression et tests 119905 associeacutesindiquent que dans les trois cas on arrive aux mecircmes con-
clusions le poids de la megravere (lwt) est significatif agrave 5 En
revanche linterpreacutetation des coefficients sera diffeacuterente
dans le premier modegravele lordonneacutee agrave lorigine est le poids
moyen des enfants en g lorsque le poids de la megravere (en
livres) est nul (peu interpreacutetable) dans le deuxiegraveme mod-
egravele le terme dintercept reflegravete la mecircme chose en changeant
les uniteacutes de mesure (kg) dans le troisiegraveme modegravele il sagit
du poids des enfants ayant des megraveres de poids moyen La
pente indique dans tous les cas laugmentation du poids des
beacutebeacutes lorsque le poids de la megravere mesureacute en livres ou en
kg varie dune uniteacute
32 Consideacuterons le premier modegravele Les reacutesidus sobtiennent
ainsi
gt mod1resid lt- resid(mod[[1]])
Une faccedilon dexaminer leur distribution est dafficher un his-
togramme ou un Q-Q plot de leurs valeurs ainsi quun
graphique montrant leacutevolution des reacutesidus en fonction des
valeurs preacutedites
gt p lt- qqmath(~ resid(mod[[1]]))
gt p lt- xyplot(resid(mod[[1]]) ~ fitted(mod[[1]]))
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
2000
minus3 minus2 minus1 0 1 2 3
Fitted values
Res
idua
ls
minus2000
minus1000
0
1000
2000
2800 3000 3200 3400
Pour aller plus loin on peut examiner les mesures
dinfluence
gt mod1inf lt- influencemeasures(mod[[1]])
11
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
gt head(round(mod1inf$infmat 3))
dfb1_ dfblwt dffit covr cookd hat
85 0097 -0115 -0134 1023 0009 0021
86 0030 -0043 -0067 1014 0002 0009
87 -0029 0023 -0036 1018 0001 0009
88 -0024 0018 -0032 1018 0001 0008
89 -0024 0019 -0031 1018 0000 0008
91 -0012 0006 -0031 1014 0000 0005
Si lon se reacutefegravere aux indices DFFITs les observations jugeacutees
influentes (supeacuterieures en valeurs absolues agrave plusmn1113790radic1113790119899) sontdonneacutees par
gt idx lt- which(mod1inf$isinf[dffit])
gt c(-11)2sqrt(2nrow(birthwt))
[1] -02057378 02057378
gt round(mod1inf$infmat[idx] 3)
dfb1_ dfblwt dffit covr cookd hat
11 0349 -0409 -0464 0944 0103 0024
28 0282 -0322 -0351 1006 0061 0033
Pour reacute-estimer le modegravele de reacutegression sans ces in-
dividus on pourrait utiliser update(mod[[1]] sub-
set=(rownames(birthwt) in idx) Ces deux points
sont surligneacutes dans le diagramme de dispersion suivant
lwt
bwt
1000
2000
3000
4000
5000
100 150 200 250
11
28
33 Un modegravele dANOVA agrave un facteur seacutecrirait
aov(bwt ~ race data=birthwt) Avec la commande
lm on obtient les mecircmes informations ainsi que les
deacuteviations des moyennes de groupes par rapport agrave la
moyenne des poids des beacutebeacutes chez les megraveres dont le niveau
est white Apregraves recodage du facteur (cf exercice 10) on
obtient
gt mod1a lt- lm(bwt ~ race data=birthwt)
gt summary(mod1a)
Call
lm(formula = bwt ~ race data = birthwt)
Residuals
Min 1Q Median 3Q Max
-209628 -50272 -1272 52628 188728
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 310272 7292 42548 lt 2e-16
raceBlack -38303 15796 -2425 001627
raceOther -29744 11374 -2615 000965
Residual standard error 7145 on 186 degrees of freedom
Multiple R-squared 005017 Adjusted R-squared 003996
F-statistic 4913 on 2 and 186 DF p-value 0008336
gt anova(mod1a)
Analysis of Variance Table
Response bwt
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 49125 0008336
Residuals 186 94953931 510505
Les contrastes utiliseacutes ci-dessus sont appeleacutes contrastes de
traitement
gt op lt- options(contrasts=c(contrsum contrpoly))
gt mod1b lt- lm(bwt ~ race data=birthwt)
gt coef(mod1b)
(Intercept) race1 race2
28758982 2268205 -1562059
gt options(op)
On peut le veacuterifier lagrave partir des moyennes de groupe
gt grpmeans lt- with(birthwt tapply(bwt race mean))
gt grpmeans[23] - grpmeans[1] mod1a
Black Other
-3830264 -2974352
gt grpmeans[12] - mean(grpmeans) mod1b
White Black
2268205 -1562059
Dans le premier modegravele lintercept vaut grpmeans[1] tan-
dis que dans le second modegravele il sagit de la moyenne des
moyennes de groupe (mean(grpmeans)) Les deux coeffi-
cients associeacutes aux pentes repreacutesentent dans le premier cas
les deacuteviations entre Black et Other par rapport agrave White et
dans le second cas entre White et Black et la moyenne des
trois groupes Pour plus dinformations sur le codage des
contrastes sous R httpbitlyLFkFBg
34 Pour lANOVA agrave deux facteurs on considegraverera donc les ter-
mes race smoke et racesmoke (interaction)
gt aov0 lt- aov(bwt ~ race smoke data=birthwt)
gt summary(aov0)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5366 0005438
smoke 1 7322575 7322575 15667 0000108
racesmoke 2 2101808 1050904 2249 0108463
Residuals 183 85529548 467375
Linteraction nest pas significative On peut reacuteestimer le
modegravele sans elle comme suit
gt aov1 lt- update(aov0 ~ - racesmoke)
gt summary(aov1)
Df Sum Sq Mean Sq F value Pr(gtF)
race 2 5015725 2507863 5294 0005809
smoke 1 7322575 7322575 15459 0000119
Residuals 185 87631356 473683
Un reacutesumeacute des effets principaux peut ecirctre obtenu ainsi
gt modeltables(aov1)
Tables of effects
race
White Black Other
1581 -2249 -1393
rep 960 260 670
smoke
No Yes
1485 -2308
rep 1150 740
12
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
ce qui est essentiellement eacutequivalent agrave calculer les dif-
feacuterences entre les moyennes de groupe et la grande
moyenne manuellement
gt with(birthwt tapply(bwt race mean) - mean(bwt))
White Black Other
1581314 -2248950 -1393037
35 Pour obtenir les reacutesidus dumodegravele aov1 preacuteceacutedent on utilise
comme dans le cas de la reacutegression lextracteur resid()
gt aov1resid lt- resid(aov1)
gt round(summary(aov1resid) 1)
Min 1st Qu Median Mean 3rd Qu Max
-23140 -4402 158 00 4921 16550
gt p lt- qqmath(~ aov1resid)
Standard normal quantiles
Res
idua
ls
minus2000
minus1000
0
1000
minus3 minus2 minus1 0 1 2 3
Rien nindique apparemment de deacuteviations flagrante par
rapport agrave lhypothegravese de normaliteacute des reacutesidus (on pour-
rait utiliser un test plus formel comme shapirotest mais
cela nest pas vraiment utile dans ce cas)
36 Pour le chargement des donneacutees il faut veacuterifier le codage
des donneacutees manquantes (souvent preacutesentes dans les eacutetudes
eacutepideacutemiologiques)
gt hers lt- readtable(pubhersdatatxt
+ header=TRUE nastrings=)
gt fm lt- glucose ~ exercise + age + drinkany + BMI
gt mod1 lt- lm(fm data=hers subset=diabetes==0)
gt summary(mod1)
Call
lm(formula = fm data = hers subset = diabetes == 0)
Residuals
Min 1Q Median 3Q Max
-47560 -6400 -0886 5496 32060
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 7896239 259284 30454 lt2e-16
exercise -095044 042873 -2217 00267
age 006355 003139 2024 00431
drinkany 068026 042196 1612 01071
BMI 048924 004155 11774 lt2e-16
Residual standard error 9389 on 2023 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared 007197 Adjusted R-squared 007013
F-statistic 3922 on 4 and 2023 DF p-value lt 22e-16
Le modegravele reacuteduit seacutecrit glucose ~ exercise
gt mod2 lt- update(mod1 ~ - age - drinkany - BMI)
gt summary(mod2)
Call
lm(formula = glucose ~ exercise data = hers subset = diabetes ==
0)
Residuals
Min 1Q Median 3Q Max
-48668 -6668 -0668 5639 29332
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 973610 02815 345848 lt 2e-16
exercise -16928 04376 -3868 0000113
Residual standard error 9715 on 2030 degrees of freedom
Multiple R-squared 0007318 Adjusted R-squared 0006829
F-statistic 1497 on 1 and 2030 DF p-value 0000113
On constate que leffet du facteur exercise est plus impor-
tant sur le taux de glucose (17 mgdL plus bas chez les pa-
tients qui font de lexercice au moins 3 fois par semaine)
Les deux modegraveles sont emboicircteacutes (mod2 ne comprend que
des termes preacutesents dans mod1) ce qui justifierait lemploi
dun test 119865 pour comparer les deux reacutesiduelles Toutefois ilfaudrait sassurer que les deux modegraveles ont bien eacuteteacute estimeacutes
sur le mecircme nombre dindividus ce qui nest pas garantit
en raison de la preacutesence de valeurs manquantes (supposeacutees
MAR)
Lexamen des valeurs reacutesiduelles en fonction des valeurs
preacutedites fait apparaicirctre quelques patients atypiques On
peut confirmer cette approche graphique par un reacutesumeacute
numeacuterique des reacutesidus par rapport aux critegraveres habituels
gt p lt- xyplot(resid(mod1) ~ fitted(mod1)
+ type=c(p smooth))
gt mod1inf lt- influencemeasures(mod1)
gt which(mod1inf$isinf[dffit])
20 256 369 391 401 804 1187 1295 1352 1597
16 176 255 272 281 587 868 954 996 1186
1730 1747 1833 2470 2655 2709 2717
1282 1292 1353 1814 1947 1987 1993
Concernant les reacutesidus studentiseacutes les plus extrecircmes on
retrouve une partie des individus listeacutes ci-dessus
gt which(abs(rstudent(mod1))gt3)
256 1187 1747 1833 2002 2221 2470
176 868 1292 1353 1479 1646 1814
Standard normal quantiles
Res
idua
ls
minus40
minus20
0
20
minus2 0 2
2470
1833
37 Connaissant les coefficients de reacutegression du modegravele
gt coef(mod1)
13
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
(Intercept) exercise age drinkany
7896239394 -095044096 006354948 068026413
BMI
048924198
il est tout agrave fait possible de calculer manuellement la preacute-
diction rechercheacutee par exemple
gt agem lt- median(hers$age[hers$diabetes==0]
+ narm=TRUE)
gt t(coef(mod1)) c(1 1 agem 0 22)
[1]
[1] 9303309
Ou alors et cest plus simple lorsquon sinteacuteresse agrave
plusieurs preacutedictions on utilise la fonction predict()
gt predict(mod1 dataframe(exercise=1 age=agem
+ drinkany=0 BMI=22))
1
9303309
gt predict(mod1 dataframe(exercise=0 age=agem
+ drinkany=0 BMI=22))
1
9398353
Par rapport agrave un patient ne faisant pas dexercice on voit
que la diffeacuterence dans les taux de glucose preacutedit est de
0950441 ce qui correspond bien agrave linterpreacutetation du co-
efficient de reacutegression partiel pour le facteur exercise
Pour produire une surface de reacuteponse il est neacutecessaire de
construire une grille de valeurs pour les variables dinteacuterecirct
ici age et BMI Pour les deux autres preacutedicteurs on assumera
des valeurs fixeacutees
gt pd lt- expandgrid(age=seq(44 79 length=100)
+ BMI=seq(1521 5413 length=100))
gt pd$exercise lt- rep(1 nrow(pd))
gt pd$drinkany lt- rep(0 nrow(pd))
gt pd$pred lt- predict(mod1 pd)
gt head(pd)
age BMI exercise drinkany pred
1 4400000 1521 1 0 8824950
2 4435354 1521 1 0 8827197
3 4470707 1521 1 0 8829443
4 4506061 1521 1 0 8831690
5 4541414 1521 1 0 8833937
6 4576768 1521 1 0 8836184
age
BMI
pred
38 On charge les donneacutees de la maniegravere habituelle pour les
donneacutees texte avec seacuteprateur de champ de type tabulation
gt cystic lt- readtable(pubCYSTICDAT header=TRUE)
gt fm lt- PEmax ~ Weight + BMP + FEV + RV
gt mod1 lt- lm(fm data=cystic)
gt summary(mod1)
Call
lm(formula = fm data = cystic)
Residuals
Min 1Q Median 3Q Max
-39535 -11904 4259 15614 35334
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 624448 532431 1173 0254647
Weight 17480 03797 4603 0000172
BMP -13644 05633 -2422 0025062
FEV 15480 05771 2682 0014317
RV 01275 00832 1532 0141135
Residual standard error 2273 on 20 degrees of freedom
Multiple R-squared 06148 Adjusted R-squared 05378
F-statistic 7981 on 4 and 20 DF p-value 00005139
Les reacutesultats indiquent que le poids (Weight) ainsi que deux
autres preacutedicteurs (BMP et FEV) semblent significativement
associeacutes aux variations de PEmax
Concernant lidentification des observations avec effet
levier on peut utiliser le critegravere ℎ119894 gt 1113790(119896 + 1113789)119899 avec 119896 = 1113793et 119899 = 11137901113793 soitgt hcrit lt- 2(5+1)25
gt any(hatvalues(mod1) gt hcrit)
[1] FALSE
A priori aucune observation nexerce deffet levier
Concernant la qualiteacute dajustement du modegravele le coefficient
de deacutetermination ajusteacute vaut 0538 (soit environ 54 de
la variabiliteacute de PEmax expliqueacutee par les facteurs pris en
compte dans le modegravele)
39 On augmente le modegravele preacuteceacutedent avec les variables Age et
Sex
gt mod2 lt- update(mod1 ~ + Age + Sex)
gt summary(mod2)
Call
lm(formula = PEmax ~ Weight + BMP + FEV + RV + Age + Sex data = cystic)
Residuals
Min 1Q Median 3Q Max
-37976 -10632 2201 15952 38151
Coefficients
Estimate Std Error t value Pr(gt|t|)
(Intercept) 10001652 8998226 1112 02810
Weight 237709 120397 1974 00639
BMP -171963 086957 -1978 00635
FEV 149478 071844 2081 00520
RV 011140 009244 1205 02438
Age -195096 354021 -0551 05884
Sex 057570 1163143 0049 09611
Residual standard error 2376 on 18 degrees of freedom
Multiple R-squared 06213 Adjusted R-squared 04951
F-statistic 4922 on 6 and 18 DF p-value 0003837
Plus rien ne semble significatif Le problegraveme vient essen-
tiellement du nombre de paramegravetres dans le modegravele 6
14
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15
preacutedicteurs (+ lintercept) pour 25 observations
40 Les donneacutees sont stockeacutees au format texte avec seacuteparation
de type tabulation Les donneacutees manquantes sont codeacutees
avec un rdquordquo
gt babies lt- readtable(pubbabiestxt
+ header=TRUE nastring=)
gt babies$baby lt- factor(babies$baby)
gt babies$loginsp lt- log(babies$inspirat)
gt range(table(babies$baby))
[1] 8 47
Le modegravele dANOVA incorporant entre 8 et 47 mesures
reacutepeacuteteacutees par sujet seacutecrit
gt aov1 lt- aov(loginsp ~ maxp + Error(baby)
+ data=babies[completecases(babies)])
gt summary(aov1)
Error baby
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 1829 1829 1559 0223
Residuals 25 29328 1173
Error Within
Df Sum Sq Mean Sq F value Pr(gtF)
maxp 1 3293 3293 197 lt2e-16
Residuals 523 8744 017
Leffet de la pression maximale est largement significatif
Notons que lanalyse a eacuteteacute effectueacutee sur les cas complets
Comparons avec une approche par modegravele agrave effet aleacuteatoire
gt library(nlme)
gt mod1 lt- lme(loginsp ~ maxp data=babies
+ random= ~ 1 | baby naaction=naomit)
gt anova(mod1)
numDF denDF F-value p-value
(Intercept) 1 523 7269259 lt0001
maxp 1 523 1902486 lt0001
On obtient donc sensiblement les mecircmes reacutesultats Il est
inteacuteressant de regarder ce que ce dernier modegravele fournit
comme preacutedictions Comme on peut le voir dans la figure
suivante les donneacutees individuelles sont assez rdquobruiteacuteesrdquo et
il est difficile destimer la pente commune agrave vue dœil Cela
devient par contre beaucoup plus eacutevident lorsque lon af-
fiche les preacutedictions individuelles On peut utiliser
gt qqmath(~ ranef(mod1))
pour visualiser la distribution des effets aleacuteatoires (termes
dintercept propres agrave chaque sujet) sous forme de Q-Q plot
maxp
logi
nsp
0
1
2
3
10 20 30 40
maxp
Fitt
ed
10
15
20
25
10 20 30 40
15