378
Le logiciel R - Effectuer des analyses statistiques
Astuce
Nous proposons le code suivant qui permettra de calculer la m´ ediane
pour des donn´ ees individuelles ordinales ou num´ eriques :
> ma.mediane <- function(x) {
+ if (is.numeric(x)) return(median(x))
+ if (is.ordered(x)) {
+
N <- length(x)
+
if (N%%2) return(sort(x)[(N+1)/2]) else {
+
inf <- sort(x)[N/2]
+
sup <- sort(x)[N/2+1]
+
if (inf==sup) return(inf) else return(c(inf,sup))
+
}}
+ stop("Calcul de médiane impossible pour ce type")
+ }
> ma.mediane(poisson)
[1] 2-3/sem.
6 Levels: jamais < < 1/sem. < 1/sem. < ... < 1/jour
Supposons maintenant que l’on dispose non pas des donn´ ees individuelles,
mais uniquement du tableau des fr´ equences observ´ ees f 1 , . . . , f k , . . . , f K dans
les K classes ]e 0 , e 1 ], . . . , ]e k−1 , e k ], . . . , ]e K−1 , e K ] d’une variable quantitative.
Il faut alors proc´ eder par interpolation lin´ eaire entre les deux valeurs dont
les fr´ equences cumul´ ees encadrent 50 %. Notons e k et e k+1 les deux valeurs
cons´ ecutives des bornes de classe telles que PFC X (e k ) < 0.5 ≤ PFC X (e k+1 ), o` u
PFC X (e j ) = f 1 + f 2 + · · · + f j , j = 1, . . . , K (PFC X (x) est la valeur du polygone
des fr´ equences cumul´ ees au point x). Alors on a :
m e = e k + (e k+1 − e k )
0.5 − PFC X (e k )
PFC X (e k+1 ) − PFC X (e k )
.
Nous pouvons proposer le programme suivant permettant de calculer la
m´ ediane dans ce cas :
> mediane.sur.freq <- function(x) {
+ # x est le tableau des fréquences.
+ tmp <- suppressWarnings(as.double(names(x)))
+ if (!(is.null(tmp) | all(is.na(tmp)))) {
+
tab.freq.cum <- cumsum(x)
+
index <- order(tab.freq.cum < 0.5)[1]
+
fc1 <- tab.freq.cum[index]
+
fc2 <- tab.freq.cum[index-1]
+
x1 <- as.numeric(names(fc1))
+
x2 <- as.numeric(names(fc2))
+
mex <- as.numeric(x1 + (x2-x1) * (0.5-fc1)/(fc2-fc1))
+
} else {mex <- NA}
Le logiciel R - Effectuer des analyses statistiques
Astuce
Nous proposons le code suivant qui permettra de calculer la m´ ediane
pour des donn´ ees individuelles ordinales ou num´ eriques :
> ma.mediane <- function(x) {
+ if (is.numeric(x)) return(median(x))
+ if (is.ordered(x)) {
+
N <- length(x)
+
if (N%%2) return(sort(x)[(N+1)/2]) else {
+
inf <- sort(x)[N/2]
+
sup <- sort(x)[N/2+1]
+
if (inf==sup) return(inf) else return(c(inf,sup))
+
}}
+ stop("Calcul de médiane impossible pour ce type")
+ }
> ma.mediane(poisson)
[1] 2-3/sem.
6 Levels: jamais < < 1/sem. < 1/sem. < ... < 1/jour
Supposons maintenant que l’on dispose non pas des donn´ ees individuelles,
mais uniquement du tableau des fr´ equences observ´ ees f 1 , . . . , f k , . . . , f K dans
les K classes ]e 0 , e 1 ], . . . , ]e k−1 , e k ], . . . , ]e K−1 , e K ] d’une variable quantitative.
Il faut alors proc´ eder par interpolation lin´ eaire entre les deux valeurs dont
les fr´ equences cumul´ ees encadrent 50 %. Notons e k et e k+1 les deux valeurs
cons´ ecutives des bornes de classe telles que PFC X (e k ) < 0.5 ≤ PFC X (e k+1 ), o` u
PFC X (e j ) = f 1 + f 2 + · · · + f j , j = 1, . . . , K (PFC X (x) est la valeur du polygone
des fr´ equences cumul´ ees au point x). Alors on a :
m e = e k + (e k+1 − e k )
0.5 − PFC X (e k )
PFC X (e k+1 ) − PFC X (e k )
.
Nous pouvons proposer le programme suivant permettant de calculer la
m´ ediane dans ce cas :
> mediane.sur.freq <- function(x) {
+ # x est le tableau des fréquences.
+ tmp <- suppressWarnings(as.double(names(x)))
+ if (!(is.null(tmp) | all(is.na(tmp)))) {
+
tab.freq.cum <- cumsum(x)
+
index <- order(tab.freq.cum < 0.5)[1]
+
fc1 <- tab.freq.cum[index]
+
fc2 <- tab.freq.cum[index-1]
+
x1 <- as.numeric(names(fc1))
+
x2 <- as.numeric(names(fc2))
+
mex <- as.numeric(x1 + (x2-x1) * (0.5-fc1)/(fc2-fc1))
+
} else {mex <- NA}
