• Aucun résultat trouvé

Corrigé Etienne Birmelé 20 octobre 2019

N/A
N/A
Protected

Academic year: 2022

Partager "Corrigé Etienne Birmelé 20 octobre 2019"

Copied!
37
0
0

Texte intégral

(1)

Corrigé

Etienne Birmelé 20 octobre 2019

TD1

Exercice 1

1. L’erreur de première espèce est le fait de décider H 1 quand H 0 est vraie, c’est-à-dire de mettre le vaccin en production (et donc d’investir) alors qu’il n’est pas plus efficace que l’ancien.

L’erreur de deuxième espèce est le fair de décider H 0 alors que la vérité est H 1 , c’est-à-dire de ne pas produire un nouveau vaccin alors qu’il est plus efficace.

2. Le directeur a fait un choix dit conservatif, à savoir qu’il a préféré évité l’erreur de première espèce. Il préfère éviter tout risque d’investir pour rien, quitte à accepter une certaine probabilité de passer à côté d’un vaccin plus efficace.

Exercice 2

1. On teste

H 0 : p = 9 16 H 1 : p 6 = 9

16

Cependant, comme on sait que si H 1 est vraie, p est forcément égal à 15 9 , on peut décider de construire un test pour ce cas particulier plutôt que d’utiliser un test de type Student.

Sous H 0 , le nombre attendu d’observation du phénotype d’intérêt est 16 9 ∗ 2400 = 1350 alors que sous H 1 il est de 15 9 ∗ 2400 = 1440.

La procédure retenue consiste donc à mettre un seuil à la moyenne des deux et donc à choisir l’hypothèse tel que la moyenne attendue est la plus proche de l’observation;

La confiance est

P H

0

( H 0 ) = P( X ≤ 1395) quand X ∼ B (2400 , 9 16 ) pbinom (1395,2400,9 / 16)

## [1] 0.9695718 La puissance est

P H

1

( H 1 ) = P( X > 1395) quand X ∼ B (2400 , 9 15 ) pbinom (1395,2400,9 / 15,lower.tail = FALSE)

## [1] 0.9679125

On obtient un test avec une puissance et une confiance de près de 97%, c’est-à-dire que les deux risques sont

d’à peine plus de 3%.

(2)

Exercice 3

1. P( X > S ) > 0 quand X ∼ N (45 . 5 , 3 . 8) quelle que soit la valeur du seuil S . La seule manière d’avoir une probabilité nulle de condamner un innocent est donc de ne condamner personne (ce qui revient à choisir un seuil infini).

Pour fixer le seuil demandé, il faut trouver la valeur de S telle que P H

0

( XS ) = 0 . 95.

seuil <- qnorm (.05,45.5,3.8,lower.tail = FALSE) seuil

## [1] 51.75044 2.

tableau <- c () for (i in 1 : 15){

e1<- rnorm (10,45.5,3.8) e2<- rnorm (100,45.5,3.8) e3<- rnorm (1000,45.5,3.8)

tableau <- rbind (tableau, c ( sum (e1 > seuil), sum (e2 > seuil), sum (e3 > seuil))) }

colnames(tableau) <- c("10 personnes","100 personnes","1000 personnes") tableau

## 10 personnes 100 personnes 1000 personnes

## [1,] 0 7 48

## [2,] 2 4 38

## [3,] 0 1 54

## [4,] 0 6 43

## [5,] 2 3 42

## [6,] 0 10 49

## [7,] 1 5 60

## [8,] 1 5 52

## [9,] 1 7 39

## [10,] 0 9 51

## [11,] 0 7 44

## [12,] 0 3 46

## [13,] 0 2 48

## [14,] 0 6 50

## [15,] 0 9 41

On constate qu’il y a environ 5% des personnes pour lesquelles H 0 est vraie (on a bien simulé suivant la lois sous H 0 pour lesquelles la décision est H 1 , et qui sont donc condamnées à tort. Cela est attendu puisque c’est le risque de première espèce choisi. La loi des grands nombres dit alors que la proportion des personnes concernées sur un grand échantillon doit tendre vers cette proportion.

3. Pour une valeur x fixée, la loi du taux X sous H 1 est N (45 . 5 + x, 3 . 8) et la puissance est P( X > seuil ) suivant cette loi.

x <- seq (0,10,by=0.5)

puissance <- pnorm (seuil,45.5 + x,3.8,lower.tail=FALSE)

plot (puissance ~ x,type="l")

(3)

0 2 4 6 8 10

0.2 0.4 0.6 0.8

x

puissance

La probabilité de détecter un tricheur est la probabilité de décider H 1 alors que la vérité est H 1 , c’est-à-dire la puissance. Graphiquement, pour x = 3, la puissance semble être environ de 20%.

On peut déterminer sa valeur exacte

pnorm(seuil,45.5+3,3.8,lower.tail=FALSE)

## [1] 0.1961704

4. On considère que X = X

1

+X 3

2

+X

3

où les X i sont indépendants et suivent une loi normale N (45 . 5 , 3 . 8).

Alors X ∼ N (45 . 5 , 3.8 3 ).

On en déduit le nouvelle confiance

confiance <- pnorm (seuil,45.5,3.8 /sqrt (3)) confiance

## [1] 0.9978069 et la nouvelle puissance

puissance <- pnorm (seuil,48.5,3.8 /sqrt (3),lower.tail=FALSE) puissance

## [1] 0.0692285

Dans le cadre d’un contrôle anti-dopage, prendre trois mesures indépendantes du même individu lors de la même compétition est impossible. Les trois mesures ne seront en effet pas indépendantes en raison de leur proximité dans le temps.

5. Le suivi longitudinal consiste à prendre des mesures régulières tout au long de la carrière du sportif. Sous l’hypothèse qu’il est la majorité du temps non soumis à des produits dopants, cela permet d’apprendre une loi sous H 0 qui correspond à celle du sportif en question et non de la popoulation en entier. Cela a deux avantages:

• Réduire la variance (les risques du test sont d’autant plus petits que les lois sont piquées)

• Les sportifs ayant naturellement un taux moyen supérieur à celui de la moyenne de la population voit

la loi sous H 0 centrée au bon endroit. Auparavant, même en n’étant pas dopé, ils avaient des valeurs à

(4)

droite de la moyenne sous H 0 , ce qui augmentait leur probabilité d’être condamné à tort.

(5)

TD2

Exercice 1

1.

vitesse <- c (70,74,79,80,73,77,78,67,79,81,80,77,71,76,73,82,90,78,71,78,74,75,77,78,79)

mean (vitesse)

## [1] 76.68 sd (vitesse)

## [1] 4.643275 boxplot (vitesse)

70 75 80 85 90

2. On note µ l’espérance de la vitesse. On veut déterminer si les voitures rouletn en moyenne significative- ment plus vite que la limité autorisée. Les hypothèses sont donc:

H 0 : µ ≤ 75 H 1 : µ > 75

Sous l’hypothèse de normalité, on peut mener un test de Student unilatéral pour répondre à cette question.

3.

t.test (vitesse,alternative="greater",mu=75)

## ## One Sample t-test

## ## data: vitesse

## t = 1.8091, df = 24, p-value = 0.04149

## alternative hypothesis: true mean is greater than 75

## 95 percent confidence interval:

## 75.09118 Inf

## sample estimates:

(6)

## mean of x

## 76.68

La p-valeur de . 041 est inféreure à . 05. On conclut donc H 1 , c’est-à-dire que les voitures sont en moyenne en excès de vitesse. Cette conclusion est cependant à prendre avec beaucoup de prudence car on et très proche de . 05. Il serait préférable si possible d’agrandir l’échantillon.

4. En l’absence d’hypothèse de normalité, il faut faire un test non-paramétique sur la médiane de la vitesse.

H 0 : m ≤ 75 H 1 : m > 75

L’hypothèse d’une distribution symétrique des vitesses autour de la vitesse médiane paraît raisonnable. Sous cette hypothèse, on peut mener un test de Wilcoxon des rangs signés.

wilcox.test (vitesse,alternative="greater",mu=75)

## Warning in wilcox.test.default(vitesse, alternative = "greater", mu = 75):

## cannot compute exact p-value with ties

## Warning in wilcox.test.default(vitesse, alternative = "greater", mu = 75):

## cannot compute exact p-value with zeroes

## ## Wilcoxon signed rank test with continuity correction

## ## data: vitesse

## V = 212, p-value = 0.039

## alternative hypothesis: true location is greater than 75 Les conclusions sont les mêmes que précédemment.

Exercice 2

1.

H 0 : p = 0 . 5 H 1 : p 6 = 0 . 5 2.

binom.test(c(16,4),p=0.5,alternative="two.sided")

## ## Exact binomial test

## ## data: c(16, 4)

## number of successes = 16, number of trials = 20, p-value = 0.01182

## alternative hypothesis: true probability of success is not equal to 0.5

## 95 percent confidence interval:

## 0.563386 0.942666

## sample estimates:

## probability of success

## 0.8

(7)

La p-valeur est 0 . 011 < 0 . 05, on conclut donc H 1 , à savoir que la pièce est biaisée.

3. Comme il s’agit d’un test sur une variable discrète (binomiale), il n’y a pas de valeurs de seuils tels que le risque de première espèce soit exactement de 0 . 05.

2*pbinom(4,20,.5)

## [1] 0.01181793 2 *pbinom (5,20,.5)

## [1] 0.04138947 2*pbinom(6,20,.5)

## [1] 0.1153183

En essayant plusieurs valeurs, on voit que le choix le plus pertinent est de rejeter si le nombre de Pile est inférieur ou égal à 5 ou supérieur ou égal à 15. Dans ce cas, le risque de première espèce effectif est de 0 . 041.

4. Si n est suffisamment grand, on peut remplacer la statistique N du comptage du nombre de piles par Z =

N n1 2

1 2 √ n

qui, d’après le TCL, suit une loi normale centrale réduite sous H 0 . 5. a) La puissance est

