Test-t de Student
L’exercice vise à déterminer l’effet d’un traitement (nature de la
vitamine C) sur la longueur cellulaire.
Pour cela l’objectif est de comparer les deux moyennes de longueurs cellulaires soumises à un traitement vitamine C naturelle et un traitement vitamine C synthétique.
30 minutes
orange <- read.table("orange.csv", sep=";", dec=",", header=T)
edit(orange) # Penser à fermer la fenetre ensuite, sinon impossible d'exécuter des commandes dans la console
## longueur traitement
## 1 8.2 Orange
## 2 9.4 Orange
## 3 9.6 Orange
## 4 9.7 Orange
## 5 10.0 Orange
## 6 14.5 Orange
## 7 15.2 Orange
## 8 16.1 Orange
## 9 17.6 Orange
## 10 21.5 Orange
## 11 4.2 Ascorbique
## 12 5.2 Ascorbique
## 13 5.8 Ascorbique
## 14 6.4 Ascorbique
## 15 7.0 Ascorbique
## 16 7.3 Ascorbique
## 17 10.1 Ascorbique
## 18 11.2 Ascorbique
## 19 11.3 Ascorbique
## 20 11.5 Ascorbique
head(orange)
## longueur traitement
## 1 8.2 Orange
## 2 9.4 Orange
## 3 9.6 Orange
## 4 9.7 Orange
## 5 10.0 Orange
## 6 14.5 Orange
dim(orange)
## [1] 20 2
type de variables, effectifs, représentation graphiques …
# lister les variables
names(orange)
## [1] "longueur" "traitement"
# lister le contenu d'une variable
#longueur
# reconnaissance de la variable
attach(orange)
longueur
## [1] 8.2 9.4 9.6 9.7 10.0 14.5 15.2 16.1 17.6 21.5 4.2 5.2 5.8 6.4 7.0
## [16] 7.3 10.1 11.2 11.3 11.5
# Nombre d'observations pour chaque modalité d'une variable qualitative
table(traitement)
## traitement
## Ascorbique Orange
## 10 10
# Statistiques calculées sur une variable quantitative
mean(longueur)
## [1] 10.59
var(longueur)
## [1] 20.01884
sd(longueur)
## [1] 4.474242
summary(longueur)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.200 7.225 9.850 10.590 12.250 21.500
# Statistiques par modalité de la variable qualitative
tapply(longueur, traitement, mean)
## Ascorbique Orange
## 8.00 13.18
tapply(longueur, traitement, sd)
## Ascorbique Orange
## 2.768072 4.437667
tapply(longueur, traitement, summary)
## $Ascorbique
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.20 5.95 7.15 8.00 10.93 11.50
##
## $Orange
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8.200 9.625 12.250 13.180 15.875 21.500
Que déduisez vous des comparaisons des valeurs de moyennes,
écart types et des autres statistiques ?
Pour cet échantillon, la longueur cellulaire moyenne est plus grande
pour celles ayant reçu le traitement jus d’orange que celle ayant reçu
le traitement acide ascorbique.
Pour cet échantillon, la longueur cellulaire de celles ayant reçu le traitement jus d’orange est plus variable que celle ayant reçu le traitement acide ascorbique.
On peut aussi visualiser ces données grâce à un box plot
data<-split(orange, orange$traitement)
data
## $Ascorbique
## longueur traitement
## 11 4.2 Ascorbique
## 12 5.2 Ascorbique
## 13 5.8 Ascorbique
## 14 6.4 Ascorbique
## 15 7.0 Ascorbique
## 16 7.3 Ascorbique
## 17 10.1 Ascorbique
## 18 11.2 Ascorbique
## 19 11.3 Ascorbique
## 20 11.5 Ascorbique
##
## $Orange
## longueur traitement
## 1 8.2 Orange
## 2 9.4 Orange
## 3 9.6 Orange
## 4 9.7 Orange
## 5 10.0 Orange
## 6 14.5 Orange
## 7 15.2 Orange
## 8 16.1 Orange
## 9 17.6 Orange
## 10 21.5 Orange
boxplot(orange$longueur~as.factor(orange$traitement))
Notre question est donc : est-ce-qu’en moyenne les cellules ayant reçu de la vitamine C naturelle sont plus longue que celle ayant reçu de la vitamine C synthétique ?
On pose nos hypothèses avec des mots :
Les cellules reçevant de la vitamine C synthétique sont en moyenne moins longue que les cellules reçevant de la vitamine C naturelle
On pose aussi les hypthèses du test :
H0: \(\mu_o = \mu_a\)
H1: \(\mu_o > \mu_a\) (test unilatéral)
H1: \(\mu_o != \mu_a\) (test bilatéral)
On effectue une comparaison de moyennes, c’est pourquoi on fait un test de Student
Hypothèse nulle: les données sont normalement distribué
H0 : Wobs = Wth(alpha-1,n)
On effectue pour tester la normalité des données un test de Shapiro
shapiro.test(data$Ascorbique$longueur)
##
## Shapiro-Wilk normality test
##
## data: data$Ascorbique$longueur
## W = 0.88648, p-value = 0.1547
Que déduisez vous concernant la normalité des données
?
On ne rejette pas H0 au risque alpha = 5%, car la pvalue est supérieur à
0.05. On considère donc que les données sont normalement distribuées
On peut aussi visualiser grâce à la fonction qqnrom()
.
Dans ce cas les données doivent être alignée sur la première bisectrice
(ligne rouge)
qqnorm(data$Ascorbique$longueur)
qqline(data$Ascorbique$longueur, col="red")
Quelle est donc l’étape suivante ? Vérifions l’homoscédasticité des variables (homogénéité des variances)
On effecture un test F qui compare 2 variances
Hypothèse nulle : les variances sont égales
H0: F = 1 où F est le rapport des variances
H1 : F != 1
var.test(data$Ascorbique$longueur, data$Orange$longueur)
##
## F test to compare two variances
##
## data: data$Ascorbique$longueur and data$Orange$longueur
## F = 0.38909, num df = 9, denom df = 9, p-value = 0.1759
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.09664339 1.56645691
## sample estimates:
## ratio of variances
## 0.3890857
Que déduisez vous concernant l’homogénéité des variances
?
On ne rejette pas H0, car pvalue > 0.05. Les variances sont donc
considérées comme égales
On prend alpha = 5%
On réalise un test de student sur échantillons non appariés avec hypothèse d’homoscédasticité et de normailité vérifiées
t.test(data$Orange$longueur, data$Ascorbique$longueur, alternative = c("two.sided"), var.equal = TRUE, paired=F) # Test bilatéral
##
## Two Sample t-test
##
## data: data$Orange$longueur and data$Ascorbique$longueur
## t = 3.1319, df = 18, p-value = 0.005762
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 1.705205 8.654795
## sample estimates:
## mean of x mean of y
## 13.18 8.00
t.test(data$Orange$longueur, data$Ascorbique$longueur, alternative = c("greater"), var.equal = TRUE, paired=F) # test unilatéral àdroite avec H1: mu(Orange)>mu(ascorbique)
##
## Two Sample t-test
##
## data: data$Orange$longueur and data$Ascorbique$longueur
## t = 3.1319, df = 18, p-value = 0.002881
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
## 2.311966 Inf
## sample estimates:
## mean of x mean of y
## 13.18 8.00
t.test(data$Orange$longueur, data$Ascorbique$longueur, alternative = c("less"), var.equal = TRUE, paired=F) # test unilatéral à gauche avec H1: mu(Orange)<mu(ascorbique)
##
## Two Sample t-test
##
## data: data$Orange$longueur and data$Ascorbique$longueur
## t = 3.1319, df = 18, p-value = 0.9971
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
## -Inf 8.048034
## sample estimates:
## mean of x mean of y
## 13.18 8.00
On rejette H0 au risque alpha = 5%.
Les moyennes des longueurs cellulaires sont différentes en fonction du traitement reçu
Dans le cas où la normalité n’aurait pas été respectée, on aurrait appliqué le test non paramétrique de : Wilcoxon si échantillons sont appariés :
#wilcox.test(data$Orange$longueur, data$Ascorbique$longueur, paired=T)
Wilcoxon Mann-Whitney si ils n’étaient pas non appariés
#wilcox.test(data$Orange$longueur, data$Ascorbique$longueur, paired=F)
Variance, covariance, correlation, draftsman plot
Regression lineaire simple
L’objectif de l’excercice est d’étudier la relation linéaire entre la
taille de becs d’oiseaux femelles et males
1 heure
#do<-read.table(file.choose(), header=T, sep="\t", dec=",")
do<-read.table("Size.txt", header=T, sep="\t", dec=",")
names(do)
## [1] "id" "size" "survival" "mother_id" "father_id"
## [6] "mother_size" "father_size"
do$size
## [1] 10.81 8.74 10.04 9.75 9.76 9.55 8.70 9.62 9.22 8.79 9.61 9.02
## [13] 7.85 9.01 8.26 8.25 9.25 9.45 8.52 8.61 8.12 7.81
head(do)
## id size survival mother_id father_id mother_size father_size
## 1 669 10.81 1 737 476 11.71 9.90
## 2 128 8.74 0 683 688 10.95 10.86
## 3 481 10.04 0 668 410 10.77 9.81
## 4 364 9.75 0 667 353 10.76 9.64
## 5 365 9.76 0 617 529 10.53 10.27
## 6 335 9.55 0 524 269 10.22 9.38
Moyenne, variance et ecart type de chaque variable
mean(do$father_size)
## [1] 9.301364
mean(do$mother_size)
## [1] 9.675
var(do$father_size)
## [1] 0.3866314
var(do$mother_size)
## [1] 0.7566452
sd(do$father_size)
## [1] 0.6217969
sd(do$mother_size)
## [1] 0.8698536
Que déduisez vous de la comparaison de ces statistiques entre
femelles et males ?
La taille des becs est similaire entre mâles et femelles en moyenne
Covariance
cov(do$father_size, do$mother_size)
## [1] 0.4507976
Relation entre deux variables
plot(father_size ~ mother_size, data=do, col="blue")
Que déduisez vous de l’étude graphique de cette relation ?
Ces 2 variables semblent corrélées
Le coefficient de Pearson est utilisé, car la relation est linéaire monotone sans points extremes. Sinon on ajoute l’argument method=“spearman” pour coefficient non parametrique. S’il y avait des données manquantes, on ajouterais use=“complete” pour le calcul uniquement sur les individus disponibles pour les deux variables.
cor(do$father_size, do$mother_size)
## [1] 0.8334641
Etape 2 : Poser les hypothèses
H0: r = 0 (les 2 variables ne sont pas corrélées)
H1: r != 0
Etape 3: Définir le test approprié
Test de corrélation entre deux échantillons appariés
Etape 4 : Déterminer les conditions de validité
La relation est linéaire monotone sans points extremes
Etape 5 : Choisir le risque de première espèce
On prend un risque alpha = 5%
Etape 6 : Réaliser le test
cor.test(do$father_size, do$mother_size)
##
## Pearson's product-moment correlation
##
## data: do$father_size and do$mother_size
## t = 6.7455, df = 20, p-value = 1.461e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6349874 0.9287233
## sample estimates:
## cor
## 0.8334641
Etape 7 : Rejetter ou non l’hypothèse nulle
p-value = 1.461e-06 < alpha. On rejette H0, les 2 variables sont
linéairement corrélées
Etape 8 : Interpréter les résultats
Le bec des mâles est linéairement corrélé au bec des femelles
On souhaite quantifier la force de la relation. On effectue pour cela un modèle linéaire.
model <- lm(father_size ~ mother_size, data=do)
?lm
names(model)
## [1] "coefficients" "residuals" "effects" "rank"
## [5] "fitted.values" "assign" "qr" "df.residual"
## [9] "xlevels" "call" "terms" "model"
model.res <- residuals(model)
Hypothèse nulle : les résidus sont indépendants (i.e., absence d’autocorrelation)
Hypothèse alternative : Autocorrelation : les résidus successifs se ressemblent
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 2.6265, p-value = 0.903
## alternative hypothesis: true autocorrelation is greater than 0
Qu’en déduisez vous ?
p>0.05, on ne rejette pas H0, les résidus sont indépendants
par(mfrow = c(2, 2), oma = c(0, 0, 2, 0))
plot(model)
A quoi correspond chacun de ces graphiques ?
residuals vs fitted : Homegeneite des residus (doivent être
autour de 0 sans structure particulière)
Normal QQ : Normalité des résidus (doivent suivre la droite
y=x)
Scale location : normalité des résidus standardisé (pas de
structure)
Residual vs leverage : influence d’une observation yi sur sa
valeur estimée ŷi (pas de structure) : identifier des outliers
Qu’en déduisez vous ? Tout semble ok, mais on réalise des tests pour en être sur
On effectue un Test de Shapiro H0 : Normalité des données
# Droite de Henry (graph ci-dessus) ainsi que test de Shapiro :
qqnorm(model.res)
qqline(model.res)
shapiro.test(model.res)
##
## Shapiro-Wilk normality test
##
## data: model.res
## W = 0.97199, p-value = 0.7566
Qu’en déduisez vous ? On ne rejette pas H0 -> normalité des données
Deux graphiques ci-dessus des résidus en fonction des valeurs prédites et test defpaganch-Pagan H0 : Homogeneité des variances des résidus
bptest(model)
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 4.5853, df = 1, p-value = 0.03225
Qu’en déduisez vous ? On rejette H0 : pas d’homoscédasticité
Détection d’individus influençants les paramètres du modèle : graphique distance de Cook et effet levier.
L’individu n°1 (ie. premiere ligne du tableau) semble influant. On le retire et refaisons le modele. Siil correspond à une réalité biologique, écologique (ie. pas d’erreur de mesure, de saisie de données etc.), on l’indique dans les résultats.
model1 <- lm(father_size[-1] ~ mother_size[-1], data=do[-1,])
On verifie les conditions sur le nouveau modèle :
model.res1 <- residuals(model1)
dwtest(model1)
##
## Durbin-Watson test
##
## data: model1
## DW = 2.4835, p-value = 0.8073
## alternative hypothesis: true autocorrelation is greater than 0
Qu’en déduisez vous ?
p>0.05, on ne rejette pas H0, les résidus sont indépendants
par(mfrow = c(2, 2), oma = c(0, 0, 2, 0))
plot(model1)
# Droite de Henry (graph ci-dessus) ainsi que test de Shapiro :
qqnorm(model.res1)
qqline(model.res1)
shapiro.test(model.res1)
##
## Shapiro-Wilk normality test
##
## data: model.res1
## W = 0.95042, p-value = 0.3735
Qu’en déduisez vous ? Normalité
Deux graphiques ci-dessus des résidus en fonction des valeurs prédites et test de Breusch-Pagan
bptest(model1)
##
## studentized Breusch-Pagan test
##
## data: model1
## BP = 0.0032095, df = 1, p-value = 0.9548
Qu’en déduisez vous ?
On ne rejette pas H0, Homoscédasticité des résidus
summary(model1)
##
## Call:
## lm(formula = father_size[-1] ~ mother_size[-1], data = do[-1,
## ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.53784 -0.19940 -0.03606 0.17598 0.44722
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.32959 0.87699 3.797 0.00132 **
## mother_size[-1] 0.61664 0.09198 6.704 2.75e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2846 on 18 degrees of freedom
## Multiple R-squared: 0.714, Adjusted R-squared: 0.6981
## F-statistic: 44.95 on 1 and 18 DF, p-value: 2.753e-06
plot(father_size[-1] ~ mother_size[-1], data=do[-1,], col="blue")
abline(model1, col="red")
Interprétez les différents résultats indiqués par le modèle,
ceci couplé à la représentation graphique.
Call nous donne le modèle que nous avons ajusté
Residuals nous donne la distribution des résidus. Les
résidus correspondent à la différence entre ce que le modèle prédit et
la valeur observée des y.
Coefficients nous donne les paramètres estimés pour le modèle. L’intercept est l’ordonné à l’origine et mother_size[-1] est le coefficient directeur de la droite de régression (la pente). Pour chaque paramètre on a peut trouver la valeur estimée, l’erreur type associée (écart type divisé par la racine carré de la taille de l’échantillon). Puis on trouve la variable de decision (Estimate/Std. Error) et la pvalue associé au test. Ce test t regarde si le paramètre estimé est différent de 0.
Residual standard error:
k=length(model1$coefficients)-1 #Subtract one to ignore intercept
SSE=sum(model1$residuals^2)
n=length(model1$residuals)
sqrt(SSE/(n-(1+k)))
## [1] 0.2846133
Multiple R-squared : Une mesure de la “distance” entre le modèle des données
#Multiple R-Squared (Coefficient of Determination)
SSyy=sum((do[-1,]$father_size[-1]-mean(do[-1,]$father_size[-1]))^2)
SSE=sum(model1$residuals^2)
(SSyy-SSE)/SSyy
## [1] 0.7140368
#Alternatively
1-SSE/SSyy
## [1] 0.7140368
Adjusted R-squared : normalise Multiple R-squared en tenant compte de la taille de l’échantillon et du nombre de variables utilisé dans le modèle. Plus on ajoute de variables au modèle plus on va pouvoir expliquer de variance.
1-(SSE/SSyy)*(n-1)/(n-(k+1))
## [1] 0.6981499
F-statistic : Finalement la fonction summary()
réalise un autre test. C’est un test “global” qui vérifie si au moin une
variable est différente de 0.
#F-Statistic
#H0: Tous les coefficiants valent 0
#H1: Au moins un des coefficient est différent de 0
#Compare test statistic to F Distribution table
((SSyy-SSE)/k) / (SSE/(n-(k+1)))
## [1] 44.94516
Que concluez vous concernant la relation entre la taille des
femelles et des males ?
La relation entre les deux variable est positive. Plus le bec des mâles
est grand plus la taille du bec des femelles l’est aussi. D’après les
résultats du modèle linéaire, on peut dire que la taille des becs des
femelles est 0.6 fois plus petite que la taille des becs des mâles.
Si les conditions sur les résidus ci-dessus ne sont pas respectées, en particulier la normalité (mais également égalité des variances), plusieurs possibilités de transformation des données y (variable réponse) existent avant de refaire le modele :
# Exemple visuel sur des données simulées :
y <- rpois(1000, 3)
y1 <- sqrt(y)
hist(y)
hist(y1)
transformation logarithmique log() : permet de normaliser les données qui suivent une loi lognormale ou binomiale négative. Dans le cas où y peut être égal à zéro, utiliser log(y+1). Si la transformation log ne suffit pas, essayer le log au carré.
transformation boxcox : Lorsqu’il n’y a pas de raison de
choisir l’une ou l’autre de ces transformations, on peut utiliser la
fonction boxcox() du package MASS ou boxCox() du package car.
transformation arc-sinus de la racine carrée asin(sqrt(y)) : dans le cas de données en proportions ou pourcentage, où la variance dépend de la moyenne et dont la distribution est souvent trop étalée. Les données doivent être entre 0 et 1
Pour des cas de relations non linéaires entre deux variables quantitatives, voir la fonction ?nls
library(ade4)
library(psych)
Les données Iris concernent des variables morphométriques de plantes issues de trois espèces différentes
pairs.panels(iris,
method = "spearman", # correlation method
hist.col = "#00AFBB",
density = TRUE, # show density plots
ellipses = FALSE # show correlation ellipses
)
Ci-dessus on utilise la correlation de Spearman (basee sur le rang des valeurs) car on identifie sur les nuages de points des tendances non lineaires et/ou des points avec des valeurs relativements fortes/faibles Les correlations avec la valeur “Species” ne sont pas à utiliser car c’est une variable qualitative. Ce qui est interessant ici est d’etudier les valeurs des mesures morphologiques intra-inter specifiques qui donnent deja des informations sur des variations.
Comment interpretez vous cette figure ?
On a que la longueur et la largueur des pétales sont très corrélés (r = 0.94). Ces 2 variables sont aussi corrélés avec la longueur des sépales (resp r= 0.88 et r =0.83).
Une espèce semble avoirs des valeurs différentes des 2 autres.