library(tidyverse)
library(kableExtra)
library(ggvenn)
kabex = function(o) o %>% kable(format="html", escape=F) %>% kable_styling(bootstrap_options = c("striped"))
var.n = function(x) 1/length(x) * sum( (x - mean(x))**2 )
t.stat = function(m1, m2, n1, n2, v1, v2) (m1-m2)/sqrt( (n1*v1 + n2*v2)  * (1/n1 + 1/n2) ) * sqrt(n1+n2-2)
rounding=2
correction=F
correction.start=function() ifelse(correction, '<font style="color: #F00000;">', "<!--")
correction.end=function() ifelse(correction, '</font>', "-->")

Contexte

La présence du marqueur (gène FLS2) induit une cascade de réactions résultant en réponses immunitaires de la plante Arabidopsis thaliana. Ici, vous voulez comparer le transcriptome entre plantes avec marqueur et plantes sans marqueur. Pour cela, vous marquez le transcriptome des plantes avec marqueur avec le fluorochrome vert (cy3) et le transcriptome des plantes sans marqueur avec le fluorochrome rouge (cy5). Vous disposez de 10 réplicats.

Test de l’expression diffĆ©rentielle d’un gĆØne

Vous voulez tester l’expression diffĆ©rentielle d’un gĆØne de rĆ©ponse immunitaire. Pour cela, vous disposez des valeurs de sonde suivantes :

replicat=1:10
cy3=c(10, 30, 42, 12, 30, 47, 25, 27, 26, 41)
cy5=c(25, 47, 60, 47, 77, 56, 81, 70, 56, 68)
tibble(RƩplicat=replicat, `Cy3 (G)`=cy3, `Cy5 (R)`=cy5) %>% t %>% kabex
RƩplicat 1 2 3 4 5 6 7 8 9 10
Cy3 (G) 10 30 42 12 30 47 25 27 26 41
Cy5 (R) 25 47 60 47 77 56 81 70 56 68

Vous devez donc comparer (statistiquement) la moyenne de l’expression du gĆØne des plantes avec et sans marqueur afin de dĆ©terminer si les moyennes sont diffĆ©rentes et donc de dĆ©terminer si le marqueur a un effet (significatif).

Elements de statistiques

On suppose que la population peut se rƩsumer Ơ (ou modƩliser avec) une moyenne et un Ʃcart-type.

Exemple avec une population de moyenne \(µ = 30\) et d’écart-type \(\sigma = 10\) tous les 2 connus.

xi=seq(0,60,by=.01)
plot(xi, dnorm(xi, mean=30, sd=10), type='l', xlab='x', ylab='p(x)', main='Loi normale N(30,10)')

Quand on prend des individus au hasard dans la population, on a plus de chance de tomber sur quelqu’un proche de la moyenne.

En pratique, il est rarement possible de mesurer tous les individus d’une population. L’idĆ©e est d’estimer la moyenne et l’écart-type de la population Ć  partir d’un Ć©chantillon, c’est-Ć -dire un certain nombre d’individus (→ taille de l’échantillon) pris au hasard. Il sera essentiel de pouvoir statistiquement quantifier la confiance que l’on peut accorder Ć  ces estimation.

Moyenne de l’échantillon : \[\overline{X} = \frac{1}{n}\sum_{i=1}^{n} x_i\] avec \(n\) la taille de l’échantillon.

Ecart-type de l’échantillon notĆ© \(S\) et variance \(S^2\) : \[S^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i - \overline{X} )^2\]

3 Ʃchantillons de taille 10 pour la loi N(moyenne=30, Ʃcart-type=10)

par(mfrow=c(3,1))
sample.size = 10
smp = round(rnorm(sample.size,30,10))
stripchart(smp, method="stack", xlim=c(5,55), frame.plot=F, axes=F)
axis(1, col=NA, col.ticks=1)
abline(v=mean(smp), lty="dashed")
text(mean(smp), 0, paste0("Moyenne de l'Ʃchantillon : ", round(mean(smp),rounding)))
smp = round(rnorm(sample.size,30,10))
stripchart(smp, method="stack", xlim=c(5,55), frame.plot=F, axes=F)
axis(1, col=NA, col.ticks=1)
abline(v=mean(smp), lty="dashed")
text(mean(smp), 0, paste0("Moyenne de l'Ʃchantillon : ", round(mean(smp),rounding)))
smp = round(rnorm(sample.size,30,10))
stripchart(smp, method="stack", xlim=c(5,55), frame.plot=F, axes=F)
axis(1, col=NA, col.ticks=1)
abline(v=mean(smp), lty="dashed")
text(mean(smp), 0, paste0("Moyenne de l'Ʃchantillon : ", round(mean(smp),rounding)))

2 Ʃchantillons de taille 100 pour la loi N(moyenne=30, Ʃcart-type=10)

par(mfrow=c(2,1))
sample.size = 100
smp = round(rnorm(sample.size,30,10))
stripchart(smp, method="stack", xlim=c(5,55), frame.plot=F, axes=F)
axis(1, col=NA, col.ticks=1)
abline(v=mean(smp), lty="dashed")
text(mean(smp), 0, paste0("Moyenne de l'Ʃchantillon : ", round(mean(smp),rounding)))
smp = round(rnorm(sample.size,30,10))
stripchart(smp, method="stack", xlim=c(5,55), frame.plot=F, axes=F)
axis(1, col=NA, col.ticks=1)
abline(v=mean(smp), lty="dashed")
text(mean(smp), 0, paste0("Moyenne de l'Ʃchantillon : ", round(mean(smp),rounding)))

2 Ʃchantillons de taille 1000 pour la loi N(moyenne=30, Ʃcart-type=10)

stripchart(round(rnorm(1000,30,10)), method="stack", xlim=c(5,55), ylim=c(0,15), frame.plot = F)