P H

1

( H 1 ) = P( X ≤ 5) + P( X ≥ 15) avec X ∼ B (20 , 0 . 7) pbinom(5,20,.7) + pbinom(14,20,.7,lower.tail=FALSE)

## [1] 0.4164138

On remarquera que comme pbinom(x,n,p,lower.tail=FALSE) renvoie P( X > x ) avec X ∼ B ( n, p ), il faut écrire P( X ≥ 15) = P( X > 14) et l’appliquer pour x = 14 et non 15.

b)

puissance20= function (x){

return ( pbinom (5,20,x) + pbinom (14,20,x,lower.tail=FALSE) ) }

puissances20 <- puissance20(seq(0,1,by=.05))

plot (puissances20 ~seq (0,1,by=.05),type='l')

(8)

0.0 0.2 0.4 0.6 0.8 1.0

0.2 0.4 0.6 0.8 1.0

seq(0, 1, by = 0.05)

puissances20

On constate que la puissance est très mauvaise pour p 1 proche de p = 0 . 5. C’est normal puisque dans ce cas, les tirages sous H 1 sont très proches de ceux sous H 0 et le test a été construit pour que 95% des tirages effectués sous H 0 entraîne la décision H 0 . En particulier, pour p 1 = p , la puissance vaut α = 0 . 05. Au contraire, plus p 1 s’éloigne de 0 . 5, plus il est probable de bien détecter que le tirage n’a pas été fait sous H 0 .

c)

qbinom (.025,400,.5)

## [1] 180

On rejette maintenant H 0 si le nombre de piles est inférieur ou égal à 180 ou supérieur ou égal à 220.

puissance400= function (x){

return ( pbinom (180,400,x) + pbinom (220,400,x,lower.tail=FALSE) ) }

puissances400 <- puissance400 ( seq (0,1,by=.05)) par (new=T)

## Warning in par(new = T): appel de par(new=TRUE) sans graphe

plot (puissances400 ~seq (0,1,by=.05),type='l',col='red')

(9)

0.0 0.2 0.4 0.6 0.8 1.0

0.2 0.4 0.6 0.8 1.0

seq(0, 1, by = 0.05)

puissances400

La courbe de puissance est bien meilleure, puisque l’intervalle des valeurs de p 1 pour lesquelles on fait mal la différence avec p se rétrécit. Pour p 1 = 0 . 6 par exemple, on décidera presque toujours H 1 alors qu’on décidait H 0 dans la majorité des cas en se limitant à 20 lancers.

Exercice 3

1.

avant <- c (268,225,252,192,307,228,246,298,231,185) apres <- c (106,186,223,110,203,101,211,176,194,203) ech <- c (avant,apres)

group <- c ( rep ("avant",10), rep ("apres",10))

boxplot (ech ~ group)

(10)

apres avant

100 150 200 250 300

group

ech

L’impression visuelle est que le régime est efficace.

2. Pour tester

H 0 : σ avant = σ apres H 1 : σ avant 6 = σ apres

on applique un test de Fisher.

var.test (avant,apres)

## ## F test to compare two variances

## ## data: avant and apres

## F = 0.72555, num df = 9, denom df = 9, p-value = 0.6404

## alternative hypothesis: true ratio of variances is not equal to 1

## 95 percent confidence interval:

## 0.1802156 2.9210481

## sample estimates:

## ratio of variances

## 0.725547

La p-valeur de 0 . 64 nous amène à conclure qu’il est crédible de considérer que les deux variances sont les mêmes.

3. On veut tester si le régime a une efficacité significative, c’est-à-dire si la moyenne (ou la médiane) après régime est significativement inférieure à celle avant régime.

Sous hypothèse de normalité des données, on peut appliquer un test de Student pour tester H 0 : µ apresµ avant

H 1 : µ apres < µ avant

Le test est ici sur des données appariées et d’après la question précédente, les variances peuvent être considérées

comme égales.

(11)

t.test (avant,apres,alternative="greater",paired=TRUE)

## ## Paired t-test

## ## data: avant and apres

## t = 4.0489, df = 9, p-value = 0.001445

## alternative hypothesis: true difference in means is greater than 0

## 95 percent confidence interval:

## 39.34775 Inf

## sample estimates:

## mean of the differences

## 71.9

La p-valeur de 1 . 4 10 −3 entraîne un rejet de H 0 et donc la conclusion à une efficacité significative du régime.

4. Si l’hypothèse de normalité n’est pas vérifiée, on peut faire une hypothèse de symétrie sous H 0 (càd, si le régime ne sert à rien, la répartition de variation est symétrique par rapport à 0) et appliquer le test de Wilcoxon des rangs signés

H 0 : m apresm avant

H 1 : m apres < m avant

wilcox.test (avant - apres,mu=0,alternative='greater')

## ## Wilcoxon signed rank test

## ## data: avant - apres

## V = 54, p-value = 0.001953

## alternative hypothesis: true location is greater than 0 La conclusion est la même.

Exercice 4

Le disque B étant plus cher, il est intéressant de l’acheter uniquement si ses performances sont significativement supérieures à celle de A .

En raison de la faible taille des échantillons, on ne peut appliquer qu’un test non paramétrique

