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