Intervalles de confiance
Lorsqu’on établit une moyenne sur un échantillon, il est d’usage de l’assortir d’un intervalle de confiance. Malheureusement, Oracle ne propose pas en standard de fonction permettant son calcul.
Il est néanmoins possible d’en créer une. La difficulté réside dans le fait qu’à l’instar de la fonction AVG de calcul de la moyenne, il s’agit d’une fonction d’agrégation.
Depuis Oracle 9.2, on peut coder ses propres fonctions de groupement. Il faut cependant respecter un formalisme strict dans leur mise en oeuvre – à savoir, l’implémentation doit impérativement contenir des routines odciaggregateinitialize, odciaggregateiterate & odciaggregateterminate qui assurent les diverses étapes de l’aggregation.
La fonction AVG_SAMP_CONFINT jointe permet d’estimer l’intervalle de confiance à 95% d’une moyenne: avg_samp_confint.sql
Celle-ci utilise le t de la loi de Student pour les échantillons de taille inférieure à 140 puis bascule ensuite sur une valeur z=1.96 en raison de la convergence vers la loi Normale pour les grands effectifs.
A noter que l’algorithme de calcul de la variance est optimisé pour éviter les problèmes d’overflow qui pourraient se produire si on utilisait la technique de la somme des carrés des valeurs de l’échantillon.
Exemple d’utilisation:
SQL> SELECT fam, 2 COUNT (*) n, 3 ROUND (AVG (val), 2) moyenne, 4 ROUND (avg_samp_confint (val), 2) intervalle_confiance 5 FROM releves 6 GROUP BY fam; FA N MOYENNE INTERVALLE_CONFIANCE -- ---------- ---------- -------------------- A1 35 69.55 5.44 A2 24 54.86 10.16 B6 22 78.36 4.25 SQL>
On retrouve bien les mêmes résultats avec R:
> mean_samp_confint <- function(dat)
+ {
+ res <- t.test(dat)
+ m <- round(res$estimate,2)
+ ic <- round((res$conf.int[2] - res$conf.int[1])/2, 2)
+
+ paste(m," - ic: +/-", ic, sep="")
+ }
>
> by(releves$VAL, releves$FAM, mean_samp_confint)
releves$FAM: A1
[1] "69.55 - ic: +/-5.44"
-------------------------------------------------------------------------------------
releves$FAM: A2
[1] "54.86 - ic: +/-10.16"
-------------------------------------------------------------------------------------
releves$FAM: B6
[1] "78.36 - ic: +/-4.25"
>