H 0 : m Am B

H 1 : m A < m B

Il semble raisonnable de faire l’hypothèse de symétrie sous H 0 et on peut mener un test de Wilcoxon des rangs signés

A <- c (232,228,237,225,214,213,205,233,219,236) B <- c (222,234,244,235,229,260,232,224)

wilcox.test(A,B,alternative="less")

## Warning in wilcox.test.default(A, B, alternative = "less"): cannot compute

## exact p-value with ties

(12)

## ## Wilcoxon rank sum test with continuity correction

## ## data: A and B

## W = 23.5, p-value = 0.07746

## alternative hypothesis: true location shift is less than 0

La p-valeur supérieure à 0 . 05 entraîne l’acceptation de H 0 , à savoir que la durée de vie des disques B n’estpas significativement meilleure que celle des disques A .

Au vu de la p-valeur faible, cette conclusion peut cependant peut-être être due à un manque de puissance.

Un nouveau test avec un jeu de données plus grand serait sans doute à conseiller.

Exercice 5

L’exercice est similaire au précédent. On applique un test de Wilcoxon des rangs signés pour tester

H 0 : m debutm f in

H 1 : m debut < m f in debut <- c(.8,.83,1.89,1.04,1.45,1.38,1.91,1.64,.73,1.46) fin <- c(1.15,.88,.9,.74,1.21)

wilcox.test (debut, fin, alternative='less')

## ## Wilcoxon rank sum test

## ## data: debut and fin

## W = 35, p-value = 0.8968

## alternative hypothesis: true location shift is less than 0 On conclut H 0 , à savoir qu’il n’y a pas d’augmentation significative.

Exercice 6

Dan tous les cas, et au vu de la taille des échantillons, on cherche à prendre une décision entre les hypothèses suivantes:

H 0 : m 1980 ≥ m 1990

H 1 : m 1980 < m 1990

L’unilatéralité vient du fait qu’il s’agit de mettre en évidence une progression.

1. En l’absence d’autres informations, on est obligé de considérer les échantillons comme non appariés.

premier <- c (.33,.146,.518,.339,.693,.249,.438,.695,.135,.388)

deuxieme <- c (.36,.177,.524,.447,.14,.392,.534,.263,.157,.566)

wilcox.test (premier,deuxieme,alternative='less')

(13)

## ## Wilcoxon rank sum test

## ## data: premier and deuxieme

## W = 50, p-value = 0.5147

## alternative hypothesis: true location shift is less than 0

La conclusion est clairement H 0 , c’est-à-dire qu’il n’y a pas d’augmentation significative de la proportion d’abeilles tueuses.

2. Si les pièges ont été posés aux mêmes endroits, on peut considérer les échantillons comme appariés.

Dans ce cas, les hypothèses deviennent

H 0 : m dif f ≤ 0 H 1 : m dif f > 0 où m dif f désigne la médiane de l’échantillon des différences.

Dans ce cas, la statistique est le nombre de coordonnées positives de cet échantillon (autrement dit le nombre de pièges où on observe une augmentation). Cette statistique suit sous H 0 une loi B (10 , 0 . 5).

On observe 8 pièges où la proportion augemnte. La p-valeur associée est donc P( X ≥ 8) = P( X > 7) quand X ∼ B (10 , 0 . 5).

pbinom (7,10,.5,lower.tail=FALSE)

## [1] 0.0546875

La p-valeur est extrêmement proche de 0 . 05, ce qui ne permet pas vraiment de conclure. Il paraît souhaitable d’agrandir l’échantillon.

Remarque: Si on applique un test de Wilcoxon pour échantillons appariés, wilcox.test (premier,deuxieme,alternative='less',paired=TRUE)

## ## Wilcoxon signed rank test

## ## data: premier and deuxieme

## V = 19, p-value = 0.2158

## alternative hypothesis: true location shift is less than 0

on observe une p-valeur clairement en faveur de H 0 , ce qui paraît contradictoire avec le fait que ce test est plus puissant que le test du signe. Cependant, si on regarde les données de plus près, on constate qu’il y a en fait 8 pièges avec une progression modérée et deux pièges avec un effondrement de la proportion (traitement local du problème?). L’hypothèse de symétrie de l’échantillon des différences autour de 0, nécessaire pour un test de Wilcoxon des rangs signés, semble par conséquent discutable.

Exercice 7

Au vu du fait que seuls les rangs des performances sont disponibles, seul un test non paramétrique peut être appliqué. Il est à noter que les données ne sont pas appariées.

On peut tester grâce à un test de Kruskal

H 0 : m A = m B = m C

H 1 : Au moins deux médianes sont différentes

(14)

m A , m B et m C désignent les performances médianes des clubs A , B et C . x <- 1 : 10

g <- c (2,1,2,3,3,1,2,1,3,3) kruskal.test (x,g)

## ## Kruskal-Wallis rank sum test

## ## data: x and g

## Kruskal-Wallis chi-squared = 2.0909, df = 2, p-value = 0.3515

Au vu de la p-valeur, on conclut H O , à savoir qu’il n’y a pas de différence significative entre les clubs au vu de ces résultats.

Exercice 8

Il s’agit à nouveau de comparer les médianes des productions entre trois zones, sur échantillons non appariés, donc à l’aide d’un test de Kruskal.

H 0 : m A = m B = m C

H 1 : Au moins deux médianes sont différentes ZoneA <- c (48,48.2,50.3,53.5,54.6,56.4,57.8,58.5,60.5)

ZoneB <- c (44.2,46.3,48.3,48.5,50.5,51.2,55.4) ZoneC <- c (51.2,52.3,52.7,56.5,59.1,60.5,62,62.2) kruskal.test(list(ZoneA,ZoneB,ZoneC))

## ## Kruskal-Wallis rank sum test

## ## data: list(ZoneA, ZoneB, ZoneC)

## Kruskal-Wallis chi-squared = 8.4402, df = 2, p-value = 0.0147

On conclut H 1 , c’est-à-dire qu’il y a une différence significative de production entre les zones.

Les comparaisons donnent les résultats suivants:

wilcox.test (ZoneA,ZoneB)

## ## Wilcoxon rank sum test

## ## data: ZoneA and ZoneB

## W = 48, p-value = 0.09073

## alternative hypothesis: true location shift is not equal to 0 wilcox.test (ZoneA,ZoneC)

## Warning in wilcox.test.default(ZoneA, ZoneC): cannot compute exact p-value

## with ties

## ## Wilcoxon rank sum test with continuity correction

(15)

## ## data: ZoneA and ZoneC

## W = 22.5, p-value = 0.2107

## alternative hypothesis: true location shift is not equal to 0 wilcox.test(ZoneB,ZoneC)

## Warning in wilcox.test.default(ZoneB, ZoneC): cannot compute exact p-value

## with ties

## ## Wilcoxon rank sum test with continuity correction

## ## data: ZoneB and ZoneC

## W = 3.5, p-value = 0.005437

## alternative hypothesis: true location shift is not equal to 0

On voit que les productions médianes entre A et B ne sont pas significativement différentes, celles entre B et C non plus, mais celles entre A et C oui. Cette relation n’est pas transitive.

Sous hypothèse de normalité, on peut appliquer l’analyse de la variace à condition que les variances puissent être considérées comme égales entre les zones.

var.test (ZoneA,ZoneB) $ p.value

## [1] 0.5934584

var.test(ZoneB,ZoneC)$p.value

## [1] 0.6063173

var.test (ZoneA,ZoneC) $ p.value

## [1] 0.9959793

Les test de Fisher deux à deux concluent à des variances non significativement différentes, ce qui permet de mettre en place l’analyde de la variance.

