library(rtauargus)
library(dplyr)2 Poser le secret sur un tableau
- Poser le secret primaire
- Calculer le nombre de cellules détectées comme à risque
- Poser le secret secondaire à l’aide de la fonction
tab_rtauargus() - Faire une synthèse du secret posé
Ce chapitre a été réalisé avec la version 1.2.0 de rtauargus et la version 4.2.3 de TauArgus.
Poser un masque de secret sur un tableau comprend les étapes suivantes :
- Poser le secret primaire en créant des variables indicatrices :
- Pour chacun des tableaux on ajoute une variable booléenne indiquant si la cellule est problématique (
TRUE) ou non (FALSE), au regarde des règles pertinentes à appliquer comme : la règle de fréquenceis_secret_freqou la règle de dominanceis_secret_dom - Ensuite, on crée une variable résumant le secret primaire
is_secret_prim:is_secret_prim = is_secret_freqsi seule la règle de fréquence doit s’appliqueris_secret_prim = is_secret_freq | is_secret_domsi les deux règles doivent s’appliquer
Voici un exemple de code pour les règles classiques en statistiques d’entreprises :
Le tableau T0 présente le chiffre d’affaires des entreprises ventilé par leur activité et leur taille.
str(T0)tibble [414 × 5] (S3: tbl_df/tbl/data.frame)
$ ACTIVITY: chr [1:414] "AZ" "BE" "FZ" "GI" ...
$ SIZE : chr [1:414] "Total" "Total" "Total" "Total" ...
$ FREQ : int [1:414] 405 12878 28043 62053 8135 8140 11961 41359 26686 25108 ...
$ VALUE : num [1:414] 44475 24827613 8907311 26962063 8584917 ...
$ MAX : num [1:414] 6212 1442029 1065833 3084242 3957364 ...
# Pose du secret "manuelle"
T0_detect <- T0 %>%
mutate(
is_secret_freq = FREQ > 0 & FREQ < 3,
is_secret_dom = (VALUE != 0) & (MAX > 0.85*VALUE)
) %>%
mutate(
is_secret_prim = is_secret_freq | is_secret_dom
)
# Résultat
str(T0_detect)tibble [414 × 8] (S3: tbl_df/tbl/data.frame)
$ ACTIVITY : chr [1:414] "AZ" "BE" "FZ" "GI" ...
$ SIZE : chr [1:414] "Total" "Total" "Total" "Total" ...
$ FREQ : int [1:414] 405 12878 28043 62053 8135 8140 11961 41359 26686 25108 ...
$ VALUE : num [1:414] 44475 24827613 8907311 26962063 8584917 ...
$ MAX : num [1:414] 6212 1442029 1065833 3084242 3957364 ...
$ is_secret_freq: logi [1:414] FALSE FALSE FALSE FALSE FALSE FALSE ...
$ is_secret_dom : logi [1:414] FALSE FALSE FALSE FALSE FALSE FALSE ...
$ is_secret_prim: logi [1:414] FALSE FALSE FALSE FALSE FALSE FALSE ...
Calculer le nombre de cellules détectées comme à risque
Poser le secret secondaire en utilisant le package
rtauargusen utilisant la fonctiontab_rtauargus().
La fonction tab_rtauargus() requiert les arguments suivants :
tabular: la table à protégerdir_name: le nom du répertoire où les fichiers seront sauvegardésfiles_name: le nom utilisé pour nommer les fichiers (chaque fichier a une extension différente);explanatory_vars: le nom des variables de croisements présents dans la table;secret_var: le nom de la variable indiquant si une cellule est à risque ou non (secret primaire);value= nom de la variable de réponse;freq= nom de la variable d’effectifs;totcode: le code utilisé pour indiquer le total pour chacune des variables de croisements (explanatory_vars).
# Localisation de tauargus sur AUS
loc_tauargus <- "Y:/Logiciels/TauArgus/TauArgus4.2.3/TauArgus.exe"
options(rtauargus.tauargus_exe = loc_tauargus)
# Préciser la localisation de tauargus
loc_tauargus <- "C:/Users/tmm7an/Documents/SDC/TauArgus/TauArgus4.2.3/TauArgus.exe"
options(rtauargus.tauargus_exe = loc_tauargus)T0_masq <- tab_rtauargus(
T0_detect,
dir_name = "tauargus_files/ex_T0",
files_name = "T0",
explanatory_vars = c("ACTIVITY","SIZE"),
secret_var = "is_secret_prim",
value = "VALUE",
freq = "FREQ",
totcode = c(ACTIVITY="Total",SIZE="Total"),
verbose = FALSE
)- Calculer le nombre de cellules selon leur statut final en suivant la norme européenne :
Ales cellules en secret primaire à cause de la règle de fréquenceBles cellules en secret primaire à cause de la règle de dominance (dans le futur ces cellules pourraient être notéesO)Dles cellules concernées par le secret secondaireVles cellules non touchées par le secret, c’est-à-dire les cellules qui pourront être diffusées.
Pour faire le bilan du secret, le mieux est de modifier la variable Status fournie par Tau-Argus. En effet, cette variable ne permet pas de faire la distinction entre les deux types de secret primaire (fréquence ou dominance), on modifie donc ces modalités pour faire apparaître cette distinction.
T0_masq <- T0_masq %>%
mutate(
statut_final = case_when(
is_secret_freq ~ "A",
is_secret_dom ~ "B",
TRUE ~ Status,
)
)Afin de bien appréhender l’impact du secret posé, on va non seulement compter le nombre de cellules masquées, mais aussi calculer la valeur des cellules masquées.
T0_masq %>%
group_by(statut_final) %>%
summarise(
n_cell = n(),
val_cell = sum(VALUE)
) %>%
mutate(
pc_n_cell = n_cell/sum(n_cell)*100,
pc_val_cell = val_cell/sum(val_cell)*100
)# A tibble: 4 × 5
statut_final n_cell val_cell pc_n_cell pc_val_cell
<chr> <int> <dbl> <dbl> <dbl>
1 A 52 22115262. 12.6 1.51
2 B 25 37823909. 6.04 2.59
3 D 46 21032941. 11.1 1.44
4 V 291 1381270369. 70.3 94.5
Un bon indicateur de la qualité du secret secondaire posé consiste à rapporter le nombre de cellules supprimées lors de cette phase au nombre de cellules détectées comme à risque (secret primaire). Ici par exemple, nous avons un ratio de \(46/(52+25) = 0.6\). Ainsi, pour protéger une case en secret primaire, Tau-argus a dû masquer 0.6 cellule(s) ; ce qui est très peu car ce ratio est généralement autour de 2.
En effet, pour un tableau à deux dimensions, la présence d’un secret primaire engendre la suppression d’au moins 3 cellules supplémentaires. Donc, le ratio obtenu sur cet exemple indique qu’un certain nombre de cellules en secret primaire se protègent entre elles.