Poly Régression multiple

publicité
Master2 NCC Modules Statistiques – V. Fourcassié & C. Jost INTRODUCTION AUX MODELES LINEAIRES GENERAUX (General Linear Model – GLM) EXERCICES SOMMAIRE 1 EXEMPLE DE REGRESSION SIMPLE : REGRESSION DE LIFEXPEF SUR BIRTHRAT................................ 2 2 EXEMPLE DE REGRESSION MULTIPLE : REGRESSION DE LIFEXPEF SUR URBAN ET DOCS ................ 10 3 EXEMPLE DE REGRESSION MULTIPLE : REGRESSION DE LIFEXPEF SUR DOCS ET GDP..................... 19 4 EXEMPLE DE REGRESSION MULTIPLE : TRAITEMENT DU FICHIER FOURMI_TRANSPORT ............... 23 5 POUR ALLER PLUS LOIN : QUELQUES OUVRAGES ......................................................................... 31 07/09/2012 /1 1
Exemple de régression simple : régression de lifexpef sur birthrat Description du Tableau Country.txt Nom
colonne
country
pop92
urban
gdp
lifeexpm
lifeexpf
birthrat
deathrat
infmr
fertrate
region
develop
radio
phone
hospbed
docs
1.1
Signification
Population, 1992, in millions
Percent urban, 1992
GDP per capita
Male life expectancy 1992
Female life expectancy 1992
Births per 1000 population, 1992
Deaths per 1000 people, 1992
Infant mortality rate 1992 (per 1000 live
births)
Fertility rate per woman, 1990
Region of the world
Status as Developing Country
Radios per 100 people
Phones per 100 people
Hospital beds per 10,000 people
Doctors per 10,000 people
Préparation du Tableau Country.txt 1.1.1 Charger le jeu de données dans R et le placer dans un tableau nommé « Country » Menu «Données » -­‐> Importer des données -­‐> Depuis un fichier text ou le presse-­‐papier > Country <-­‐ read.table("C:/…../Country.txt", header=TRUE, sep="", na.strings="NA", dec=".", strip.white=TRUE) Visualiser le jeu de données dans R Cliquer sur le bouton « Visualiser » > showData(Country, placement='-­‐20+200', font=getRcmdr('logFont'), maxwidth=80, maxheight=30) 07/09/2012 /2 1.1.2 Compte le nombre de valeurs manquantes dans le tableau Country pour chaque VI Menu « Statistiques » -­‐> Résumés -­‐> Dénombrer les observations manquantes > sapply(Country, function(x)(sum(is.na(x)))) # NA counts country pop92 urban gdp lifeexpm lifeexpf birthrat deathrat 0 0 0 0 0 0 1 1 infmr fertrate region develop radio phone hospbed docs 0 2 0 0 0 8 6 1 1.1.3 Elimine les observations ayant des valeurs manquantes Menu « Données » -­‐> Jeu de données actif -­‐> Eliminer les cas contenant des valeurs manquantes > Country <-­‐ na.omit(Country) 1.1.4 Calcule la moyenne et l’écart-­‐type des VI Menu « Statistiques » -­‐> Résumés -­‐> Statistiques descriptives > numSummary(Country[,c("birthrat", "deathrat", "develop", "docs", "fertrate", "gdp", "hospbed", "infmr", "lifeexpf", "lifeexpm", "phone", "pop92", "radio", "region", "urban")], statistics=c("mean", "sd")) mean sd n birthrat 30.4066667 13.1819827 105 deathrat 10.2476190 4.4609005 105 develop 0.7619048 0.4279605 105 docs 10.9241888 11.2732144 105 fertrate 4.1038095 1.9270306 105 gdp 4450.9904762 6330.5005263 105 hospbed 34.1015276 31.6769137 105 infmr 56.3371429 43.5898680 105 lifeexpf 67.0285714 11.1592124 105 lifeexpm 62.5619048 9.7929761 105 phone 15.1214135 22.7345794 105 pop92 45.2093905 144.8199149 105 radio 33.2820647 31.2501857 105 region 8.6761905 5.1093716 105 urban 50.4314286 24.4627555 105 07/09/2012 /3 1.2
Représenter la variable lifeexpf en fonction de la variable birthrat On cherche à savoir si, pour les pays répertoriés dans la base, l’espérance de vie des femmes est liée au taux de natalité. Menu Graphes -­‐> Nuages de points scatterplot(lifeexpf~birthrat, reg.line=lm, smooth=FALSE, labels=FALSE, boxplots='xy', span=0.5, data=Country) 1.3
Calculer les coefficients de la droite des moindres carrés et leur intervalle de confiance Menu Statistiques -­‐> Ajustement de modèles -­‐> Régression linéaire > RegModel.1 <-­‐ lm(lifeexpf~birthrat, data=Country) > summary(RegModel.1) 07/09/2012 /4 Call: lm(formula = lifeexpf ~ birthrat, data = Country) Residuals: Min 1Q Median 3Q Max -­‐17.60213 -­‐2.87529 0.03205 3.22218 17.81400 Teste si l’intercept de la droite de Coefficients: régression est ≠ 0 Estimate Std. Error t value Pr(>|t|) (Intercept) 89.12921 1.41616 62.94 <2e-­‐16 *** birthrat -­‐0.72684 0.04276 -­‐17.00 <2e-­‐16 *** Teste si la pente de la -­‐-­‐-­‐ droite de régression Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 est ≠ 0 Residual standard error: 5.749 on 103 degrees of freedom Part de la variance Multiple R-­‐Squared: 0.7372, Adjusted R-­‐squared: 0.7346 expliquée par le modèle F-­‐statistic: 288.9 on 1 and 103 DF, p-­‐value: < 2.2e-­‐16 Note: Pour obtenir le même modèle on peut aussi passer par les commandes Menu Statistiques -­‐> Ajustement de modèles -­‐> Modèle linéaire 1.4
Ecrire l’équation de la droite de régression et interpréter les résultats Lifeexpf = Intercept de la droite de régression + Pente de la droite de régression x birthrat = 89.13 – 0.73 birthrat Relation très significative entre l’espérance de vie des femmes et le taux de natalité : l’espérance de vie des femmes décroît lorsque le taux de natalité augmente. Le modèle de régression linéaire explique environ 73% de la variance observée dans l’espérance de vie des femmes. 1.5
Demander la table d’anova de l’analyse de régresion Menu Modèles -­‐> Tests d’hypothèses -­‐> Table de l’anova (Demander ANOVA Type I séquentiel) > anova(RegModel.1) Analysis of Variance Table Response: lifeexpf Df Sum Sq Mean Sq F value Pr(>F) birthrat 1 9547.0 9547 288.88 < 2.2e-­‐16 *** Residuals 103 3403.9 33 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Le F du modèle (déjà donné au point 2) correspond au ratio : variance expliquée par le modèle de régression linéaire/ variance résiduelle= (9547.0 /1) / (3403.9 / 103)= 288.88. 07/09/2012 /5 1.6
Vérifier la normalité de la distribution des résidus de la droite de régression En première approximation on peut voir dans les sorties du modèle que les résidus se distribuent symétriquement autour de la médiane. Médiane des résidus= 0.03205; valeur minimale= -­‐17.60213 ; valeur maximale= 17.81400 1.6.1 On ajoute les statistiques calculées par le modèle au jeu de données courant: Menu Modèles -­‐> Ajouter les statistiques des observations au jeu de données > Country$fitted.RegModel.2 <-­‐ fitted(RegModel.2) -­‐> Valeurs prédites par le modèle > Country$residuals.RegModel.2 <-­‐ residuals(RegModel.2) -­‐> Valeurs des résidus du modèle Cliquer dans le bouton « Visualiser » pour visualiser les valeurs des statistiques générées par le modèle. 1.6.2 On représente la distribution de fréquence des résidus Menu Graphes -­‐> Histogramme > Hist(Country$residuals.RegModel.2, scale="frequency", breaks="Sturges", col="darkgray") 1.6.3 On teste la normalité de la distribution des résidus Menu Statistiques -­‐> Résumés -­‐> Test de normalité de Shapiro –Wilk > shapiro.test(Country$residuals.RegModel.2) 07/09/2012 /6 Shapiro-­‐Wilk normality test data: Country$residuals.RegModel.2 W = 0.9778, p-­‐value = 0.07467 La probabilité associée au test est au dessus du seuil de 0,05 -­‐> la distribution des résidus n’est pas significativement différente d’une distribution normale. 1.7
Représenter les graphes diagnostics de la régression et les interpréter Menu Modèles -­‐> Graphes -­‐> Diagnostics graphiques > oldpar <-­‐ par(oma=c(0,0,3,0), mfrow=c(2,2)) > plot(RegModel.1) > par(oldpar) 07/09/2012 /7 Normal Q-­‐Q Plot: permet de vérifier la normalité des résidus. Pour une distribution parfaitement normale les points doivent être alignés sur la droite en pointillés. On peut avoir une distribution des résidus différente d’une distribution normale si a) la var dépendante n’est pas distribuée de façon normale. b) le modèle de régression n’ajuste pas bien au nuage de points ou c) la variance de la var dépendante n’est pas constante pour toutes les valeurs de la var indépendante. Pour remédier à ce problème on peut essayer de transformer la var dépendante. Par ex si la distribution des résidus est biaisée vers la droite on peut faire une transformation log, si elle est biaisée vers la gauche on peut prendre le carré de la var dépendante. Ici on voit que la majorité des points correspondant aux observations sont à peu près alignés sur la droite en pointillés. Cependant, les observations qui ont des résidus avec des valeurs négatives extrêmes contribuent à éloigner la distribution des résidus de plus en plus d’une distribution normale. On note également une observation avec un résidu positif extrême qui est très éloigné de la droite en pointillé. Note : Vous pouvez obtenir un graphe équivalent en faisant Menu Modèles -­‐> Graphes -­‐> Graphe quantile-­‐quantile des résidus Residuals vs. Fitted : permet de vérifier que la variance de la variable dépendante est constante, càd indépendante de la valeur de la variable indépendante (condition d’homoscédasticité). Si la variance est constante les points doivent être dispersés autour de la droite horizontale passant par la valeur 0 et former une bande horizontale. Un nuage de points en forme d’entonnoir ouvert vers la droite indique que la variance de la variable dépendante est plus importante pour des grandes valeurs. Un nuage de points en forme d’entonnoir ouvert vers la gauche indique que la variance de la variable dépendante est plus importante pour des petites valeurs. Dans les deux cas la variance de la var dépendante n’est pas constante pour toutes les valeurs de la var indépendante et on doit procéder à une transformation de la var dépendante pour essayer de remédier au problème (par exemple transformation racine carrée ou log dans le cas ou la variance de la var dépendante augmente lorsque la var indépendante augmente). Ici on note que le nuage de points a une forme d’entonnoir ouvert sur la gauche, ce qui indique que la variance dans la valeur de l’espérance de vie est plus importante pour les pays où l’espérance de vie est faible. Scale – Location : permet de tester la linéarité de la relation entre var dépendante et var indépendante. Si la relation linéaire est bonne la ligne ajustée aux points doit être à peu près droite et horizontale. Ici on note que la ligne n’est pas droite et qu’il y a une cassure au niveau de la valeur lifeexpf= 65 ce qui indique que la relation n’est pas parfaitement linéaire. Sur le graphe lifeexpf vs birthrat on voit en effet que pour des grandes valeurs de birthrat la relation pourrait être aussi décrite de façon non-­‐
linéaire. Residuals – Leverage : permet de détecter les points extrêmes. La distance de chaque point par rapport à la ligne continue tracée sur le graphique représente la distance de Cook. La distance de Cook mesure le changement dans le coeff de régression lorsque l’observation est éliminée de l’analyse. Ici les distances de Cook les plus importantes correspondent aux observations 91 (Jordanie) et 17 (Tchad). On pourra examiner les valeurs de ces points pour savoir si ces points sont extrêmes parce qu’une erreur a été commise dans le relevé ou la transcription des résultats ou bien s’il y a des 07/09/2012 /8 raisons de penser que ces pays sont réellement différents des autres en ce qui concerne la relation entre lifeexpf et birthrat. On pourrait ensuite refaire l’analyse en retirant ces deux points extrêmes. Note : Vous pouvez également représenter les distances de Cook de chaque observation à l’aide de la commande. Graphe -­‐> Nuages de points -­‐> Variable X= Cooks.distance.regModel Variable Y= obsNumber (ajouter ces valeurs par Modèles -­‐> Ajouter les statistiques ...). Les points influents correspondent aux distances de Cook les plus importantes. Les points influents apparaissent aussi en utilisant la commande : Modèles -­‐> Graphes -­‐> Graphe d’influence des points 1.8
Exo : refaire toute l’analyse en éliminant les deux observations extrêmes. (enlever les lignes par Données -­‐> Jeu de données actif -­‐> Eliminer les variables ...) 07/09/2012 /9 2
Exemple de régression multiple : régression de lifexpef sur urban et docs On cherche à savoir si pour les pays répertoriés dans la base l’espérance de vie des femmes est liée au pourcentage de population urbaine et au nombre de docteurs pour 10 000 habitants. Variable dépendante : lifeexpf Variables indépendantes : urban (continue) et docs (continue) 2.1 On crée un diagramme de dispersion de la variable lifeexpf en fonction des VI urban et docs Menu Graphes -­‐> Matrice de nuages de points > scatterplot.matrix(~docs+lifeexpf+urban, reg.line=lm, smooth=FALSE, span=0.5, diagonal = 'boxplot', data=Country) Pour chaque graphe, la variable représentée sur l’axe Y est celle qui se trouve sur la ligne de la matrice, la variable représentée sur l’axe X est celle qui est représentée sur la colonne de la matrice. On voit sur le diagramme de dispersion que la variable docs a besoin d’être transformée. On choisit une transformation logarithmique (log népérien; N.B.: la fonction log décimal s’écrit log10 sous R). 07/09/2012 /10 2.2 Crée une nouvelle variable logdocs qui contient le log naturel de la variable docs Menu Données -­‐> Gérer les variables dans le jeu de données actif -­‐> Calculer une nouvelle variable > Country$logdocs <-­‐ with(Country, log(docs)) 2.3
Calcule un modèle linéaire de la variable lifeexpf en fonction des VI urban et logdocs Menu Statistiques -­‐> Ajustement de modèles -­‐> Modèle linéaire Le modèle linéaire que l’on rentre s’écrit sous la forme : Espérance de vie des femmes= b0 + b1 (pourcentage de pop urbaine) + b2 (log du nombre de docteurs pour 10000 habitants) + b3 (pourcentage de pop urbaine * log du nombre de docteurs pour 10000 habitants) Ce modèle teste 3 hypothèses : 1) L’espérance de vie des femmes dépend du pourcentage de la population urbaine dans le pays 2) L’espérance de vie des femmes dépend du nombre de docteurs pour 10,000 habitants dans le pays 3) L’espérance de vie des femmes varie de façon différente en fonction du pourcentage de population urbaine lorsque le nombre de docteurs pour 10,0000 habitants varie. Exemple : dans un pays où le nombre de docteurs est en dessous d’un certain seuil l’espérance de vie des femmes diminue beaucoup plus rapidement lorsque le pourcentage de population urbaine augmente que dans un pays où le nombre de docteurs est au dessus d’un certain seuil. Dans R ce modèle peut s’écrire de deux façons : (lifeexpf ~ logdocs * urban) OU (lifeexpf ~ logdocs + urban + logdocs :urban) > summary(LinearModel.1) Call: lm(formula = lifeexpf ~ logdocs * urban, data = Country) Residuals: Min 1Q Median 3Q Max -­‐18.2243 -­‐3.0038 0.5944 3.2842 16.2094 Coefficients: Teste si le coef de corrélation partielle Estimate Std. Error t value Pr(>|t|) de logdocs est significativement ≠ 0 (Intercept) 57.84579 1.48588 38.930 < 2e-­‐16 *** logdocs 4.68990 0.87511 5.359 5.29e-­‐07 *** Teste si le coef de corrélation partielle urban -­‐0.02643 0.04413 -­‐0.599 0.5505 de urban est significativement ≠ 0 logdocs:urban 0.03094 0.01669 1.854 0.0667 . -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Teste si le coef de corrélation partielle de l’interaction logdocs:urban est significativement ≠ 0 Residual standard error: 5.315 on 101 degrees of freedom 07/09/2012 /11 Multiple R-­‐Squared: 0.7797, Adjusted R-­‐squared: 0.7731 F-­‐statistic: 119.2 on 3 and 101 DF, p-­‐value: < 2.2e-­‐16 2.4
Demander la table d’ANOVA de la régression (LinearModel.1) Menu Modèles -­‐> Tests d’hypothèses -­‐> Table de l’ANOVA (Demander ANOVA Type I séquentiel) > summary.aov(LinearModel.1) Df Sum Sq Mean Sq F value Pr(>F) logdocs 1 9983.0 9983.0 3 53.3914 < 2e-­‐16 *** urban 1 17.6 17.6 0.6245 0.43122 logdocs:urban 1 97.1 97.1 3.4365 0.06669 . Residuals 101 2853.2 28.2 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 La première ligne du tableau donne la somme des résidus au carré (SCE) pour le modèle (lifeexpf ~ logdocs). La deuxième ligne donne la diminution de la somme des résidus au carré lorsque la variable explicative urban est ajoutée au modèle initial (lifeexpf ~ logdocs + urban). La troisième ligne donne la diminution de la somme des résidus au carré lorsque la variable d’interaction logdocs :urban est ajoutée au dernier modèle . ATTENTION ! du fait de ce mode de calcul la table d’ANOVA obtenue dépend de l’ordre dans lequel sont rentrées les variables indépendantes dans le modèle. La table d’ANOVA du modèle (lifeexpf ~ urban * logdocs) est la suivante : > anova(LinearModel.8) Analysis of Variance Table Response: lifeexpf Df Sum Sq Mean Sq F value Pr(>F) urban 1 6392.4 6392.4 226.2857 < 2e-­‐16 *** logdocs 1 3608.3 3608.3 127.7301 < 2e-­‐16 *** urban:logdocs 1 97.1 97.1 3.4365 0.06669 . Residuals 101 2853.2 28.2 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Le F calculé au point 2.3 correspond au rapport de la variance expliquée par le modèle de régression linéaire sur la variance des résidus (=la variance inexpliquée). Soit F(3, 101)= ((9983.0 + 17.6 + 97.1) / 28.2= 119.15 La valeur du R2 au point 3= (Var expliquée par le modèle / Var totale) = (9983 + 17.6 + 97.1) /((9983 + 17.6 + 97.1) + 2853.2)= 0.779 On simplifie le modèle (procédure de simplification rétrograde pas-­‐à-­‐pas – backward stepwise simplification procedure) en retirant l’interaction entre les VI logdocs et urban qui n’est pas significative. 07/09/2012 /12 Le nouveau modèle s’écrit : lifeexpf= b0 + b1 urban + b2 logdocs 2.5
Calcule un modèle linéaire de la variable lifeexpf en fonction des VI logdocs et urban > LinearModel.2 <-­‐ lm(lifeexpf ~ logdocs + urban, data=Country) > summary(LinearModel.2) Call: lm(formula = lifeexpf ~ logdocs + urban, data = Country) Residuals: Min 1Q Median 3Q Max -­‐18.3598 -­‐2.9815 0.7318 3.5883 14.9789 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 56.48737 1.30796 43.187 <2e-­‐16 *** logdocs 5.98181 0.53556 11.169 <2e-­‐16 *** urban 0.02657 0.03402 0.781 0.437 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 5.378 on 102 degrees of freedom Multiple R-­‐squared: 0.7722, Adjusted R-­‐squared: 0.7677 F-­‐statistic: 172.9 on 2 and 102 DF, p-­‐value: < 2.2e-­‐16 2.6
Demander la table d’ANOVA de la régression (LinearModel.2) > anova(LinearModel.2) Analysis of Variance Table Response: lifeexpf Df Sum Sq Mean Sq F value Pr(>F) logdocs 1 9983.0 9983.0 345.15 <2e-­‐16 *** urban 1 17.6 17.6 0.61 0.4366 Residuals 102 2950.2 28.9 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 2.7
Comparaison des deux modèles On compare le modèle avec et sans interaction. 07/09/2012 /13 Menu Modèles -­‐> Test d’hypothèses -­‐> Comparaison deux modèles > anova(LinearModel.1, LinearModel.2) Analysis of Variance Table Model 1: lifeexpf ~ logdocs * urban Model 2: lifeexpf ~ logdocs + urban > anova(LinearModel.1, LinearModel.2) Analysis of Variance Table Model 1: lifeexpf ~ logdocs * urban Model 2: lifeexpf ~ logdocs + urban Res.Df RSS Df Sum of Sq F Pr(>F) 1 101 2853.2 2 102 2950.2 -­‐1 -­‐97.077 3.4365 0.06669 . -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Le F calculé correspond au calcul : F= [(2950.2 – 2853.2)/ (4 -­‐ 3)] / [2853.2 / (105 – 4)] = -­‐ 97.077 / 28.25 = 3.436 RSS 2ème Nombre d’observations -­‐ Nombre de paramètres 1er modèle er
RSS 1 modèle modèle Nombre de paramètres 1er modèle (= 4 coef var logdocs + coef RSS 2ème var urban + coef var logdocs :urban + variance des résidus) – modèle Nombre de paramètres 2ème modèle On compare le F calculé au F donné par les tables avec (4-­‐3)= 1 ddl au numérateur et (105 – 4) = 101 au dénominateur Les deux modèles ne sont pas significativement différents entre eux. La part de la variance totale expliquée par le modèle 2 n’est pas significativement différente de celle expliquée par le modèle 1. Donc on ne diminue pas la valeur explicative du modèle en retirant le terme d’interaction. Un bon modèle étant un modèle avec un minimum de variables explicatives on choisit donc le modèle 2 qui s’écrit : lifexpf ~ logdocs + urban 2.8
Représenter le nuage de points 3D de lifeexpf en fonction des VI urban et logdocs Menu Graphes -­‐> Graphe 3D -­‐> Nuage de points en 3D > library(rgl, pos=4) > library(mgcv, pos=4) > scatter3d(Country$logdocs, Country$lifeexpf, Country$urban, fit="linear", 07/09/2012 /14 + residuals=TRUE, bg="white", axis.scales=TRUE, grid=TRUE, ellipsoid=FALSE, + xlab="logdocs", ylab="lifeexpf", zlab="urban") Les points jaunes correspondent aux valeurs des lifeexpf pour les observations. Les traits verts au dessus et rouge au dessous du plan de régression représentent les résidus. Il apparaît bien sur le graphe que la VD lifeexpf augmente avec la VI logdocs mais pas avec la VI urban. On remarquera le problème de colinéarité entre la VI logdocs et la VI urban qui se manifeste par le fait que les points ne sont pas distribués uniformément sur le plan de régression mais tendent à s’aligner le long d’une des diagonales de ce plan. 2.9
Sauver le graphe 3D sous forme d’image Menu Graphes -­‐> Sauver le Graphe -­‐> Graphe 3D RGL > rgl.snapshot("C:/........Stat/RGLGraph.png") Comme l’effet de la variable urban n’est pas significatif on simplifie encore le modèle de régression en gardant uniquement la VI logdocs. Le nouveau modèle s’écrit : lifeexpf= b0 + b2 logdocs 2.10 Calcule un modèle linéaire de la variable lifeexpf en fonction de la VI logdocs > LinearModel.3 <-­‐ lm(lifeexpf ~ logdocs, data=Country) 07/09/2012 /15 > summary(LinearModel.3) Call: lm(formula = lifeexpf ~ logdocs, data = Country) Residuals: Min 1Q Median 3Q Max -­‐18.9614 -­‐2.9699 0.7985 3.8618 15.3478 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 57.3295 0.7389 77.59 <2e-­‐16 *** logdocs 6.3054 0.3388 18.61 <2e-­‐16 *** -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 5.368 on 103 degrees of freedom Multiple R-­‐squared: 0.7708, Adjusted R-­‐squared: 0.7686 F-­‐statistic: 346.5 on 1 and 103 DF, p-­‐value: < 2.2e-­‐16 2.11 Demander la table d’ANOVA de la régression (LinearModel.3) > anova(LinearModel.3) Analysis of Variance Table Response: lifeexpf Df Sum Sq Mean Sq F value Pr(>F) logdocs 1 9983.0 9983.0 346.46 < 2.2e-­‐16 *** Residuals 103 2967.9 28.8 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 On compare les modèles sans et avec la variable urban > anova(LinearModel.2, LinearModel.3) Analysis of Variance Table Model 1: lifeexpf ~ logdocs + urban Model 2: lifeexpf ~ logdocs Res.Df RSS Df Sum of Sq F Pr(>F) 1 102 2950.2 2 103 2967.9 -­‐1 -­‐17.642 0.61 0.4366 Les deux modèles ne sont pas significativement différents entre eux. La variable urban n’explique pas une partie significative de la variable réponse. On peut donc la supprimer et considérer comme modèle final le modèle lifeexpf ~ logdocs 07/09/2012 /16 Les coefficients du modèle de régression sont les suivants : b0 = 57.33 b1 = 6.31 L’équation de notre modèle peut maintenant s’écrire : lifeexpf= 57.33 + 6.31 logdocs Le modèle explique 77% de la variance totale ce qui en fait un modèle explicatif satisfaisant. Seule la variable logdocs a un effet significatif sur l’espérance de vie des femmes : pour un même pourcentage de population urbaine l’espérance de vie des femmes croît de manière significative avec le nombre de docteurs pour 10 000 habitants. Lorsque le Ln du nombre de docteurs pour 10 000 habitants augmente d’une unité, l’espérance de vie des femmes croît de 6.31 années. Autrement dit, si on fait la conversion vers l’échelle linéaire, l’espérance de vie des femmes augmente de 6.31 années lorsque le nombre de docteur pour 10 000 habitants passe par exemple de 10 à 10 x e1= 10 x 2.72= 27.2. 2.12 Représentation du graphe de la régression Menu Graphes -­‐> Nuage de points > scatterplot(lifeexpf~logdocs, reg.line=lm, smooth=FALSE, labels=FALSE, + boxplots=FALSE, span=0.5, data=Country) 07/09/2012 /17 2.13 Examen et diagnostic des résidus du modèle > oldpar <-­‐ par(oma=c(0,0,3,0), mfrow=c(2,2)) > plot(LinearModel.3) > par(oldpar) La médiane des résidus est proche de 0 et la distribution des résidus du modèle est à peu près normale. L’homoscédasticité des résidus est également assez bien respectée sauf pour les observations qui correspondent aux valeurs centrales de la VD. Ceci pourrait être du à quelques observations ayant des valeurs extrêmes (46, 81, 88) qu’il conviendrait d’examiner de plus près. On refera au besoin l’analyse en sortant les observations correspondantes à ces valeurs extrêmes du jeu de données. 07/09/2012 /18 3
Exemple de régression multiple : régression de lifexpef sur docs et gdp On cherche à savoir si pour les pays répertoriés dans la base l’espérance de vie des femmes est liée au « gross domestic product » (gdp, produit national brut) et au nombre de docteurs pour 10 000 habitants. Variable dépendante : lifeexpf Variables indépendantes : gdp (continue) et docs (continue) 3.1
Diagramme de dispersion de la variable lifeexpf en fonction de la VI gdp et de la VI docs > scatterplot.matrix(~docs+gdp+lifeexpf, reg.line=lm, smooth=FALSE, span=0.5, diagonal = 'density', data=Country) 3.2
Crée deux nouvelles VI logdocs et loggdp qui contiennent le log naturel des VI docs et gdp > Country$logdocs <-­‐ with(Country, log(docs)) > Country$loggdp <-­‐ with(Country, log(gdp)) 3.3
Régression de lifeexpf en fonction des VI logdocs et loggdp 07/09/2012 /19 > LinearModel.1 <-­‐ lm(lifeexpf ~ logdocs *loggdp , data=Country) > summary(LinearModel.1) Call: lm(formula = lifeexpf ~ logdocs * loggdp, data = Country) Residuals: Min 1Q Median 3Q Max -­‐15.5378 -­‐1.9674 0.5319 2.9038 15.0246 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 39.8038 5.2424 7.593 1.61e-­‐11 *** logdocs 4.7078 1.7198 2.737 0.00732 ** loggdp 2.9019 0.8764 3.311 0.00129 ** logdocs:loggdp -­‐0.0950 0.2658 -­‐0.357 0.72151 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 4.878 on 101 degrees of freedom Multiple R-­‐Squared: 0.8144, Adjusted R-­‐squared: 0.8089 F-­‐statistic: 147.7 on 3 and 101 DF, p-­‐value: < 2.2e-­‐16 > summary.aov(LinearModel.1) Df Sum Sq Mean Sq F value Pr(>F) logdocs 1 9983.0 9983.0 419.4961 < 2.2e-­‐16 *** loggdp 1 561.3 561.3 23.5858 4.372e-­‐06 *** logdocs:loggdp 1 3.0 3.0 0.1278 0.7215 Residuals 101 2403.6 23.8 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Il n’y a pas d’interaction significative entre les VI logdocs et loggdp. On peut donc simplifier le modèle en retirant le terme d’interaction. LinearModel.2 <-­‐ lm(lifeexpf ~ logdocs + loggdp , data=Country) > summary(LinearModel.2) Call: lm(formula = lifeexpf ~ logdocs + loggdp, data = Country) Residuals: Min 1Q Median 3Q Max -­‐15.5979 -­‐2.0971 0.5621 2.8253 15.0696 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 41.2358 3.3667 12.248 < 2e-­‐16 *** logdocs 4.1247 0.5421 7.609 1.42e-­‐11 *** loggdp 2.6572 0.5448 4.877 3.97e-­‐06 *** 07/09/2012 /20 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 4.857 on 102 degrees of freedom Multiple R-­‐Squared: 0.8142, Adjusted R-­‐squared: 0.8105 F-­‐statistic: 223.5 on 2 and 102 DF, p-­‐value: < 2.2e-­‐16 > summary.aov(LinearModel.2) Df Sum Sq Mean Sq F value logdocs 1 9983.0 9983.0 423.114 loggdp 1 561.3 561.3 23.789 Residuals 102 2406.6 23.6 -­‐-­‐-­‐ Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 3.4
Pr(>F) < 2.2e-­‐16 *** 3.969e-­‐06 *** Comparaison des deux modèles On compare le modèle avec et sans interaction. Menu Modèles -­‐> Test d’hypothèses -­‐> Comparaison deux modèles Analysis of Variance Table Model 1: lifeexpf ~ logdocs * loggdp Model 2: lifeexpf ~ logdocs + loggdp Res.Df RSS Df Sum of Sq F Pr(>F) 1 101 2403.56 2 102 2406.60 -­‐1 -­‐3.04 0.1278 0.7215 Les deux modèles ne sont pas significativement différents entre eux. La part de la variance de la variable de réponse expliquée par le modèle 2 n’est pas significativement différente de celle expliquée par le modèle 1. Donc on ne diminue par la valeur explicative du modèle en retirant le terme d’interaction. Un bon modèle étant un modèle avec un minimum de variables explicatives on choisit donc le modèle 2. 3.5
Représenter les graphes de diagnostic du modèle 07/09/2012 /21 3.6
Représenter le nuage de points de lifeexpf en fonction de logdocs et loggdp > scatter3d(Country$logdocs, Country$lifeexpf, Country$loggdp, fit="linear", residuals=TRUE, bg="white", axis.scales=TRUE, grid=TRUE, ellipsoid=FALSE, xlab="logdocs", ylab="lifeexpf", zlab="loggdp") 07/09/2012 /22 
Téléchargement