#transformer les données en dataframe pour pouvoir utiliser aov rendement <- c ()

rendement $ valeur <- c (ZoneA,ZoneB,ZoneC)

rendement $ zone <- c ( rep ('A', length (ZoneA)), rep ('B', length (ZoneB)), rep ('C', length (ZoneC))) rendement <- as.data.frame(rendement)

res <- aov(valeur~zone,data=rendement) summary(res)

## Df Sum Sq Mean Sq F value Pr(>F)

## zone 2 234.5 117.23 6.34 0.00701 **

## Residuals 21 388.3 18.49

## ---

## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 La p-valeur de 0 . 007 entraîne la même conclusion.

Exercice 9

Les hypothèses à tester sont les mêmes que précédemment:

(16)

H 0 : m A = m B = m C

H 1 : Au moins deux médianes sont différentes

Cependant, les données sont appariées, ce qui entraîne l’application d’un test de Friedman.

medA <- c (170,19,187,10,216,49,7,474,.4,1.4,27,29) medB <- c (7,1.4,205,.3,.2,33,37,9,.6,63,145,0) medC <- c (0,6,18,1,22,30,3,5,0,36,26,0)

friedman.test(cbind(medA,medB,medC))

## ## Friedman rank sum test

## ## data: cbind(medA, medB, medC)

## Friedman chi-squared = 8.0426, df = 2, p-value = 0.01793

La p-valeur inférieure à 0 . 05 entraîne que la différence entre médicaments est significative.

Le calcul des variances des trois échantillons ne laisse planer aucun doute sur le fait qu’elles sont significative- ment différentes:

var (medA)

## [1] 20155.95 var (medB)

## [1] 4422.812 var (medC)

## [1] 177.2955

On ne peut par conséquent pas utiliser l’analyse de variance, même sous hypothèse de normalité des données.

(17)

TD3

Exercice 1

H 0 : Gravité et port de la ceinture sont indépendants H 1 : Ils ne le sont pas

x <- matrix ( c (5,25,1229,142,330,9049),nrow=3,ncol=2) chisq.test (x)

## ## Pearson's Chi-squared test

## ## data: x

## X-squared = 17.937, df = 2, p-value = 0.0001273

La p-valeur est largement inférieure à 0 . 05. On en conclut que le gravité de la blessure n’est pas indépendante du port de la ceinture au vu de ces données.

Exercice 2

1. a) data(iris)

setosa <- iris[iris $ Species == "setosa",]

plot (setosa $ Petal.Length ~ setosa $ Sepal.Length)

4.5 5.0 5.5

1.0 1.2 1.4 1.6 1.8

setosa$Sepal.Length

setosa$P etal.Length

Il est difficile de se prononcer au vu du nuage de points.

b)

(18)

cor (setosa $ Petal.Length,setosa $ Sepal.Length,method="pearson")

## [1] 0.2671758

cor (setosa $ Petal.Length,setosa $ Sepal.Length,method="spearman")

## [1] 0.2788849

cor (setosa $ Petal.Length,setosa $ Sepal.Length,method="kendall")

## [1] 0.2173273

Les corrélations ne sont ni clairement proches de 0, ni clairement proches de 1, mais du même ordre quel que soit le coefficient choisi.

c) On teste, pour Pearson,

H 0 : ρ = 0 H 1 : ρ 6 = 0

Pour Spearman et Kendall, les hypothèses sont les mêmes en changeant le coefficient de corrélation.

cor.test (setosa $ Petal.Length,setosa $ Sepal.Length,method="pearson")

## ## Pearson's product-moment correlation

## ## data: setosa$Petal.Length and setosa$Sepal.Length

## t = 1.9209, df = 48, p-value = 0.0607

## alternative hypothesis: true correlation is not equal to 0

## 95 percent confidence interval:

## -0.01206954 0.50776233

## sample estimates:

## cor

## 0.2671758

cor.test (setosa $ Petal.Length,setosa $ Sepal.Length,method="spearman")

## Warning in cor.test.default(setosa$Petal.Length, setosa$Sepal.Length,

## method = "spearman"): Cannot compute exact p-value with ties

## ## Spearman's rank correlation rho

## ## data: setosa$Petal.Length and setosa$Sepal.Length

## S = 15017, p-value = 0.04985

## alternative hypothesis: true rho is not equal to 0

## sample estimates:

## rho

## 0.2788849

cor.test (setosa $ Petal.Length,setosa $ Sepal.Length,method="kendall")

## ## Kendall's rank correlation tau

## ## data: setosa$Petal.Length and setosa$Sepal.Length

## z = 2.0066, p-value = 0.04479

(19)

## alternative hypothesis: true tau is not equal to 0

## sample estimates:

## tau

## 0.2173273

On voit que les trois p-valeurs sont très proches de 0 . 05. Si on prend une décision binaire, l’approche par Pearson conclut H 0 , les deux autres H 1 . La seule réponse honnête au vu des ces résultats est de dire qu’on ne peut pas conclure au vu de ces données.

2. Il suffit de reprendre les codes précédents en changeant de sou-jeu de données. Cette fois, les corrélations sont significatives

Exercice 3

L’échantillon transformé en rangs est

Chien A B C D E F G

CCO 1.5 4 7 3 6 1.5 5

PVG 3 4 7 2 5 1 6

Le coefficient de correlation de Spearman est de cco <- c (78,92,116,90,106,78,99)

pvg <- c (32,33,45,30,38,24,44)

cor ( rank (cco), rank (pvg)) # ou cor(cco,pvg,method="spearman")

## [1] 0.9009375 On teste

H 0 : ρ = 0 H 1 : ρ 6 = 0 cor.test (cco,pvg,method='spearman')

## Warning in cor.test.default(cco, pvg, method = "spearman"): Cannot compute

## exact p-value with ties

## ## Spearman's rank correlation rho

## ## data: cco and pvg

## S = 5.5475, p-value = 0.005621

## alternative hypothesis: true rho is not equal to 0

## sample estimates:

## rho

## 0.9009375

La p-valeur est largement inférieure à 0 . 05, la corrélation est significative.

Le coefficient de corrélation de Kendall est cor (cco,pvg,method="kendall")

## [1] 0.7807201

(20)

On teste

H 0 : τ = 0 H 1 : τ 6 = 0 cor.test (cco,pvg,method='kendall')

## Warning in cor.test.default(cco, pvg, method = "kendall"): Cannot compute

## exact p-value with ties

## ## Kendall's rank correlation tau

## ## data: cco and pvg

## z = 2.4306, p-value = 0.01507

## alternative hypothesis: true tau is not equal to 0

## sample estimates:

## tau

## 0.7807201

La conclusion est la même.

Exercice 4

La posirion sur l’axe Sud-Nord est donnée par la latitude qui n’est pas donnée. Par contre, l’ordre des villes est selon un axe décroissant de la latitude.

On obtient donc le vecteur de rangs suivant l’axe Nord-Sud en prenant simplement le vecteur des entiers de 1 à 10. Cela permet de calculer les coefficients de corrélation basés sur les rangs, à savoir Spearman et Kendall.

On décide d’utiliser le coefficient de Kendall (on aurait pu prendre Spearman).

Pour l’augmentation de l’ensoleillement, on teste

H 0 : τ ≤ 0 H 1 : τ > 0

soleil <- c (1617,1608,1630,1710,1789,1932,2596,2851,2533,2726) cor.test(soleil,c(1:10),method="kendall",alternative='greater')

## ## Kendall's rank correlation tau

## ## data: soleil and c(1:10)

