3 Inference statistique sur une et deux variables
Cette section présente différentes fonctions R utiles pour réaliser de l’inférence statistique sur une ou deux variables.
3.1 Données Chocolat
Les fonctions de cette section sont illustrées sur base du jeu de données : chocolat.xlsx
(disponible sur moodle). Ce data.frame de taille 20x2 reprend des mesures de la teneur en cacao de 20 plaquettes de chocolat de marque “Cabeau” et “Gallet”.
Voici le code pour lire et préparer ces données
readxl::read_xlsx("data/chocolat.xlsx", col_names = TRUE)
choco <-$Marque <- as.factor(choco$Marque)
choco subset(choco, Marque =="Cabeau")
cabeau <- subset(choco, Marque =="Gallet") gallet <-
Voici quelques résumés descriptifs de ces données
Visualiser via un box-plot
boxplot(Cacao ~ Marque, data = choco, main = "Box plot des données Chocolat", ylab = "Cacao")
Tableau résumé par marque
table(choco$Marque)
N <-tapply(choco$Cacao, choco$Marque, mean)
Moyenne<-tapply(choco$Cacao, choco$Marque, sd)
EcartType<-cbind(N,Moyenne,EcartType)
N | Moyenne | EcartType | |
---|---|---|---|
Cabeau | 10 | 6.063 | 0.2568 |
Gallet | 10 | 6.258 | 0.108 |
3.2 Arguments utiles dans les fonctions d’inférence
Argument alternative =
dans une fonction de test
- H0:θ=θ0 contre H1:θ≠θ0 ~>
alternative = "two.sided"
- H0:θ≥θ0 contre H1:θ<θ0 ~>
alternative = "less"
- H0:θ≤θ0 contre H1:θ>θ0 ~>
alternative = "greater"
Argument conf.level =
dans une fonction de test
Par défaut, le niveau de confiance des intervalles de confiance est 95%. On peut le modifier via l’argument conf.level = 0.9
pour, par exemple, un niveau de confiance de 90%.
3.3 Tests sur une ou deux moyennes
3.3.1 Test t sur une moyenne
H0:μ=6 contre H1:μ≠6
t.test(choco$Cacao, mu = 6, alternative = "two.sided")
One Sample t-test
data: choco$Cacao
t = 3.3192, df = 19, p-value = 0.003606
alternative hypothesis: true mean is not equal to 6
95 percent confidence interval:
6.059293 6.261707
sample estimates:
mean of x
6.1605
la fonction pander dans RMarkdown permet de mieux présenter les résultats mais ne présente pas tout. Ceci est aussi vrai pour les autres fonctions de test ou de modélisation.
t.test(choco$Cacao, mu = 6, alternative = "two.sided")
res=::pander(res) pander
Test statistic | df | P value | Alternative hypothesis | mean of x |
---|---|---|---|---|
3.319 | 19 | 0.003606 * * | two.sided | 6.16 |
3.3.2 Test t de comparaison de deux moyennes
H0:μ1=μ2 contre H1:μ1≠μ2
Echantillons indépendants et variances égales
t.test(choco$Cacao~choco$Marque, alternative = "two.sided", var.equal = TRUE)
Echantillons indépendants et variances différentes
t.test(choco$Cacao~choco$Marque, alternative = "two.sided")
Welch Two Sample t-test
data: choco$Cacao by choco$Marque
t = -2.2137, df = 12.087, p-value = 0.04682
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.386775949 -0.003224051
sample estimates:
mean in group Cabeau mean in group Gallet
6.063 6.258
Données pairées (non applicable aux données chocolat)
# Observations pairées
t.test(y~x, alternative = "two.sided", paired = TRUE)
3.4 Tests sur une ou plusieurs variances
3.4.1 Test χ2 sur une variance
H0:σ2=0.04 contre H1:σ2≠0.04
::varTest(x = cabeau$Cacao, sigma.squared = 0.04, alternative = "two.sided") EnvStats
Chi-Squared Test on Variance
data: cabeau$Cacao
Chi-Squared = 14.835, df = 9, p-value = 0.1911
alternative hypothesis: true variance is not equal to 0.04
95 percent confidence interval:
0.03119472 0.21974978
sample estimates:
variance
0.06593444
3.4.2 Test F de comparaison de 2 variances
H0:σ21=σ22 contre H1:σ21≠σ22
var.test(choco$Cacao~choco$Marque, ratio = 1, alternative = "two.sided")
F test to compare two variances
data: choco$Cacao by choco$Marque
F = 5.6537, num df = 9, denom df = 9, p-value = 0.0166
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
1.404294 22.761673
sample estimates:
ratio of variances
5.653678
3.4.3 Test de Levene d’homogénéité de variances
Ce test permet de tester si 2 ou plus de 2 variances sont égales.
H0:σ21=σ22=...=σ2k contre H1: Au moins deux variances sont différentes
::leveneTest(choco$Cacao, group = choco$Marque) car
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 1 6.1977 0.0228 *
18
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
3.5 Tests sur une ou plusieurs proportions
Pour les tests ci-dessous, utilisons le simple tableau de contingence pour 2 variables qualitatives X et Y de niveaux respectifs A1,A2,A3 et B1,B2 :
matrix(c(10,8,17,5,5,10),nrow=3,ncol=2)
data=dimnames(data)=list(c("A1","A2","A3"),c("B1","B2"))
pander(data)
B1 | B2 | |
---|---|---|
A1 | 10 | 5 |
A2 | 8 | 5 |
A3 | 17 | 10 |
3.5.1 Test χ2 sur une proportion
Teste si la proportion lié au niveau B1
de la variable Y est plus grande que 0.5. Ce test permet des hypothèses alternatives unilatérales >
ou <
. Il effectue aussi une correction de continuité.
H0:πB1≤0.5 contre H1:πB1>0.5
sum(data[,1]) # Nb de données telles que Y=B1
nB1=sum(data) # Nb total de données
n=prop.test(nB1,n, p=0.5, alternative = "greater")
1-sample proportions test with continuity correction
data: nB1 out of n, null probability 0.5
X-squared = 3.5636, df = 1, p-value = 0.02953
alternative hypothesis: true p is greater than 0.5
95 percent confidence interval:
0.5164367 1.0000000
sample estimates:
p
0.6363636
3.5.2 Test d’ajustement χ2
On teste pour la variable X si la proportion d’individus dans chaque niveau est identique H0:πA1=πA2=πA3 contre H1: non H0
apply(data,1,sum)
dataY=chisq.test(dataY,p=c(1/3,1/3,1/3))
Chi-squared test for given probabilities
data: dataY
X-squared = 6.2545, df = 2, p-value = 0.04384
3.6 Tests de corrélation / indépendance
Test sur un coefficient de corrélation de Pearson
cor.test(x = .., y = .., alternative = "two.sided") #x,y quantitatives
Test χ2 d’indépendance
chisq.test(data)
Tests de corrélation 2 à 2
Hmisc::rcorr(df_quanti)
res <-# df_quanti = data frame composé uniquement de variables quantitatives
~> res$r
= matrice de corrélation
~> res$p
= matrice des p-valeurs associées
3.7 Intervalles de confiance
Il y a 2 possibilités pour obtenir un intervalle de confiance dans R:
1) Calcul à la main
Si on dispose de formules, nous pouvons calculer à la main les bornes inférieures et supérieures d’IC. Pour cela on a besoin d’estimations des paramètres et de quantiles de lois de probabilité bien connues.
Les quantiles sont obtenus via les fonctions suivantes:
- Normale ~>
qnorm(p = .., mean = .., sd = ..)
- Student ~>
qt(p = .., df = ..)
- Chi_Carré ~>
qchisq(p = .., df = ..)
Un intervalle de confiance à 95% sur une moyenne des données chocolat de la société cabeau sera par exemple obtenu comme suit:
length(cabeau$Cacao)
n=mean(cabeau$Cacao)+c(-1,1)*qt(0.975,n-1)*sd(cabeau$Cacao)/sqrt(n)
[1] 5.879313 6.246687
2) Utiliser les fonctions de test
Comme nous pouvons voir plus haut, certains tests calculent automatiquement les intervalles de confiance 95%. Il suffit donc de voir quel test donne l’IC recherché et d’utiliser des hypothèses nulles quelconques:
- Moyenne ~> test t sur 1 échantillon
t.test()
- Différence de moyennes ~> test t sur 2 échantillons
t.test()
- Variance ~> test Chi_Carré sur la variance
EnvStats::varTest()
- Ratio de variances ~> test F de comparaison de variances
var.test()
- Proportion ~> test de proportion à 1 échantillon
prop.test()
- Odds ratio ~> test exact de Fisher
fisher.test()
- Corrélation ~> test sur le coefficient de corrélation de Pearson
cor.test()
Pour ces tests on peut ajouter l’argument conf.level = ..
dans la fonction pour choisir soi-même le niveau de confiance de l’intervalle - par défaut 95%.
Extraire l’IC
t.test(cabeau$Cacao, mu = 6, alternative = "two.sided")
res <- data.frame(Estimate = mean(cabeau$Cacao),
ic <-Lwr = res$conf.int[1],
Upr = res$conf.int[2])
::pander(ic) pander
Estimate | Lwr | Upr |
---|---|---|
6.063 | 5.879 | 6.247 |