Un chercheur mesure l’activité d’une enzyme particulière chez des souris soumises ou non à un traitement, et obtient les valeurs suivantes.
Calculez pour chaque tous les estimateurs de tendence centrale et de dispersion discutés au cours.
Sur base des propriétés générales de ces estimateurs, discutez des différences entre valeurs, interprétez les différences observées entre estimateurs alternatifs pour un même jeu de données.
Fournissez une interprétation préliminaire des différences observées entre groupes.
x1 <- c(5, 8, 6, 2, 250, 7)
x2 <- c(7, 3, 2, 5, 8, 4)
n <- length(x1)
x <- data.frame("treated" = x1, "control" = x2)
desc <- data.frame(
"n" = c(length(x1), length(x2)),
"sum" = apply(x, 2, sum),
"sum of squared values" = apply(x^2, 2, sum),
"mean" = apply(x, 2, mean),
"Q1" = apply(x, 2, quantile, prob=0.25),
"median" = apply(x, 2, median),
"Q3" = apply(x, 2, quantile, prob=0.75),
"sample.var" = apply(x, 2, var) * (n -1) / n,
"sample.sd" = apply(x, 2, sd) * sqrt((n -1) / n)
)
desc["IQR"] <- desc["Q3"] - desc["Q1"]
kable(t(desc), digits=2)
treated | control | |
---|---|---|
n | 6.00 | 6.00 |
sum | 278.00 | 29.00 |
sum.of.squared.values | 62678.00 | 167.00 |
mean | 46.33 | 4.83 |
Q1 | 5.25 | 3.25 |
median | 6.50 | 4.50 |
Q3 | 7.75 | 6.50 |
sample.var | 8299.56 | 4.47 |
sample.sd | 91.10 | 2.11 |
IQR | 2.50 | 3.25 |
Poursuivez l’analyse ci-dessus
Calculez l’espace inter-quartile standardisé.
Calculez les statistiques descriptives du premier échantillon après avoir supprimé la valeur aberrante. On appellera cet échantillon “non-traité filtré”.
A partir des 3 jeux de paramètres d’échantillons (non-traité, traité, non-traité flitré), inférez les paramètres des populations dont ils sont extraites.
Résumez les résultats dans un tableau, et founissez-en une interprétation générale.
Sur base des données de l’exercice précédent, effectuez un test de comparaison de moyennes. Dans différentes conditions:
Traité versus non traité, sans filtrage, en estimant les paramètres sur base des moments.
Traité versus non traité, sans filtrage, en estimant les paramètres sur base des quartiles.
Traité versus filtré, en estimant les paramètres sur base des moments..
Dans chaque cas répondez aux questions suviantes.
Formulez l’hypothèse nulle et l’hypothèse alternative.
Choisissez un test de comparaison de moyenne, en justifiant votre choix.
Calculez la statistique du test et sa probabilité critique (p-value), avec les différents estimateurs ci-dessus (a, b, c).
Interprétez les résultats.
N <- 10000 ## Population size
normal.mean <- 10 ## Moyenne de la loi normale
normal.sd <- 2 ## Ecart-type de la loi normale
## Generate the population
pop <- rnorm(n = N, mean = normal.mean, sd = normal.sd)
## Compute the population parameters
pop.mean <- mean(pop)
pop.sd <- sd(pop) * sqrt((N-1)/N) ## Beware: R sd() does not compute the sd of the given numbers, but infers sd of a population for whihc this would be a sample
hist(pop, breaks=100, col="palegreen", main="Population")
legend("topleft",
legend=c(
paste("Pop mean= ", round(digits=2, pop.mean)),
paste("Pop sd= ", round(digits=2, pop.sd))
))
n <- 10 ## Sample size
## Generate a population
x <- sample(x = pop, size = n, replace = FALSE)
# abline(v=x, col="blue")
x.mean <- mean(x)
sample.stat <- c(
mean = x.mean,
sum = sum(x),
ss = sum(x^2)
)
sample.stat["var"] <- sample.stat["ss"] / n - x.mean^2
# message("Sample variance: ", sample.stat["var"], " == ", var(x) * (n-1) / n, "; pop var est: ", var(x))
Sur base de ces paramètres d’échantillons, estimez les paramètres de population correspondants.
Répétez cette opération \(R = 10000\) fois en stockant les statistiques d’échantillon dans un tableau.
## The trick: we create a big data frame with one column per individual
## and one row per samplpe (replicate), and fill it up with numbers.
## We then use the apply funciton to compute the sample stats on each row.
R <- 1000
## Create an empty matrix
sampling.matrix <- matrix(
nrow = R,
ncol = n)
for (i in 1:R) {
sampling.matrix[i, ] <- sample(x = pop, size = n, replace = FALSE)
}
sample.stat <- data.frame(
r = 1:R,
sum = apply(sampling.matrix,1, sum),
sum.of.squares = apply(sampling.matrix^2,1, sum),
mean = apply(sampling.matrix,1, mean)
)
sample.stat$var <- sample.stat$sum.of.squares / n - sample.stat$mean^2 # Sample variance
sample.stat$sd <- sqrt(sample.stat$var) # Sample standard déviation
sample.stat$Q1 <- apply(sampling.matrix, 1, quantile, prob=0.25) # FIrst quartile
sample.stat$median <- apply(sampling.matrix, 1, median) # Median
sample.stat$Q3 <- apply(sampling.matrix, 1, quantile, prob=0.75) ## Third quartile
sample.stat$IQR <- sample.stat$Q3 - sample.stat$Q1 ## Inter-quartile range
# Standardised inter-quartile range
norm.iqr <- 2*qnorm(p=0.25, lower.tail = FALSE)
sample.stat$IQRs <- sample.stat$IQR / norm.iqr
mean(sample.stat$IQRs)
[1] 1.724444
[1] 1.841802
r | sum | sum.of.squares | mean | var | sd | Q1 | median | Q3 | IQR | IQRs |
---|---|---|---|---|---|---|---|---|---|---|
1 | 106.26078 | 1181.544 | 10.626077 | 5.2408432 | 2.2892888 | 10.127704 | 11.205686 | 12.18078 | 2.053078 | 1.5219487 |
2 | 101.07563 | 1052.261 | 10.107563 | 3.0632925 | 1.7502264 | 9.502976 | 10.032571 | 11.55330 | 2.050324 | 1.5199076 |
3 | 103.72546 | 1084.133 | 10.372546 | 0.8235473 | 0.9074951 | 9.819562 | 10.365001 | 11.04528 | 1.225716 | 0.9086249 |
4 | 107.67321 | 1177.543 | 10.767321 | 1.8190786 | 1.3487322 | 9.985165 | 10.994104 | 11.83173 | 1.846562 | 1.3688586 |
5 | 100.99995 | 1111.490 | 10.099995 | 9.1390643 | 3.0230885 | 7.934574 | 10.092926 | 11.82565 | 3.891072 | 2.8844560 |
6 | 96.92615 | 984.656 | 9.692615 | 4.5188239 | 2.1257526 | 8.042950 | 9.767269 | 10.48624 | 2.443287 | 1.8112113 |
## Compare sample mean and median
par(mfrow=c(1,2))
lim <- c(ceiling(min(append(sample.stat$mean, sample.stat$median))),
ceiling(max(append(sample.stat$mean, sample.stat$median))))
plot(sample.stat$mean, sample.stat$median, col="grey", panel.first=grid(),
main = "Central tendency",
xlim = lim, ylim = lim,
xlab = "Sample mean",
ylab = "Sample median"
)
abline(a=0, b=1)
abline(h=pop.mean, col="blue")
abline(v=pop.mean, col="blue")
abline(h=mean(sample.stat$mean), col="darkgreen")
abline(v=mean(sample.stat$median), col="darkgreen")
## Compare sample standard deviation and standardized inter-quartile range
lim <- c(0, ceiling(max(append(sample.stat$sd, sample.stat$IQRs))))
plot(sample.stat$sd, sample.stat$IQRs, col="grey", panel.first=grid(),
main = "Dispersion",
xlim = lim, ylim = lim,
xlab = "Sample standard dev",
ylab = "Sample IQRs"
)
abline(a=0, b=1)
abline(h=pop.sd, col="blue")
abline(v=pop.sd, col="blue")
abline(h=mean(sample.stat$sd), col="darkgreen")
abline(v=mean(sample.stat$IQRs), col="darkgreen")
Dessinez les histogrammes des distributions d’échantillonnage des paramètres mesurés sur l’échantillon: moyenne, médiane, écart-type.
Faites la même expérience avec différentes tailles d’échantillon: \(n= 2\), \(n=4\), \(n=16\), \(n=64\) et comparez les histogrammes obtenus.
Interprétez les résultats (et on en discute en début de séance prochaine).
Effectuez des échantillonnages répétésau sein de différentes distributions:
Dans chaque cas, dessinez les histogrammes d’échantillonnage de la moyenne, la médiane et l’écart-type, et interprétez les résultats.