Analyse de données médicales avec R

publicité
Biostatistiques avancées avec R
de régression
TestsModèles
de comparaison
de base
Christophe Lalanne
www.aliquote.org
Synopsis
Modèle linéaire gaussien et régression
Association entre variables numériques
Régression linéaire simple
Régression logistique
b3e9140
2 / 34
Modèle linéaire gaussien et régression
b3e9140
3 / 34
Principe de la régression linéaire
• La régression linéaire permet de modéliser la relation
linéaire entre une variable réponse continue et un
prédicteur d’intérêt.
• Expliquer les variations observées au niveau d’une
variable réponse (« dépendante ») numérique, y, en
fonction de variables prédictrices (« indépendantes »,
« explicatives »), xj , pouvant être de nature qualitative ou
quantitative.
• Prédire y (en moyenne ou pour un individu donné) selon
le modèle établi.
• La linéarité de la relation et l’influence des observations
sont deux aspects critiques de la validité des
résultats (4,2) .
b3e9140
4 / 34
L’idée revient toujours à considérer qu’il existe une part systématique et une part aléatoire (résidus) dans ces variations. Le
modèle linéaire permet de formaliser la relation entre y et les
xj , en séparant ces deux sources afin d’estimer la contribution
relative des xj dans les fluctuations de y.
Le modèle théorique relie fonctionnellement la réponse au(x)
prédicteur(s) de manière additive : E(y | x) = f (x; ).
yi
b3e9140
ỹi
5 / 34
Association entre variables numériques
b3e9140
6 / 34
Données d’illustration
Dans une étude réalisée auprès de peintres dans une usine de
voitures, des chercheurs se sont intéressés à différentes mesures biologiques : concentration en hémoglobine (HAEMO), taux
hématocrite (PCV), nombre de globules blancs (WBC), lymphocite (LYMPHO), neutrophiles (NEUTRO) et concentration de plomb
sérique (LEAD) (1) .
> paint <- read.table("data/paint.dat", header = TRUE)
> dim(paint)
[1] 103
6
> names(paint)
[1] "HAEMO"
"PCV"
"WBC"
"LYMPHO" "NEUTRO" "LEAD"
> names(paint) <- tolower(names(paint))
b3e9140
7 / 34
Statistiques descriptives
Outre les résumés numériques classiques (summary()), il est
important de vérifier la distribution jointe des variables d’intérêt à l’aide d’un diagramme de dispersion. De même, avant de
construire un modèle de régression linéaire simple, on pourra
s’intéresser à la corrélation linéaire entre les deux variables
d’intérêt.
> summary(paint[,c("pcv", "haemo")])
pcv
Min.
:38
1st Qu.:44
Median :45
Mean
:45
3rd Qu.:47
Max.
:52
haemo
Min.
:13.2
1st Qu.:14.6
Median :15.0
Mean
:15.2
3rd Qu.:15.8
Max.
:17.4
> p <- ggplot(data = paint, aes(x = haemo, y = pcv))
> p + geom_point()
b3e9140
8 / 34
Mesure de corrélation
La commande cor() fournit le coefficient de corrélation linéaire
(Pearson) et de rangs (Spearman), mais il est également possible d’utiliser directement cor.test() qui fournit en plus un
test statistique.
Le coefficient de corrélation de Pearson permet d’évaluer le
degré d’association linéaire entre deux variables continues.
Les variables jouent un rôle symétrique. En pratique, il est calculé à partir de la covariance entre les deux variables, et normalisé pour prendre des valeurs entre -1 (corrélation négative
parfaite) et +1 (corrélation positive parfaite).
> cor(paint[,c("pcv", "haemo")])
pcv haemo
pcv
1.00 0.78
haemo 0.78 1.00
b3e9140
9 / 34
Test de corrélation
Le test de corrélation linéaire
Soit x et y deux variables continues, observées sur n individus. On
définit le coefficient de corrélation linéaire comme suit :
r = qP
n
Pn
i=1 (xi
i=1 (xi
x̄)
x̄)(yi
qP
n
2
ȳ)
Rappelons que l’écart-type de x s’écrit sx =
Sous H0 , la statistique de test
t=
p
n
2p
.
ȳ)2
i=1 (yi
q P
n
1
n
i=1 (xi
x̄)2 .
r
1
r2
suit une loi de Student à n 2 degrés de liberté.
La construction d’un intervalle de confiance pour le coefficient de
corrélation estimé passe par une transformation logarithmique
particulière (qui permet de se ramener à une loi connue, en
l’occurence la loi normale).
b3e9140
10 / 34
Test de corrélation
> cor.test(~ pcv + haemo, data = paint)
Pearson s product-moment correlation
data: pcv and haemo
t = 10, df = 100, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.69 0.84
sample estimates:
cor
0.78
b3e9140
11 / 34
Cas multivarié
La commande cor() permet de constuire une matrice de corrélation. Le package GGally permet quand à lui de représenter
graphiquement une matrice de diagrammes de dispersion.
> round(cor(paint), 3)
haemo
pcv wbc
haemo
1.000 0.778 0.069
pcv
0.778 1.000 0.117
wbc
0.069 0.117 1.000
lympho 0.068 0.132 0.827
neutro -0.036 -0.084 0.525
lead
0.033 0.134 0.016
lympho
0.068
0.132
0.827
1.000
0.037
0.023
neutro
-0.036
-0.084
0.525
0.037
1.000
-0.183
lead
0.033
0.134
0.016
0.023
-0.183
1.000
> library(GGally)
> ggpairs(paint)
b3e9140
12 / 34
Régression linéaire simple
b3e9140
13 / 34
Formalisation du problème
Le modèle de régression simple
Soit yi la réponse observée sur l’individu i, et xi sa valeur observée
pour le prédicteur x. Le modèle de régression linéaire s’écrit
yi =
0
+
1 xi
+ "i ,
où 0 représente l’ordonnée à l’origine et 1 la pente de la droite de
régression, et "i ⇠ N (0, 2 ) est un terme d’erreur (résidus, supposés
indépendants). Par les moindres carrés, on peut estimer les
coefficients de régression, ˆ0 et ˆ1 :
ˆ0 = ȳ ˆ1 x̄
ˆ1 = P(yi ȳ)(xi
x̄)/
P
( xi
x̄)2
Sous H0 , le rapport entre l’estimé de la pente ( ˆ1 , de variance
SSR/(n 2)
2)
(n 1)s2 ) et son erreur standard suit une loi de Student à (n
x
degrés de liberté.
b3e9140
14 / 34
Un modèle, plusieurs commandes associées
La commande lm() permet de construire un modèle de régression et d’estimer les paramètres du modèle (ordonnée à l’origine et pente).
> m <- lm(pcv ~ haemo, data = paint)
coef()
influence.measures()
Coefficients de régression
Mesures d’influence pour
les observations
confint()
resid()
Intervalle de confiance pour
les coefficients de régression
lm(y ~ x, data = )
summary()
Résidus
fitted()
Tableau des coefficients
de régression et test associés
Valeurs ajustées
anova()
plot()
abline()
predict()
Tableau d’analyse de variance
du modèle de régression
Graphique de
diagnostic
du modèle
Droite de
régression
Valeurs prédites sur données
spécifiées par l’utilisateur
> coef(m)
(Intercept)
10.5
b3e9140
haemo
2.3
15 / 34
Tableau des coefficients de régression
> print(summary(m), signif.stars = FALSE)
Call:
lm(formula = pcv ~ haemo, data = paint)
Residuals:
Min
1Q Median
3Q
Max
-5.911 -0.941 -0.097 1.174 4.840
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
10.479
2.798
3.74
3e-04
haemo
2.293
0.184
12.45
<2e-16
Residual standard error: 1.7 on 101 degrees of freedom
Multiple R-squared: 0.605,
Adjusted R-squared: 0.602
F-statistic: 155 on 1 and 101 DF, p-value: <2e-16
b3e9140
16 / 34
1
> summary ( m )
2
3
4
5
6
7
8
Call :
lm ( formula = pcv ⇠ haemo , data = paint )
Residuals :
Min
1 Q Median
-5 .9111 -0 .9405 -0 .0966
3Q
1 .1741
Max
4 .8401
9
10
11
12
13
Coefficients :
Estimate Std. Error t value Pr ( >| t |)
( Intercept ) 10 .4785
2 .7982
3 .745 0 .000301
haemo
2 .2926
0 .1842 12 .449 < 2e -16
b3e9140
17 / 34
Tableau d’analyse de variance (bis)
> anova(m)
Analysis of Variance Table
Response: pcv
Df Sum Sq Mean Sq F value Pr(>F)
haemo
1
442
442
155 <2e-16 ***
Residuals 101
288
3
--Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 .
b3e9140
0.1
1
18 / 34
Distribution des résidus
> opar <- par(mfrow= c(2,2))
> plot(m)
> par(opar)
1. résidus en fonction des valeurs ajustées
2. résidus standardisés en fonction des quantiles
3. résidus standardisés en fonction des valeurs ajustées
4. résidus standardisés en fonction de l’effet levier
b3e9140
19 / 34
Prédiction par intervalles
Les valeurs prédites sont obtenues avec fitted() ou predict()
(pour de nouvelles observations). Par exemple,
> fitted(m)
> predict(m, data.frame(haemo=seq(13, 18, by=1)))
Il existe deux types de prédictions par intervalle (95
ŷ ± tn
p 1,1 ↵/2 SE.
1. interval="prediction" (pour de nouvelles observations)
2. interval="confidence" (pour les valeurs ajustées)
b3e9140
20 / 34
Régression linéaire multiple
L’inclusion de plusieurs prédicteurs conduit à généraliser le
modèle de régression simple à la régression multiple et à s’intéresser à l’effet de chaque prédicteur en tenant compte des
autres variables dans le modèle : on parlera de l’effet d’un
prédicteur à niveau constant des autres prédicteurs. Les coefficients de régression reflètent toujours le poids de chaque
variable explicative, via le coefficient de corrélation partiel.
La régression multiple pose la question de la sélection des prédicteurs dans le modèle final, et de l’évaluation des effets partiels de chaque prédicteur. L’analyse des résidus du modèle
doit tenir compte de l’ensemble des prédicteurs en présence
dans le modèle.
b3e9140
21 / 34
Régression linéaire multiple
Dans le cas où la variable réponse est continue, le modèle
de régression multiple s’écrit simplement comme une combinaison linéaire de différents termes représentant les effets de
chaque régresseur :
E(y | x1 ,x2 , . . . ) =
0 +
p
X
j xp .
j=1
Les coefficients de régression représentent l’effet partiel de
chaque prédicteur, c’est-à-dire l’effet de l’augmentation d’une
unité de xj sur y lorsque tous les autres prédicteurs sont maintenus constants. On peut tester l’égalité de l’ensemble des coefficients (test F), la nullité d’un coefficient (test t) ou d’un ensemble de coefficients (test F partiel).
b3e9140
22 / 34
Interprétation des coefficients
Par exemple, si ŷ = ˆ0 + ˆ1 x1 + ˆ2 x2 , avec x1 l’âge et x2 le sexe
(0=M, 1=F),
E(y|x1 ,x2 ) = ˆ0 + ˆ1 x1 ,
pour les hommes,
E(y|x1 ,x2 ) = ( ˆ0 + ˆ2 ) + ˆ1 x1 , pour les femmes.
Une variation d’un an revient à :
E(Y |X1 + 1,X2 )
E(Y |X1 ,X2 ) =
=
0
+
(
0
1 ( X1
+
+ 1) +
1 X1
+
2 X2
2 X2 )
1
d’où 1 qui représente l’effet lorsqu’on augmente X1 de une
unité, à niveau constant des autres facteurs (ici, X2 ).
b3e9140
23 / 34
Questions
1. Avec les données des poids de naissance, étudier la
relation entre la variable bwt et smoke (statistiques
descriptives et représentations graphiques).
2. Réaliser un test de Student pour comparer le poids
moyen entre les deux groupes.
3. Comparer avec le résultat d’un modèle de régression
linéaire simple.
4. Construire un modèle de régression multiple incluant les
termes suivants : smoke, race, ui. Interpréter les résultats
du modèle.
b3e9140
24 / 34
Régression logistique
b3e9140
25 / 34
Principe de la régression logistique
La régression logistique permet de traiter le cas où la variable
réponse est de type binaire (oui/non, malade/pas malade, etc.),
et non pas continu comme dans le modèle de régression linéaire. Tout en relaxant certaines des hypothèses du modèle
de régression multiple, on maintient quand même l’idée d’une
relation linéaire entre la réponse et les prédicteurs.
Dans le cas d’une variable binaire, sa « moyenne » correspond
à la proportion d’individus possédant la caractéristique étudiée
ou répondant positivement à l’événement, d’où l’idée de modéliser la probabilité de succès, comprise entre 0 et 1, en fonction d’un certain nombre de prédicteurs.
Dans les enquêtes épidémiologiques cas-témoin (avec ou sans matching) où l’incidence de la maladie n’est pas connue, la régression logistique fournit une estimation de l’odds-ratio ajusté sur les co-facteurs d’intérêt (âge, sexe, etc.). D’autre part,
lorsque la prévalence de la maladie est faible, l’OR fournit une bonne approximation
du risque relatif.
b3e9140
26 / 34
Parallèle avec la régression linéaire
Comme dans la régression linéaire, on cherche la meilleure
combinaison linéaire des données d’entrée pour modéliser la
réponse, à ceci près que c’est une transformation de cette
combinaison (on parle d’une fonction de lien) qui est utilisée
en sortie.
X1
X2
b1
b2
Xp
X1
X2
bp
Y
X
∫
b1
b2
Xp
X
bp
1
1+e
Y
x
Au lieu d’utiliser lm(), on utilisera dans ce cas glm().
b3e9140
27 / 34
Formalisation du modèle
Le modèle de régression logistique
Si l’on note ⇡ la probabilité d’observer l’événement y = 1 (vs. 0),
alors le log odds (transformation logit) peut s’exprimer comme une
fonction linéaire des paramètres du modèle à p prédicteurs :
g(x) = log
✓
⇡
1
⇡
◆
=
0
+
1 x1
+ ··· +
p xp ,
et la probabilité prédite s’écrit alors
P(y = 1 | x1 ,x2 , . . . ,xp ) = ŷi =
exp( ˆ0 + ˆ1 x1 + · · · + ˆp xp )
1 + exp( ˆ0 + ˆ1 x1 + · · · + ˆp xp )
.
Dans ce type de modèle, on fait l’hypothèse que yi suit une
distribution binomiale et que les observations sont indépendantes
(aucune hypothèse sur la variance qui n’est pas un paramètre dans
ce cas de figure). Notons également l’absence de terme d’erreur.
D’autres fonctions de lien existent (probit, log-log).
b3e9140
28 / 34
Illustration
Données sur les poids de naissance (3)
>
>
>
>
>
>
data(birthwt, package="MASS")
ethn <- c("White","Black","Other")
birthwt$race <- factor(birthwt$race, labels=ethn)
fm <- low ~ age
m1 <- glm(fm, data=birthwt, family=binomial)
coef(m1)
(Intercept)
0.385
age
-0.051
> exp(coef(m1))
(Intercept)
1.47
b3e9140
age
0.95
29 / 34
> summary(m1)
Call:
glm(formula = fm, family = binomial, data = birthwt)
Deviance Residuals:
Min
1Q Median
-1.040 -0.902 -0.775
3Q
1.412
Max
1.780
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept)
0.3846
0.7321
0.53
0.6
age
-0.0512
0.0315
-1.62
0.1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 234.67 on 188 degrees of freedom
Residual deviance: 231.91 on 187 degrees of freedom
AIC: 235.9
b3e9140
30 / 34
> fm <- low ~ age + lwt + race + ftv
> m2 <- glm(fm, data=birthwt, family=binomial)
> summary(m2)
Call:
glm(formula = fm, family = binomial, data = birthwt)
Deviance Residuals:
Min
1Q Median
-1.416 -0.893 -0.711
3Q
1.245
Max
2.075
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.29537
1.07144
1.21
0.227
age
-0.02382
0.03373
-0.71
0.480
lwt
-0.01424
0.00654
-2.18
0.029 *
raceBlack
1.00390
0.49786
2.02
0.044 *
raceOther
0.43311
0.36224
1.20
0.232
ftv
-0.04931
0.16724
-0.29
0.768
--b3e9140
31 / 34
Interprétation
L’âge de la mère ne semble pas être un prédicteur intéressant,
mais son poids oui, et on retrouve des différences entre les
mères White vs. Black. Le logit estimé s’écrit :
ĝ(x) =
1.295 0.024 ⇥ age 0.014 ⇥ lwt
+1.004 ⇥ I(race = Black) + 0.433 ⇥ I(race = Other)
0.049 ⇥ ftv,
ce qui permet d’obtenir les valeurs prédites (« probabilité d’un
enfant avec un poids inférieur à 2,5 kg à la naissance ») facilement. Pour un enfant dont la mère possède les caractéristiques
moyennes ou modales de l’échantillon (âge 23,2 ans, poids 59
kg, White, aucune visite chez le gynécologue durant le premier
trimestre de grossesse), on obtient :
P(low = 1)
b3e9140
= 1/ 1 + exp( (1.30
= 0.253.
0.02 ⇥ 23.24
0.01 ⇥ 129.82)
32 / 34
Références I
1. B Everitt and S Rabe-Hesketh. Analyzing Medical Data Using S-PLUS. Springer,
2001.
2. FE Harrell. Regression modeling strategies with applications to linear models, logistic regression and survival analysis. Springer, 2001.
3. D Hosmer and S Lemeshow. Applied Logistic Regression. New York : Wiley, 1989.
4. E Vittinghoff, DV Glidden, SC Shiboski, and McCulloch. Regression Methods in
Biostatistics. Linear, Logistic, Survival, and Repeated Measures Models. Springer,
2005.
b3e9140
33 / 34
Index des commandes
anova, 18
Call, 17
coef, 15, 29
cor, 9, 12
cor.test, 11
data, 17
dim, 7
exp, 29
factor, 29
b3e9140
fitted, 20
formula, 17
geom_point, 8
ggpairs, 12
glm, 27, 29, 31
library, 12
lm, 15, 17, 27
names, 7
par, 19
plot, 19
predict, 20
Q, 17
read.table, 7
round, 12
summary, 8, 16, 17, 30, 31
t, 17
tolower, 7
34 / 34
Téléchargement