## T = 41, p-value = 0.0001788

## alternative hypothesis: true tau is greater than 0

## sample estimates:

## tau

## 0.8222222

La p-valeur est largement inférieure à 0 . 05. On conclut que l’ensoleillement augmente significativement en

allant vers le sud.

(21)

Pour l’augmentation de l’ensoleillement, on teste

H 0 : τ ≥ 0 H 1 : τ < 0 pluie <- c (686,675,641,637,744,843,722,555,835,640)

cor.test (pluie, c (1 : 10),method="kendall",alternative='less')

## ## Kendall's rank correlation tau

## ## data: pluie and c(1:10)

## T = 22, p-value = 0.5

## alternative hypothesis: true tau is less than 0

## sample estimates:

## tau

## -0.02222222

La p-valeur est largement supérieure à 0 . 05. On conclut que la pluviométrie ne diminue pas significativement en allant vers le sud.

Exercice 5

stockage <- c (3,5,10,15,20,25,30) pourries <- c (2,4,9,17,29,45,73) plot (pourries ~ stockage)

model <- lm (pourries ~ stockage) abline(model$coefficients)

5 10 15 20 25 30

0 10 20 30 40 50 60 70

stockage

pourr ies

(22)

L’augmentation est systématique (plu le temps passe et plus il y a d’oranges pourries) mais elle est non linéaire.

Le coefficient de corrélation de Pearson n’est alors pas égal à 1. Par contre, les vecteurs de rang étant les mêmes, ceux de Spearman et Kendall valent 1.

cor(stockage,pourries,method="pearson")

## [1] 0.9560666

cor (stockage,pourries,method="spearman")

## [1] 1

cor(stockage,pourries,method="kendall")

## [1] 1

Exercice 6

Si les deux chiffres ont été donnés au hasard, les deux lois marginales doivent être de ( 1 3 , 1 3 , 1 3 ) et les deux chiffres doivent être indépendants entre eux.

La première question se résout en appliquant un test du χ 2 d’adéquation aux vecteurs des sommes par lignes et par colonnes.

X <- matrix ( c (31,57,53,72,27,58,60,63,29),3,3) chisq.test ( rowSums (X))

## ## Chi-squared test for given probabilities

## ## data: rowSums(X)

## X-squared = 1.8533, df = 2, p-value = 0.3959 chisq.test ( colSums (X))

## ## Chi-squared test for given probabilities

## ## data: colSums(X)

## X-squared = 0.89333, df = 2, p-value = 0.6398

Les conclusions de ces tests sont que les ditributions marginales sont bien uniformes: les 1, les 2 et les 3 sont bien équiprobables en première et deuxième position.

La deuxième question se résout avec un test du χ 2 d’indépendance.

chisq.test (X)

## ## Pearson's Chi-squared test

## ## data: X

## X-squared = 40.737, df = 4, p-value = 3.047e-08

La conclusion est H 1 , à savoir que les duex chiffres ne sont pas indépendants.

(23)

En examinant les données, on se rend compte que c’est dû au fait que les chiffres ne sont pas assez souvent répétés.

Exercice 7

Il faut pour répondre à cette question établir la table de contingence et réaliser un test du χ 2 d’indépendance.

"Guérison" "Non Guérison"

"traditionnel" 129 55

"nouveau" 80 23

X <- matrix ( c (129,80,55,23),2,2) chisq.test (X)

## ## Pearson's Chi-squared test with Yates' continuity correction

## ## data: X

## X-squared = 1.5446, df = 1, p-value = 0.2139

La p-valeur est supérieure à 0 . 05: ce jeu de données ne permet pas de dire que le nouveau médicament a une influence significativement différente sur la guérison par rapport au médicament traditionnel.

Exercice 8

On veut se comparer à la loi discrète uniforme, il faut donc faire un test du χ 2 d’adéquation.

notes <- c(rep(0,5),2,rep(5,4),rep(7,6),rep(8,9),rep(9,6),rep(10,11),rep(11,12),rep(12,10),rep(13,12),rep(15,5),rep(16,3),18,rep(20,3))

length (notes)

## [1] 88

Il y a 88 notes pour 21 valeurs possibles, ce qui fait moins de 5 en espérance pour chaque valeur. Il faut par conséquent regrouper les valeurs possibles par exemple les grouper par deux ou trois: 0 − 1 , 2 − 3 , . . . , 16 − 17 , 18 − 20.

x <- c(5,1,4,6,15,23,22,5,3,4) p <- c(rep(2/21,9),3/21) chisq.test(x=x,p=p)

## ## Chi-squared test for given probabilities

## ## data: x

## X-squared = 74.352, df = 9, p-value = 2.121e-12

La conclusion est clairement H 1 c’est-à-dire que la distribution n’est pas uniforme.

Graphiquement, cela paraît évident:

hist(notes,breaks=21)

(24)

Histogram of notes

notes

Frequency

0 5 10 15 20

0 2 4 6 8 10 12

A vue d’oeil, une approximation normale paraîts plus raisonable. On peut la tester soit à nouveau par un test d’adéquation du χ 2 en choisissant bien les intervalles, soit par un test de Kolmogorov-Smirnov, soit par un test de Shapiro

Essayons ce dernier, qui est le plus puissant.

shapiro.test(notes)

## ## Shapiro-Wilk normality test

## ## data: notes

## W = 0.94617, p-value = 0.001137

A nouveau, la distribution est significativement différente d’une distribution normale.

Exercice 9

1. Soit S ( t ) = ( Xt ). Alors

S ( t + ∆ t ) − S ( t )

t = P( X > t + ∆ t|X > t )P( X > t ) − P( X > t )

t

= P( X > t ) P( X >t ) − 1

t

= S ( t ) S (∆ t ) − S (0)

t En faisant tendre ∆ t vers 0,

S 0 ( t ) = S ( t ) S 0 (0)

(25)

Comme S 0 (0) < 0 (par définition de S , elle est décroissante), on peut poser S 0 (0) = −λ , λ > 0, et la résolution de l’équatio différentielle donne

S ( t ) = e −λt

La densité de la distribution est alors f ( t ) = −S 0 ( t ) = λe −λt et on reconnaît une distribution exponentielle.

2. Pour tester si le processus est bien sans mémoire, il suffit de tester si le temps entre les arrivées est bien exponentiel.

On peut le faire à l’aide d’un test de Kolmogorov-Smirnov x <- c (5.4,5.6,.2,.4,1.8,1.6,1.1,1.5,2.4,1.3) ks.test (x,"pexp",1 /mean (x))

## ## One-sample Kolmogorov-Smirnov test

## ## data: x

## D = 0.20335, p-value = 0.7314

## alternative hypothesis: two-sided

Cette approche n’est pas parfaite car le test de KS ne permet pas de tester l’appartenance à une famille de loi, mais le χ 2 d’adéquation est exclu en raison de la trop petite taille d’échantillon. La p-valeur étant très loin de . 05, il est raisonnable de penser que cette approximation ne change pas la décision.

La conclusion en est H 0 , et la distribution n’est pas significativement différente d’une exponentielle. On peut donc en conclure que le processus est sans mémoire.

Exercice 10

1.

data ("airquality")

donnees <- airquality[ rowSums ( is.na (airquality)) == 0,]

2. L’AIC est égal au double de l’opposé de la log-vraisemblance augmenté du double du nombre de paramètres.

model1 <- glm(Ozone~Wind+Temp,family=gaussian,data=airquality) moinsdeuxlogvraisemblance1 <- model1$aic - 2*4

