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)

Documents pareils