Statistiques M1 Agro : recueil d`exercices
Transcription
Statistiques M1 Agro : recueil d`exercices
Statistiques M1 Agro : recueil d’exercices R. S. Stoica Université Lille 1 Laboratoire Paul Painlevé 59655 Villeneuve d’Ascq Cedex, France [email protected] Décembre, 2014 Ce document est en cours de construction. Remerciements C. Biernacki, G. Castellan, B. A. Craig, J.-J. Denimal, J.-J. Derycke, M. Gentes, G. Gregoire, G. P. McCabe, D. S. Moore, A. Philippe, R. Rakotomalala, P. Sahoo, C. Suquet, T. Verdel www.statsci.org Chapter 1 Exercices pour les TDs E1. Soit X une variable aléatoire réelle de loi N (µ, σ), avec µ = 0 et σ = 1. Calculez. a)P (X < 0) et P (X > 0) b)P (X ≥ 1), P (X ≤ 1), P (X ≥ −1), P (X ≤ −1) c)P (|X| ≤ 2), P (|X| ≥ 2), P (|X| ≤ −2)n P (|X| ≥ −2) d)P (−1 ≤ X ≤ 1), P (−2 ≤ X ≤ 2), P (−3 ≤ X ≤ 3) E2. La quantile α% est définie par la solution xα de l’équation α% = P (X ≤ xα ). Dans le cas d’une loi normale centrée réduite, les quantiles peuvent être obtenues par une lecture inversée de la table des valeurs de la loi. Déterminez les quantiles à 5%, 25%, 50%, 75% et 95% d’une densité normale avec paramètres µ = 0 et σ = 1. E3. Soit X une variable aléatoire qui suit une loi normale de paramètres µ = 2 et σ = 2. Calculez : a) P (X < 2) b) P (X + 2 > 2) c) P (|2X + 2| ≤ 2) d) P (|X 2 + cos(X) − 2| < 0) E4. Soit X une variable aléatoire normale de paramètres µ = 3 et σ = 2. Calculez a) P (2 ≤ X < 5) b) P (X ≥ 0) c) P (|X − 3| ≥ 1) Soient maintenant µ et σ quelconques. Calculez 2 3 d) P (µ − 1.96σ ≤ X ≤ µ + 1.96σ). E5. Les densités normales sont souvent utilisés pour décrire les scores des tests de quotient intellectuel (QI). Les spécialistes admettent générallement comme paramètres µ = 100 et σ = 15 pour répresenter la répartition de cette variable. a) Calculez la probabilité qu’une personne ait un QI compris entre 100 et 130. b) Déterminez la proportion de la population dont le QI est supérieur à 130. E6. Les statistiques des quatorze derniers années dans la région donnent les résultats suivants, où xi désigne le nombre de jours de grêle par an et ni , le nombre d’années où on a observé xi jours de grêle : Jours de grêle xi Nombres d’années ni 0 1 1 2 2 3 3 4 4 2 5 0 6 2 ≥7 0 Donner une estimation ponctuelle non-biaisée de la moyenne théorique et de la variance théorique du nombre de jours de grêle par an. E7. Dans une population d’étudiants en sociologie, on a prélevé indépendamment deux échantillons de taille n1 = 150 et n2 = 200. On a constaté que 60 étudiants de l’échantillon 1 et 90 étudiants dans l’échantillon 2 ont une formation sécondaire scientifique. Soit p la proportion d’étudiants de la population ayant une formation secondaire scientifique. Calculer trois estimateurs ponctuels de p. E8. L’échantillon de données suivant représente des réalisations indépendantes d’une variable aléatoire X de loi normale N (µ, σ) : 3.44 2.70 4.46 4.64 4.59 3.99 4.51 4.60 3.91 3.94 a) Calculez une estimation ponctuelle non-biaisée de µ et σ 2 . b) Pour α = 0.05, donnez un intervalle de confiance Iµ de la moyenne µ. c) Pour α = 0.05, donne un intervalle de confiance Iσ2 de la variance σ 2 . d) En supposant que l’on connaı̂t σ 2 = 1, donnez un intervalle de confiance de risque 0.05 pour la moyenne I˜µ . E9. Dans une promotion d’étudiants, on choisit un échantillon de taille 20. On suppose que les notes suivent une loi normale de paramètres µ et σ. 4 L’écart-type de l’échantillon est de 4.3. Calculez un intervalle de confiance pour la variance avec un niveau de 95%. E10. Après une enquête sur un échantillon de 400 ménages d’une population, on constate que 257 ménages disposent d’internet chez eux. Estimer par un intervalle de confiance au niveau 95% la proportion de ménages ayant un accès internet chez eux. E11. Les spécifications d’un médicament indiquent que chaque comprimé doit contenir en moyenne 1.7g de substance active. Pour vérifier cette spécification, 100 comprimés sont choisis au hasard dans la production puis analysés. Les mesures xi en g des quantités de substance active étant trop nombreuses on donne leur somme et la somme de leurs carrés : n X xi = 177 et n X x2i = 317 i=1 i=1 Peut-on dire que la production respecte l’indication mentionnée pour α = 0.05 et α = 0.10 ? Répondez en calculant les zones de rejet et la p−valeur. E12. Des relevés effectués pendant des nombreuses années ont permis d’établir que la hauteur annuelle des pluies dans la Beauce (en mm) suit une loi normale de paramètres µ = 600 et σ = 100. Des entrepreneurs, surnommés “faiseurs de pluie” prétendaient pouvoir augmenter de 50mm le niveau moyen de pluie, par l’insémination des nuages au moyen d’iodure d’argent et augmenter ainsi le taux de production agricole. Leur procédé fut mis à l’essai entre 1951 et 1959 te on releva les hauteurs de pluies suivantes : Année Hauteur (mm) 1951 510 1952 614 1953 780 1954 512 1955 501 1956 534 1957 603 1958 788 1959 650 a) Pour les données observées, testez l’hypothèse que la moyenne de précipitation est égale à 600 en précisant une zone de rejet bilatérale au niveau α = 0.05 et en calculant la p−valeur. b) Est-ce que les “faiseurs de pluie” de cette histoire prennent beaucoup de risques ? c) Calculer l’erreur de deuxième espèce pour les valeurs 610, 620, 630, 640 et 650. Pour les mêmes valeurs, calculez la puissance du test. Qu’est-ce que vous en pensez de ce test ? 5 E13. Sur les dix dernières années, on a observé à Paris, les températures moyennes suivantes : 22 19 21 23 20 22 24 18 20 25 Sur l’ensemble, ces températures sont considérées distribuées selon une loi gaussienne. Vérifiez si l’on peut conclure au niveau 5% que σ = 1. Donnez à la fois la zone de rejet ainsi que la p−valeur. E14. Le poids indiqué par une balance, lorsque l’on effectue la pesée d’un poids étalonné à 100g est une variable aléatoire normale N (100, σ) où σ est inconnue. Nous considérons que si la balance est bien réglée la variance a pour valeur maximale σ 2 = 25, sinon σ > 25. On effectue 10 pesées de ce poids et on récolte les données suivantes : 94.45 105.71 91.67 100.41 116.36 82.74 95.72 91.73 89.74 104.74 Peut-on conclure que la balance est bien réglée en utilisant un test de niveau 5%. Donnez à la fois la zone de rejet ainsi que la p−valeur. E15. Un échantillon de 100 personnes travaillant dans des restaurants a été demandé si le stress au travail a un impact négatif ou pas sur leur vie privée. Un nombre de 32 personnes ont répondu ”non” à la question. Une enquête au niveau national rapporte que 25% des travailleurs trouve que le stress au travail n’a pas d’impact sur leur vie privée. Vérifiez cette hypothèse sur notre échantillon, en précisant la zone de rejet pour un test de niveau 1 − α = 95% et en calculant la p−valeur. E16. Dans une entreprise, deux machines conditionnent le même produit. Pour lapremière, le poids du produit après conditionnement suit une loi normale de paramètres µ1 et σ1 . Pour la seconde, il suit une loi normale de paramètres µ2 et σ2 . Sachant que σ1 = 5g etσ2 = 7g, on prélève un échantillon de taille n1 = 10 de produits conditionnés par la première machine et un échantillon de taille n2 = 20 de produits conditionnés par la seconde machine. Nous obtenons les valeurs suivantes : x¯1 = 1003g et x¯2 = 995g. Tester l’hypothèse H0 : µ1 = µ2 contre H1 : µ1 6= µ2 , au risque 0.02, en précisant la zone de rejet et en calculant la p−valeur. E17. Dans un Master Agro de deux universités différentes, les notes en Statistiques des étudiants en première année suivent des lois normales dont 6 les écart-types sont σ1 et σ2 . Un échantillon n1 de 10 notes d’étudiants du premier master a donné un écart-type de 5. Un échantillon n2 de 25 notes d’étudiants du deuxième master a donné un écart-type de 3. Tester l’hypothèse H0 : σ1 = σ2 contre H1 : σ1 6= σ2 , au risque 0.05, en précisant la zone de rejet et en calculant la p−valeur. E18. Dans une population de 100 femmes et 100 hommes, 32 femmes et 26 hommes possèdent le bac. Testez l’hypothèse, H0 : p1 = p2 contre H1 : p1 6= p2 contre au risque 0.05, en précisant la zone de rejet et en calculant la p−valeur. E19. Ces données représentent d’accidents de voiture pendant les journées de la semaine. En utilisant un test de χ2 d’ajustement de niveau 1−α = 0.95 répondez s’il y a un jour de la semaine plus dangereux qu’un autre. Jours de la semaine Nombre d’accidents Lu. 133 Ma. 126 Me. 159 Je. 136 Ve. 113 Total 667 E20. Ces données mesurent dans cinq points différents le taux d’infiltration d’eau et l’érosion de sol associée. Quel pourcentage de la variation de l’érosion peut être expliqué par le fait que si le taux d’infiltration augmente, l’érosion augmente d’une manière linéaire ? Taux infiltration Erosion du sol 0.31 0.82 0.85 1.95 1.26 2.18 2.47 3.01 3.75 6.07 E21. Nous souhaitons comparer la corrélation entre le poids et la taille chez les femmes et chez les hommes. Pour les femmes, sur un échantillon de n1 = 15 personnes, la corrélation empirique est r̂1 = 0.56, alors que pour les hommes, sur un échantillon de n2 = 20 personnes, la corrélation est r̂2 = 0.49. Faites cette comparaison, à l’aide d’un test statistique, au niveau 1 − α = 95%. Précisez la région de rejet et la p−valeur. E22. Nous vérifions, au risque de 5%, que la corrélation entre le poids et la consommation des autos est la même pour des véhicules en provenance de l’Europe, du Japon et des E.U.. Les données dont on dispose sont synthétisées dans le tableau suivant Région Effecttif nk Corrélation empirique r̂k Europe 9 0.971 Japon 7 0.954 Etats-Unis 21 0.964 Faites cette vérification, à l’aide d’un test statistique, en précisant la région 7 de rejet et la p-valeur. Chapter 2 Exercices pour les TPs Qu’est-ce que c’est R ? Installation de R R est un logiciel de statistique distribué gratuitement par le CRAN (Comprehensive R Archive Network) à l’adresse suivante : http://cran.r-project.org/. L’installation de R varie suivant les systèmes d’exploitation (Windows, Mac, Linux), mais les fonctionnalités restent les mêmes et la plupart des programmes sont portables d’un système à l’autre. L’installation de R est très facile, il suffit de suivre les instructions. Dans le cadre où l’on tape les commandes, on trouvera le symbole : > L’aide en ligne Pour demander l’aide sur une fonction, par exemple mean, il suffit de taper dans ce cadre : ”help(mean)” ou ”?mean”. L’aide s’affiche directement dans l’interface Les packages Le logiciel R de base peut s’enrichir de nombreux packages. Un package est une bibliothèque de programmes externes. L’installation d’un nouveau package (par exemple le package spatstat) s’effectue par la commande : ¿ install.packages(”spatstat”) Une fois le package installé, son utilisation devra être précédée par son appel 8 9 par la commande : > library(spatsat). 10 2.1 TP1 : prise en main du logiciel. T1. a) Créer un répertoire STAT-TP1. Lancer R. b) Nous définissons > x=c(1,3,5,7,9) > y=c(2,3,5,7,11,13) Donner le résultat des commandes R suivantes : >x+1 >y*2 >length(x) >length(y) >x+y >sum(x>5) >sum( x[x>5]) >sum( x> 5 | x< 3 ) >y[3] >y[-3] >y[x] >(y>7) >y[y>7] c) Créer un fichier de commandes swap.R qui permutera automatiquement le contenu de x et y. Les nouvelles valeurs de x et y seront d’une part affichées à l’écran et d’autre part disponibles dans le fichier nommé swapXY. Par aileurs, un message à l’écran devra informer l’utilisateur que le fichier de commande a été totalement exécuté. T2. Tester les commandes suivantes : a) history() b) .Last.value c) load() d) quit() Indication : utiliser l’aide pour comprendre T3. Quitter R en sauvegardant l’environnement de travail dans le fichier resultsTP1. T4. a) Introduire le vecteur V ectX = (11.2, 16, 7.5, 13.5). b) Retrouver la longueur et le mode du vecteur par les fonctions length et 11 mode. c) Retrouver la troisième valeur de V ectX, puis l’ensemble des première et seconde valeurs. d) En utilisant les fonctions mean et sd, calculer la moyenne et l’écart type de V ectX. e) Introduire le vecteur V ectY = (anglais, biologie, inf ormatique, histoire). f) Reprendre les questions b et c pour le vecteur V ectY . T5. a) Introduire la matrice : 1 2 3 4 5 6 MatX = 7 8 9 10 11 12 b) Retrouver l’élément d’ordre (2, 3) de la matrice M atX. c) Retrouver de même la première ligne et la seconde colonne. d) En utilisant les fonctions rownames et colnames, affecter aux lignes et aux colonnes, les identificateurs : {Anne, P ierre, Alain, M onique} et {M ath, P hysique, Anglais}, respectivement. T6 Soit X une variable aléatoire qui suit une loi normale de moyenne 0 et de variance 3. a) Calculer les probabilités suivantes : P(X ≤ 1), P(X > 2.6) et P(−0.5 < X < 1.5). b) Calculer la quantile d’ordre α = 0.75, c’est à dire la valeur de tα telle que P(X ≤ tα ) = α. c) Représenter graphiquement la densité et la fonction de répartition de la loi de X. d) Le même exercice quand X suit une loi de Student avec 4 degrés de liberté. e) Le même exercice quand X suit une loi de χ2 avec 4 degrés de liberté. T7. Après plusieurs sondages, un fabricant de chaussettes suppose que la longueur du pied d’un homme adulte suit une loi normale de moyenne µ = 24cm et d’écart type σ = 3cm. Il étudie cette distribution pour déterminer les tailles et les quantités correspondantes de chaussettes à fournir. a) Dans combien de cas ( en %) observe-t-on une longueur de pied : • supérieure à 30cm ? à 25cm ? à 36cm ? • inférieure à 15cm ? à 21cm ? à 20cm ? 12 • comprise entre 22 et 31cm ? 21 et 27cm ? b) Déterminer les valeurs α et β telles que : • dans 30% des cas la longueur des pieds soit supérieure à α • dans 20% des cas la longueur des pieds soit inférieure à β c) Le fabricant décide de répartir sa production selon 5 tailles numérotées 1, 2, 3, 4, 5 (de la plus petite à la plus grande), les tailles étant déterminées de la façon suivante. Le fabricant prend un intervalle symétrique de probabilité 90% autour de la valeur moyenne. Il divise ce dernier en trois intervalles de longueurs égales. Il obtient ainsi 5 intervalles correspondants aux tailles respectives de 1 à 5. Déterminer les longueurs des pieds délimitant les divers intervalles. Déterminer les parts respectives (en %) affectées à la production des différentes tailles. T8. a) Pour un lot important d’ampoules électriques, les durées de vies suivent une loi normale N (µ = 1006h, σ = 18h). On prélève au hasard 100 ampoules. Quelle est la probabilité que la durée de vie moyenne de cet échantillon soit inférieure à 1003 heures, supérieure à 1010 heures. b) Avant d’accepter un lot d’ampoules dont la durée de vie suit la loi normale N (µ, σ = 18h), un acheteur s’assure que la durée de vie moyenne de n ampoules est supérieure à 1000 heures. Il court ainsi le risque d’accepter un lot dont la moyenne µ ne serait que de 995 heures. Déterminer n pour limiter ce risque à 1%. T9. Ecrivez deux scripts R, pour vérifier les résultats obtenus aux Exercices 17 et 18. 13 2.2 TP2 : intervalles de confiance et tests. T10. a) Dans un dossier STAT-TP2, créez un nouveau fichier tp2.R. Lancez R et positionnez vous dans le bon environnement de travail. Ouvrez le fichier tp2.R. b) En copiant, les instructions suivantes dans votre fichier, étudiez leur action et interprétez leur résultat : mu=60 sg=10 xx=rnorm(1000,mean=mu,sd=sg) x11() par(mfrow=c(1,3)) plot(xx,type="l",col="blue") hist(xx,breaks="Sturges",col="blue") boxplot(xx) summary(xx) Pour cela vous devez utiliser la commande source. c) Calculez les quantiles d’ordre α = {0.25, 0.5, 0.75} d’une variable aléatoire qui suit une loi N (µ, σ) avec µ = 60 et σ = 10. Comparez avec les résultats du point b). d) Pour les données simulées précédemment, nous pouvons calculer un intervalle de confiance de niveau α = 0.90 pour la moyenne, en utilisant le code R suivant : mx=mean(xx) sx=sqrt(var(xx)) aa=0.05 nn=length(xx) taa=qt((1-(0.5*aa)),df=nn-1) conf.int=c(mx-(taa*sx/sqrt(nn)),mx+(taa*sx/sqrt(nn))) S’appuyant sur ce code, étudiez l’évolution de la longueur de l’intervalle de confiance en fonction du niveau α. Faites un graphique pour illustrer vos résultats. Interprétez. e) Supposons que la moyenne empirique d’un échantillon est x̄ = 60 et que son écart-type est considéré connu σ = 10. Etudiez l’influence de la taille de l’échantillon sur la largeur d’un intervalle de confiance pour la moyenne de niveau 1 − α = 95%. Pour cela, considérez les valeurs de n suivantes : 10, 20, 40, 80, 160. Faites un graphique pour illustrer vos résultats. Interprétez. f) Nous souhaitons tester pour les données que l’on vient de simuler si µ = 60 contre l’alternative µ 6= 60 quand l’écart-type est connu, σ = 10, ou inconnu. Dans ce but, utilisez et examinez le code suivant. 14 mu=60 sg=10 xx=rnorm(1000,mean=mu,sd=sg) nn=length(xx) sx=sqrt(var(xx)) mx=mean(xx) tobs1=sqrt(nn)*(mx-mu)/sg t2=qnorm(0.975) rcn=c(mu-t2*sg/sqrt(nn),mu+t2*sg/sqrt(nn)) pval=2*(1-pnorm(abs(tobs1))) tobs2=sqrt(nn)*(mx-mu)/sx t2=qt(0.975,df=nn-1) rct=c(mu-t2*sx/sqrt(nn),mu+t2*sx/sqrt(nn)) pval=2*(1-pt(abs(tobs2),df=nn-1)) tt=t.test(xx,mu=60) tt$statistic tt$p.value tt$parameter Analysez le comportement de la fonction t.test. Utilisez le help. Comparez les différents résultats obtenus. T11. Pour aller de la tour Montparnasse à la Butte Montmartre, un parisien décide de prendre l’autobus. Il le prend 20 fois de suite et observe les durées de parcours suivantes exprimées en minutes : 37 27 48 31 24 46 39 44 38 32 24 31 29 30 37 35 36 44 41 52 Nous admetons que la durée aléatoire du trajet en autobus suit une loi gaussienne N (µ, σ). a) Donner de “bonnes” estimations ponctuelles de la moyenne µ et de l’écarttype σ de la durée du trajet. b) Déterminer un intervalle de confiance à 95% et à 99% pour µ et σ. T12. Nous disposons de 10 prises de sang recueillies dans les mêmes conditions sur un même sujet. On obtient pour chacune un dosage du cholestérol : 245 248 250 247 249 247 247 246 246 248 15 Chaque mesure peut être considérée comme une réalisation particulière d’une variable X “taux de cholestérol” suivant une loi normale de moyenne µ et d’écart-type σ. a) Tester l’hypothèse H0 : µ = 245 contre H1 : µ 6= 245. b) Tester l’hypothèse H0 : µ = 245 contre H1 : µ > 245. c) Tester l’hypothèse H0 : µ = 245 contre H1 : µ < 245. d) Ecrivez un petit paragraphe pour synthétiser les résultats des ces trois tests. T13. On a mesuré (en mm) la longueur des oeufs de coucous trouvés dans les nids de 2 espèces d’oiseaux • nids de petites tailles (roitelet) : 19.8 20.3 22.1 22.0 21.5 22.0 20.9 20.9 22.0 20.8 21.0 21.2 22.3 21.0 21.0 21.3 24.0 23.1 23.8 23.2 21.7 • nids de grande taille (fauvette) : 22.0 22.8 23.9 23.1 20.9 23.5 23.8 23.0 25.0 23.0 a) Sur un même graphique affichez les boı̂tes-à-moustaches des ces deux jeux des données. Calculez et comparez quelques statistiques descriptives. b) Tester l’égalité des dispersions des valeurs observées pour ces deux catégories de nids. c) Tester l’hypothèse selon laquelle le coucou adapte la taille de ses œufs à la raille des nids dans lesquels il pond. Testez toutes les alternatives possibles et rédiger un petit paragraphe pour synthétiser les résultats des ces trois tests. T14. On a mesuré la hauteur des arbres de 27 peuplements forestiers appartenant à deux types différents • type I : 23.4 26.3 24.4 26.8 • type II : 24.6 26.8 24.9 26.9 25.0 27.0 26.2 27.6 27.7 16 22.5 26.0 22.9 26.2 23.7 26.4 24.0 26.7 24.4 26.9 24.5 27.4 25.3 28.5 Sur un même graphique affichez les boı̂tes-à-moustaches des ces deux jeux des données. Calculez et comparez quelques statistiques descriptives. La hauteur des arbres est-t-elle différente suivant les types des peuplements ? Testez toutes les alternatives possibles et rédiger un petit paragraphe pour synthétiser les résultats des ces trois tests. T15 Les données suivantes sont issues d’un étude statistique du gouvernement Britannique. Dans 11 régions, on a enregistré les dépenses moyennes d’un foyer pour les boissons alcoolisées et le tabac : Alcool Tabac 6.47 4.03 6.13 3.76 6.19 3.77 4.89 3.34 5.63 3.47 4.52 2.92 5.89 3.20 4.79 2.71 5.27 3.53 6.08 4.51 a) Tracez le diagramme en nuage de points. b) Calculez le coefficient de corrélation r. c) Donnez un intervalle de confiance pour r au niveau d’erreur α = 0.01. d) Par un test statistique vérifiez l’hypothèse H0 : r = 0.5 contre H1 : r > 0.5. e) Est-ce que vous observez un couple de valeurs qui pourrait avoir une grande influence sur les résultats ? Si oui, effectuez de nouveau tous les calculs sans ce couple de valeurs. 4.02 4.56 17 2.3 TP3 : régression linéaire simple. Dans un dossier STAT-TP3, créez un nouveau fichier tp3.R. Lancez R et positionnez vous dans le bon environnement de travail. Ouvrez le fichier tp3.R. T16. Nous étudions le jeu de données cars fournit par le logiciel R. Du point de vue du logiciel R ces données sont représentées par une structure appelée data frame. Ces données reflètent la relation entre la vitesse d’une voiture (mph) et la distance de freinage (ft). Pour avoir accès à ces données et pouvoir les traiter, nous allons procéder de la manière suivante : a) Charger le jeu de données en utilisant la commande data(cars) et étudiez les commandes suivantes cars row.names(cars) names(cars) attach(cars) yy=dist xx=speed Pour visualiser les données sous forme de nuage de points, nous pouvons utiliser la commande : x11() plot(xx,yy,xlab="Vitesse (mph)",ylab="Distance d’arret (ft)") Que remarquez-vous ? b) Lancer la régression linéaire simple exprimant la distance en fonction de la vitesse : reg.cars=lm(yy~xx,data=cars) reg.cars reg.cars$coefficients reg.cars$df summary(reg.cars) res=summary(reg.cars) En déduire l’ensemble des résultats de cette régression. Commenter. c) Afficher la droite des moindre carrés : 18 x11() plot(xx,yy,xlab="Vitesse (mph)",ylab="Distance d’arret (ft)", col="blue") abline(reg.cars,col="red") d) Effectuer un test d’hypothèses pour vérifier que β1 6= 0. Comparer avec les résultats fournis par R. Donner des intervalles de confiance pour β1 et β0 avec un niveau de confiance de 95% : confint(reg.cars) confint(reg.cars,level=0.90) e) Calculer successivement les sommes de carrés résiduels, totaux et expliqués. En déduire la valeur du paramètre σ̂ 2 et du coefficient R2. Réaliser alors le test de Fisher testant la validité du modèle constant. Retrouver ce résultat par la fonction anova : anova(reg.cars) f) Etudiez attentivement le code suivant : new=data.frame(xx = seq(0,28,0.5)) predict(reg.cars,new,se.fit=TRUE) pred.w.plim = predict(reg.cars, new, level = 0.95, interval = "prediction") pred.w.clim = predict(reg.cars, new, level = 0.95, interval = "confidence") x11() par(mfrow=c(1,2)) matplot(new$xx,pred.w.clim,lty = c(1,2,2),type = "l", ylab ="Intervalles de confiance pour la moyenne", xlab ="Nouvelles valeurs de la vitesse") points(xx,yy,col="blue") matplot(new$xx,pred.w.plim,lty = c(1,3,3),type = "l", ylab ="Intervalles de prediction", xlab="Nouvelles valeurs de la vitesse") points(xx,yy,col="blue") Adapter le code précédent pour effectuer le calcul d’un intervalle de confiance pour la distance moyenne et d’un intervalle de prediction ponctuelle pour la distance, pour une plage de valeurs pour la vitesse comprise entre 28 et 30 (mph). g) Nous savons que les résidus suivent asymptotiquement une loi N (0, σ 2 ). Analysez les instructions R suivantes 19 rr=res$residuals/res$sigma x11() par(mfrow=c(1,2)) qqnorm(rr) hist(rr,breaks="Sturges",col="blue",main="Histogrammes des residus") Interprétez les résultats obtenus. Rédigez en quelques phrases les résultats de votre analyse et vos conclusions. T17 Nous étudions la relation existant entre la taille et la masse d’un follicule de laurier rose. a) Lire le fichier taille masse fleurs.csv en utilisant donnees = read.table("DATA/taille_masse_fleurs_regression.CSV", sep=";",dec=",",header=T) donnees donnees$espece b) Comme dans le exercice précédent, nous avons à traiter une structure de type data frame. Pour ce faire, nous allons procéder de la manière suivante : laurier=donnees[donnees$espece=="laurier rose",] laurier attach(laurier) x11() plot(taille,masse,xlab="Taille",ylab="Masse") c) En posant xx=taille yy=masse reprenez les questions de l’exercice précédent. Attention, pour les intervalles de confiance pour la valeur moyenne et les prédiction, il faut adapter le code en fonction des nouvelles plages de valeurs. T18 Les données dans le fichier firearms.txt représentent la mortalité provoquée pars des armes à feu, en Australie1 . Ces données ont été enregistrées chaque année, de 1983 jusqu’au 1997. Le taux de mortalité a été calculé par rapport à une population de 100000 habitants. a) Lire le fichier en utilisant 1 OzDASL - Australasian Data and Story Library 20 donnees=read.table("DATA/firearms.txt",header=T) b) Nous avons à traiter une structure de type data frame. Pour accéder et afficher les données, lancez les commandes suivantes : donnees$Year donnees$Rate attach(donnees) xx=Year yy=Rate x11() plot(xx,yy,xlab="Annee",ylab="Mortalite causee par les armes a feu") c) A la lumière des exercices précédentes analysez ce jeu de données en effectuant une régression linéaire simple. Rédigez quelques phrases pour résumer votre analyse et vos conclusions. 21 2.4 TP4 : régression linéaire multiple. Dans un dossier STAT-TP4, créez un nouveau fichier tp4.R. Lancez R et positionnez vous dans le bon environnement de travail. Créez et ouvrez le fichier t19.R. Il est recommandé de créer pour chaque exercice son fichier de commandes R. T19. Nous nous proposons d’expliquer la concentration d’ozone journalière (exprimée en ppb) dans l’atmosphère à partir des trois variables explicatives : • les radiations solaires (en langleys), • température maximum journalière (en degrés Farenheit), • la vitesse du vent (en miles par heure). Ces quatre variables “ozone”, “radiation”, “temperature” et “vent” ont été mesurées chaque jour de la période de mai 1973 à septembre 1973 à New York. Ce qui constitue 111 mesures pour chacune de ces variables. a) Lire le fichier tableau ozone regression.csv et représentez toutes ces variables par nuages de point : # lecture du fichier ozone.data = read.table("DATA/ozone_regression.csv", sep=";",dec=",",header=T,row.names=1) # afficher les donnees ozone.data attach(ozone.data) # representation graphique x11() pairs(ozone.data) Qu’est-ce que vous pouvez dire sur la structure des données ? b) Lancer la régression linéaire multiple expliquant la variable “ozone” à partir des trois variables : “radiation, “temperature” et “vent”. En déduire l’ensemble des résultats de cette régression. Commenter. reg.ozone = lm(ozone~.,data=ozone.data) summary(reg.ozone) confint(reg.ozone) c) Calculer successivement les sommes de carrés résiduels, totaux et expliqués. En déduire la valeur du paramètre σ 2 et du coéfficient R2. Réaliser alors le test de Fisher testant la validité du modèle constant. Retrouver ce résultat par la fonction anova comme suit : 22 modele.complet = ozone ~. modele.constant = ozone ~1 reg.complet = lm(modele.complet,data=ozone.data) reg.constant = lm(modele.constant,data=ozone.data) anova(reg.constant,reg.complet) Nous pouvons étudier aussi d’autres sous-modèles, comme par exemple modele.rt = ozone ~radiation + temperature reg.rt = lm(modele.rt,data=ozone.data) anova(reg.rt,reg.complet) Est-ce que toutes les variables ont une importance comparable dans la construction du modèle ? d) Nous considérons une observation nouvelle (radiation=200, temperature=70 et wind=7.8) pour les trois variables explicatives. Calculer l’intervalle de prédiction de la valeur à prévoir pour la variable “ozone” avec un seuil de confiance de 95% xnew = matrix(c(200,70,7.8),nrow=1) colnames(xnew) = c("radiation","temperature","wind") xnew = as.data.frame(xnew) predict(reg.ozone,xnew,interval="prediction") e) Faites une analyse des résidus, pour vérifier s’ils exhibent ou pas une tendance gaussienne. f) Rédigez en quelques phrases l’essentiel de vos conclusions concernant l’analyse de ce jeu de données. T20. Pour 60 villes américaines, ont été mesurées les variables suivantes : • X1 : précipitation annuelle moyenne • X2 : température moyenne de Janvier • X3 : température moyenne de juillet • X4 : population d’age supérieur à 65 ans • X5 : taille moyenne de la famille • X6 : scolarisation des personnes d’age supérieur à 22 ans • X7 : habitation avec cuisines équipées • X8 : densité de population 23 • X9 : population de race non blanche • X10 : fonctionnaires de bureau • X11 : familles pauvres • X12 : pollution en hydrocarbures • X13 : pollution en NO • X14 : pollution en SO2 • X15 : humidité de l’air • Y : mortalité Nous souhaitons expliquer la variable “mortalité” à partir des 15 variables explicatives précédentes. a) Lire le tableau mortality us regression.csv. mortal.data = read.table("DATA/mortality_us_regression.csv", sep=";",dec=",",row.names=1,skip=1) index=c(1:15) index=as.character(index) col.label=paste("X",index,sep="") col.label=c(col.label,"Y") colnames(mortal.data)=col.label b) Lancer la régression linéaire multiple expliquant la variable à expliquer “mortalité” à partir des quinze variables explicatives. En déduire l’ensemble des résultats de cette régression. Commenter. c) Calculer successivement les sommes de carrés résiduels, totaux et expliqués. En déduire la valeur du paramètre du σ 2 et du coefficient R2. Effectuez le test de Fisher vérifiant la validité du modèle constant. Retrouver ce résultat par la fonction anova. Commenter. d) Faites une analyse des résidus, pour vérifier s’ils exhibent ou pas une tendance gaussienne. d) Nous considérons les variables explicatives “précipitation annuelle” et “population de race non blanche”. Expliquer ce choix. Tester par un test de Fisher la validité du sous modèle expliquant Y à partir de ces deux variables explicatives. Réaliser ce test directement puis en utilisant la fonction anova. En utilisant directement la fonction anova comparer le modèle complet et 24 le modèle réduit. Commenter e) Nous considérons maintenant les variables explicatives “précipitation annuelle”, “population de race non blanche”, “température moyenne de Janvier”, “température moyenne de juillet”, “taille moyenne de la famille” et “scolarisation”. Reprendre les questions du point d). Interprétez les résultats obtenus. f) Rédigez en quelques phrases l’essentiel de vos conclusions concernant l’analyse de ce jeu de données. T21. Le processionnaire du pin est un insecte prédateur du pin. Nous considérons le tableau suivant, croisant 33 placettes de 5 ares de forêts et les 11 variables suivantes : • X1 : altitude (en m) • X2 : pentes (en ◦) • X3 : nombre de pins dans une placette • X4 : hauteur de l’arbre au centre de la placette • X5 : diamètre de cet arbre • X6 : note de densité de peuplement • X7 : orientation de la placette (1 : sud, 2 : nord) • X8 : hauteur des arbres dominants (en m) • X9 : nombre de strates de la végétation • X10 : peuplement ou mélangé (1 : pur, 2 : mélangé) • Y : log(nombre de nids du processionnaire du pin) Nous souhaitons expliquer Y en fonction des variables précédentes. a) Lire le tableau processionnaire pin regression.csv. pins.data = read.table("DATA/processionnaire_pin_regression.csv", sep=";",dec=",",row.names=1,skip=1) index=c(1:10) index=as.character(index) col.label=paste("X",index,sep="") col.label=c(col.label,"Y") colnames(pins.data)=col.label 25 b) Reprendre les questions des exercices précédents. Pour l’étude d’un sousmodèle, il faudrait considérer celui composé des variables X1 et X2. Expliquer ce choix. 26 2.5 TP5 : analyse de la variance à un seul facteur. Dans un dossier STAT-TP5, créez un nouveau fichier tp5.R. Lancez R et positionnez vous dans le bon environnement de travail. Créez et ouvrez le fichier t22.R. Il est recommandé de créer pour chaque exercice son fichier de commandes R. T22. Dans le cadre d’une étuide sur l’intoxication du brochet du nord par le DDT, différents brochets d’âge variant entre 2 et 6 ans ont été prélevés. Un taux de DDT (en mg/l) a été mesuré pour chacun d’eux. a) Lire le fichier : brochet.data = read.table("DATA/pesticide_brochet_anova.csv", sep=";",dec=",",header=T,row.names=1) b) Représenter graphiquement les classes d’âge sous forme de boı̂tes à moustaches : boxplot(taux_pes~age,xlab=c("age"),ylab= c("taux_pesticides"), data=brochet.data,col="cyan") Pour chaque année extraire quelques statistiques exploratoires : index=brochet.data$age==1 v1=brochet.data$taux_pes[index] summary(v1) sd1=sqrt(var(v1)) Est-ce que la condition sous les écarts-type empiriques permet-t-elle l’application de l’ANOVA ? c) Lancer l’analyse de la variance à un facteur. Prélevez les sommes des carrés, la statistique de Fisher et commentez les résultats : brochet.data$age = factor(brochet.data$age,labels=c("1","2","3","4","5")) res.brochet = aov(formula=taux_pes~age,data=brochet.data) res.brochet summary(res.brochet) anova(res.brochet) d) Mettre en place des tests de comparaison multiples. Interprétez et commentez les résultats : TukeyHSD(res.brochet) plot(TukeyHSD(res.brochet)) 27 T23. Quatre engrais différents sont testés sur N = 16 parcelles. Pour chaque parcelle, un rendement en blé en quintaux par hectare a été relevé. a) Lire le fichier : rendement.data = read.table("DATA/rendement_engrais_anova.csv", sep=";",dec=",",header=T,row.names=1) Mêmes questions qu’à l’exercice précédent. T24. Nous étudions les hauteurs d’arbres appartenant à plusieurs forêts. a) Lire le fichier : hauteur.data = read.table("DATA/hauteur_arbre_anova.csv", sep=";",dec=",",header=T,row.names=1) Mêmes questions qu’à l’exercice précédent. T25. Nous mesurons la durée de vie d’ampoules électriques de différents types. a) Lire le fichier : ampoule.data = read.table("DATA/ampoule_anova.csv", sep=";",dec=",",header=T,row.names=1) Mêmes questions qu’à l’exercice précédent. T26. Nous étudions la taille de chanteurs d’opéra appartenant à différents registres : soprano, tenor, alto et basse. a) Lire le fichier : chanteurs.data = read.table("DATA/chanteurs_opera_anova.csv", sep=";",dec=",",header=T,row.names=1) Mêmes questions qu’à l’exercice précédent. Chapter 3 Présentation du projet A l’attention de l’étudiant : La note du projet compte pour 50% de la note finale du cours. Pour ce faire vous devez m’envoyer avant le 14 janvier 2015, un compte rendu contenant les solutions de tous les exercices de ce projet. Après cette date tout compte-rendu sera irrecevable. Les solutions doivent être soigneusement rédigées. Pour chaque exercice, on donnera le code R puis les résultats obtenus et enfin leur interprétation. Le travail en binôme est fortement encouragé, alors que le travail en trinôme est toléré d’une manière exceptionnelle. P1 : moyenne, écart-type, intervalle de confiance. Nous considérons les tailles de 10 habitants des Vosges, tous de sexe masculin et appartenant à la classe d’âge 40 − 41 ans. Nous supposons que la variable Taille suit une loi normale de moyenne µ et écart-type σ : 1.76 1.58 1.58 1.58 1.69 1.81 1.62 1.58 1.55 1.74 a) Donner une estimation ponctuelle des paramètres µ et σ. b) Calculer un intervalle de confiance de chacun de ces deux paramètres avec un seuil de confiance de 97%. P2 : tests de comparaison de variances, puis de moyennes. Nous mesurons les tailles de 10 habitants des Vosges et de 8 habitants du Jura, tous de sexe masculin et appartenant à la classe d’âge 40 − 41 ans. On obtient les résultats suivants : Vosges : 1.76 1.78 1.63 1.70 1.70 1.62 Jura : 1.56 1.62 1.67 1.58 1.69 1.55 28 1.76 1.60 1.59 1.81 1.73 1.66 29 Nous supposons que les variables Taille Vosges et Taille Jura sont indépendantes et suivent respectivement les lois normales N (µ1 , σ1 ) et N (µ2 , σ2 ) . a) Tester l’égalité des deux écarts-type σ1 et σ2 . b) Peut-on supposer à partir de ces deux échantillons une différence des tailles entre ces deux populations ? P3 : coefficient de corrélation. Un psychologue d’entreprise pense qu’il existe une corrélation entre deux variables qui peuvent influer sur le travail des employés affectés à des taches d’assemblage, soit la perception visuelle (X) et la dextérité manuelle (Y ). Sur 10 employés prélevés au hasard, on a mesuré le temps de réponse visuelle en secondes à un certain stimulus. Ces mêmes employés ont subi un test mesurant leur niveau de dextérité manuelle. Les résultats suivants sont obtenus : X : Y : 3.93 3.98 62.83 63.27 4.09 3.17 59.87 81.60 3.39 3.65 77.26 71.29 3.78 3.83 68.13 65.98 3.25 3.72 79.91 69.34 Nous supposons que le couple (X, Y ) est gaussien. a) Tracez le diagramme en nuage de points. b) Calculer sur cet échantillon le coefficient de corrélation empirique r̂. c) Déterminer un intervalle de confiance du coefficient de corrélation théorique r à 5% prés. d) Y-a-t-il une liaison significative entre X et Y ? P4 : régression linéaire multiple. A partir du fichier voitures.csv, on mesure sur un ensemble de voitures de diverses marques le prix (Y ) et les 6 variables explicatives suivantes : • X1 : cylindrée • X2 : puissance • X3 : longueur • X4 : largeur • X5 : poids • X6 : vitesse 30 a) Représentez graphiquement les différents nuages de points définis par chaque couple de variables. Commenter. b) Lancer la régression linéaire multiple expliquant la variable à expliquer Y à partir des 6 variables explicatives données ci-dessus. En déduire l’ensemble des résultats de cette régression. Commenter. c) Calculer successivement les sommes de carrés résiduels, totaux et expliqués. En déduire la valeur du paramètre σˆ2 et du coefficient R2. Réaliser alors le test de Fisher testant la validité du modèle constant. Commenter. d) Déterminer un sous modèle basé sur certaines variables explicatives significatives (à déterminer) et validé par un test de Fisher. Commenter. P5 : ANOVA à un seul facteur. Nous considérons un ensemble de hotdogs provenant de divers restaurants. On mesure sur chacun d’eux la quantité de sel (sodium) qu’il contient. De plus, les hotdogs sont regroupés dans le fichier hotdog.csv, en trois classes suivant le type de viande : boeuf, poulet, viande (mixte de boeuf, porc, poulet). a) Représentez graphiquement ces groupes sous forme de boı̂tes à moustache. b) Lancer l’analyse de la variance à un facteur. Commenter les résultats. Peut-on dire que les groupes contiennent des quantités de sel similaires ? c) Mettre en place des tests de comparaison multiples. Commenter. P6 : test du Chi 2. Un projet de recherche a étudié l’habilité physique des personnes âgées. Le tableau suivant contient de l’information concernant le niveau d’études de ces personnes et la possession d’un animal de compagnie. Niveau d’études Inférieur au lycée Lycée Supérieur au lycée Possession d’un animal de compagnie Pas d’animal 421 666 845 Propriétaire d’un chien 93 100 135 Propriétaire d’un chat 28 40 99 Mettez en oeuvre un test de χ2 pourrépondre aux deux questions suivantes • est-ce qu’il y a une relation de dépendance entre le niveau d’études et la possession d’un animal de compagnie ? • est-ce qu’en fonction de l’animal de compagnie, le niveau d’études des personnes âgées est le même ? 31 a) Précisez la région du rejet du test. b) Calculez la statistique du test T . c) Effectuez le test pour α = 5% et calculez la p−valeur. d) Quelles sont vos conclusions ? Interprétez et commentez vos résultats. P7 : régression linéaire simple. Les données suivantes représentent l’évolution du pourcentage d’emballages (verre) recyclés par rapport à la production d’emballages (Données INSEE - France métropolitaine). Année Verre recyclé 1985 16,7 1990 26,8 1995 39,5 2000 49,7 2005 59,7 2006 59,5 2007 61,6 a) Dessinez le diagramme en nuage de points. b) Lancez la régression linéaire simple pour analyser ces données. Déduire l’ensemble des résultats de cette régression. Commenter. c) Affichez la droite des moindre carrés. d) Effectuez un test d’hypothèses pour vérifier que β1 6= 0. Donner des intervalles de confiance pour β1 et β0 avec un niveau de confiance de 99%. e) Calculez successivement les sommes de carrés résiduels, totaux et expliqués. En déduire la valeur du paramètre σ̂ 2 et du coefficient R2. Réaliser alors le test de Fisher testant la validité du modèle constant. f) Effectuez le calcul d’un intervalle de confiance pour le pourcentage moyen d’emballages recyclés et d’un intervalle de prédiction ponctuelle pour ce pourcentage, pour une plage de valeurs comprise entre les années 1980 et 2020, tous les trois mois. 32 # # TP1 : prise en main du logiciel # # # T1 # # se placer dans le bon repertoire setwd("/home/stoica/ENSEIGNEMENT/M1 AGRO/R") #a - b x=c(1,3,5,7,9) y=c(2,3,5,7,11,13) x+1 y*2 length(x) length(y) x+y sum(x>5) sum( x[x>5]) sum( x> 5 | x< 3 ) y[3] y[-3] y[x] (y>7) y[y>7] #c temp=y y=x x=temp print(x) print(y) save(x,y,file="swapXY.Rdata") #rm(list=ls()) #load("tp1.data") sink("swapXY.Rprint") 33 print(x) print(y) print("Programme execute") sink(); print("Programme execute") # T2 -3 # T4 vx=c(11.2,16,7.5,13.5) length(vx) mode(vx) mean(vx) sd(vx) vy=c("anglais","biologie","informatique","histoire") length(vy) mode(vy) # T5 mx=matrix(c(1,4,7,10,2,5,8,11,3,6,9,12),nrow=4,ncol=3) mx[1,] mx[,2] rownames(mx)=c("Anne","Pierre","Alain","Monique") colnames(mx)=c("Math","Physique","Anglais") mx["Anne",] mx["Anne","Math"] # T6 mu=0 sg=sqrt(3) p1=pnorm(1,mu,sg) p2=1-pnorm(2.6,mu,sg) p3=pnorm(1.5,mu,sg)-pnorm(-0.5,mu,sg) talpha=qnorm(0.75,mu,sg) xx=c(-Inf,seq(-6,6,0.01),Inf) ddn=dnorm(xx,mu,sg) ppn=pnorm(xx,mu,sg) x11() par(mfrow=c(1,2)) plot(xx,ppn,type="l",col="blue",main="Loi Normale") plot(xx,ddn,type="l",col="green") 34 df=4 p1=pt(1,df=4) p2=1-pt(2.6,df=4) p3=pt(1.5,df=4)-pt(-0.5,df=4) talpha=qt(0.75,df=4) xx=c(-Inf,seq(-6,6,0.01),Inf) ddt=dt(xx,df=4) ppt=pt(xx,df=4) x11() par(mfrow=c(1,2)) plot(xx,ppt,type="l",col="blue",main="Loi Student") plot(xx,ddt,type="l",col="green") df=4 p1=pchisq(1,df=4) p2=1-pchisq(2.6,df=4) p3=pchisq(1.5,df=4)-pchisq(-0.5,df=4) talpha=qchisq(0.75,df=4) xx=c(-Inf,seq(-5,20,0.01),Inf) ddc=dchisq(xx,df=4) ppc=pchisq(xx,df=4) x11() par(mfrow=c(1,2)) plot(xx,ppc,type="l",col="blue",main="Loi Student") plot(xx,ddc,type="l",col="green") # T7 mu=24 sg=3 la=c(30,25,36) pa=1-pnorm(la,mu,sg) lb=c(15,21,20) pb=pnorm(lb,mu,sg) lc1=c(22,21) lc2=c(31,27) pc=pnorm(lc2,mu,sg)-pnorm(lc1,mu,sg) aa=qnorm(0.7,mu,sg) bb=qnorm(0.2,mu,sg) 35 itc=c(0.05,0.35,0.65,0.95) ltc=qnorm(itc,mu,sg) # T8 n=100 mu = 1006 sg = 18/sqrt(n) p1=pnorm(1010,mu,sg)-pnorm(1003,mu,sg) n=c(10:100) mu=995 sg=18/sqrt(n) pval=1-pnorm(1000,mu,sg) plot(n,pval,type="l",col="blue",main="Calcul T8") abline(h=0.01,col="red") # T9 # E17 sx1=25 n1=10 sx2=9 n2=25 txy=sx1/sx2 t1=qf(0.025,n1-1,n2-1) t2=qf(0.975,n1-1,n2-1) rc=c(t1,t2) pval=2*(1-pf(txy,n1-1,n2-1)) # E18 p1=32/100 n1=32 p2=26/100 n2=26 phat=(n1*p1+n2*p2)/(n1+n2) t1=qnorm(0.975) rc=c(-t1,t1) txy=(p1-p2)/sqrt(phat*(1-phat)*((1/n1)+(1/n2))) pval=2*(1-pnorm(abs(txy))) 36 # # TP2 : intervalles de confiance et tests # # effacer la memoire rm(list=ls()) # se placer dans le bon repertoire setwd("/home/stoica/ENSEIGNEMENT/M1 AGRO/R") # intialiser le noyau du generateur aleatoire set.seed(234) # # T10 # mu=60 sg=10 xx=rnorm(1000,mean=mu,sd=sg) x11() par(mfrow=c(1,3)) plot(xx,type="l",col="blue") hist(xx,breaks="Sturges",col="blue") boxplot(xx) summary(xx) #c - calcul des quantiles aa=c(0.25,0.5,0.75) qq=qnorm(aa,mu,sg) mx=mean(xx) sx=sqrt(var(xx)) aa=0.05 nn=length(xx) taa=qt((1-(0.5*aa)),df=nn-1) conf.int=c(mx-(taa*sx/sqrt(nn)),mx+(taa*sx/sqrt(nn))) #d -influence du niveau du test aa=seq(0.001,0.1,0.001) nn=length(xx) taa=qt((1-0.5*aa),df=nn-1) conf.int=matrix(0,nrow=2,ncol=length(aa)) conf.int[1,]=mx-(taa*sx/sqrt(nn)) 37 conf.int[2,]=mx+(taa*sx/sqrt(nn)) x11() plot(aa,conf.int[2,],type="p",col="blue", ylim=c(min(conf.int[1,]),max(conf.int[2,])), ylab="Largeur intervalle de confiance",xlab="Niveau") points(aa,conf.int[1,],col="blue") abline(h=60,col="red") #e - influence de la taille de l’echantillon mx=60 sx=100 n=c(10,20,40,80,160) t1=qnorm(0.975,mean=0,sd=1) lim=t1*sqrt(sx/n) im1=mx-lim im2=mx+lim x11() plot(n,rep(mx,length(lim)),col="red", ylim=c(min(im1),max(im2)),type="l", ylab="Longueur intervalle confiance",xlab="Taille echantillon") lines(n,im1,lty=3,col="blue") lines(n,im2,lty=3,col="blue") #f- test sur la moyenne mu=60 sg=10 xx=rnorm(1000,mean=mu,sd=sg) nn=length(xx) sx=sqrt(var(xx)) mx=mean(xx) tobs1=sqrt(nn)*(mx-mu)/sg t2=qnorm(0.975) rcn=c(mu-t2*sg/sqrt(nn),mu+t2*sg/sqrt(nn)) pval=2*(1-pnorm(abs(tobs1))) tobs2=sqrt(nn)*(mx-mu)/sx t2=qt(0.975,df=nn-1) rct=c(mu-t2*sx/sqrt(nn),mu+t2*sx/sqrt(nn)) pval=2*(1-pt(abs(tobs2),df=nn-1)) tt=t.test(xx,mu=60) tt$statistic 38 tt$p.value tt$parameter # # T11 # vx=c(37,48,24,39,38,24,29,37,36,41,27,31,46,44,32,31,30,35,44,52) mx=mean(vx) sx=sqrt(var(vx)) nn=length(vx) aa=0.05 nn=length(vx) taa=qt((1-(0.5*aa)),df=nn-1) conf.int1=c(mx-(taa*sx/sqrt(nn)),mx+(taa*sx/sqrt(nn))) sx2=sx*sx c1=qchisq(0.5*aa,df=nn-1) c2=qchisq((1-(0.5*aa)),df=nn-1) conf.int2=(nn-1)*sx2*c(1/c2,1/c1) # # T12 # xx=c(245,248,250,247,249,247,247,246,246,248) m0=245 t1=t.test(xx,mu=m0,alternative="two.sided") t1$p.value t2=t.test(xx,mu=m0,alternative="less") t2$p.value t3=t.test(xx,mu=m0,alternative="greater") t3$p.value # # T13 # roitelet = c(19.8,22.1,21.5,20.9,22.0,21.0,22.3,21.0,20.3, 22.0,22.0,20.9,20.8,21.2,21.0,21.3) fauvette = c(22.0,23.9,20.9,23.8,25.0,24.0,23.8,21.7, 22.8,23.1,23.5,23.0,23.0,23.1,23.2) mr=mean(roitelet) vr=var(roitelet) 39 nr=length(roitelet) mf=mean(fauvette) vf=var(fauvette) nf=length(fauvette) summary(roitelet) summary(fauvette) x11() boxplot(roitelet,fauvette) 40 # # TP3 : regression lineaire simple # # effacer la memoire rm(list=ls()) # se placer dans le bon repertoire setwd("/home/stoica/ENSEIGNEMENT/M1 AGRO/R") # intialiser le noyau du generateur aleatoire set.seed(2341) # # T16 # # telecharger un jeu de donnees R data(cars) # the data give the speed of cars and the distances taken # to stop. Note that the data were recorded in the 1920s. cars row.names(cars) names(cars) attach(cars) yy=dist xx=speed x11() plot(xx,yy,xlab="Vitesse (mph)",ylab="Distance d’arret (ft)") # # Estimer un modele de regression lineaire et resume # des statistiques pour la regression # reg.cars=lm(yy~xx,data=cars) reg.cars reg.cars$coefficients reg.cars$df summary(reg.cars) res=summary(reg.cars) 41 # afficher la droite des moindre carres x11() plot(xx,yy,xlab="Vitesse (mph)",ylab="Distance d’arret (ft)",col="blue") abline(reg.cars,col="red") # calcul des intervalles de confiance pour les coefficients de regression confint(reg.cars) confint(reg.cars,level=0.90) # # ... effectuer un test statistique sur beta_1 ... # hb1=res$coefficients[2,1] sb1=res$coefficients[2,2] b1=0 tobs=abs(hb1-b1)/sb1 nn=length(speed) t2=qt(0.975,df=nn-2) rct=c(b1-t2*sb1,b1+t2*sb1) pval=2*(1-pt(tobs,df=nn-2)) # # Analyse de la variance # # calcul du coefficient de la correlation nn=length(yy) mx=mean(xx) my=mean(yy) sx2=sum(xx*xx) sy2=sum(yy*yy) sxy=sum(xx*yy) remp1=(sxy-nn*mx*my)/(sqrt(sx2-nn*mx*mx)*sqrt(sy2-nn*my*my)) remp=cor(xx,yy) # calcul des sommes des carres SST = sum((yy-my)*(yy-my)) SSE = sum(res$residuals*res$residuals) yhat=res$coefficients[1,1]+xx*res$coefficients[2,1] SSR = sum((yhat-my)*(yhat-my)) MSR = SSR/1 MSE = SSE/reg.cars$df 42 # calcul du coefficient R2 R21=remp*remp R2 = SSR/SST # calcul de la statistique de Fisher FF1=(nn-2)*R2/(1-R2) FF=MSR/MSE # test du Fisher ta=qf(0.95,df1=1,df2=nn-2) rcf=c(ta,Inf) pval=1-pf(FF,df1=1,df2=nn-2) anova(reg.cars) # # Intervalles de confiance pour la moyenne et pour la prediction # new=data.frame(xx = seq(0,28,0.5)) predict(reg.cars,new,se.fit=TRUE) pred.w.plim = predict(reg.cars, new, level = 0.95, interval = "prediction") pred.w.clim = predict(reg.cars, new, level = 0.95, interval = "confidence") x11() par(mfrow=c(1,2)) matplot(new$xx,pred.w.clim,lty = c(1,2,2),type = "l", ylab ="Intervalles de confiance pour la moyenne", xlab ="Nouvelles valeurs de la vitesse") points(xx,yy,col="blue") matplot(new$xx,pred.w.plim,lty = c(1,3,3),type = "l", ylab ="Intervalles de prediction", xlab="Nouvelles valeurs de la vitesse") points(xx,yy,col="blue") # # Analyse des residus : comparaison avec une gaussienne ... # rr=res$residuals/res$sigma x11() par(mfrow=c(1,2)) qqnorm(rr) hist(rr,breaks="Sturges",col="blue",main="Histogrammes des residus") 43 # ajouter un test de Chi 2 pour tester la gaussianite ... # # T17 # # lire un fichier excel donnees = read.table("DATA/taille_masse_fleurs_regression.CSV", sep=";",dec=",",header=T) donnees donnees$espece laurier=donnees[donnees$espece=="laurier rose",] laurier attach(laurier) x11() plot(taille,masse,xlab="Taille",ylab="Masse") xx=taille yy=masse # # Estimer un modele de regression lineaire et # resume des statistiques pour la regression # reg.lauriers=lm(yy~xx,data=cars) reg.lauriers reg.lauriers$coefficients reg.lauries$df summary(reg.lauries) res=summary(reg.lauriers) # afficher la droite des moindre carres x11() plot(xx,yy,xlab="Taille",ylab="Masse",col="blue") abline(reg.lauriers,col="red") # calcul des intervalles de confiance pour les coefficients de regression confint(reg.lauriers) confint(reg.lauriers,level=0.99) # # ... effectuer un test statistique sur beta_1 ... # 44 hb1=res$coefficients[2,1] sb1=res$coefficients[2,2] b1=0 tobs=abs(hb1-b1)/sb1 nn=length(speed) t2=qt(0.975,df=nn-2) rct=c(b1-t2*sb1,b1+t2*sb1) pval=2*(1-pt(tobs,df=nn-2)) # # Analyse de la variance # # calcul du coefficient de la correlation nn=length(yy) mx=mean(xx) my=mean(yy) sx2=sum(xx*xx) sy2=sum(yy*yy) sxy=sum(xx*yy) remp1=(sxy-nn*mx*my)/(sqrt(sx2-nn*mx*mx)*sqrt(sy2-nn*my*my)) remp=cor(xx,yy) # calcul des sommes des carres SST = sum((yy-my)*(yy-my)) SSE = sum(res$residuals*res$residuals) yhat=res$coefficients[1,1]+xx*res$coefficients[2,1] SSR = sum((yhat-my)*(yhat-my)) MSR = SSR/1 MSE = SSE/reg.cars$df # calcul du coefficient R2 R21=remp*remp R2 = SSR/SST # calcul de la statistique de Fisher FF1=(nn-2)*R2/(1-R2) FF=MSR/MSE # test du Fisher ta=qf(0.95,df1=1,df2=nn-2) rcf=c(ta,Inf) 45 pval=1-pf(FF,df1=1,df2=nn-2) anova(reg.lauriers) # # Intervalles de confiance pour la moyenne et pour la prediction # new=data.frame(xx = seq(3,20,0.5)) predict(reg.lauriers,new,se.fit=TRUE) pred.w.plim = predict(reg.lauriers, new, level = 0.95, interval = "prediction") pred.w.clim = predict(reg.lauriers, new, level = 0.95, interval = "confidence") x11() par(mfrow=c(1,2)) matplot(new$xx,pred.w.clim,lty = c(1,2,2),type = "l", ylab ="Intervalles de confiance pour la moyenne", xlab ="Nouvelles valeurs de la taille") points(xx,yy,col="blue") matplot(new$xx,pred.w.plim,lty = c(1,3,3),type = "l", ylab ="Intervalles de prediction", xlab="Nouvelles valeurs de la taille") points(xx,yy,col="blue") # # Analyse des residus : comparaison avec une gaussienne ... # rr=res$residuals/res$sigma x11() par(mfrow=c(1,2)) qqnorm(rr) hist(rr,breaks="Sturges",col="blue",main="Histogrammes des residus") # ajouter un test de Chi 2 pour tester la gaussianite ... # # T18 # donnees=read.table("DATA/firearms.txt",header=T) donnees$Year donnees$Rate attach(donnees) xx=Year yy=Rate x11() 46 plot(xx,yy,xlab="Annee",ylab="Mortalite causee par les armes a feu") # le reste vous continuer travailler comme pour les exercices precedentes ... 47 # # TP4 : regression lineaire multiple # # effacer la memoire rm(list=ls()) # se placer dans le bon repertoire setwd("/home/stoica/ENSEIGNEMENT/M1 AGRO/R") # intialiser le noyau du generateur aleatoire set.seed(2341) # # T19 # # lecture du fichier ozone.data = read.table("DATA/ozone_regression.csv", sep=";",dec=",",header=T,row.names=1) # afficher les donnees ozone.data attach(ozone.data) # representation graphique x11() pairs(ozone.data) # regression lineaire multiple et resultat reg.ozone = lm(ozone~.,data=ozone.data) res=summary(reg.ozone) res confint(reg.ozone) # lire les dimensions dans une data.frame nn = nrow(ozone.data) pp = ncol(ozone.data)-1 # les sommes des carres SSE = sum(res$residuals*res$residuals) SST = (nn-1)*var(ozone) SSR = SST-SSE # les degres de liberte DLT=nn-1 48 DLR=pp DLE=nn-(pp+1) MST = SST/DLT MSR = SSR/DLR MSE = SSE/DLE # estimation de sigma et du R2 sigma.est = sqrt(SSE/DLE) res$sigma R2=SSR/SST # la statistique de Fisher FF=MSR/MSE # test de Fisher : calcul de la pvaleur pour le modele constant pval = 1-pf(FF,DLR,DLE) # affichage des resultats et comparaison avec anova res.anova = cbind(SST,SSR,SSE,sigma.est,R2,FF,pval) anova(reg.ozone) # anova : le meme test mais plus oriente choix du modele modele.complet = ozone ~. modele.constant = ozone ~1 reg.complet = lm(modele.complet,data=ozone.data) reg.constant = lm(modele.constant,data=ozone.data) anova(reg.constant,reg.complet) modele.rt = ozone ~radiation + temperature reg.rt = lm(modele.rt,data=ozone.data) anova(reg.rt,reg.complet) modele.rw = ozone ~radiation + wind reg.rw = lm(modele.rw,data=ozone.data) anova(reg.rw,reg.complet) modele.wt = ozone ~wind + temperature reg.wt = lm(modele.wt,data=ozone.data) anova(reg.wt,reg.complet) # prediction d’une nouvelle valeur xnew = matrix(c(200,70,7.8),nrow=1) colnames(xnew) = c("radiation","temperature","wind") xnew = as.data.frame(xnew) predict(reg.ozone,xnew,interval="prediction") # analyse des residus 49 rr=res$residuals/res$sigma x11() par(mfrow=c(1,2)) qqnorm(rr) hist(rr,breaks="Sturges",col="blue",main="Histogrammes des residus") # # T20 # # lecture du fichier et appelation des colonnes comme dans l’ennonce mortal.data = read.table("DATA/mortality_us_regression.csv", sep=";",dec=",",row.names=1,skip=1) index=c(1:15) index=as.character(index) col.label=paste("X",index,sep="") col.label=c(col.label,"Y") colnames(mortal.data)=col.label attach(mortal.data) # regression lineaire multiple et resultat reg.mortal = lm(Y~.,data=mortal.data) res=summary(reg.mortal) res confint(reg.mortal) # lire les dimensions dans une data.frame nn = nrow(mortal.data) pp = ncol(mortal.data)-1 # les sommes des carres SSE = sum(res$residuals*res$residuals) SST = (nn-1)*var(Y) SSR = SST-SSE # les degres de liberte DLT=nn-1 DLR=pp DLE=nn-(DLR+1) MST = SST/DLT MSR = SSR/DLR MSE = SSE/DLE # estimation de sigma et du R2 50 sigma.est = sqrt(SSE/DLE) res$sigma R2=SSR/SST # la statistique de Fisher FF=MSR/MSE # test de Fisher : calcul de la pvaleur pour le modele constant pval = 1-pf(FF,DLR,DLE) # affichage des resultats et comparaison avec anova res.anova = cbind(SST,SSR,SSE,sigma.est,R2,FF,pval) # comparaison avec la fonction anova modele.constant = Y ~1. reg.constant = lm(modele.constant,data=mortal.data) anova(reg.constant,reg.mortal) # calculer le modele reduit : attention degres de liberte modele.reduit = Y ~ X1+ X9 reg.reduit = lm(modele.reduit,data=mortal.data) res=summary(reg.reduit) res # les sommes des carres SSE = sum(res$residuals*res$residuals) SST = (nn-1)*var(Y) SSR = SST-SSE # les degres de liberte DLT=nn-1 DLR=2 DLE=nn-(DLR+1) MST = SST/DLT MSR = SSR/DLR MSE = SSE/DLE # estimation de sigma et du R2 sigma.est = sqrt(SSE/DLE) res$sigma R2=SSR/SST # la statistique de Fisher FF=MSR/MSE # test de Fisher : calcul de la pvaleur pour le modele constant pval = 1-pf(FF,DLR,DLE) # affichage des resultats et comparaison avec anova res.anova = cbind(SST,SSR,SSE,sigma.est,R2,FF,pval) # comparaison avec la fonction anova 51 anova(reg.constant,reg.reduit) anova(reg.constant,reg.mortal) anova(reg.mortal,reg.reduit) # calculer le modele reduit : attention degres de liberte modele.reduit2 = Y ~ X1 + X2 + X3 + X5 + X6 + X9 reg.reduit2 = lm(modele.reduit2,data=mortal.data) res=summary(reg.reduit2) res # les sommes des carres SSE = sum(res$residuals*res$residuals) SST = (nn-1)*var(Y) SSR = SST-SSE # les degres de liberte DLT=nn-1 DLR=6 DLE=nn-(DLR+1) MST = SST/DLT MSR = SSR/DLR MSE = SSE/DLE # estimation de sigma et du R2 sigma.est = sqrt(SSE/DLE) res$sigma R2=SSR/SST # la statistique de Fisher FF=MSR/MSE # test de Fisher : calcul de la pvaleur pour le modele constant pval = 1-pf(FF,DLR,DLE) # affichage des resultats et comparaison avec anova res.anova = cbind(SST,SSR,SSE,sigma.est,R2,FF,pval) # comparaison avec la fonction anova anova(reg.constant,reg.reduit2) anova(reg.mortal,reg.reduit2) anova(reg.reduit,reg.reduit2) # # T21 # # lecture du fichier et appelation des colonnes comme dans l’ennonce pins.data = read.table("DATA/processionnaire_pin_regression.csv", sep=";",dec=",",row.names=1,skip=1) 52 index=c(1:10) index=as.character(index) col.label=paste("X",index,sep="") col.label=c(col.label,"Y") colnames(pins.data)=col.label attach(pins.data) # regression lineaire multiple et resultat reg.pins = lm(Y~.,data=pins.data) res=summary(reg.pins) res confint(reg.pins) # lire les dimensions dans une data.frame nn = nrow(pins.data) pp = ncol(pins.data)-1 # les sommes des carres SSE = sum(res$residuals*res$residuals) SST = (nn-1)*var(Y) SSR = SST-SSE # les degres de liberte DLT=nn-1 DLR=pp DLE=nn-(DLR+1) MST = SST/DLT MSR = SSR/DLR MSE = SSE/DLE # estimation de sigma et du R2 sigma.est = sqrt(SSE/DLE) res$sigma R2=SSR/SST # la statistique de Fisher FF=MSR/MSE # test de Fisher : calcul de la pvaleur pour le modele constant pval = 1-pf(FF,DLR,DLE) # affichage des resultats et comparaison avec anova res.anova = cbind(SST,SSR,SSE,sigma.est,R2,FF,pval) # comparaison avec la fonction anova modele.constant = Y ~1. reg.constant = lm(modele.constant,data=pins.data) anova(reg.constant,reg.pins) 53 # calculer le modele reduit : attention degres de liberte modele.reduit = Y ~ X1 + X2 reg.reduit = lm(modele.reduit,data=pins.data) res=summary(reg.reduit) res # les sommes des carres SSE = sum(res$residuals*res$residuals) SST = (nn-1)*var(Y) SSR = SST-SSE # les degres de liberte DLT=nn-1 DLR=2 DLE=nn-(DLR+1) MST = SST/DLT MSR = SSR/DLR MSE = SSE/DLE # estimation de sigma et du R2 sigma.est = sqrt(SSE/DLE) res$sigma R2=SSR/SST # la statistique de Fisher FF=MSR/MSE # test de Fisher : calcul de la pvaleur pour le modele constant pval = 1-pf(FF,DLR,DLE) # affichage des resultats et comparaison avec anova res.anova = cbind(SST,SSR,SSE,sigma.est,R2,FF,pval) # comparaison avec la fonction anova anova(reg.constant,reg.reduit) anova(reg.reduit,reg.pins)