Vous êtes sur la page 1sur 18

Devoir Économétrie Appliqué

BABALI Sophiane, GOSMANE Luca, BOURHIM Rita

Exercice 1

options(repos = c(CRAN = "https://cloud.r-project.org"))

install.packages("pacman")

##
## The downloaded binary packages are in
## /var/folders/8l/7ng82q9s3vv4xqphyslpsl4c0000gn/T//Rtmpky3sGz/downloaded_packages

library(pacman)
p_load(ggplot2, dplyr)

data <- readr::read_csv("/Users/sophiane/Desktop/Titanic-Dataset.csv")

Question 1

## Rows: 891 Columns: 12


## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (5): Name, Sex, Ticket, Cabin, Embarked
## dbl (7): PassengerId, Survived, Pclass, Age, SibSp, Parch, Fare
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.

titanic<- data
nombre_obs <- nrow(data)
nombre_var <- ncol(data)
print(nombre_obs)

## [1] 891

print(nombre_var)

## [1] 12

Il y a 891 observations et 12 variables.

1
Question 2 Pour trouver combien de personnes dans le jeu ont survécu on utilise cette commande:

table(data$Survived)

##
## 0 1
## 549 342

La variable “survived” est une variable binaire qui nous indique lorsqu’elle vaut 0 que les personnes n’ont pas
survécu tandis que lorsqu’elle vaut 1 elle montre les personnes qui ont survécu. Donc, grâce à la commande
“table”, on sait qu’il y a eu 342 survivants.

Question 3 Avec les commandes:

prop.table(table(data$Survived))*100

##
## 0 1
## 61.61616 38.38384

on sait que le taux de survie dans ce jeu est de 38,38384%

Question 4 Voici le tableau montrant le taux de survie dans chaque classe:

taux_survivant_class <- titanic %>%


group_by(Pclass) %>%
summarise(taux_survivant_class = mean(Survived, na.rm = TRUE)*100)
print (taux_survivant_class)

## # A tibble: 3 x 2
## Pclass taux_survivant_class
## <dbl> <dbl>
## 1 1 63.0
## 2 2 47.3
## 3 3 24.2

Le taux de survie de la classe 1 est d’environ 63%; le taux de survie de la classe 2 est d’environ 47%; le
taux de survie de la classe 3 est d’environ 24%

Question 5 Mathématiquement, on veut estimer le modèle :


Survivedi = B0 + B1×Class2 + B2×Class3 + epsilon
où Class2 et Class3 sont des indicateurs binaires qui peuvent prendre la valeur 1, si le survivant fait partie
d’une des classes, ou 0 si le survivant ne fait pas partie d’une des classes. De plus, Survivedi représente la
réponse à la question de savoir si un individu a survécu ou non, c’est donc une variable catégorielle binaire
qui prend la valeur 0 ou 1. Epsilon regroupe tous les variables qui peuvent potentiellement affecter Survivedi
mais qui ne sont pas pris en compte

2
data$Pclass <- as.factor(data$Pclass)
MCO1 <- lm(data$Survived~data$Pclass)
summary(MCO1)

##
## Call:
## lm(formula = data$Survived ~ data$Pclass)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.6296 -0.2424 -0.2424 0.3704 0.7576
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.62963 0.03117 20.198 < 2e-16 ***
## data$Pclass2 -0.15680 0.04596 -3.412 0.000675 ***
## data$Pclass3 -0.38727 0.03741 -10.353 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4582 on 888 degrees of freedom
## Multiple R-squared: 0.1155, Adjusted R-squared: 0.1135
## F-statistic: 57.96 on 2 and 888 DF, p-value: < 2.2e-16

