15
Introduction à R pour la recherche biomédicale Exercices corrigés Le langage R 1. Comme il n'est pas précisé pas si le facteur doit être équili- bré et/ou préalablement trié, on peut utiliser sample. Autres possibilités : > x <- gl(2, 10, labels=c("toto","titi")) > 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 d'utiliser matrix et apply : > m <- matrix(c(6,7,2,1,5,9,8,3,4), nr=3, byrow=TRUE) > apply(m, 1, sum) # lignes [1] 15 15 15 > apply(m, 2, sum) # colonnes [1] 15 15 15 3. On peut utiliser rbinom ou sample. Dans le premier cas, une réalisation de l'événement ”tirer 20 fois une pièce” s'écrit > rbinom(20, 1, p=0.5) [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, > sample(0:1, 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 insérer ces commandes dans une boucle, par exem- ple > k <- seq(10, 10000, by=100) > res <- numeric(length(k)) > for (i in seq_along(k)) + res[i] <- sum(rbinom(k[i], 1, p=0.5))/k[i] ou alors, en plus élégant : > tails <- function(n=5, p=0.5) sum(rbinom(n, 1, p))/n > res <- sapply(k, tails) Ci-dessous figure l'évolution du ”nombre de piles” lorsque k augmente, avec un intervalle de confiance à 95% asympto- tique basé sur la loi normale, ± . ( − )/. Nombre de lancers Proportion de piles 0.50 0.55 0.60 0 2000 4000 6000 8000 10000 ●● ●●● ●● ●● ●● ●● ●● ●● ●● ●● ●● 4. Une solution de base : > n <- 10 > a <- data.frame(x1=rnorm(n, 10), x2=rnorm(n, 12), + x3=gl(2, n/2)) > write.csv(a, file="a.csv") 5. On peut utiliser l'indexation, par exemple > d$class[which(d$height==max(d$height))] [1] B Levels: A B Ou alors trier les données : > d[do.call(order, d),"class"][40] [1] B Levels: A B On peut ajouter as.character pour supprimer l'affichage des attributs du facteur. 6. La solution simple consiste à créer le schéma d'allocation de base des niveaux du facteur et à le dupliquer pour obtenir la taille voulue. Par exemple, > tx <- factor(rep(rep(c("std","new"), each=3), 10)) Comme le motif est régulier (3 std suivi de 3 new), on peut utiliser gl directement : > tx <- gl(2, 3, 60, labels=c("std","new")) Pour la suite, il s'agit de manipulation des niveaux du fac- teur. > levels(tx)[1] <- "old" > tx <- relevel(tx, ref="new") > head(tx <- sample(tx)) [1] old old new old new old Levels: new old 7. Quelques suggestions : vérifier le format du fichier à l'aide d'un éditeur de texte (en particulier : ligne d'en-tête, sépara- teur de champ, séparateur décimal) afin de définir la com- mande à utiliser pour charger le fichier ; vérifier le type des variables que R a lu ; afficher un résumé numérique (sum- mary) et examiner si les distributions univariées semblent cohérentes. Ici, on ne se souciera pas d'imputation : les valeurs sus- pectes seront converties en valeurs manquantes. > WD <- "../pub" > lung <- read.table(paste(WD, "lungcancer.txt", sep="/"), + header=TRUE, na.strings=".") > summary(lung) # str(lung) time age cens Min. : -2.0 Min. : 5.00 Min. :0.0000 1st Qu.: 73.0 1st Qu.:53.00 1st Qu.:0.0000 Median :167.0 Median :59.00 Median :1.0000 Mean :186.1 Mean :59.02 Mean :0.5191 3rd Qu.:275.0 3rd Qu.:66.00 3rd Qu.:1.0000 Max. :558.0 Max. :78.00 Max. :2.0000 NA's : 2.0 NA's : 2.00 1

IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

  • Upload
    lenhan

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

Page 1: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 2: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 3: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 4: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 5: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 6: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 7: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 8: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 9: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 10: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

(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

Page 11: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 12: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 13: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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

Page 14: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

(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

Page 15: IntroductionàRpourlarecherchebiomédicale … · IntroductionàRpourlarecherchebiomédicale Exercicescorrigés LelangageR 1.Commeiln'estpasprécisépassilefacteurdoitêtreéquili-bréet/oupréalablementtrié

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