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")
<- hdv2003 d
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)
n % val%
Non 1277 63.8 63.8
Oui 723 36.1 36.1
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)
n % val%
Non 1277 63.8 63.8
Oui 723 36.1 36.1
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 survey
1, l’intervalle de confiance d’une moyenne s’obtient avec confint
et celui d’une proportion avec svyciprop
.
Quelques exemples :
library(survey)
<- svydesign(ids = ~1, data = d, weights = ~poids)
dw 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))
n % val%
Homme 5149382 46.5 46.5
Femme 5921844 53.5 53.5
svyciprop(~sexe, dw) # Intervalle de confiance d'une proportion
2.5% 97.5%
sexe 0.535 0.507 0.56
Voir le chapitre dédié aux données pondérées.↩︎