Introduction

Le package santoku et ses fonctions chop_xxx permettent de discretiser une variable numerique, comme la fonction usuelle cut mais avec plus de fonctionnalites, cf le recapitulatif https://hughjonesd.github.io/santoku/tutorials/00-visualintroduction.html.

Le vecteur x qu’on va decouper dans les exemples ci-dessous prend ses valeurs entre 4.3 et 7.9.

library("santoku")

affiche = function(w) {
  # pour afficher le nom reel du vecteur w passe en argument de la fonction, purement esthetique
  nom = deparse(substitute(w))
  # table de contingence de la variable discretisee
  knitr::kable(as.data.frame(table(w, useNA = "ifany", dnn = nom)))
}

x = iris$Sepal.Length
range(x)
[1] 4.3 7.9

chop versus cut

Les differences immediatement visibles entre cut et chop

res_chop = chop(x, 3:5)
affiche(res_chop)

res_cut = cut(x, 3:5)
affiche(res_cut)
res_chop Freq
[4, 5) 22
[5, 7.9] 128
res_cut Freq
(3,4] 0
(4,5] 32
NA 118

Les options de chop

Etiquettes

On peut personnaliser les labels de plusieurs manieres :

res_lab = chop(x, 3:5, labels = c("Low", "Medium", "High"))
affiche(res_lab)

res_dash = chop(x, 3:5, lbl_dash())
affiche(res_dash)

res_to = chop(x, 3:5, lbl_format("%s to %s"))
affiche(res_to)
res_lab Freq
Medium 22
High 128
res_dash Freq
4 - 5 22
5 - 7.9 128
res_to Freq
4 to 5 22
5 to 7.9 128

Gestion des depassements

On peut empecher chop d’etendre le dernier intervalle pour retrouver le comportement de la fonction cut.

res_extend =  chop(x, 3:5, extend = FALSE)
affiche(res_extend)
res_extend Freq
[4, 5) 22
NA 128

Classes ponctuelles

On peut reduire une classe a un seul point.

res_point = chop(x, c(3,4,5,5))
affiche(res_point)
res_point Freq
[4, 5) 22
{5} 10
(5, 7.9] 118

Table de contingence

Le package contient une fonction tab basee sur table :

tab(x, 3:5)
x
  [4, 5) [5, 7.9] 
      22      128 

Les differents choix de decoupage de chop_xxx

Choix disponibles pour les intervalles

res_large = chop_width(x, 1)
affiche(res_large)

res_nb_int = chop_evenly(x, 6)
affiche(res_nb_int)

res_nb_points = chop_n(x, 50)
affiche(res_nb_points)

res_nb_quantiles = chop_equally(x, 4)
affiche(res_nb_quantiles)

res_val_quantiles = chop_quantiles(x, c(0.2, 0.5, 0.7))
affiche(res_val_quantiles)
res_large Freq
[4.3, 5.3) 45
[5.3, 6.3) 54
[6.3, 7.3) 43
[7.3, 8.3) 8
res_nb_int Freq
[4.3, 4.9) 16
[4.9, 5.5) 36
[5.5, 6.1) 37
[6.1, 6.7) 33
[6.7, 7.3) 21
[7.3, 7.9] 7
res_nb_points Freq
[4.3, 5.4) 46
[5.4, 6.3) 53
[6.3, 7.9] 51
res_nb_quantiles Freq
[0%, 25%) 32
[25%, 50%) 41
[50%, 75%) 35
[75%, 100%] 42
res_val_quantiles Freq
[0%, 20%) 22
[20%, 50%) 51
[50%, 70%] 35
(70%, 100%] 42

Fonction de decoupage personnalisee avec knife

On decoupe en quartiles et on personnalise les etiquettes d’intervalles.

chop_by_quartiles <- knife(
  breaks = brk_quantiles(c(0.25, 0.5, 0.75)), 
  labels = lbl_dash()
)

res_perso = chop_by_quartiles(x)
affiche(res_perso)
res_perso Freq
0% - 25% 32
25% - 50% 41
50% - 75% 35
75% - 100% 42

retour au debut du document