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_freq
ou 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_freq
si seule la règle de fréquence doit s’appliqueris_secret_prim = is_secret_freq | is_secret_dom
si 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 %>%
T0_detect 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
rtauargus
en 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
<- "Y:/Logiciels/TauArgus/TauArgus4.2.3/TauArgus.exe"
loc_tauargus options(rtauargus.tauargus_exe = loc_tauargus)
# Préciser la localisation de tauargus
<- "C:/Users/tmm7an/Documents/SDC/TauArgus/TauArgus4.2.3/TauArgus.exe"
loc_tauargus options(rtauargus.tauargus_exe = loc_tauargus)
<- tab_rtauargus(
T0_masq
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 :
A
les cellules en secret primaire à cause de la règle de fréquenceB
les cellules en secret primaire à cause de la règle de dominance (dans le futur ces cellules pourraient être notéesO
)D
les cellules concernées par le secret secondaireV
les 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(
~ "A",
is_secret_freq ~ "B",
is_secret_dom 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.