# Changelog

## fonctionr 0.5.0

Date : 2026-03-10

- Changement dans la manière de filtrer les données, permettant un gain de rapidité de ~30% dans la plupart des fonctions lors de l’usage de poids répliqués.

- La fonction `many_val_group()` peut désormais être parallélisée, permettant un gain de rapidité de ~30% avec des poids répliqués lorsque les calculs sont nombreux. Le gain est plus petit - voire négatif - lorsque les calculs sont peu importants. C’est la raison pour laquelle l’option est désactivée par défaut si l’estimation de la variance d’échantillonnage n’est pas réalisée à l’aide de poids répliqués.

- Changement des palettes par défaut des différentes fonctions, car MetBrewer et PrettyCols sont désormais définis comme des packages optionnels (ils ne sont pas automatiquement installés avec fonctionr, sauf si `dependencies = TRUE` est indiqué lors de l’installation).

## fonctionr 0.4.0

Date : 2026-01-27

- Ajout de la possibilité de définir des options globales grâce à la fonction `fonctionr_options()`.

- Nouveaux arguments pour les palettes et les couleurs.

  - Séparation de la couleur unie et de la palette dans les arguments `col` (nouveau) et `pal`. Cette modification engendre une différence de comportement par rapport aux versions antérieures de `fonctionr` : la couleur unie définie dans `pal` ne fonctionnera plus et la couleur par défaut sera appliquée.

  - Dans `distrib_continuous()` et `distrib_group_continuous()`, il y a plusieurs changements dans les arguments : `pal` devient `col_density` ; `pal_moustache` devient `col_moustache` ; `color` devient `col_border`. La raison de ce changement est lié à un impératif de cohérence entre les fonctions : l’argument `pal` est désormais réservé aux palettes de type qualitatif. Néanmoins pour des raisons de compatibilité, les anciens arguments demeurent dans la fonction, mais sont inactifs.

- Il n’est plus possible d’introduire des palettes issues du package MoMAColors, celui-ci n’étant pas sur CRAN.

- Introduction de l’argument `coef_font` pour multiplier la taille de toutes les polices de caractère dans les graphiques de toutes les fonctions.

- Un grand nombre de caractères spéciaux sont désormais utilisables dans le noms des groupes (du fait que `ggtext` a besoin d’un formatage en codes HTML, cela provoquait auparavant des bugs dans les graphiques).

- Les palettes de toutes les fonctions ont désormais la même direction (cohérence entre toutes les fonctions).

- Le thème par défaut de `theme_fonctionr()` devient `"fonctionr"`. La valeur `NULL` pour le theme crée désormais un design très proche du thème par défaut de ggplot (mais en gérant la taille de la police et le formatage permis par ggtext).

- Mise à jour des polices de caractère contenues dans `fonctionr` : la police Montserrat inclue dans le package peut désormais être formatée en italique et gras ; les polices ‘Amatic’ et ‘Helvetica Neue’ sont supprimées (du fait de la limite de 5Mo de CRAN).

## fonctionr 0.3.22

Date : 2026-01-10

- Simplification du code de `esth_graph()`, `many_val_group()`, `distrib_group_discrete()`, `central_group()` pour l’utilisation de `ggtext`.
- Simplification du code de création des palettes avec la fonction interne `create_palette()`.

## fonctionr 0.3.21

Date : 2026-01-05