3. Pour décider si le modèle enrichi est meilleur, on peut utiliser un test du rapport de vraisemblance puisque les deux modèles à comparer sont emboîtés.

On commence par déterminer de double de l’opposé de la log-vraisemblance pour le modèle plus complet.

model2 <- glm (Ozone ~ Wind + Temp + Solar.R,family=gaussian,data=airquality) moinsdeuxlogvraisemblance2 <- model2 $ aic - 2 * 5

Puis on détermine le log du rapport (qu’on peut écrire comme une différence de log) et déterminer la p-valeur sous H 0 en utilisant une loi du χ 2 à 1 degré de liberté (car le plus grand modèle n’a qu’un paramètre supplémentaire par rapport au plus petit)

statistiqueObs <- moinsdeuxlogvraisemblance1 - moinsdeuxlogvraisemblance2 pchisq (statistiqueObs,1,lower.tail = FALSE)

## [1] 3.295131e-13

(26)

On conclut $H_1, c’est-à-dire que l’adéquation du plus grand modèle est significativement meilleure que celle du plus petit.

4. On fait de même en enlevant la variable du vent. Là aussi, on utilise un test du rapport de vraisemblance pour modèles emboîtés avec une différence de 1 en termes de nombres de paramètres.

model3 <- glm(Ozone~Temp,family=gaussian,data=airquality) moinsdeuxlogvraisemblance3 <- model3$aic - 2*3

statistiqueObs <- moinsdeuxlogvraisemblance3 - moinsdeuxlogvraisemblance1 pchisq (statistiqueObs,1,lower.tail = FALSE)

## [1] 7.885929e-06

Le modèle basé uniquement sur la température est d’une adéquation significativement moins bonne aux données.

TD5

1.

data (chickwts) str (chickwts)

## 'data.frame': 71 obs. of 2 variables:

## $ weight: num 179 160 136 227 217 168 108 124 143 140 ...

## $ feed : Factor w/ 6 levels "casein","horsebean",..: 2 2 2 2 2 2 2 2 2 2 ...

2.

model <- lm (weight ~ feed,data=chickwts) model $ coefficients

## (Intercept) feedhorsebean feedlinseed feedmeatmeal feedsoybean

## 323.583333 -163.383333 -104.833333 -46.674242 -77.154762

## feedsunflower

## 5.333333 model $ residuals

## 1 2 3 4 5 6

## 18.800000 -0.200000 -24.200000 66.800000 56.800000 7.800000

## 7 8 9 10 11 12

## -52.200000 -36.200000 -17.200000 -20.200000 90.250000 10.250000

## 13 14 15 16 17 18

## -37.750000 -77.750000 41.250000 -15.750000 -70.750000 -49.750000

## 19 20 21 22 23 24

## -5.750000 38.250000 25.250000 52.250000 -3.428571 -16.428571

## 25 26 27 28 29 30

## 1.571429 80.571429 82.571429 3.571429 -53.428571 24.571429

## 31 32 33 34 35 36

## 69.571429 20.571429 -47.428571 -75.428571 -88.428571 1.571429

## 37 38 39 40 41 42

## 94.083333 11.083333 63.083333 10.083333 12.083333 -102.916667

## 43 44 45 46 47 48

(27)

## -8.916667 -33.916667 5.083333 -6.916667 -31.916667 -10.916667

## 49 50 51 52 53 54

## 48.090909 -19.909091 26.090909 38.090909 103.090909 -123.909091

## 55 56 57 58 59 60

## -13.909091 -34.909091 -70.909091 67.090909 -18.909091 44.416667

## 61 62 63 64 65 66

## 66.416667 55.416667 -63.583333 80.416667 -5.583333 28.416667

## 67 68 69 70 71

## 35.416667 -107.583333 -101.583333 -40.583333 8.416667

3.

shapiro.test(model$residuals)

## ## Shapiro-Wilk normality test

## ## data: model$residuals

## W = 0.98616, p-value = 0.6272

La p-valeur de.63 nous fait conclure que les résidus suivent une loi normale.

sd (chickwts $ weight[chickwts $ feed == "linseed"])

## [1] 52.2357

sd (chickwts $ weight[chickwts $ feed == "soybean"])

## [1] 54.12907

sd (chickwts $ weight[chickwts $ feed == "meatmeal"])

## [1] 64.90062

sd (chickwts $ weight[chickwts $ feed == "casein"])

## [1] 64.43384

sd (chickwts $ weight[chickwts $ feed == "horsebean"])

## [1] 38.62584

sd (chickwts $ weight[chickwts $ feed == "sunflower"])

## [1] 48.83638 table (chickwts $ feed)

## ## casein horsebean linseed meatmeal soybean sunflower

## 12 10 12 11 14 12

var.test (chickwts $ weight[chickwts $ feed == "meatmeal"],chickwts $ weight[chickwts $ feed == "horsebean"])

## ## F test to compare two variances

## ## data: chickwts$weight[chickwts$feed == "meatmeal"] and chickwts$weight[chickwts$feed == "horsebean"]

## F = 2.8232, num df = 10, denom df = 9, p-value = 0.1337

(28)

## alternative hypothesis: true ratio of variances is not equal to 1

## 95 percent confidence interval:

## 0.7122345 10.6687723

## sample estimates:

## ratio of variances

## 2.823201

La différence de variance est non significative des variances pour les deux céréales qui sont les plus éloignées en termes de variance estimée. Les tailles d’échantillon étant touts comparables, on peut se contenter de ce test (sinon, on peut mener les 15 tests deux à deux).

Il est raisonnable de supposer que les données sont normales, de même variance suivant la céréale utilisée, et on peut donc utiliser l’analyse de variance.

chickaov <- aov (weight ~ feed,data=chickwts) summary (chickaov)

## Df Sum Sq Mean Sq F value Pr(>F)

## feed 5 231129 46226 15.37 5.94e-10 ***

## Residuals 65 195556 3009

## ---

## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Le test est largement significatif, et conclut donc à une influence du type de céréales sur le poids des poulets.

4.

Le test non-paramétrique répondant à la même question est le test de Kruskal, qui est également significatif et arrive donc à la même conclusion:

kruskal.test (weight ~ feed,data=chickwts)

## ## Kruskal-Wallis rank sum test

## ## data: weight by feed

## Kruskal-Wallis chi-squared = 37.343, df = 5, p-value = 5.113e-07

5.

Au vu de la taille des échantillons (12 et 14), on se tourne vers un test non paramétrique, en l’espèce le test de Wilcoxon:

chicklin <- chickwts $ weight[chickwts $ feed == "linseed"]

chicksoy <- chickwts $ weight[chickwts $ feed == "soybean"]

wilcox.test (chicklin,chicksoy)

## Warning in wilcox.test.default(chicklin, chicksoy): cannot compute exact p-

## value with ties

## ## Wilcoxon rank sum test with continuity correction

## ## data: chicklin and chicksoy

## W = 60.5, p-value = 0.2367

## alternative hypothesis: true location shift is not equal to 0

(29)

On conclut H 0 , c’est-à-dire qu’il n’y a pas de différence significative de poids médian (ou moyen, c’est la même chose sous l’hypothèse de symétrie de Wicoxon).

6.

Fonction pour générer des échantillons bootstrap:

bootmatrix <- function (x,R){ #générer R échantillons bootstrap à partir d'un vecteur x et les ranger dans une matrice à R lignes bm <- c ()

for (i in 1 : R){

bm <- rbind (bm, sample (x, length (x),replace=TRUE))

} # ou bm <- replicate(R,sample(x,length(x),replace=TRUE),simplify="array") return(bm)

}

