L'espérance d'un lancer de dé est \( \mu = 21/6 \) et la variance est \( \sigma^2 = 91/6- (21/6)^2=35/12 \). Donc \( S_4 \approx N(84,70) = 84 + \sqrt{70}N(0,1) \).
La probabilité que la somme soit égale à 84 est donc à peu près égale à
pnorm(85, mean = 85, sd = sqrt(70)) - pnorm(84, mean = 85, sd = sqrt(70))
## [1] 0.04757
On peut aussi évidemment facilement calculer cette valeur à partir d'une table pour la loi normale centrée en 0 et de variance 1:
pnorm(1/sqrt(70)) - pnorm(0)
## [1] 0.04757
La probabilité que la somme soit supérieure à 84 est donc environ
pnorm(10000, mean = 85, sd = sqrt(70)) - pnorm(84, mean = 85, sd = sqrt(70))
## [1] 0.5476
Générons des séries de 24 lancers.
N = 10000
X = 0
for (i in 1:24) {
X = X + floor(runif(N, min = 1, max = 7))
}
Regardons les histogrammes correspondant:
hist_tcl = function(X, mean = 0, var = 1) {
par(mfrow = c(2, 1))
hist(X)
hist(rnorm(length(X), mean = mean, sd = sqrt(var)))
}
hist_tcl(X, 84, 70)
Bon, petite ruse pour y voir plus clair et être sûr d'avoir les mêmes échelles.
library(ggplot2)
hist_tcl_ggplot = function(X, mean = 0, var = 1) {
par(mfrow = c(1, 1))
df = data.frame(x = X, val = "Sample")
df = rbind(df, data.frame(x = rnorm(length(X), mean = mean, sd = sqrt(var)),
val = "TCL approximation"))
# Méthode de Sturges pour calculer le nombre de bins
ggplot(df, aes(x = x)) + geom_histogram(binwidth = diff(range(X))/(log2(length(X) +
1)), fill = "lightgray", color = "darkred") + facet_wrap(~val, ncol = 1) +
theme_bw()
}
hist_tcl_ggplot(X, 84, 70)
La variance d'une loi uniforme entre \( a \) et \( b \) est \( \frac{1}{12}(b-a)^2 \). Donc dans notre cas l'espérance de notre mesure est de 1776 pieds et sa variance de \( \frac{4}{3} \) de pieds carrés.
Si on réalise une moyenne sur 18 mesures, l'espérance sera la même mais la variance sera de \( \frac{4}{3\times 18} \approx \) 0.0741.
La probabilité que la moyenne de 18 mesures indépendantes soit entre 1775 et 1777 pieds est donc d'environ
pnorm(1777, mean = 1776, sd = sqrt(4/3/18)) - pnorm(1775, mean = 1776, sd = sqrt(4/3/18))
## [1] 0.9998
N = 10000
X = 0
for (i in 1:18) {
X = X + 1776 + runif(N, min = -2, max = 2)
}
X = X/18
hist_tcl_ggplot(X, 1776, 4/3/18)
## Warning: position_stack requires constant width: output may be incorrect
## Warning: position_stack requires constant width: output may be incorrect
Ben à vous de jouer! ;)
Alors, est-ce qu'on tombe souvent à proximité de la vrai valeur ?
N = 10000
X = 0
for (i in 1:18) {
X = X + 1776 + runif(N, min = -2, max = 2)
}
X = X/18
length(X[X >= 1775.5 & X <= 1776.6])/length(X)
## [1] 0.9524
Illustrons ce qu'il se passe:
XX = head(X, n = 40)
df = data.frame(x = XX, y = seq(1:length(XX)))
df$valid = 1
df[abs(df$x - 1776) > 0.6, ]$valid = 0
ggplot(df, aes(x = x, y = y, color = factor(valid))) + geom_point() + geom_errorbarh(aes(xmax = x -
0.6, xmin = x + 0.6)) + geom_vline(xintercept = 1776) + theme_bw()
Pour améliorer la précision de l'estimation de notre mesure, il nous faudrait faire plus de msure. Pour conserver un intervalle de confiance, il faudrait que \( 2\frac{\sqrt{4/3}}{\sqrt{n}}=0,1 \), soit \( n \geqslant \) 533.3333.
df = data.frame(row.names = c("n", "sample_mean", "sample_var"))
for (n in seq(2, 32)) {
for (N in 1:30) {
x = rnorm(n, 5, 1)
df = rbind(df, data.frame(n = c(n), sample_mean = mean(x), sample_var = var(x)))
}
}
ggplot(df, aes(x = n, y = sample_var)) + geom_point() + geom_hline(yintercept = 1) +
theme_bw()
Même avec une estimation sur 32 échantillons, il n'est pas rare de se tromper de près d'un facteur 2 alors qu'on est pourtant parti d'une loi relativement simple… Même si la convergence vers la loi normale est rapide, l'estimation de la variance n'est pas si simple. Il vaut donc mieux prévoir large voire utiliser une borne sup…
