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

choco <- readxl::read_xlsx("data/chocolat.xlsx", col_names = TRUE)
choco$Marque <- as.factor(choco$Marque)
cabeau <- subset(choco, Marque =="Cabeau") 
gallet <- subset(choco, Marque =="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

N <- table(choco$Marque)
Moyenne<-tapply(choco$Cacao, choco$Marque, mean)
EcartType<-tapply(choco$Cacao, choco$Marque, sd)
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.

res= t.test(choco$Cacao, mu = 6, alternative = "two.sided")
pander::pander(res)
One Sample t-test: choco$Cacao
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:σ20.04

EnvStats::varTest(x = cabeau$Cacao, sigma.squared = 0.04, alternative = "two.sided")

	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 

car::leveneTest(choco$Cacao, group = choco$Marque)
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 :

data=matrix(c(10,8,17,5,5,10),nrow=3,ncol=2)
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:πB10.5 contre H1:πB1>0.5

nB1=sum(data[,1]) # Nb de données telles que Y=B1
n=sum(data) # Nb total de données
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

dataY=apply(data,1,sum)
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

res <- Hmisc::rcorr(df_quanti)
                # 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:

n=length(cabeau$Cacao)
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

res <- t.test(cabeau$Cacao, mu = 6, alternative = "two.sided")
ic <- data.frame(Estimate = mean(cabeau$Cacao),
                 Lwr = res$conf.int[1],
                 Upr = res$conf.int[2])
pander::pander(ic)
Estimate Lwr Upr
6.063 5.879 6.247