Fonction pour un test de Student sur échantillons bootstrap (renvoie un vecteur de valeur de la statistique sur les échantillon bootstrap, la statitique observée et la p-valeur empirique):

bootstudent <- function (X,Y,R){ #comparaison bootstrap de la moyenne de X et Y à l'aide de R echantillons

Z <- c(X,Y)

Xprime <- X - mean(X) + mean(Z) #vecteur X' du slide de comparaison de moyennes avec le bootstrap Yprime <- Y - mean(Y) +mean(Z) #vecteur Y'

bootX <- bootmatrix (Xprime,R) bootY <- bootmatrix (Yprime,R) stats <- c ()

for (i in 1 : R){

stats <- c (stats, t.test (bootX[i,],bootY[i,]) $ statistic) }

statobs <- t.test (X,Y) $ statistic if(statobs>0){

pval <- 2*sum(stats>statobs)/R } else{

pval <- 2 *sum (stats < statobs) / R }

return ( list (stats=stats,statobs=statobs,pval=pval)) }

On lance un test bootstrap basé sur la statistique de Student pour comparer le lin et le soja:

bootstudent(chickwts$weight[chickwts$feed=="linseed"],chickwts$weight[chickwts$feed=="soybean"],5000)$pval

## [1] 0.2052

(30)

La réponse est la même que précédemment, il n’y a pas de différence significative entre les poids des poulets élevés au lin et au soja.

7.

Fonction qui renvoie un intervalle de confiance pour la moyenne à partir d’échantillons bootstrap:

