Une version actualisée de ce chapitre est disponible sur guide-R : Statistique univariée & Intervalles de confiance

Nous utiliserons dans ce chapitre les données de l’enquête Histoire de vie 2003 fournies avec l’extension questionr.

library(questionr)
data("hdv2003")
d <- hdv2003

Intervalle de confiance d’une moyenne

L’intervalle de confiance d’une moyenne peut être calculé avec la fonction t.test (fonction qui permet également de réaliser un test t de Student comme nous le verrons dans le chapitre dédié aux comparaisons de moyennes) :

t.test(d$heures.tv)

    One Sample t-test

data:  d$heures.tv
t = 56.505, df = 1994, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 2.168593 2.324540
sample estimates:
mean of x 
 2.246566 

Le niveau de confiance peut être précisé via l’argument conf.level :

t.test(d$heures.tv, conf.level = 0.9)

    One Sample t-test

data:  d$heures.tv
t = 56.505, df = 1994, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
90 percent confidence interval:
 2.181138 2.311995
sample estimates:
mean of x 
 2.246566 

Le nombre d’heures moyennes à regarder la télévision parmi les enquêtés s’avère être de 2,2 heures, avec un intervalle de confiance à 95 % de [2,17 - 2,33] et un intervalle de confiance à 90 % de [2,18 - 2,31].

Intervalle de confiance d’une médiane

L’intervalle de confiance d’une médiane peut être calculé avec la fonction wilcox.test en précisant conf.int = TRUE :

wilcox.test(d$heures.tv, conf.int = TRUE)

    Wilcoxon signed rank test with continuity correction

data:  d$heures.tv
V = 1542646, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
 2.499994 2.500000
sample estimates:
(pseudo)median 
      2.499948 

D’autres approches existent pour le calcul d’un tel intervalle de confiance. On pourra se référer à la fonction MedianCI de l’extension DescTools.

Intervalle de confiance d’une proportion

La fonction prop.test permet de calculer l’intervalle de confiance d’une proportion. Une première possibilité consiste à lui transmettre une table à une dimension et deux entrées. Par exemple, si l’on s’intéresse à la proportion de personnes ayant pratiqué une activité physique au cours des douze derniers mois :

freq(d$sport)
prop.test(table(d$sport))

    1-sample proportions test with continuity correction

data:  table(d$sport), null probability 0.5
X-squared = 152.9, df = 1, p-value < 2.2e-16
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.6169447 0.6595179
sample estimates:
     p 
0.6385 

On remarquera que la fonction a calculé l’intervalle de confiance correspondant à la première entrée du tableau, autrement dit celui de la proportion d’enquêtés n’ayant pas pratiqué une activité sportive. Or, nous sommes intéressé par la proportion complémentaire, à savoir celle d’enquêtés ayant pratiqué une activité sportive. On peut dès lors modifier l’ordre de la table en indiquant notre modalité d’intérêt avec la fonction relevel ou bien indiquer à prop.test d’abord le nombre de succès puis l’effectif total :

prop.test(table(relevel(d$sport, "Oui")))

    1-sample proportions test with continuity correction

data:  table(relevel(d$sport, "Oui")), null probability 0.5
X-squared = 152.9, df = 1, p-value < 2.2e-16
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.3404821 0.3830553
sample estimates:
     p 
0.3615 
prop.test(sum(d$sport == "Oui"), length(d$sport))

    1-sample proportions test with continuity correction

data:  sum(d$sport == "Oui") out of length(d$sport), null probability 0.5
X-squared = 152.9, df = 1, p-value < 2.2e-16
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.3404821 0.3830553
sample estimates:
     p 
0.3615 

Enfin, le niveau de confiance peut être modifié via l’argument conf.level :

prop.test(table(relevel(d$sport, "Oui")), conf.level = 0.9)

    1-sample proportions test with continuity correction

data:  table(relevel(d$sport, "Oui")), null probability 0.5
X-squared = 152.9, df = 1, p-value < 2.2e-16
alternative hypothesis: true p is not equal to 0.5
90 percent confidence interval:
 0.3437806 0.3795989
sample estimates:
     p 
0.3615 

Il existe de nombreuses manières de calculer un intervalle de confiance pour une proportion. En l’occurence, l’intervalle calculé par prop.test correspond dans le cas présent à un intervalle bilatéral selon la méthode des scores de Wilson avec correction de continuité. Pour plus d’information, on pourra lire http://joseph.larmarange.net/?Intervalle-de-confiance-bilateral.

Pour se simplifier un peu la vie, le package JLutils propose une fonction prop.ci (et ses deux variantes prop.ci.lower et prop.ci.upper) permettant d’appeler plus facilement prop.test et renvoyant directement l’intervalle de confiance.

JLutils n’étant disponible que sur GitHub, on aura recours au package devtools et à sa fonction install_github pour l’installer :

library(devtools)
install_github("larmarange/JLutils")

prop.ci fonction accepte directement un tri à plat obtenu avec table, un vecteur de données, un vecteur logique (issu d’une condition), ou bien le nombre de succès et le nombre total d’essais. Voir les exemples ci-après :

library(JLutils)
freq(d$sport)
prop.ci(d$sport)
[1] 0.6169447 0.6595179
prop.ci.lower(d$sport)
[1] 0.6169447
prop.ci.upper(d$sport)
[1] 0.6595179
prop.ci(d$sport, conf.level = 0.9)
[1] 0.6204011 0.6562194
prop.ci(table(d$sport))
[1] 0.6169447 0.6595179
prop.ci(d$sport == "Non")
[1] 0.6169447 0.6595179
prop.ci(d$sport == "Oui")
[1] 0.3404821 0.3830553
prop.ci.lower(c(1277, 723), n = 2000)
[1] 0.6169447 0.3404821
prop.ci.upper(c(1277, 723), n = 2000)
[1] 0.6595179 0.3830553

Données pondérées et l’extension survey

Lorsque l’on utilise des données pondérées définies à l’aide de l’extension survey1, l’intervalle de confiance d’une moyenne s’obtient avec confint et celui d’une proportion avec svyciprop.

Quelques exemples :

library(survey)
dw <- svydesign(ids = ~1, data = d, weights = ~poids)
svymean(~age, dw)
      mean     SE
age 46.347 0.5284
confint(svymean(~age, dw)) # Intervalle de confiance d'une moyenne
      2.5 %   97.5 %
age 45.3117 47.38282
confint(svyby(~age, ~sexe, dw, svymean)) # Intervalles de confiance pour chaque sexe
         2.5 %   97.5 %
Homme 43.74781 46.65618
Femme 45.88867 48.79758
freq(svytable(~sexe, dw))
svyciprop(~sexe, dw) # Intervalle de confiance d'une proportion
            2.5% 97.5%
sexe 0.535 0.507  0.56

  1. Voir le chapitre dédié aux données pondérées.↩︎