Au cours de ce TP nous effectuerons des tests de comparaison de moyennes sur deux types de données.
Données artificielles générées selon des distributions normales, soit sous hypothèse nulle (\(H_0\)) soit sous hypothèse alternative (\(H_1\)). Ceci nous permettra de réaliser des tests dans des situations où nous connaissons les paramètres des populations à comparer (\(\mu_1\), \(\mu_2\), \(\sigma_1\), \(\sigma_2\)), en connaissant donc la réponse correcte du test. Le but de cet exercice sera de
Données de transcriptome obtenues au moyen de puces à ADN (DNA microarrays) chez 190 patients souffrant de leucémies lymphoblastiques aigues (LLA), classifiés en différents groupes selon les perturbations chromosomiques (hyperploidie) ou génétiques (mutations d’un gène particulier) supposées être à l’origine du cancer.
Le but de cette analyse sera de détecter les gènes exprimés différentiellement (differentially expressed genes, DEG) entre deux sous-types particuliers de cancer.
Pour les jeux de données artificiels, nous poserons arbitrairement un seuil \(\alpha = 0.05\) sur le risque d’erreur de première espèce.
Dans un premier temps, nous allons délibérément générer des données sous hypothèse nulle (\(H_0\)) c’est-à-dire en tirant des échantillons dans deux populations de taille égale. Les données seront générées dans les conditions d’applicabilité du test de Student (hypothèses de travail, c’est-à-dore hypothèses préalables à la réalisation du test): les 2 populations dont les échantillons sont extraits sont supposées:
Le but de l’exercice sera de mesurer le taux de faux posiitfs, c’est-à-dire la proportion des tests déclarés (à tort) positifs, alors qu’il n’existe pas de différence entre les moyennes des deux populations.
Au moyen de la fonction rnorm()
, tirez deux échantillons de taille \(n_1 = n_2 = 10\) à partir de populations normales de moyennes \(\mu_1 = \mu_2 = 7\) et d’écart-types \(\sigma_1 = \sigma_2 = 2\).
n1 <- 10 ## Taille du premier échantillon
n2 <- 10 ## Taille du second échantillojn
mu1 <- 7 ## Moyenne de la 1ère population
mu2 <- 7
sigma1 <- 2 ## Ecart-type de la popumation 1
sigma2 <- 2
## On tire des échantillons des deux populations respectives
x1 <- rnorm(n = n1, mean = mu1, sd = sigma1)
x2 <- rnorm(n = n2, mean = mu2, sd = sigma2)
t.test()
Effectuez un test de comparaison de moyenne en utilisant la fonction t.test()
. Lisez attentivement l’aide de cette fonction, et choisissez les paramètres en tenant compte des caractéristiques de vos données. Nous effectuerons ici un test bilatéral (two-tailed).
Interprétez le résultat de la fonction t.test()
(paramètres, décision, interprétation de la p-valeur).
## Seuil critique sur le risque d'erreur de type I
alpha <- 0.05
## Utiliser la fonction t.test() pour réaliser le test de Student
t.test(x1, x2,
var.equal = TRUE, ## On postule les variances égales
alternative = "two.sided", ## Test bilatéral
conf.level = 1 - alpha ## Niveau de confiance
)
Two Sample t-test
data: x1 and x2
t = 0.0083914, df = 18, p-value = 0.9934
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-1.845557 1.860359
sample estimates:
mean of x mean of y
7.391994 7.384593
sum()
, calculez les paramètres de vos échantillons nécessaires au test de Student (\(\bar{x}_1, \bar{x}_2, s_1, s_2\)).n1 <- length(x1) ## Taille d'échantillon
m1 <- sum(x1) / n1 ## Moenne du premier échantillon
s1 <- sqrt(sum((x1 - m1)^2)/n1) ## Ecart-type du premier échantillon
## Idem pour le second échantillon
n2 <- length(x2)
m2 <- sum(x2) / n2
s2 <- sqrt(sum((x2 - m2)^2)/n2)
## Afficher les paramètres des échantillons
cat("n1 =", n1, "; m1 =", round(digits=2, m1), "; s1 = ", round(digits=2, s1))
n1 = 10 ; m1 = 7.39 ; s1 = 1.92
cat("n2 =", n2, "; m2 =", round(digits=2, m2), "; s2 = ", round(digits=2, s2))
n2 = 10 ; m2 = 7.38 ; s2 = 1.82
sum()
, estimez les estimateurs de ces paramètres pour les populations (\(\hat{\mu}_1, \hat{\mu}_2, \hat{\sigma}_1, \hat{\sigma}_2\)).## Estimation des moyennes de population
mu1.est <- m1
mu2.est <- m2
## Estimation des écarts-types
sigma1.est <- s1 * sqrt(n1/(n1-1))
sigma2.est <- s2 * sqrt(n2/(n2-1))
## Afficher les paramètres estimés pour la population
cat("mu1.est = ", round(digits=2, mu1.est), "sigma1.est", round(digits=3, sigma1.est))
mu1.est = 7.39 sigma1.est 2.025
cat("mu2.est = ", round(digits=2, mu2.est), "sigma2.est", round(digits=3, sigma2.est))
mu2.est = 7.38 sigma2.est 1.917
mean()
et sd()
.mean1 <- mean(x1)
mean2 <- mean(x2)
sd1 <- sd(x1)
sd2 <- sd(x2)
cat("mean1 = ", round(digits=2, mean1), "sd1", round(digits=2, sd1))
mean1 = 7.39 sd1 2.03
cat("mean2 = ", round(digits=2, mean2), "sd2", round(digits=2, sd2))
mean2 = 7.38 sd2 1.92
## Print the result for the knitr report
result <- t(data.frame(
"moyennes de populations" = c(mu1, mu2),
"moyennes d'échantillons" = c(m1, m2),
"moyennes estimées" = c(mu1.est, mu2.est),
"écarts-types de population" = c(sigma1, sigma2),
"écarts-types d'échantillons" = c(s1, s2),
"écarts-types estimés" = c(sigma1.est, sigma2.est)))
colnames(result) <- c("Population 1", "Population 2")
kable(as.data.frame(result), digits = 2, caption = "Estimation des paramètres de centralité (moyenne) et dispersion (écart-type) des populations à partir des échantillons. ")
Population 1 | Population 2 | |
---|---|---|
moyennes.de.populations | 7.00 | 7.00 |
moyennes.d.échantillons | 7.39 | 7.38 |
moyennes.estimées | 7.39 | 7.38 |
écarts.types.de.population | 2.00 | 2.00 |
écarts.types.d.échantillons | 1.92 | 1.82 |
écarts.types.estimés | 2.03 | 1.92 |
Attention, les fonctions R var()
et sd()
ne calculent pas les paramètres d’échantillons (\(s^2\), \(s\)) mais les estimateurs des paramètres de population correspondants (\(\hat{\sigma}^2\), \(\hat{\sigma}\)).
\[t_{S} = \frac{\hat{\delta}}{\hat{\sigma}_\delta} = \frac{\bar{x}_{2} - \bar{x}_{1}}{\sqrt{\frac{n_1 s_{1}^2 + n_2 s_{2}^2}{n_1+n_2-2} \left(\frac{1}{n_1}+ \frac{1}{n_2}\right)}}\]
## Difference between sample means
diff <- m1 - m2
## Estimation of the standard error on the difference between sample means
Student.diff.err <- sqrt((1/n1 + 1/n2) * (n1 * s1^2 + n2 * s2^2) / (n1 + n2 - 2))
## Student statistics
Student.t <- diff / Student.diff.err
## Print Student statistics with 5 significant digits
cat("Student statistics t =", signif(digits=5, Student.t))
Student statistics t = 0.0083914
Avec la fonction \(pt()\), calculez la p-valeur de cette valeur \(t\).
Interprétez les résultats (décision, interprétation de la p-valeur).
Dans cet exercice, nous allons réaliser un grand nombre de tests de Student en nous plaçant sous hypothèse nulle, et compter le nombre de tests retournant une réponse positive.
Avant de commencer l’expérience, indiquez le nombre de faux positifs attendus a prior si l’one ffectue \(R = 10^{4}\) tests sous hypothèse nulle, avec un seuil critique de \(\alpha= 0.05\).
Répétez 10^{4} fois le test de Student au moyen de la fonction t.test()
et récupérez dans deux vecteurs séparés les valeurs rapportées pour la statistique \(t\) et pour la \(p\) valeur.
Dessinez l’histogramme des valeurs \(t\) obtenues empiriquement.
Calculez la proportion de faux-positifs. Cette proportion correspond-elle à vos attentes ?
Effectuez \(R = 10^{4}\) tests de comparaison de moyenne sur des échantillons aléatoires tirés dans des populations de moyennes respectives \(\mu_1 = 6\) et \(\mu_2 8\), ayant toutes deux un écart-type \(\sigma=1\).
Choisissez le test et ses paramètres en fonction des caractéristiqus de vos données.
Comptez le nombre de résultats déclarés positifs et négatifs avec un seuil \(\alpha = 0.05\).
Interprétez ce résultat.
Effectuez les mêmes tests (10^{4} répliques, d’abord sous hypothèse nulle puis sous hypothèse alternative) avec des données tirées de population de variances inégales: \(\sigma_1^2 = 4\), \(\sigma_2^2 = 25\).
Justiifez le choix du test et des paramètres.
Comptez le nombre de résultats déclarés positifs ou négatifs.
Interprétez le résultat.
Au moyen de la fonction R rpois()
, générez des données selon une loi de Poisson dont l’espérance vaut \(\lambda_1 = 4\) pour la première population et \(\lambda_2 = 6\) pour la seconde.
Choisissez le test approprié.
Mesurez les proportions de tests respectivement déclarés positifs et négatifs.
Sur ces mêmes données, effectuez un test paramétrique de comparaison de moyennes (Student ou Welch, à vous de choisi en le justifiant).
Interprétez le résultat.
Si vous arrivez ici, suivez ce tutoriel:
http://pedagogix-tagc.univ-mrs.fr/ASG/practicals/microarrays_student_test/DenBoer_Student_test.html
Symbol | Description |
---|---|
\(\mu_{1}, \mu_{2}\) | Moyennes respectives des populations 1 et 2. |
\(\sigma_{1}, \sigma_{2}\) | Ecarts-types respectifs des populations 1 and 2. |
\(N_1\), \(N_2\) | Tailles (nombre d’individus) des populations 1 et 2. |
\(n_1\), \(n_2\) | Effectifs (nombre d’individus) des échantillons prélevés sur les populations 1 et 2. |
\(\bar{x}_{1}, \bar{x}_{2}\) | Moyennes d’échantillons. |
$= _{2} - | Différence entre les moyennes des populations. |
\(d = \hat{\delta} = \hat{\mu}_2 - \hat{\mu}_1 = \bar{x}_2 - \bar{x}_1\) | \(d\) = Taille d’effet: dans un test de comparaison de moyennes, il s’agit de la différence entre les moyennes d’échantillons, utilisée comme estimateur de \(\delta\). |
\(s^2_{1}, s^2_{2}\) | Variances mesurées sur les échantillons. |
\(\hat{\sigma}_p = \sqrt{\frac{n_1 s_1^2 + n_2 s_2^2}{n_1+n_2-2}}\) | Ecart-type groupé (pooled standard deviation), utilisé comme estimateur de l’écart-type commun des deux populations, en supposant leurs variances égales (hypothèse de travail d’homoscédasticité). |
\(\hat{\sigma}_\delta = \hat{\sigma}_p \sqrt{\left(\frac{1}{n_1}+ \frac{1}{n_2}\right)}\) | Erreur standard sur la différence entre moyennes, en supposant que les populations ont la même variance (test de Student). |
\(t_{S} = \frac{\hat{\delta}}{\hat{\sigma}_\delta} = \frac{\bar{x}_{2} - \bar{x}_{1}}{\sqrt{\frac{n_1 s_{1}^2 + n_2 s_{2}^2}{n_1+n_2-2} \left(\frac{1}{n_1}+ \frac{1}{n_2}\right)}}\) | statistique \(t\) de Student |
\(t_{W}=\frac{\bar{x}_{1} - \bar{x}_{2}}{\sqrt{\frac {s^2_{1}}{n_1} + \frac{s^2_{2}}{n_2}}}\) | statistique \(t\) de Welch |