meanbootCI <- function (x,alpha,R){ #intervalle de confiance 1-alpha de la moyenne à partir du bootstrap bm <- bootmatrix (x,R)

means <- apply (bm,1,mean) #remplace la boucle de calcul des moyennes sortedmeans <- sort (means) #on les classe par ordre croissant

q1 <- round (R * alpha / 2) # numéro des échantillons une fois classé tel que la proportion d'inférieurs est alpha/2 q2 <- round(R*(1-alpha/2)) #idem avec supérieur

return(c(sortedmeans[q1],sortedmeans[q2])) #intervalle de confiance }

meanbootCI (chicklin,.05,1000)

## [1] 190.2500 246.4167 meanbootCI(chicksoy,.05,1000)

## [1] 218.5000 273.2143

Les deux intervalles de confiance se chevauchent, ce qui confirme un probabilité conséquente de voir un tel écart avec des vraies valeurs égales ( H 0 ).

8.

chicksun <- chickwts $ weight[chickwts $ feed == "sunflower"]

res <- bootstudent (chicklin,chicksun,1000)

hist (res $ stats)

(31)

Histogram of res$stats

res$stats

Frequency

−4 −2 0 2 4

0 50 150 250 350

res$statobs

## t

## -5.336778 res $ pval

## [1] 0

meanbootCI (chicklin,.05,1000)

## [1] 190.4167 246.6667 meanbootCI (chicksun,.05,1000)

## [1] 301.2500 354.9167

Cette fois-ci, la différence est significative, et cela est confirmé par des intervalles de confiance disjoints. On obtient une p-valeur de 0, ce qu’on n’obtient jamais dans un test de Student classique, car on regarde ici une p-valeur empirique et qu’aucun des échantillons bootstrap n’a donnée de valeur de la statistique aussi éloignée de 0.

TD6 - Tests multiples

Question 1

data <- matrix ( rnorm (5000 * 60,500,100),5000,60) #matrice des données, gènes en ligne, échantillons en colonne condition <- c ( rep (1,30), rep (2,30)) #vecteur donnant la condition des échantillons

truth <- sample ( c ( - 1,0,1),5000,replace=TRUE,prob= c (.01,.98,.01)) #vecteur verite

(32)

data[truth == 1,condition == 2] <- data[truth == 1,condition == 2] + 100 data[truth ==- 1,condition == 2] <- data[truth ==- 1,condition == 2] - 100

Regardons combien il y a de gènes réellement différentiellement exprimés (on en attend à peu près 100) sum(truth!=0)

## [1] 110

Question 2

t.test(data[1,condition==1],data[1,condition==2])

## ## Welch Two Sample t-test

## ## data: data[1, condition == 1] and data[1, condition == 2]

## t = -0.78962, df = 57.778, p-value = 0.433

## alternative hypothesis: true difference in means is not equal to 0

## 95 percent confidence interval:

## -75.47883 32.77818

## sample estimates:

## mean of x mean of y

## 501.0382 522.3885 truth[0]

## numeric(0)

Question 3.

pval <- apply (data, 1, function (x) t.test (x[condition == 1],x[condition == 2]) $ p.value)

sum (pval < .05)

## [1] 366

On constate qu’il y bien plus de positifs que de gènes réellement exprimés. Cela n’est pas surprenant puisque environ 5% des gènes non différentiellement exprimés sont classés à tort et que cela représente environ 4900 × . 05 ≈ 250 gènes.

Question 4

La probabilité d’une union est inférieure à la somme des probabilités: o, applique cela aux événements ( A i ) 1≤i≤5000 où A i désigne l’évènement le gène i est un faux positif .

Question 5

sum (pval < 0.05 / 5000)

## [1] 19

(33)

truth[pval < 0.05 / 5000]

## [1] 1 -1 1 1 -1 1 1 1 -1 -1 1 -1 -1 1 -1 1 -1 1 -1 On ne sélectionne bien que de vrai positifs, mais seulement une fraction d’entre eux.

Questions 6 et 7

On passe aux complémentaires des A i , l’union devient une intersection et on utilise l’indépendance.

Si fait un développement limité pour m grand, on retrouve Bonferroni.

sum(pval<(1-0.95^{1/5000}))

## [1] 19

truth[pval < (1 - 0.95 ^ {1 / 5000})]

## [1] 1 -1 1 1 -1 1 1 1 -1 -1 1 -1 -1 1 -1 1 -1 1 -1 La liste est bien la même

Question 9

holmBonferroni= function (pval,alpha){

m= length (pval)

sortedpval <- sort (pval)

x=which(sortedpval>alpha/c(m:1)) #liste des gènes pour lesquels on décide H_0 quand on fait le test avec alpha/(m-k) cut=min(x)-1 #rang auquel il faut couper la liste qu'on renvoie

selected= c () if (cut > 1){

selected= order (pval)[1 : cut]

}

return (selected) }

Application aux données simulées:

holmBonferroni(pval,.05)

## [1] 2075 4165 1758 3250 1652 4663 2761 2208 927 4899 59 2773 4680 4596

## [15] 3576 140 3554 4328 2635 length ( holmBonferroni (pval,.05))

## [1] 19

Question 10

benjaminiHochberg= function (pval,alpha){

m= length (pval)

(34)

sortedpval <- sort (pval)

x= which (sortedpval < alpha *c (1 : m) / m) #liste des gènes pour lesquels on décide H_1 quand on fait le test avec alpha/(m-k) cut=max(x) #rang auquel il faut couper la liste qu'on renvoie

selected=c() if(cut>0){

selected= order (pval)[1 : cut]

}

return (selected) }

Application aux données simulées:

BHres <- benjaminiHochberg(pval,.05) BHres

## [1] 2075 4165 1758 3250 1652 4663 2761 2208 927 4899 59 2773 4680 4596

## [15] 3576 140 3554 4328 2635 4260 395 4483 2121 1289 3885 4262 1679 4906

## [29] 2735 2235 1498 3010 2926 2657 333 721 426 593 1561 940 2072 1836

## [43] 450 2415 3514 2606 3424 4941 4553 4721 4192 2924 2860 4564 3822 4648

## [57] 1856 3995 1927 3414 398 4624 1620 633 447 4395 1306 1889 4660 3638

## [71] 4666 4515 953 c ('taille', length (BHres))

## [1] "taille" "73"

truth[BHres]

## [1] 1 1 -1 1 1 -1 -1 1 1 -1 1 -1 1 1 -1 -1 -1 -1 1 -1 1 1 1

## [24] -1 -1 1 -1 1 -1 -1 0 -1 1 1 1 1 1 1 -1 -1 -1 1 1 1 1 1

## [47] -1 -1 -1 1 1 -1 1 1 1 1 -1 1 -1 1 1 -1 1 1 1 1 -1 0 -1

## [70] -1 -1 0 1

Question 12

Comparons par exemple les listes pour Benjamini Hochberg pvaladjusted <- p.adjust(pval,method="BH")

which (pvaladjusted < 0.05)

## [1] 59 140 333 395 398 426 447 450 593 633 721 927 940 953

## [15] 1289 1306 1498 1561 1620 1652 1679 1758 1836 1856 1889 1927 2072 2075

## [29] 2121 2208 2235 2415 2606 2635 2657 2735 2761 2773 2860 2924 2926 3010

## [43] 3250 3414 3424 3514 3554 3576 3638 3822 3885 3995 4165 4192 4260 4262

## [57] 4328 4395 4483 4515 4553 4564 4596 4624 4648 4660 4663 4666 4680 4721

## [71] 4899 4906 4941 sort(BHres)

## [1] 59 140 333 395 398 426 447 450 593 633 721 927 940 953

## [15] 1289 1306 1498 1561 1620 1652 1679 1758 1836 1856 1889 1927 2072 2075

## [29] 2121 2208 2235 2415 2606 2635 2657 2735 2761 2773 2860 2924 2926 3010

## [43] 3250 3414 3424 3514 3554 3576 3638 3822 3885 3995 4165 4192 4260 4262

## [57] 4328 4395 4483 4515 4553 4564 4596 4624 4648 4660 4663 4666 4680 4721

## [71] 4899 4906 4941

(35)

Question 13 Question 13

datageneration = function (ngenes=5000,ncond1=30,ncond2=30,mu=500,sd=100,diff=100){

data <- matrix ( rnorm (ngenes * (ncond1 + ncond2),mu,sd),ngenes,(ncond1 + ncond2)) #matrice des données, gènes en ligne, échantillons en colonne condition <- c ( rep (1,ncond1), rep (2,ncond2)) #vecteur donnant la condition des échantillons

truth <- sample(c(-1,0,1),ngenes,replace=TRUE,prob=c(.01,.98,.01)) #vecteur verite data[truth==1,condition==2] <- data[truth==1,condition==2] +diff

data[truth ==- 1,condition == 2] <- data[truth ==- 1,condition == 2] - diff return ( list (data=data,condition=condition,truth=truth))

}

evaluation <- function (simulation,alpha){

#prend un jeu de données généré par la fonction datageneration

#détermine la confiance et la puissance pour Bonferroni, Holm-Bonferroni et

#Benjamini-Hochberg pour un alpha fixé data = simulation $ data

truth= simulation $ truth

condition= simulation $ condition m= length (truth)

pval <- apply (data, 1, function (x) t.test (x[condition == 1],x[condition == 2]) $ p.value)

#confiance-puissance pour Bonferroni

selected <- (pval < (alpha / m)) #contient 1 si le gene est dans la liste renvoyée, 0 sinon

confianceBonf <- sum((truth==0) * (selected==0)) / sum(truth==0) #vrai H0 et pas dans la liste / vraiH0 puissanceBonf <- sum((truth!=0) * (selected==1)) / sum(truth!=0) #vraiH1 et dans la liste / vraiH1

#confiance-puissance pour Holm-Bonferroni sortedpval <- sort (pval)

x= which (sortedpval > alpha /c (m : 1)) #liste des gènes pour lesquels on décide H_0 quand on fait le test avec alpha/(m-k) cut= min (x) - 1 #rang auquel il faut couper la liste qu'on renvoie

selected <- (pval <= sortedpval[cut]) #contient 1 si le gene est dans la liste renvoyée, 0 sinon

confianceHolm <- sum ((truth == 0) * (selected == 0)) / sum (truth == 0) #vrai H0 et pas dans la liste / vraiH0 puissanceHolm <- sum ((truth != 0) * (selected == 1)) / sum (truth != 0) #vraiH1 et dans la liste / vraiH1

#confiance-puissance pour Benjamini-Hochberg sortedpval <- sort(pval)

x=which(sortedpval<alpha*c(1:m)/m) #liste des gènes pour lesquels on décide H_1 quand on fait le test avec alpha/(m-k) cut=max(x) #rang auquel il faut couper la liste qu'on renvoie

selected <- (pval<=sortedpval[cut]) #contient 1 si le gene est dans la liste renvoyée, 0 sinon

confianceBH <- sum ((truth == 0) * (selected == 0)) / sum (truth == 0) #vrai H0 et pas dans la liste / vraiH0

puissanceBH <- sum ((truth != 0) * (selected == 1)) / sum (truth != 0) #vraiH1 et dans la liste / vraiH1

(36)

return ( list (confianceBonf=confianceBonf,puissanceBonf=puissanceBonf,confianceHolm=confianceHolm,puissanceHolm=puissanceHolm,confianceBH=confianceBH,puissanceBH=puissanceBH)) }

simulation <- datageneration(diff=100) evaluation(simulation,.05)

## $confianceBonf

## [1] 1

## ## $puissanceBonf

## [1] 0.1413043

## ## $confianceHolm

## [1] 1

## ## $puissanceHolm

## [1] 0.1413043

## ## $confianceBH

## [1] 0.9995925

## ## $puissanceBH

## [1] 0.4673913

evaluation (simulation,.3)

## $confianceBonf

## [1] 1

## ## $puissanceBonf

## [1] 0.2826087

## ## $confianceHolm

## [1] 1

## ## $puissanceHolm

## [1] 0.2826087

## ## $confianceBH

## [1] 0.9928688

## ## $puissanceBH

## [1] 0.826087

evaluation (simulation,.6)

## $confianceBonf

## [1] 1

## ## $puissanceBonf

## [1] 0.3369565

##

(37)

## $confianceHolm

## [1] 1

## ## $puissanceHolm

## [1] 0.3478261

## ## $confianceBH

## [1] 0.9714751

## ## $puissanceBH

## [1] 0.9565217

Références

Documents relatifs

CHAÎNES DE MARKOV À ESPACES D’ÉTATS FINIS 29 En terme d’interprétations, cela veut dire que si un nombre infini de marcheurs sont répartis sur les états suivant une telle mesure

Téléchargé gratuitement

[r]

- celles (en gras ci-dessous) qui sont simples dans deux formules mésomères sur trois et doubles dans la troisième formule ;. - celles qui sont doubles dans deux formules mésomères

de R 3 , car c’est l’ensemble des solutions d’un syst` eme lin´ eaire homog` ene.. Ce suppl´ ementaire est donc de

Les x i ne peuvent être identiques (x 1 = x 2 signi…e que la seconde boule est identique à la première, ce qui n’est pas possible, même si leurs couleurs respectives sont

D´ eduire (sans calcul mais en justifiant la d´ emarche) des questions pr´ ec´ edentes le tableau de variations de f sur R et l’´ equation de la tangente au point

 Suivre ou élaborer un protocole expérimental permettant de distinguer les solutions neutres acides et basiques..  Décrire le comportement du pH quand on dilue