Ainsi, grâce à la régression faites sur R, on a : b0 = *0.629663 → correspond au taux de survie moyen de
la première classe, soit 62,96% ; b1 = - 0.15680 → correspond à la différence dans le taux de survie moyen
entre la deuxième classe et la première classe. Donc, la probabilité de survie moyenne de la deuxième classe
(par rapport à la première classe) est 0.629663 - 0.15680 = 0.47283, soit un taux de survie moyen de
47,28% ; b2 = - 0.38727 → cela représente la différence dans le taux de survie moyen de la troisième classe
par rapport à la première classe. Donc la probabilité de survie moyenne de la troisième classe est 0.629663
- 0.38727 = 0.242336, soit un taux de survie de 24,23%

Question 6 La régression approprié pour vérifier la variation du taux de survie selon l’âge est :
Survivedi = B0 + B1*Agei + epsilon
où Survivedi est la variable dépendante correspondant à la survie du ième passager, c’est à dire 1 s’il a
survécu ou 0 s’il n’a pas survécu, Agei est l’âge du passager i et epsilon est le terme d’erreur qui regroupe
tous les facteurs qui n’ont pas pu être pris en compte dans la régression. D’après la régression faites sur R,
on a :

data_filter <- filter(data, Survived == 1 )


MCO2 <- lm(data$Survived~data$Age)
summary(MCO2)

##
## Call:
## lm(formula = data$Survived ~ data$Age)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.4811 -0.4158 -0.3662 0.5789 0.7252
##

3
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.483753 0.041788 11.576 <2e-16 ***
## data$Age -0.002613 0.001264 -2.067 0.0391 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4903 on 712 degrees of freedom
## (177 observations deleted due to missingness)
## Multiple R-squared: 0.005963, Adjusted R-squared: 0.004567
## F-statistic: 4.271 on 1 and 712 DF, p-value: 0.03912

b0 = 0.483753 → représente en moyenne la probabilité de survie qui est d’environ 48.37% pour un âge
équivalent à 0 b1 = -0.002613 → pour chaque année supplémentaire en âge, il y a en moyenne une diminution
du taux de survie de 0.26% (la probabilité de survie diminue en moyenne d’environ de 0.26%)
On remarque alors qu’il y a en effet une légère variation du taux de variation selon l’âge. Il existe plusieurs
outils pour analyser si la variable Agei” est significatif c’est -à -dire qu’il existe une relation statistique-
ment significative entre la variable explicative associée à ce coefficient et la variable dépendante. L’une des
prédominantes est la p-value qui mesure la probabilité d’observer une valeur aussi extrême que la valeur
estimée du coefficient, on la compare à un seuil de signification (alpha) pour décider de rejeter l’hypothèse
nul (H0) ou non. Si la p-value est inférieure à alpha cela suggère des résultats statistiquement significatifs,
tandis qu’une p-valeur supérieure signifie des résultats non significatifs. Dans notre cas pour un intervalle de
confiance à 95 % (donc alpha=5% soit 0.05), la p-value associé à data$Age est égale à 0.03912, de ce fait la
p-valeur est strictement inférieur à notre seuil de signification (0.03912<0.05) cela implique donc que notre
variable est significatif au niveau de 5%. De ce fait le taux de survie varie selon l’âge.

Question 7 En utilisant la commande “confint (MCO2)”, on obtient l’intervalle de confiance à 95% pour
le coefficient de b1 soit: [-0,00509439 ; -0,0001306918]. On remarque que cette intervalle de confiance exclut
la valeur 0, de ce fait le coefficient de notre estimateur à un niveau de 5% ne prendra jamais la valeur 0 et
confirme donc nos propos à la question précédente où la variable “ ge” est statistiquement significative et a
donc une influence sur la variable dépendante. On peut donc en conclure que la variable Age à bien un effet
significatif sur la variable dépendante, c’est-à-dire la variable Survived. Il est donc important de prendre la
variable Age en compte dans la régression.

confint(MCO2)

## 2.5 % 97.5 %
## (Intercept) 0.40171029 0.5657949592
## data$Age -0.00509439 -0.0001306918

Question 8 Après avoir retiré les données inconnues dans la variable de l’âge et du statut de survie, on
calcul sur R la covariance entre le statut de survie et l’âge le tout divisé par la variance de l’âge. On a :

