TD de modèle linéaire, Correction des exercices
Pierre Ailliot 06/11/2020
Correction de l’exercice 2
1. Importer les données dans Rdans un objet nommé zpuis renommer les lignes en utilisant le nom des pays (fonction R row.names).
z=read.csv("http://instruction.bus.wisc.edu/jfrees/jfreesbooks/Regression%20Modeling/BookWebDec2010/CSVData/UNLifeExpectancy.csv") row.names(z)=z[,2]
z=z[,-2]
2. Enlever les pays avec des valeurs manquantes.
#supplément : analyse des valeurs manquantes
#pourcentage valeurs manquantes global sum(is.na(z))/prod(dim(z))
## [1] 0.1312741
#Représentation pourcentage de valeurs manquantes par variable barplot(apply(is.na(z),2,sum)/nrow(z),las=2)
REGION LIFEEXP ILLITERA TE POP FER TILITY PRIV A TEHEAL TH PUBLICEDUCA TION HEAL THEXPEND BIR THA TTEND PHYSICIAN SMOKING RESEARCHERS GDP FEMALEBOSS 0.0
0.1 0.2 0.3 0.4 0.5
#Représentation pourcentage de valeurs manquantes par pays barplot(apply(is.na(z),1,sum)/ncol(z),las=2,cex.names = .5)
Afghanistan Angola Armenia Azerbaijan Bangladesh Belgium Bhutan Botswana Bulgaria Cambodia Cape Verde Chile Comoros Costa Rica Cuba Denmark Dominican Republic El Salvador Estonia Finland Gambia Ghana Guatemala Guyana Hong Kong China (SAR) India Iraq Italy Jordan Korea (Democratic People's Rep. of) Kyrgyzstan Lebanon Libyan Arab Jamahiriya Macedonia (TFYR) Malaysia Malta Mexico Mongolia Mozambique Nepal Nicaragua Norway Pakistan Paraguay Poland Romania Saint Kitts and Nevis Samoa Senegal Sierra Leone Slovenia South Africa Sudan Sweden Tajikistan Timor−Leste Trinidad and Tobago Turkmenistan United Arab Emirates Uruguay Venezuela (Bolivarian Republic of) Zambia
0.0 0.1 0.2 0.3 0.4 0.5
##############
#fin supplément
z=na.omit(z) #enlève les pays avec au moins une valeur manquante
3. Ajouter une variable nommée PIB obtenue en divisant la variable GDP par la variable POP (PIB par habitant).
z=cbind(z,PIB=z$GDP/z$POP)
4. Ajuster un modèle de régression linéaire simple pour expliquer la variable LIFEEXP à partir de la variable PIB. On donnera une estimation des paramètres inconnues ainsi que des intervalles de confiance à 95%. fit=lm(LIFEEXP~PIB,data=z)
fit
#### Call:
## lm(formula = LIFEEXP ~ PIB, data = z)
#### Coefficients:
## (Intercept) PIB
## 70.9985 0.2157
Une estimation de la penteβ1 est 0.2157. Une fourchette d’estimation à 95% pourβ1 est [0.15; 0.27].
On peut aussi calculer un intervalle de confiance pourσ2 (qui fait partie des paramètres inconnus). D’après le cours, [(n−2)χn−2,1−α/2S2 ; (n−2)χn−2,α/2S2 ] est un IC au niveau 1−αpourσ2. Pour calculers2, on peut utiliser les résultats donnés par la fonction summary.
s=summary(fit)$sigma n=nrow(z)
IC=c((n-2)*s^2/qchisq(0.975,df=n-2),(n-2)*s^2/qchisq(0.025,df=n-2)) IC #IC à 95% pour sigma^2
## [1] 7.072694 16.632640 sqrt(IC) #IC à 95% pour sigma
## [1] 2.659454 4.078313
5. Discuter les sorties de la fonction summary. summary(fit)
#### Call:
## lm(formula = LIFEEXP ~ PIB, data = z)
#### Residuals:
## Min 1Q Median 3Q Max
## -8.4574 -0.6698 0.1095 2.2703 5.7768
#### Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 70.99847 0.69119 102.719 < 2e-16 ***
## PIB 0.21574 0.02843 7.588 1.83e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#### Residual standard error: 3.219 on 43 degrees of freedom
## Multiple R-squared: 0.5724, Adjusted R-squared: 0.5625
## F-statistic: 57.57 on 1 and 43 DF, p-value: 1.833e-09
La p-value du testH0:β1= 0 est égale à 1.83e−09. On refuse donc l’hypothèseH0 et le PIB a bien une influence sur l’espérance de vie. Savez-vous interpréter les autres valeurs qui apparaissent sur la ligne ‘PIB’?
On peut également voir la p-value du testH0:β0= 0 et obtenir une estimation deσ2(cf question prédédente).
La compréhension des deux derrières lignes du summary (Multiple R-squared. . . et F-statistic. . . ) est hors programme.
6. Tracer sur un même graphique le nuage de points et la droite des moindres carrés.
plot(z$PIB,z$LIFEEXP)
text(z$PIB,z$LIFEEXP,row.names(z),cex=.7) #on ajoute le nom des pays abline(fit$coefficients[1],fit$coefficients[2],col='red')
0 10 20 30 40 50 60
65 70 75 80
z$PIB
z$LIFEEXP
Argentina
Australia
Bangladesh
Belgium
Brazil Bulgaria
Canada Chile
China
CroatiaCzech Republic
Denmark
El Salvador Estonia
Finland France Germany
Hungary
Iran (Islamic Republic of)
Ireland Japan
Kazakhstan Latvia Lithuania Malaysia
Malta
Mauritius Mexico
Nepal
Netherlands
New Zealand Norway
Paraguay Philippines
Poland
Romania
Russian Federation
Singapore Slovenia
Sweden
Thailand Turkey
United Kingdom United States Uruguay
Les hypothèses du modèle de régression linéaire simple sont elles réalistes?
Non, la relation ne semble pas linéaire.
Est-ce que vous avez des idées pour améliorer le modèle (par exemple en appliquant des transformations sur les variables)?
En regardant le nuage de points, on peut penser que la relation a plutôt une forme logarithmique, c’est à dire que
Yi=β0+βiln(xi) +Wi.
Afin de vérifier cette hypothèses, on peut tracer le nuage de points correspondant.
plot(log(z$PIB),z$LIFEEXP) #la relation semble bien linéaire
−1 0 1 2 3 4
65 70 75 80
log(z$PIB)
z$LIFEEXP
On peut ajuster le modèle linéaire correspondant pour estimerβ0 etβ1et tracer le courbe correspondante.
fit=lm(LIFEEXP~log(PIB),data=z) #ajustement du modèle
#représentation du nuage de point et de la fonction ajustée plot(z$PIB,z$LIFEEXP)
text(z$PIB,z$LIFEEXP,row.names(z),cex=.7) #on ajoute le nom des pays
#représentation de la fonction ajustée xx=0:100
lines(xx,fit$coefficients[1]+fit$coefficients[2]*log(xx),col='red')
0 10 20 30 40 50 60
65 70 75 80
z$PIB
z$LIFEEXP
Argentina
Australia
Bangladesh
Belgium
Brazil Bulgaria
Canada Chile
China
CroatiaCzech Republic
Denmark
El Salvador Estonia
Finland France Germany
Hungary
Iran (Islamic Republic of)
Ireland Japan
Kazakhstan Latvia Lithuania Malaysia
Malta
Mauritius Mexico
Nepal
Netherlands
New Zealand Norway
Paraguay Philippines
Poland
Romania
Russian Federation
Singapore Slovenia
Sweden
Thailand Turkey
United Kingdom United States Uruguay
Correction de l’exercice 5
1. Le modèle de régression linéaire simple s’écrit, pouri∈ {1, ...,41} Yi=β0+β1xi+Wi avec
• xi la valeur prise par la variable explicative (température annuelle dans la villei);
• Yi la variable aléatoire qui décrit le volume deSO2dans la villei;
• Wi un résidu aléatoire qui suit la loi N(0, σ2);
• β0,β1 etσ2 des paramètres inconnus.
En utilisant les valeurs numériques données dans l’énoncé, on obtient ¯x= 55.8, ¯y= 30.0, sx= 7.1,sy= 23.2 etcx,y =−73.01 (pour calculersx, on a utilisé que vx=s2x= Pn
i=1x2i
n −x¯2, cf Rappel 1 du polycopié).
L’estimation des moindres de carré de
• β1est ˆb1= csx,y2
x =−1.432
• β0est ˆb0= ¯y−bˆ1x¯= 109.9
Rappelons que ¯y= ˆb0+ ˆb1x¯. On en déduit que
s2= 1 n−2
n
X
i=1
((yi−y¯)−ˆb1(xi−x¯))2.
Finalement, en développant cette expression, on obtient
s2= 1 n−2
" n X
i=1
(yi−y¯)2+ ˆb21
n
X
i=1
(xi−x¯)2−2ˆb1 n
X
i=1
(xi−x¯)(yi−y¯)
#
= 1
n−2 h
ns2y+ ˆb21ns2x−2ˆb1ncx,y
i
= n
n−2ns2y(1−rx,y)2.
On peut alors faire l’application numérique et on obtients2≈455.
2. La statistique de test estTc =ShBˆ11 avech21=Pn 1
i=1(xi−¯x)2 = ns12
x. En faisant l’application numérique, on trouve que cette statistique de test prend la valeur tc =−3.069 pour nos données. SiH0 est vraie, alors Tc∼Tn−2.
En utilisant R et la fonction qt, on peut calculer les quantiles de la loi de Student àn−2 degrés de liberté.
Par exemple, on obtientt39,0.975= 2.02 (tapez qt(.975,39) dans R) et donc on refuseH0 pour un risque de première espèceα= 5% (car |tc|= 3.069> tn−2,1−α/2).
La p-value du test est pv =P(|T|>|tc|) = 2∗P(T >|tc|) = 2∗(1−P(T ≤ |tc|)) avec T ∼ Tn−p−1. La fonction pt de R permet de calculerP(T <=|tc|) (fonction de répartition de la loi de la loi de Student). On obtientP(T <=|tc|) = 0.9980515 (tapez pt(3.069,39) dans R) etpv= 0.003897012. On retrouve la même décision : commepv <0.05, on refuseH0 pour un risque de première espèceα= 5%.