- Simplification du code de `prop_group()` pour formater le label du total en gras avec le package `ggtext` (inspiration : https://github.com/wilkelab/ggtext/issues/121#issuecomment-3637732111). Mise en italique du groupe NA par la même occasion. La fonction interne `relab_ggtext()` a été créée pour opérer cette simplification. Les autres fonctions doivent encore être modifiées dans le même sens.

## fonctionr 0.3.20

Date : 2025-12-26

- Correction temporaire d’un bug graphique provoqué par le passage à `ggplot 4.0`, qui impliquait que le total sur les graphiques (en gras) soit indiqué ** total ** (avec des astérisques). C’est le package `ggtext` qui est utilisé pour mettre en gras le total dans les graphiques. Or, `ggtext` n’est pas complètement compatible avec le nouveau fonctionnement de `ggplot 4.0` : l’héritage des propriétés ne se fait pas entre éléments S3 et S7 (voir : ggtext and parsing html with latest version of ggplot · Issue #6752 · tidyverse/ggplot2). Une solution temporaire a été ajoutée (à corriger lorsque `ggtext` sera mis à jour : Update theme elements to S7 class system · Issue #128 · wilkelab/ggtext).

## fonctionr 0.3.19

Date : 2025-11-03

- Ajout de nouvelles palettes dérivées des palettes continues : ce sont les mêmes avec plus de contraste, ce qui est plus adapté pour réaliser des cartes.

## fonctionr 0.3.18

Date : 2025-10-13

- Correction de l’ordre des couleurs pour la légende avec le `group.fill` activé pour `prop_group()` et `central_group()`.

## fonctionr 0.3.17

Date : 2025-06-28

- Ajout de la fonction `relab_cut()`.

## fonctionr 0.3.16

Date : 2025-05-17

- Le signe des décimales change désormais en fonction de la langue. La valeur de l’argument `lang` devient `NULL` par défaut pour les fonctions qui ont un argument `lang`.

## fonctionr 0.3.15

Date : 2025-04-29

- Ajout de la position `flip` dans `many_val_group()` pour intervertir les groupes et les indicateurs choisis sur le graphique.

## fonctionr 0.3.14

Date : 2025-03-27

- La fonction `distrib_group_discrete()` possède désormais un argument `reorder` (`TRUE` pour réordonner les groupes selon le premier level de la variable `quali_var`) et un argument `show_n` (`TRUE` pour afficher les effectifs de l’échantillon en dessous du pourcentage).

## fonctionr 0.3.13

Date : 2025-03-17

- La fonction `make_surface()` dispose de l’argument `linewidth_ci` pour régler l’épaisseur des IC.

## fonctionr 0.3.12

Date : 2025-02-16

- La fonction graphique `theme_fonctionr()` dispose maintenant de l’argument `grid.lines`, pour spécifier les lignes de la grilles à afficher (`"x"`, `"y"` ou `"both"`).

## fonctionr 0.3.11

Date : 2025-02-11

- Modification des fonctions qui calculent des totaux, pour afficher en gras le label ainsi que les indicateurs du total. Pour ce faire, le package `ggtext` est désormais utilisé ; il y a donc une dépendance en plus.
- La fonction `distrib_group_discrete()` affiche désormais l’unité `%` sur l’axe des x par défaut, c’est-à-dire lorsque l’unité est définie comme un espace vide (`""`) et que l’argument `scale` vaut `100`.

## fonctionr 0.3.10

Date : 2024-12-17

- Ajout de palettes spécifiques pour l’Observatoire de la Santé et du Social.

- Export de la fonction `official_pal()`.

- Ajout de la possibilité de désaturer, éclaircir ou foncer les palettes de couleur.

## fonctionr 0.3.9

Date : 2024-09-15

- Ajout de l’argument `lang` qui permet l’affichage des indications sur les graphiques en trois langues : français, néérlandais, anglais.

- Ajout d’exemples dans la documentation des fonctions.

## fonctionr 0.3.8

Date : 2024-09-04

- Ajout du calcul de totaux pour `central_group()` et `prop_group()` avec les `group.fill` activés.

- Ajout du calcul de totaux pour `distrib_group_d()` et `many_val_group()`.

- Ajout d’un `theme` “IWEPS” pour les graphiques.

- L’argument `show_lab` devient `show_labs` (avec un s) pour toutes les fonctions.

- L’argument de couleur `fill` devient `pal` pour toutes les fonctions (par cohérence).

## fonctionr 0.3.7

Date : 2024-08-04

- Modifications substancielles pour `central_group()` : ajout de la possibilité de faire des sous-groupes (argument `group.fill`) par groupe.

- Ajout de la possibilité dans `central_group()` de ne pas calculer le total.

## fonctionr 0.3.6

Date : 2024-07-20

- Ajout de la possibilité dans `prop_group()` de ne pas calculer le total.

- Dans `make_surface()`, l’option `position = "bottom"` change également la position de la surface minimale affichée lorsque `compare = T` (suggestion de Robin).

- Optimisation du code (très légère augmentation de la vitesse).

## fonctionr 0.3.5

Date : 2024-07-07

- Modifications substancielles pour `prop_group()` : ajout de la possibilité de faire des sous-groupes (argument `group.fill`) par groupe.

- La fonction `make_surface()` est terminée : documentation et checks.

- Modification du code relatif aux palettes de couleurs pour compatibilité avec la nouvelle version de `PrettyCols` (changement de nom d’un argument).

- Corrections mineures à divers endroits du code. Le check n’indique désormais plus d’erreur, warning ou note.

## fonctionr 0.3.4

Date : 2024-06-29

- Ajout de l’export excel pour `distrib_continuous()` et `distrib_group_continuous()`. De légères modifications des outputs de ces deux fonctions ont été apportées pour rendre l’export propre.

- Ajout de trois polices d’écriture dans `fonctionr` : `Helvetica Neue`, `League Gothic` et `Amatic`.

## fonctionr 0.3.3

Date : 2024-06-06

- Amélioration de l’affichage des aires de densité dans `distrib_group_continuous()` lorsque la palette est d’une seule couleur (on ne voit plus les limites des quantiles).
- Ajout des facets dans `make_surface()`.
- Mise à la ligne automatique de caption tous les 100 caractères dans toutes les fonctions.

## fonctionr 0.3.2

Date : 2024-05-27

- Correction d’un bug sur le reorder des valeurs dans `distrib_group_continuous()`.

## fonctionr 0.3.1

Date : 2024-05-25

- Correction d’un bug dans la plupart des fonctions sur le reorder des valeurs par la médiane des résultats utilisé pour les facets (la fonction est désormais écrite avec des guillemets : `FUN = "median"`. Sans cela, il y avait dans certains cas particuliers une erreur).

## fonctionr 0.3.0

Date : 2024-04-26

- La documentation a été complétée pour que le package puisse être utilisé par des personnes tierces. Le package commence à être diffusable.

- Le bug avec la ligne du geom_line qui est coupée pour `distrib_group_continuous()` est réglé.

- bug d’ordonnancement des facteurs réglé dans `esth_graph()`.

## fonctionr 0.2.13

Date : 2024-04-20

- Création de `make_surface()` comme fonction indépendante utilisable sur n’importe quel tableau de résultats.

- Ajout de la possibilité d’afficher le résultat d’un test statistique dans `esth_graph()`.

## fonctionr 0.2.12

Date : 2024-04-04

- Création de `distrib_continuous()` et `distrib_group_continuous()`.

- Modification du thème `theme_fonctionr()` pour qu’il soit plus adapté aux nouvelles fonctions.

## fonctionr 0.2.11

Date : 2024-03-17

- Réécriture du code de toutes les fonctions (sauf `esth_graph()` et `pivot_longer_survey()`) : simplification + structuration.
- Nouvelle logique des na.rm finalisée pour toutes les fonctions (différenciation de `na.rm.group` et `na.rm.facet`, introduction de `na.rm.var` pour `distrib_group_d()` et `distrib_d()`).
- Ajout de checks pour vérifier si la couleur/palette est valide : couleur/palette par défaut si la couleur introduite est invalide.
- Création d’une fonction interne de création de palettes, permettant de produire les palettes de différentes institutions (pour l’instant Vivalis et Perspective, pour tester).

## fonctionr 0.2.10

Date : 2024-03-15

- Ajout des argument `na.rm.facet` dans `prop_group()` et `central_group()`.
- Possibilité de mettre une couleur unie pour `many_val()`.
- Création de l’argument `na.vars` pour `many_val()` et `many_val_group()`.

## fonctionr 0.2.9

Date : 2024-03-05

- Ajout des palettes dans `many_val()`.

## fonctionr 0.2.8

Date : 2024-03-03

- Modification des checks pour voir si les variables indispensables existent bien dans `data` : simplification du code et message plus clair et utile pour l’utilisateur.

## fonctionr 0.2.7

Date : 2024-03-01

- Ajout de `many_val()` comme fonction plus générale qui englobe `many_prop()`. Il y a désormais la possibilité de calculer des moyennes et des médianes avec les alias `many_mean()` et `many_median()`.
- Plus de parcimonie pour l’import des packages extérieurs dans le namespace.
- Changement de nom des arguments : `na.var` devient `na.prop` et `facet.var` devient `facet`.
- Début de simplification du code dans un but de facilité pour la maintenance et les modifs futures.

## fonctionr 0.2.6

Date : 2024-02-22

- Ajout d’un check de l’expression dans `prop_group()`, évitant de produire des résultats incohérents.

## fonctionr 0.2.5

Date : 2024-02-19

- Implémentation du `trycatch()` sur le test statistique dans `prop_group()` : le test statistique est désormais bypassé si les conditions ne sont pas remplies et ne stoppe donc plus `prop_group()` en cas d’erreur.

## fonctionr 0.2.4

Date : 2024-02-17

- Implémentation de checks pour vérifier que les variables de `many_prop_group()` soient bien binaires, et pour éviter les variables à une modalité pour `quali_var` dans `distrib_group_discrete()`.
- Correction d’un bug dans `esth_graph()`.

## fonctionr 0.2.3

Date : 2024-02-17

- Implémentation de l’export excel pour `many_prop()` et `many_val_group()`.

## fonctionr 0.2.2

Date : 2024-02-14

- Implémentation du test statistique pour `distrib_discrete()`.

- Correction d’un bug découvert à cette occasion, qui empêchait de faire fonctionner `distrib_discrete()` avec `na.rm.group = FALSE`.

## fonctionr 0.2.1

Date : 2024-02-14

- Amélioration des fonctions internes de vérification de la validité des arguments. Celles-ci renvoient désormais un message plus clair pour l’utilisateur.

## fonctionr 0.2.0

- `prop_group()` : ajout de la possibilité de calculer des proportions en comptant les `NA` au dénominateur avec l’argument `na.var = "include"`. Dans ce cas, l’expression `prop_exp` peut contenir la fonction `is.na()` pour calculer la proportion de valeurs manquantes.

- `many_val_group()` : changement de l’ordre des labels pour que l’ordre des couleurs corresponde à l’ordre sur le graphique.

- Ajout d’exemples dans la documentation à partir des données SILC inclues dans le package laeken.

- Correction de bugs mineurs.

## To do list

### Prioritaire (nécessités ou bugs)

#### En général

- (Joël) Réécrire `export_excel()` => la fonction est un peu bordélique et le nom des arguments pas clairs.

- (Joël) Harmoniser les fonctions internes
  => `fonctionr_ggplot_labs()` utilise `type` pour désigner la fonction dans laquelle on se trouve, vs `fonction` pour `export_excel()` et `fonctionr_filter()` : future source de confusion pour maintenir le package.
  => Certaines conditions sont implicites, d’autres explicites -> faire le même travail que François a fait sur `fonctionr_filter()`

- (Joël) Ajouter que pour supprimer xlab ou ylab, on puisse entrer `NA` et pas seulement ““.
  => Une fonction unique de labellisation des axes x et y a déjà été crée pour faciliter cet ajout.

- (François) Ajouter toutes les options dans `fonctionr_options()`, sauf les arguments avec données ou variables.
  => Ajouter parallel.

- (François) Revoir la doc de chaque fonction et le manuel par rapport aux changements. Voir ici pour savoir les différentes options possibles dans la doc : https://r-pkgs.org/man.html.
  => Documenter la fonction `fonctionr_options()` (+ explication dans le manuel).
  => Changer la doc pour les palettes par défaut.

- (François) Créer un tableau joli en output (avec `flextable`).

- BUG : si une variable de design == le nom d’un objet externe, ça fonctionne => APPROFONDIR ET REGLER CA ?

- Rendre l’usage non interactif (= la programmation via d’autres fonctions) possible => gros travail, usage de `rlang` à la place de `substitute()`.

- Mettre des conditions pour réaliser les tests (n min, distribution, variances égales…).

- Ajouter des checks pour les inputs :

  - Pas mettre les mêmes colonnes dans les différents arguments ? (`group`, `var_distrib`, `facet_var`, etc.).

#### distrib_c

- (Joël) Sélectionner uniquement les variables nécessaires pour minimiser la RAM utilisée (désactivé car bug ?)
- Ajouter le test stat univarié avec comme H0 mu dans la population. Apparemment la fonction n’est pas pré-programmée dans `survey`, il faut la faire soi-même.
- Ajouter la possibilité de facets.

#### distrib_group_c

- (Joël) Sélectionner uniquement les variables nécessaires pour minimiser la RAM utilisée (désactivé car bug ?)

- (Joël) Introduire la mise en forme avec ggtext => plus difficile ici car le `NA` a été tranformé en level. Réfléchir à la meilleure solution et revoir éventuellement la fonction.

- (François + Joël) Ajouter hauteur des densités proportionnelle aux effectifs pondérés.

- Il y a un warning de la fonction `density()` qui dit que `Selecting bandwidth not using 'weights'`. La doc de density() dit : “automatic bandwidth selection will not take the weights into account and hence may be suboptimal.”
  => Voir si c’est un problème ?

- Le groupe `NA` est transfomé en level du facteur de groupe. De ce fait, il n’apparaît pas toujours en dernier, notamment lorsque `reorder = T`. Régler ça (pas cohérent avec les autres fonctions).

- Faire en sorte que le nom du groupe soit toujours le même dans les sorties de la liste (pour le moment, parfois “group”, parfois le nom de la variable) => implique de changer l’argument `by =` des `left_join()` dans le script, et donc le nommage des colonnes.

- Ajouter la possibilité de facets.

- La colonne `central` dans l’objet `dens` produit n’a pas de valeur `y_ridges`.

- Un peu cleaner le script : il y a des étapes inutiles qui pourraient être simplifiées, notamment dans la création des valeurs centrales.

- Ajouter la possibilité d’un total.

#### prop_group

#### central_group

- Bypasser l’erreur du test stat avec `tryCatch()`.

#### distrib_group_d

- (François) Ajouter hauteur des barres proportionnelle aux effectifs pondérés.
- Implémenter un test stat lorsqu’il y a des facets => via modélisation loglinéaire, mais j’ai un peu de mal à comprendre les erreurs de `survey` (erreurs fréquentes).
- Redondance du code avec total pour le `geom_text()` ?

#### many_val

- (Joël) Conditions ajoutées pour définir la priorité de pal sur col => Voir avec François si c’est OK.
  => C’est idem pour `make_surface()`.
- Les couleurs des palettes sont attachées à l’indicateur, mais pas à la position. De ce fait, lorsque `reorder = T`, l’ordre des couleurs de la palette n’est pas respecté => changer le comportement ?

#### many_val_group

- Le `NA` apparait en premier lorsque `position = "flip"` => Corriger, il doit apparaître en dernier.
- Améliorer l’alignement des effectifs avec `show_n = T` lorsque `position == "stack"`
- Redondance du code avec total pour le `geom_text()` ?
- Les couleurs des palettes sont attachées au groupe, mais pas à la position. De ce fait, lorsque `reorder = T`, l’ordre des couleurs de la palette n’est pas respecté => changer le comportement ?
- Fusionner `many_val_group()` et `many_val()` !

#### make_surface

- Ajouter la détection automatique des IC (possible si les colonnes sont du même nom que la valeur, mais terminant par `_low` et `_upp`).

- Ajouter les checks (penser le cas spécifique de `pvalue`).

- Lorsque facet, mieux penser l’alignement entre mêmes modalités ?

- Ajouter les arguments `dec` et éventuellement `scales`.

#### esth_graph

- Changer le nom.

- Ajouter le check pour l’argument `pvalue`.

- Régler le pb si multiples `NA` + voir si un pb se pose avec multiples totaux.
  => BUG : la condition stoppe si multiples `NAs` avec facettes même si 1 seul `NA` par facette (condition trop stricte => ça doit passer)

### Améliorations

#### En général

- Réécrire le code du test stat pour avoir la formule originale => possible avec `eval()`, voir code de `central_group()`.
- Créer une fonction de check des inputs indispensables (car redondance entre les 4 fonctions)
  => Pour l’instant c’est fait “en dur” : difficultés de créer une fonction du fait de l’usage du tidyverse : il faut sans doute utiliser les fonctions de `rlang`.
- Revoir la solution apportée dans `theme_fonctionr()` au bug de compatibilité entre `ggtext` et `ggplot 4.0` lorsque ggtext aura été mis à jour. Voir : https://github.com/jgires/fonctionr/commit/0461f452405628d1aaf692a0266f3a281c2b67d6.

#### distrib_group_d

- Ajouter les effectifs totaux par groupe ? (dans le nom du groupe ?)

### Notes

#### Filtrage

Il semble qu’il faille filtrer après la déclaration du design. Si on ne le fait pas, on considère le design sur l’objet filtré (avec moins de PSU / strates qu’il y en a en réalité), ce qui sous-estime potentiellement la distribution d’échantillonnage. Voir :

https://stats.stackexchange.com/questions/411026/why-it-is-important-to-make-survey-design-object-svydesign-function-in-r-with-i

https://notstatschat.rbind.io/2021/07/22/subsets-and-subpopulations-in-survey-inference/

=> De ce fait, j’ai inclus une option de filtre (filter_exp) dans les fonctions (qui filtre après la déclaration du design), qui évite de filtrer l’objet avant en dégradant le design. => Vérifier que c’est bien OK !

### Fonctions à créer

#### Bivarié ou 3 variables+

- Superposition de 2 statistiques (bar + lines) avec échelles différentes.

- Tableau croisé avec résidus ou couleur par proportion (proportions par c, l, ou total)