titanic.na <- na.omit(data)


covariance <- cov(titanic.na$Survived, titanic.na$Age)
variance <- var(titanic.na$Age)
coef <- covariance/variance

Ce résultat correspond à b1 = -0.002613 trouvé lors de la régression faite à la question 6.

4
Exercice 2

Afin de simuler des données contenant 1000 observations et incluant les variables X et Y, nous avons utilisés
ces codes:

n<- 1000
set.seed(12345)
X<- rnorm (n, mean=0, sd=5)
epsilon<- rnorm (n, mean=0, sd=10)
Y<- 10 + 5*X + epsilon
donneesexo2<- data.frame(X, Y)
summary(donneesexo2)

## X Y
## Min. :-13.8916 Min. :-75.615
## 1st Qu.: -2.9799 1st Qu.: -6.726
## Median : 0.2311 Median : 10.285
## Mean : 0.2310 Mean : 10.851
## 3rd Qu.: 3.4428 3rd Qu.: 29.312
## Max. : 16.6537 Max. : 87.953

Voici une statistique descriptive de nos variables X et Y.

Question 1 Nous savons que :


𝑛
∑𝑖=1 (𝑥𝑖 − 𝑥)(𝑦
̄ 𝑖 − 𝑦)̄ Cov(𝑥, 𝑦)
𝑝̂ =
𝑛
√∑𝑖=1 (𝑥𝑖 −
𝑛
𝑥)̄ 2 ∑𝑖=1 (𝑦𝑖 − 𝑦)̄ 2 √Var(𝑥) ⋅ Var(𝑦)

De ce fait cela implique:

𝑛 𝑛 𝑛
𝑝̂ × √∑(𝑥𝑖 − 𝑥)̄ 2 × ∑(𝑦𝑖 − 𝑦)̄ 2 = ∑(𝑥𝑖 − 𝑥)(𝑦
̄ 𝑖 − 𝑦)̄
𝑖=1 𝑖=1 𝑖=1

Soit:

cov(𝑥, 𝑦) = 𝜌√var(𝑥)√var(𝑦)

Cela exprime la covariance (cov(𝑥, 𝑦)) comme le produit du coefficient de corrélation (𝜌) et de la racine carrée
du produit des variances de 𝑥 et 𝑦.
De plus nous savons que l’estimateur de �� par la méthode des moindres carrés ordinaires peut être exprimé
comme suit :

𝑛
∑𝑖=1 (𝑥𝑖 − 𝑥)(𝑦
̄ 𝑖 − 𝑦)̄ Cov(𝑥, 𝑦)
𝛽1̂ = 𝑛 =
∑𝑖=1 (𝑥𝑖 − 𝑥)̄ 2 Var(𝑥)

En réinterprétant les variables et simplifiant nous trouvons:


𝑛 𝑛
√∑𝑖=1 (𝑥𝑖 − 𝑥)̄ 2 ∑𝑖=1 (𝑦𝑖 − 𝑦)̄ 2 √Var(𝑥) × Var(𝑦)
𝛽1̂ = 𝜌 ̂ × 𝑛 = 𝜌̂ ×
∑𝑖=1 (𝑥𝑖 − 𝑥)̄ 2 Var(𝑥)

5
Simplifions l’expression:
𝑛
√∑𝑖=1 (𝑦𝑖 − 𝑦)̄ 2 𝜎̂𝑦
𝛽1̂ = 𝜌 ̂ × = 𝜌̂ ×
𝑛
√∑𝑖=1 (𝑥𝑖 − 𝑥)̄ 2 𝜎̂𝑥

Donc l’estimateur de B1 par MCO peut s’écrire comme:

cov(𝑥, 𝑦) √var(𝑦)
𝛽1 = =𝜌⋅
var(𝑥) √var(𝑥)

Question 2 Le graphique illustrant un nuage de points simulées est representé par ces codes:

options(repos = c(CRAN = "https://cran.rstudio.com"))


install.packages("ggplot2")

##
## The downloaded binary packages are in
## /var/folders/8l/7ng82q9s3vv4xqphyslpsl4c0000gn/T//Rtmpky3sGz/downloaded_packages

library(ggplot2)

ggplot(data = donneesexo2, aes(x = X, y = Y)) +


geom_point(color = "grey") +
geom_smooth(method = "lm", se = FALSE, col = "black") +
labs(title = "Nuage de points avec droite de régression",
x = "X",
y = "Y") +
theme_bw()

## `geom_smooth()` using formula = 'y ~ x'

6
Nuage de points avec droite de régression
100

50
Y

−50

−10 0 10
X

Avec l’appui du nuage de points nous pouvons percevoir une relation linéaire entre les variables X et Y, la
droite de regression met en avant cette linéarité.
(Le code: options(repos = c(CRAN = “https://cran.rstudio.com”)) a été utilisé afin de contrer l’absence
de configuration d’un miroir pour CRAN qui bloquait la lecture des codes permettant de répondre à cette
question.)

Question 3 Dans un premier temps créons la régression associée ainsi que le coefficient b1, nous utiliserons
ces codes:

MCO<- lm(Y~ X, data=donneesexo2)


coefB1<- coef(MCO)
summary(MCO)

##
## Call:
## lm(formula = Y ~ X, data = donneesexo2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -32.315 -6.975 0.011 7.156 33.577
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.67799 0.31913 30.33 <2e-16 ***
## X 5.07830 0.06387 79.51 <2e-16 ***

7
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.08 on 998 degrees of freedom
## Multiple R-squared: 0.8637, Adjusted R-squared: 0.8635
## F-statistic: 6322 on 1 and 998 DF, p-value: < 2.2e-16

Ici le coefficient b1 vaut 5.078297 (presque identique au coefficient B1 dans la population)

print (coefB1)

## (Intercept) X
## 9.677989 5.078297

Algébriquement la régression est: Y= 9.67799 + 5.078297 × X + �


Maintenant calculons la covariance entre X et Y, pour cela nous utiliserons ce code:

Covariance<- cov(X, Y)
print (Covariance)

## [1] 126.6396

La covariance entre X et Y équivaut à 126.6396, cela indique une relation linéaire positive relativement
forte entre ces deux variables.
Pour la corrélation entre ces deux mêmes variables, le code est:

Correlation<- cor(X, Y)
print(Correlation)

## [1] 0.9293325

Ici la corrélation est égale à 0.9293, ce qui indique une forte corrélation positive entre X et Y.
Trouvons maintenant l’ecart type de X avec cette commande:

Ecarttype_x<- sd (X)
print (Ecarttype_x)

## [1] 4.993738

Celle ci vaut 4.993738


Pour Y répétons le même processus:

Ecarttype_y<- sd (Y)
print (Ecarttype_y)

## [1] 27.28806

8
Soit un écart type de 27.28806 pour cette variable.
Puisque
cov(𝑥, 𝑦) √var(𝑦)
𝑏1 = =𝑝⋅( )
var(𝑥) √var(𝑥)
nous pouvons montrer l’équivalence des expressions de la question précédente en intégrant les valeurs trouvées
dans la formule. Ainsi nous trouvons
𝑏1
= 126,6396/(4,993738)2 = 0,9293325 × (27,28806/4,993738) = 5.078297 ce qui correspond bien
au b1 que nous avons estimé grâce à la régression.

Question 4 Afin de standardiser les variables X et Y pour qu’elles aient une moyenne de 0 et un écart
type de 1 nous devons avoir recours à ces codes:

X_standardisé <- (X - mean(X)) / sd(X)


Y_standardisé <- (Y - mean(Y)) / sd(Y)

Réestimons la régression précédente avec les variables standardisées:

MCO_standardisé<- lm (Y_standardisé ~ X_standardisé, data=donneesexo2)


summary(MCO_standardisé)

##
## Call:
## lm(formula = Y_standardisé ~ X_standardisé, data = donneesexo2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.1842 -0.2556 0.0004 0.2622 1.2305
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.858e-17 1.168e-02 0.00 1
## X_standardisé 9.293e-01 1.169e-02 79.51 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3694 on 998 degrees of freedom
## Multiple R-squared: 0.8637, Adjusted R-squared: 0.8635
## F-statistic: 6322 on 1 and 998 DF, p-value: < 2.2e-16

Lorsque nous standardisons les variables x et y pour leur donner une moyenne de 0 et un écart-type de 1,
nous observons une similitude importante entre le coefficient standardisé B1 et la corrélation entre x et y,
comme indiqué par les valeurs respectives de 0.9293 et 0.9293325. Cette ressemblance s’explique par le
fait que B1 mesure la variation de y en réponse à une variation d’une unité de x, alors que la corrélation
illustre la dépendance linéaire entre les deux variables, indiquant comment y varie en fonction de x. De ce
fait la standardisation des variables a conduit à une correspondance entre le coefficient standardisé B1 et la
corrélation entre x et y, mettant en avant la nature de leur relation linéaire. Cependant il est nécessaire de
rappeler qu’une corrélation n’implique pas une causalité.

9
Exercice 3

Question 1 On considère le processus générateur de données suivant :

𝑦 = 𝛽 0 + 𝛽 1 𝑥1 + 𝛽 2 𝑥2 + 𝜖

Avec 𝛽0 = 2, 𝛽1 = 10, 𝛽2 = 1, 𝑥1 ∼ 𝑁 (0, 5), 𝜖 ∼ 𝑁 (0, 25), et 𝑥2 = 3 + 2𝑥1 + 𝜈 avec 𝜈 ∼ 𝑁 (0, 15).
Le chercheur estime la régression : 𝑦 = 𝛿0 + 𝛿1 𝑥1 + 𝛾, où 𝛾 est le terme d’erreur.
Pour savoir si l’effet de 𝑥1 sur 𝑦 sera correctement estimé nous devons dériver analytiquement le biais.
On reprend donc l’équation du processus générateur de données et on remplace x2 par son expression:

𝑦 = 𝛽0 + 𝛽1 𝑥1 + 𝛽2 (3 + 2𝑥1 + 𝜈) + 𝜖

On developpe:

𝑦 = 𝛽0 + 𝛽1 𝑥1 + 3𝛽2 + 2𝛽2 𝑥1 + 𝛽2 𝜈 + 𝜖

Comparons les coefficients de 𝑥1 dans les deux équations :

𝛿1 = 𝛽1 + 2𝛽2

Maintenant, calculons le biais :

Biais(𝛿1 ) = E(𝛿1 ) − 𝛽1

E(𝛿1 ) = 𝛽1 + 2𝛽2

Biais(𝛿1 ) = (𝛽1 + 2𝛽2 ) − 𝛽1

Le terme 𝛽2 contribue au biais, et sa valeur détermine l’ampleur du biais. Dans ce cas, 𝛽2 = 1, donc le biais
est de 2 × 1 = 2. Cela signifie que l’estimateur 𝛿1 sera biaisé de 2 unités à la hausse.

Question 2 Tout d’abord simulons le processus avec 100 observations, pour cela on utilise les codes
suivants:

n<-100
set.seed(12345)
X1<-rnorm(n, mean=0, sd=5)
epsilon<- rnorm (n, mean=0, sd=25)
veta<- rnorm (n, mean=0, sd=15)
X2<- 3+2*X1+ veta
Y<- 2+10*X1+1*X2+epsilon
donneesexo3<- data.frame(X1, Y, X2)

Nous pouvons maintenant estimer la régression trouvée par le chercheur soit:

10
MCO <- lm(Y ~ X1, data = donneesexo3)
summary (MCO)

##
## Call:
## lm(formula = Y ~ X1, data = donneesexo3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -55.18 -17.00 -1.35 17.60 79.30
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.9911 2.8021 1.781 0.078 .
## X1 12.3643 0.4934 25.061 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 27.36 on 98 degrees of freedom
## Multiple R-squared: 0.865, Adjusted R-squared: 0.8636
## F-statistic: 628.1 on 1 and 98 DF, p-value: < 2.2e-16

On voit bien que dans le modèle du chercheur la variable X2 a été omise, de ce fait on trouve que le coefficient
�1 est égale à 12.3643.
L’estimateur �1 est bien biaisé du fait que son coefficient (12.3643) n’est pas le même que le coefficient B1
du processus générateur de données qui lui est égale à 10. Ainsi nous pouvons calculer analytiquement le
biais en soustrayant le coefficient �1 par B1 on trouve donc un biais de 2.3643 qui est très proche du biais
que nous avons trouvé à la question précédente. Notre calcul peut être soutenu par R on nous trouvons le
biais en lisant les codes suivants:

�1<- coef (MCO)


biais<- �1-10
print (biais)

## (Intercept) X1
## -5.008936 2.364270

Il faut prendre en compte que 10 ici correspond au coefficient de B1 du processus générateur de données On
a donc exactement le même biais trouvé en faisaint la soustraction des deux coefficient soit 2.364270.
L’estimateur est biaisé du fait que l’on a omis la variable x2 dans le modèle de régression, alors que x2 est
corrélée à x1 et affecte aussi y. En effet nous avons pu voir que la variable x2 est définie en fonction de
x1 soit:𝑥2 = 3 + 2𝑥1 + 𝜈, cela explique donc que x2 contribue à l’explication de y en plus de x1. Quand
x2 est omis dans le modèle de regression du chercheur : 𝑦 = 𝛿0 + 𝛿1 𝑥1 + 𝛾, nous avons pu voir que 2𝛽2 𝑥1
n’est pas pris en compte, cela implique que le coefficient estimé 𝛿1 ne capture pas l’effet total de x1 sur y
vu qu’une partie de l’effet passe par x2. Pour conclure le biais s’est produit car le modèle estimé par le
chercheur sous-estime l’impact total de x1 sur y, du fait qu’une partie de cet impact est indirecte via x2, et
cette relation entre ces deux variables est complètement ignorée dans le modèle de régression.

Question 3 Pour simulez ce processus 500 fois, nous devons créer une boucle permettant de répéter les
différents estimateurs 500 fois, pour cela nous avons simulés des données ainsi que les variables pertinentes

11
puis nous avons créés un vecteur qui permettra d’enregistrer les paramètres. Ainsi nous créons la boucle qui
affichera le vecteur des coefficients et des biais soit :

n<-100
set.seed(12345)
X1<-rnorm(n, mean=0, sd=5)
epsilon<- rnorm (n, mean=0, sd=25)
veta<- rnorm (n, mean=0, sd=15)
X2<- 3+2*X1+ veta
Y<- 2+10*X1+1*X2+epsilon
donneesexo3<- data.frame(X1, Y, X2)

coef_vector <- numeric(0)

for (i in 1:500) {
sample_data <- donneesexo3[sample(nrow(donneesexo3), 50), ]
regression<- lm(Y ~ X1 , data = sample_data)
coef_vector <- c(coef_vector, coef(regression)["X1"])
}

Biais_estimateurX1<- coef_vector - 10

À partir de ce processus nous pouvons faire un graphique montrant la distribution de l’estimateur :

ggplot() +
geom_density(aes(x = coef_vector), fill = "mistyrose", alpha = 1) +
labs(title = "Distribution de l'estimateur d1",
x = "Estimateur d1", y = "Densité") +
theme_bw()

12
Distribution de l'estimateur d1
1.00

0.75
Densité

0.50

0.25

0.00

11 12 13 14
Estimateur d1

Puis un autre graphique illustrant la distribution du biais:

ggplot() +
geom_density(aes(x = Biais_estimateurX1), fill = "mistyrose", alpha = 1) +
labs(title = "Distribution du biais",
x = "Biais", y = "Densité") +
theme_bw()

13
Distribution du biais
1.00

0.75
Densité

0.50

0.25

0.00

1 2 3 4
Biais

L’estimation est biaisé car lorsque nous répétons le modèle qui omet la variable x2 (modèle du chercheur)
500 fois on voit que la distribution de l’estimateur possède un pic vers la valeur 12.3. En effet grâce au
graphique “Distribution de l’estimateur 𝛿1 ” on peut observer que l’estimateur à des valeurs qui oscille entre
11 et 14 et que sa moyenne tend vers *12.3, cela implique que l’espérance du coefficient de l’estimateur est
12.3, or pour que l’estimateur soit sans biais il faut que l’espérance du coefficient de l’estimateur soit égale
au coefficient du processus générateur de données. Dans notre cas 12.3 ≠ 10, donc l’estimation est biaisée.
Pour analyser l’ampleur du biais nous pouvons voir le graphique “Distribution du biais”, dans ce graphique
le biais prend des valeurs entre 1 et 4, et tend en moyenne vers 2.3 qui est la valeur que nous avons trouvés
à la question précédente.

Exercice 4

Simulons les 1000 observations:

n<-1000
set.seed(12345)
x<-rnorm(n, mean = 0, sd = 1)
y<-rnorm(n, mean = 0, sd = 1)
observations_simulées<- data.frame(x, y)
summary(observations_simulées)

## x y
## Min. :-2.77833 Min. :-3.33467
## 1st Qu.:-0.59597 1st Qu.:-0.71899

14
## Median : 0.04622 Median :-0.02139
## Mean : 0.04620 Mean :-0.03039
## 3rd Qu.: 0.68857 3rd Qu.: 0.67496
## Max. : 3.33073 Max. : 3.28902

Voici quelques statistiques descriptives des variables X et Y

Question 1 Malgré que x et y suivent la même loi normale avec N (0,1), ce sont deux distributions de
données complétement différentes, il y a donc aucune corrélation entre x et y. On en conclut que lorsque x �
N (0, 1) et y � N (0, 1), il n’y a aucun effet attendu de x sur y car les deux variables sont indépendantes.

covariance_xy<- cov(x, y)
variance_x<- var(x)
b1<- covariance_xy/ variance_x
b0<- mean(y) - b1*mean(x)
print (covariance_xy)

Question 2

## [1] 0.03905026

print (variance_x)

## [1] 0.9974968

print (b1)

## [1] 0.03914825

print (b0)

## [1] -0.03220106

En utilisant la méthodologie vue au TP2 afin de créer 1000 observations simulées, ainsi que celles données
dans la consigne, on obtient que b1 (estimateur échantillonaire de B1 population) est égale environ à 0.03915
et, b0 est égale environ à -0.0322. De manière intermédiaire à ces résultats on obtient aussi la variance de
x, qui est égale environ à 0.9975 et, la covariance de x et y qui est égale environ à 0.03905. De manière
analytique 𝛽1̂ = cov(𝑥,𝑦) ̂
var(𝑥) donc 0.03905026/0.0074968 soit environ 0.03915. De même pour 𝛽0 = 𝑦 ̄ − 𝛽1 𝑥̄
̂
on obtient :-0.03039 - 0.03915 fois O.O4620 soit -0.0322.

residus<- y - b0 - b1*x
EQM<- sum(residus^2)/(n-1)
sommes_xcarré<- sum(x^2)
sommes_x<- sum(x)
ecarttypeb1<- sqrt(n*(EQM)/(n*sommes_xcarré-((sommes_x)^2)))
print (EQM)

15
Question 3

## [1] 1.015248

print (sommes_xcarré)

## [1] 998.6336

print (sommes_x)

## [1] 46.19816

print (ecarttypeb1)

## [1] 0.03191887

En utilisant les formules données par la question, on obtient: - Une erreur quadratique moyenne de 1.01525.
- Une somme des xi au carré d’environ 998.6336. - Une somme des xi d’environ 46.19816. - Un écart
type de b1 d’environ *0.03192.

Question 4 Calculons statistique-t associé à 𝛽1̂ :

statistiqueT<- b1/ ecarttypeb1


print (statistiqueT)

## [1] 1.226493

En utilisant la formule donnée par la question, on obtient que la statistique-t associée à b1 est environ égale
à 1.2265.

Question 5 À l’aide de R, avec b1 � Tn-2, on obtient que la valeur-p associée à b1 est de 0.22.

degrésdeliberté = n-2
valeur_p <- 2 * (1 - pt(abs(statistiqueT), df = degrésdeliberté))
print (valeur_p)

## [1] 0.2203027

Question 6 La valeur-p associée à b1 est égale à 0.22, avec un seuil de significativité général de 0.05. Tout
en sachant que la règle nous dit que lorsque p<a nous pouvons rejeter H0, on en conclut que lorsque H0: B1
= 0 et H1: B1 � 0 on ne peut pas rejeter l’hypothèse nulle car p>a (0.22>0.05). Cela signifie que la pente
b1 n’est pas significative. On en arrive aux mêmes conclusions avec un seuil de significativité de 0.1.
En introduisant la régression appropriée sur R, on constate que chacun de nos résultats obtenus aux questions
précédentes, sont identiques avec ceux obtenus avec la régression.

16
regression<- lm(y~x)
summary(regression)

##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2315 -0.6975 0.0011 0.7156 3.3577
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.03220 0.03191 -1.009 0.313
## x 0.03915 0.03193 1.226 0.221
##
## Residual standard error: 1.008 on 998 degrees of freedom
## Multiple R-squared: 0.001504, Adjusted R-squared: 0.000503
## F-statistic: 1.503 on 1 and 998 DF, p-value: 0.2205

Question 7 Pour répéter l’ensemble du processus 1000 fois nous avons utilisé la même logique qu’à
l’exercice 3, en créant un vecteur qui prendra l’ensemble des valeurs des p-values qui par la suite nous per-
mettra de construire un histogramme. Dans la boucle créée nous avons inséré l’ensemble de nos paramètres
ainsi que nos données simulées comme suivit:

valeurs_p <- numeric(1000)

for (i in 1:1000) {
n <- 1000
x <- rnorm(n, mean = 0, sd = 1)
y <- rnorm(n, mean = 0, sd = 1)
covariance_xy <- cov(x, y)
variance_x <- var(x)
b1 <- covariance_xy / variance_x
b0 <- mean(y) - b1 * mean(x)
residus <- y - b0 - b1 * x
EQM <- sum(residus^2) / (n - 1)
sommes_xcarré <- sum(x^2)
sommes_x <- sum(x)
ecarttypeb1 <- sqrt(n * (EQM) / (n * sommes_xcarré - ((sommes_x)^2)))
statistiqueT <- b1 / ecarttypeb1
degrésdeliberté <- n - 2
valeur_p <- 2 * (1 - pt(abs(statistiqueT), df = degrésdeliberté))

valeurs_p[i] <- valeur_p


}

Construisons un histogramme des valeurs-p obtenues grâce a notre vecteur :

hist(valeurs_p, col = "salmon", breaks = 21, main = "Histogramme des valeurs P", xlab = "Valeurs de P",

17
Histogramme des valeurs P
60
50
40
Fréquence

30
20
10
0

0.0 0.2 0.4 0.6 0.8 1.0

Valeurs de P

Sur cet histogramme, on constate une distribution plutôt uniforme avec des valeurs-P sur tout l’intervalle
entre 0 et 1, avec des pics aux niveaux des valeurs-P élevés. Cela indique généralement que les coefficients
estimés dans les modèles ne sont pas ou très peu significatifs, dans notre cas, c’est les b1. On en revient donc
à la même conclusion que celle obtenue à la question 6, c’est-à-dire que dans nos modèles de régressions, la
variable explicative n’a pas d’effet significatif sur la variable dépendante.

18

Vous aimerez peut-être aussi