5. L’approccio di correzione probabilistica

Sintesi: sono descritte, in sintesi, la metodologia e le varie fasi, da eseguire in modo gerarchico dall'utente, per la correzione effettuata secondo l'approccio probabilistico

Con questo metodo si ottiene la correzione di un file di dati con l'approccio di tipo probabilistico: l'imputazione delle variabili necessarie a far si che un record trovato errato in base alle regole di incompatibilità, passi tutte le regole, dipende dalla probabilità, sia riguardo alle variabili, se più variabili possono essere prese in considerazione, sia riguardo ai valori da assegnare alle variabili, estratti dai donatori. Da Barcaroli et al (1999) sono di seguito descritti i principi su cui la tecnica si basa.

L'approccio probabilistico non impone la necessità di definire a priori, per ogni situazione di errore, l'elenco delle azioni da intraprendere per eliminare gli errori dai dati: l'esperto statistico deve limitarsi a definire le situazioni di errore, demandando ad un prefissato algoritmo il compito di riportare il record ad una situazione di correttezza.
L'approccio probabilistico, sviluppato in CONCORD, ha il suo punto di riferimento nella cosiddetta metodologia Fellegi-Holt, esposta nell'articolo "A systematic approach to automatic edit and imputation" di I.Fellegi e D.Holt, pubblicato nel 1976 sul Journal of the American Statistical Association.

Un piano probabilistico è composto, quindi, da regole di incompatibilità, che seguendo la terminologia di Fellegi e Holt, sono chiamate edit in forma normale. Un edit in forma normale è costituto dalla congiunzione di due o più condizioni sui valori di variabili del record: l'edit è attivato, in un dato record, quando sono verificate simultaneamente tutte le condizioni in esso definite. La parte SE di una regola di incompatibilità, cioè quella che esprime la situazione di errore, può corrispondere a uno o più edit in forma normale.

L'algoritmo che elimina gli errori provvede a determinare, per ogni record e per ogni situazione di errore, quali variabili modificare, in modo da avere la certezza di eliminare gli errori individuati e, soprattutto, di non introdurne altri nel record, minimizzando nel contempo il numero di variabili modificate.

Gli edit in forma normale definiti dall'esperto, detti edit espliciti, sono sufficienti ad individuare la presenza di errori all'interno dei record di un file, ma non a garantire una imputazione di valori corretta ed ottimale. Infatti, la scelta di quali variabili modificare e di quali nuovi valori assegnare, è condizionata dai vincoli di correttezza - non introdurre nuovi errori nel record - e di minimalità - modificare il minor numero possibile di variabili. A tal fine, occorre considerare anche i cosiddetti edit impliciti, derivabili da quelli espliciti ed individuare così l'insieme minimo e completo degli edit.

La metodologia di Fellegi-Holt prevede che, una volta definiti gli edit espliciti, questi siano analizzati, sia per scoprire la presenza di contraddizioni e/o ridondanze, che per derivare tutti gli edit impliciti in essi contenuti.

La fase dell'analisi e della derivazione degli edit, produce un insieme di regole che ha le seguenti caratteristiche:

- è minimale, privo cioè di edit ridondanti;
- è corretto, privo di edit tra loro contraddittori;
- è completo in quanto contiene, in forma esplicita, tutti gli edit implicitamente definiti all'interno di quelli iniziali.

La derivazione degli edit impliciti nell'ambito della metodologia Fellegi-Holt, rappresenta un'operazione altamente critica: infatti la generazione degli edit impliciti richiede un numero di operazioni che è esponenziale rispetto al numero di edit espliciti. Talvolta, la derivazione degli edit impliciti risulta impossibile, anche ricorrendo ad euristiche che permettono di limitare a priori il numero delle operazioni necessarie; in questo caso si può ripartire l'insieme iniziale di edit suddividendo la fase di correzione in tante sottofasi quanti sono i sottoinsiemi di edit cosi definiti.

Prima fase, nella stesura del piano di incompatibilità, è quella della definizione delle variabili, eventualmente delle liste di variabili, e delle regole di incompatibilità.

5.1. La fase di definizione

Figura 5.1 - Funzioni di definizione

5.1.1. Definizione delle variabili

Propedeutica ad ogni altra funzione è la definizione delle variabili, cioè dei campi del record da sottoporre a controllo ed eventuale correzione. Nell'approccio probabilistico sono trattate variabili categoriche o qualitative con valori codificati da 0 a 9999. Per definire le variabili è necessario avere il tracciato record con indicate le posizioni iniziali e le lunghezze di ogni variabile da trattare.

Nei record di input le variabili da trattare devono essere completate con 0 a sinistra del valore per tutta la lunghezza del campo; quindi i campi più lunghi di un carattere devono essere completati con zeri iniziali.

E' necessario definire solo le variabili che vogliamo sottoporre a controllo; il resto del record verrà ricopiato senza modifiche.
Il numero massimo di variabili definibili è 500.
Per ogni variabile è necessario indicare:

- il nome, univoco e lungo al massimo 6 caratteri (es.: ETA, Q12, COL1_6, ....); il nome deve essere univoco anche rispetto ai nomi di eventuali LISTE (vedi § 5.1.2);
- la posizione, cioè la colonna del tracciato record dove inizia la variabile, in un valore compreso tra 1 e 5000;
- la lunghezza della variabile, in un valore compreso tra 1 e 4: una variabile non può superare i 4 caratteri di lunghezza.

Esempi di variabili: ETA posizione 1, lunghezza 1;
SESSO posizione 5, lunghezza 1;
REDDIT posizione 345, lunghezza 3. Il programma controlla che le posizioni insieme alle lunghezze non si sovrappongano.
Il nome, la posizione, la lunghezza e i domini di una variabile possono essere modificati scegliendo la variabile da modificare, modificandola dove necessario e selezionando "add/mod" dopo la modifica.
La cancellazione di una variabile si effettua scegliendola dalla lista e selezionando "delete"; con la cancellazione si perdono anche i relativi domini.
Con "clear" si annullano le modifiche che riguardano la variabile.

Definita una variabile bisogna passare all'inserimento dei valori dei domini di una variabile selezionando "DOMINI ".
Per dominio di una variabile si intendono i valori che la variabile può assumere, ossia le possibili risposte ad un quesito del questionario dell'indagine in oggetto, per un massimo di 700; l'eventuale ammessa assenza di risposta "blank" va indicata con "B". Nella fase di inserimento della variabile, scritti il nome la posizione e la lunghezza, bisogna definire i valori del dominio, espressi in forma di intervallo "da a".

Se per esempio una qualsiasi variabile può' assumere i valori 1,5,8,9 ed è ammessa la risposta mancante:

- scrivere 1 nella zona da e 1 nella zona a e dare invio o "add/mod";
- scrivere 5 nella zona da e 5 nella zona a e dare invio o "add/mod";
- scrivere 8 nella zona da e 9 nella zona a e dare invio o "add/mod";
- scrivere b nella zona da e b nella zona a e dare invio o "add/mod";

Il programma controlla che il dominio di una variabile non si sovrapponga con gli altri domini della stessa variabile, e non superi la lunghezza definita per la variabile stessa.

Per aggiungere ulteriori domini ad una variabile:

- selezionare la variabile verranno evidenziati i valori del dominio;
- selezionare "DOMINI ";
- aggiungere i domini necessari nel modo sopraindicato.

Per modificare il dominio di una variabile:

- selezionare la variabile verranno evidenziati i valori del dominio;
- selezionare "DOMINI ";
- scegliere il dominio da modificare;
- riscrivere il dominio e premere invio o "add/mod".

Per eliminareun dominio di una variabile:

- selezionare la variabile;
- selezionare "DOMINI";
- scegliere il dominio da cancellare;
- premere "delete".

Con "clear" si annullano le modifiche del dominio selezionato.

Terminato l'inserimento o la modifica dei domini la variabile viene aggiornata scegliendo "end".

Dal menu a tendina "File" (vedi fig. 5.2):

- Con "save and exit" si crea o aggiorna nella cartella di progetto il file esterno "vardom.dat" che conterrà la descrizione formattata delle variabili;
- Con "exit" si può uscire senza salvare le modifiche effettuate nelle variabili;
- Con "import" si importano variabili da un file esterno con tracciato formattato, uguale a quello del file "vardom.dat", da scegliere in una cartella;
- Con "export per deterministico" si registra nella cartella di progetto, attuando così una prima integrazione tra gli approcci probabilistico e deterministico, la descrizione delle variabili sul file esterno "fvardom.dat" in formato adatto all'approccio deterministico.

View" visualizza tutte le variabile preesistenti ordinandole per posizione

Fig. 5.2 La gestione delle variabili

5.1.2. Definizione delle liste di variabili

Le liste di variabili , utili per agevolare la scrittura delle regole, sono insiemi di variabili la cui risposta nel questionario può mancare o non mancare in funzione del valore di un'altra variabile.

Tipicamente appartengono ad una lista tutte le variabili di una sezione del questionario che deve essere compilata o no sulla base di un quesito "filtro" precedente, oppure sezioni di questionario che ammettono molte risposte multiple.
Scrivendo una sola regola, che indica incompatibilità tra una variabile e la variabile di lista, saranno automaticamente generate, nella fase di controllo (vedi §5.2.1), tante regole quante sono le variabili indicate nella lista se la lista è stata definita OR, o una regola che comprende tutte le variabili della lista se questa è stata definita AND.

Esempio:
poniamo che se l'età è minore di 14 anni non deve essere compilata una sezione del questionario che comprende sei variabili; dovremmo scrivere sei regole una tra ETA e VAR1, un'altra tra ETA e VAR2, …e infine una tra ETA e VAR6; invece creando una lista che chiameremo "LISETA" comprendente le variabili precedentemente definite VAR1, VAR2... VAR6 potremo scrivere una sola regola (cfr. definizione delle regole) tra ETA e LISETA:

ETA(0-13) LISETA< )

Se la variabile LISETA è stata dichiarata OR, definizione più comune per le variabili lista, saranno automaticamente generate nella fase di controllo delle regole, sei regole di incompatibilità, una tra la variabile ETA e la variabile VAR1, una tra la variabile ETA e la variabile VAR2, e così via.

Se invece la variabile LISETA è stata dichiarata AND verrà automaticamente generata, nella fase di controllo delle regole, una sola regola di incompatibilità, tra variabile ETA e tutte le variabili elencate in LISETA.

Una lista può comprendere al massimo 100 variabili.

Per definire una lista:

- scrivere un nome univoco, anche rispetto alle variabili, lungo al massimo 6 caratteri;
- scegliere "O" per liste in OR oppure "A" per liste in AND.

vengono mostrate tutte le variabili precedentemente definite la cui risposta può mancare, cioè che ammettono "B" nel dominio (vedi §5.1.1).

Per aggiungere variabili ad una lista:

- scegliere con il mouse le variabili da inserire nella lista; le variabili così scelte faranno parte della lista e verranno automaticamente spostate dal listbox "scegli variabile" al listbox "variabili in lista" (vedi fig. 5.3).

Per cancellare variabili da una lista:

- le variabili possono essere cancellate da una lista nella quale erano state precedentemente inserite, scegliendole con il mouse dal listbox "variabili in lista"; viene compiuta automaticamente un'operazione inversa alla precedente;
- alla fine premere "add/mod" nella zona lista per aggiornare la lista.

Per modificare una lista:

- scegliere la variabile nel listbox "LISTE" e poi eseguire le operazioni sopra descritte;
- alla fine premere "add/mod" nella zona lista per aggiornare la lista.

Per cancellare una lista:

- scegliere la variabile nel listbox "LISTE";
- premere "delete".

Con "clear" si annullano le modifiche alla lista.
Dal menu a tendina "file" sono possibili le seguenti scelte:

- Con "exit" si esce senza memorizzare alcuna operazione effettuata;
- Con "save and exit" vengono memorizzate le modifiche e registrati, con apposito formato, nella cartella di progetto i file esterni "STRUTT.dat" per le liste definite in "OR", e "LISTE.dat" se esistono liste definite in "AND";
- Con "import" è possibile, dopo avere scelto la cartella tramite apposita maschera, caricare le liste da file esterni, scritti in formato apposito, del tipo "STRUTT.dat" e "LISTE.dat".

Fig. 5.3 La gestione delle liste

5.1.3. Definizione delle regole di incompatibilita'

Le regole di incompatibilità o "edit" scritte dall'utente, per una massimo di 2000, sono chiamate "insieme minimale" e descrivono l'incompatibilità tra le variabili considerate nei loro sottodomini.
L'esperto dell'indagine deve definire, quindi, quali sono le incompatibilità possibili nelle risposte ai quesiti del questionario e trascriverle sotto forma di regola, mettendo, se gli è più consono, in forma negativa o "diverso da" una risposta possibile o compatibile.

Ad esempio se in un questionario lo stato civile "non libero" è compatibile solo con l'età maggiore di 14 anni e dobbiamo scrivere una regola per controllare le risposte diremo

se stato civile non libero ed età > 14 anni

per considerare compatibili le risposte a quesiti, trasformandola poi in incompatibilità scrivendo

se stato civile non libero ed età 0-13 anni.

Nell'approccio probabilistico, vengono trattate solo variabili di tipo categorico, anche se codificate numeriche, con soli controlli di uguaglianza, e non sono possibili operazioni di tipo aritmetico tra le variabili; inoltre bisogna considerare sottoinsiemi del dominio di una variabile poiché, se ne considerassimo l'intero dominio, la regola sarebbe sempre verificata qualsiasi fosse il valore della variabile a confronto.
Non bisogna scrivere regole per controllare il dominio delle variabili, dato che questo controllo viene effettuato e corretto automaticamente dal programma.
Se una regola inizia con un asterisco "*", questa viene considerata un commento.
Una regola può contenere un massimo di 16 variabili, e ogni variabile della regola può avere al massimo 100 valori di sottodominio.
Ogni regola deve essere così interpretata:

Se è vero V1(sd1 o ..sdn) ed è vero V2(sd1 o ..sdn) ...ed è vero Vn(sd1 o ..sdn) alloral'incompatibilità è vera.

Le variabili all'interno di una regola esprimono contemporaneità (AND) mentre i valori dei sottodomini tra parentesi esprimono alternatività (OR).

Esempio:
consideriamo che se l'età (descritta dalla variabile ETA) è minore di 14 anni e lo stato civile (descritto dalla variabile STACIV) è libero (risposta 1 al quesito relativo, che ammette le risposte possibili 1-5) la risposta è esatta;

in forma negativa diremo se se l'età è minore di 14 anni e lo stato civile è "diverso da" libero "1" allora l'incompatibilità è verificata;

scriveremo quindi la regola:

ETA(0-13) STACIV<1)

oppure

ETA<14-110) STACIV(2,3,4,5)

Quindi:

- ( ) così si indicano i sottodomini "uguali a";
- < ) così si indicano i sottodomini "diversi da";
- da-a indica un intervallo di valori compresi gli estremi;
- la "," separa i valori del sottodominio;

Per inserire una regola:

- scegliere una variabile tra quelle mostrate;
- scegliere il simbolo "eq" per uguale ( o "ne" per diverso <;
- scegliere il valore tra i domini mostrati ed eventualmente modificarlo con le frecce e, quando il valore è quello voluto, premere "store" per memorizzare il dominio nella regola.
- scegliere un nuovo valore tra i domini oppure un'altra variabile;
- così via fino a scrivere tutta la regola.

Alla fine scegliere "add/mod";

In caso di errore usare il tasto "undo".

Con "clear" si annulla l'intera operazione.

Per commentare una regola:

- Con "remark" si commenta una regola scelta o si inserisce un commento;

Per cancellare una regola:

- selezionare la regola da cancellare e click su "delete";

Per modificare una regola:

- selezionare la regola da modificare;
- effettuare le modifiche direttamente sulla riga senza aiuto da parte dell'interfaccia; ricordiamo che le regole subiranno un controllo per verificarne l'esattezza con apposita funzione (cfr. § 5.2.1);
- dopo la modifica click su "add/mod".

Da menu a tendina "file":

- Con "exit" si esce senza memorizzare le operazioni effettuate;
- Con "save and exit" si memorizzano le operazioni effettuate e si crea o aggiorna, nella cartella di progetto, il file esterno "REGOLE.dat";
- Con "import" si importano regole dal file esterno "REGOLE.dat", dopo aver scelto la cartella con apposita maschera, e si sostituiscono sempre eventuali regole esistenti; in questo caso "exit" non annulla l'operazione;
- Con "export per deterministico", funzione attiva solo dopo aver effettuato il controllo delle regole, si registrano nella cartella di progetto, le regole sul file esterno "fregout.dat", e le variabili sul file esterno "fvardom.dat", nei formati adatti al passaggio deterministico.

Fig. 5.4 La maschera per la gestione delle regole

5.2. Le funzioni

5.2.1. Controllo delle regole

Fig 5.5 Le funzioni per l'approccio probabilistico

Eseguita la fase di definizione delle variabili, delle liste di variabili e delle regole di incompatibilità, si deve scegliere la funzione di "Controllo delle regole".
La fase di controllo delle regole scritte dall'utente, ossia dell'insieme minimale, verifica eventuali errori di sintassi, incongruenze e ridondanze delle regole, accorpa regole che hanno le stesse variabili con domini diversi solo per un valore, esplode le liste creando tante regole quante sono le variabili nella lista se definita in "OR", segnala le modifiche effettuate, fermando il processo se esistono regole contraddittorie, cioè regole in contrapposizione tra loro, o regole che per accorpamenti successivi rimangono con una sola variabile, o regole che per una variabile hanno indicato tutto il dominio.

Gli errori di sintassi nelle regole si possono verificare se le regole vengono corrette, o se vengono eliminate o modificate variabili o liste, mentre le incompatibilità , le ridondanze e le incoerenze sono sempre possibili durante la scrittura delle regole stesse, e verificabili solo con un processo iterativo.

Alla fine del passaggio di controllo delle regole viene mostrata la lista delle segnalazioni di errori o avvertimenti, quale ad esempio "edit ridondante". Dalla maschera è possibile uscire con "F3" e, se il passaggio è andato a buon fine, sarà possibile eseguire la funzione di "check dei dati", la "derivazione dell'insieme completo" e, nel modulo di definizione delle regole, la funzione di "export per deterministico" (vedi §5.1.3).

In questa fase vengono registrati tra gli altri i seguenti file esterni:

- "TABVARF.dat" che contiene, per ogni variabile, il dominio definito in classi derivate dall'insieme delle regole che la trattano;
- "MINICE.dat" con la matrice derivante dell'insieme minimo in binario;
- "MINSET.dat" con le regole trasformate in forma leggibile da "MINICE.dat". Notare che le regole sono spesso trasformate in forma affermativa;
- "SERICE.dat" per il trattamento della matrice nei passi successivi;
- "SYSCON.dat" con i messaggi del passaggio di controllo;
- "regole_da_minset" per il riciclo del passo di controllo per eventuali ulteriori accorpamenti.

Le segnalazioni di errore o di avvertimento, riferite al file "MINSET.dat", comprendono nella numerazione anche i commenti.

E' importante e opportuno riciclare il passo di controllo ponendo in input il file generato "regole_da_minset", rinominandolo "REGOLE.dat"; questo riciclo va effettuato fino a che non si verifichino più ulteriori accorpamenti delle regole derivate dalla precedente esecuzione della funzione di controllo delle regole.

Dopo il passo di controllo, nel quale vengono eseguiti i programmi "contreg.exe" e "genreg.exe", avendo i dati di input a disposizione è opportuno, prima di eseguire la fase di derivazione degli edit impliciti, eseguire la fase di controllo o "CHECK" dei dati di input o dati grezzi.

5.2.2. Check dei dati

Selezionando la funzione "check dei dati" sono possibili tre scelte:

> 1. CHECK

Fig. 5.6 La maschera per la funzione di check dei dati

La scelta della funzione di controllo o "Check" dei dati di input, o dati grezzi, dovrebbe essere eseguita prima della fase di derivazione dell'insieme completo, per eliminare dall'insieme degli edit espliciti o "insieme minimale" scritti dall'utente, eventuali errori di definizione delle variabili, sia nei domini che rispetto al tracciato di registrazione, o errori di scrittura delle regole dal punto di vista logico.

Il check dei dati, separa i dati grezzi in esatti ed errati, verificando per i record di input, l'incompatibilità descritta nelle regole dell'insieme minimo tramite il file esterno codificato "MINICE.dat" scritto nella fase di controllo delle regole.

Durante la fase di check, per ogni record in esame se anche una sola regola di incompatibilità è vera il record viene registrato tra gli errati, e viene registrato un record nel file "ERRORI.dat" con il numero della regola errata; in questo caso si può vedere la regola corrispondente al numero tramite la funzione "Vista delle regole in uso" (vedi punto 2).

A fine passaggio di check, segnalato da apposito messaggio, vengono mostrati i contatori dei record letti, esatti ed errati e una tabella (vedi fig. 5.7) con elencate le regole violate e gli eventuali dati fuori dominio. Tutti i riferimenti numerici delle regole vanno fatti con il file MINSET.dat (vedi punto 2, "Vista delle regole in uso") ove sono elencate e numerate anche le regole generate automaticamente, nella fase di controllo delle regole, che si riferiscono al "fuori dominio" delle variabili.

L'analisi di questi risultati permette all'utente di verificare gli eventuali errori di definizione e permette, inoltre, di verificare se i dati di input sono affetti da errori sistematici che dovrebbero essere eliminati, con approccio diverso, prima della correzione probabilistica.

Infatti è importante controllare attentamente le regole attivate con troppa frequenza, indice di errore di definizione, o di registrazione, o di risposta ad un quesito affetto da errore sistematico.

Una distribuzione casuale, "a pioggia", delle regole violate indica che il piano di check è ben strutturato, e che i dati non sono affetti da errori non stocastici.

Nel passo di check, che esegue il programma esterno "genckf", vengono registrati nella cartella di progetto i seguenti file:

- SYSCHK.dat con i messaggi e i valori dei contatori relativi ai record esatti ed errati;
- LISCHK.dat con la tabella riassuntiva delle regole verificate; queste regole sono descritte sul file MINSET.dat, e la numerazione è quella riportata sul file LISCHK.dat; se il numero si riferisce a un "(VALORE FUORI DOMINIO)" la variabile indicata nella regola di MINSET.dat ha avuto per n volte un valore non ammissibile;
- ESATTI.dat con i record esatti;
- ERRATI.dat con i record errati;
- ERRORI.dat parallelo ai record errati con i numeri delle regole errate per ogni record;
- FREQUEN con la frequenza dei casi per ogni dominio di "TABVARF".

Il file esterno di input per il passo di check, deve essere scelto tramite l'apposita maschera evidenziata al momento della scelta della funzione. Una volta scelta la cartella e selezionato il file con "apri", o cliccando due volte sul nome del file stesso, viene aggiornato, nella cartella di progetto, il file "tabfile.prm" che contiene il nome dei file che saranno utilizzati nel passo di check e nel successivo passo d'imputazione.
I record del file di input devono essere registrati in ASCII e con lunghezza e campi fissi (vedi cap.3).

Si ricorda che per eseguire il check dei dati non è necessario aver effettuato la funzione di "derivazione delle regole implicite".

> > > > Fig. 5.7 La tabella delle regole attivate nel check dei dati

> 2. VISTA REGOLE in USO

La scelta di questa funzione mostra le regole, numerate, registrate sul file esterno "MINSET.dat". Dalla tabella si può uscire con il tasto funzione "F3".

3. STATISTICA ERRORI

I contatori e la tabella degli edit espliciti attivati vengono mostrate automaticamente alla fine dell'esecuzione del programma di check dei dati.
E' comunque possibile rivederli scegliendo la funzione "Statistica degli errori" che mostra, in successione, prima i contatori dei record esatti ed errati e poi la tabella degli edit espliciti attivati con le variabili fuori dominio (vedi fig. 5.7)

5.2.3. La derivazione degli edit impliciti

Fig. 5.8 La funzione di derivazione dell'insieme completo

La scelta della funzione "Esegue derivazione", da "Derivazione insieme completo", effettua la derivazione delle eventuali regole implicite dalle regole esplicite scritte dall'utente, e sottoposte al passo di controllo detto "insieme minimale", ed è indispensabile per un corretto passo di correzione dei dati errati o imputazione.

La derivazione è un programma che per ogni variabile, detta "generatrice", verifica se le n regole che la contengono, raggruppate a 2,3,...a n ne coprono l'intero dominio della variabile, e in questo caso, se le altre variabili contenute nelle regole generano una nuova regola che viene detta "implicita". Se questa regola non risulta compresa nelle altre regole dell'insieme minimo viene detta "essenzialmente nuova", diventa parte dell'insieme delle regole, e rientra nel passo che viene riciclato.

Non è possibile quantificare a priori il tempo, talvolta anche di molte ore, necessario alla derivazione dell'insieme completo.

In teoria per ogni variabile sarebbe necessario un numero di combinazioni pari a 2**n-n-1, ove n è il numero delle regole che contengono la variabile in esame; e questo moltiplicato per tutte le variabili definite dall'utente che ad n chiudono il dominio. E' stato necessario introdurre dei tagli, alcuni suggeriti dalla stessa metodologia di Fellegi-Holt, altri sviluppati con algoritmi che permettono di ridurre il numero delle combinazioni, quali ad esempio le "classi di equivalenza" che raggruppano in una stessa classe tutte le regole che, per la variabile in esame, hanno lo stesso dominio.

In questa fase vengono registrati nella cartella di progetto i seguenti file esterni:

- "MAXICE.dat" che contiene la matrice dell'insieme completo in forma binaria;
- "GENER.dat" con la storia di ogni regola nella generazione;
- "COMPLETO.dat" con le regole in forma leggibile dall'insieme completo;
- "LISGEN.dat" con la descrizione per ogni regola generata della variabile;
- "SYSDER.dat" con i messaggi del passo di derivazione;

Solo dopo il passo di derivazione, nel quale vengono eseguiti i programmi esterni "derivaz", "decoreg" e "gengen", è possibile effettuare la fase di correzione.

Se il passo di derivazione si ferma per "edit degenere" o "edit contraddittori", bisogna riferirsi al file "GENER.dat" e al file "COMPLETO.dat" per capire quali regole sono tra loro incompatibili considerando che "GENER.dat" contiene un record per ogni regola con numeri indicanti:

- la variabile generatrice (primo numero nella riga);
- le regole che hanno contribuito alla generazione della regola in esame (numeri successivi);
- -9999 che chiude l'insieme delle regole generatrici;

i numeri di regola negativi (es.: -34) indicano che la regola è stata cancellata nei cicli di derivazione, e quindi bisogna considerare le regole successive al -9999 che hanno derivato la regola in esame e così via.

Le regole esplicite hanno il record corrispondente su "GENER.dat" con tutti 0.

Se il passo di derivazione è andato a buon fine viene resa possibile la funzione "Correzione dati".
Scegliendo "display derivazione" si ha una lista dei passi effettuati durante la derivazione.
Scegliendo "insieme completo" vengono mostrate tutte le regole, numerate, che formano l'insieme delle regole sia esplicite che implicite.

5.2.4. La correzione dei dati

Fig. 5.9 La funzione di correzione dei dati

5.2.4.1. Impostazione delle variabili fisse

Questa funzione, propedeutica alla fase d'imputazione, permette di condizionare la correzione di singole variabili con l'impostazione di alcuni parametri.

Infatti è possibile:

- alterare il peso con il quale una variabile può essere scelta per fare parte dell'insieme minimo delle variabili da cambiare;
- assegnare ad una variabile un'altra variabile di confronto;
- definire una variabile come variabile di strato per il cambio del serbatoio dei donatori;
- definire per una variabile l'imputazione da valori prefissati.

Per ogni variabile selezionata è possibile:

- definire una variabile di match, cioè una variabile che dovrà avere lo stesso valore sia nel record errato che nel record donatore, se il programma di correzione decide di correggere la variabile selezionata; per impostare una variabile di match selezionare una variabile tra quelle mostrate e questa verrà scritta nella zona "Match";
- cambiare la fissità: con questo parametro è possibile alterare il peso, di norma uguale per tutte le variabili, con il quale esse vengono scelte dall'algoritmo di formazione dell'insieme minimo. Dell'insieme minimo fanno parte le variabili che devono essere cambiate in modo che il record errato passi tutte le regole di controllo. Impostando per una variabile una fissità da 1 a 8, forziamo il programma di correzione a cercare un insieme minimo di variabili che comprenda la suddetta variabile solo se non è stato trovato un insieme minimo di variabili con fissità minore. La fissità scelta è relativa a tutte le altre fissità, per cui è inutile impostare la fissità di una variabile a 1 e la fissità di un'altra variabile a 3, poiché questa verrà considerata dal programma a 2. La fissità 9 impedisce il cambiamento del valore della variabile e, di conseguenza, questa non può entrare negli insiemi minimi se è da correggere, producendo record "incorreggibili senza insieme minimo" nel caso che la variabile fissata a 9 abbia un valore fuori dominio;
- definirla "chiave", cioè variabile di stratificazione per il cambio del serbatoio dei record donatori. Se una variabile è definita chiave si presuppone che i record, esatti ed errati, siano ordinati in modo ascendente per detta variabile, e il rinnovo del serbatoio dei record esatti avviene al cambio del valore di una delle suddette variabili sui record errati; il programma domanda all'utente se deve effettuare l'eventuale ordinamento dei dati esatti ed errati, se esistono variabili definite chiave, scelta da evitare se i dati di input del check sono già ordinati. Le variabili chiave devono avere fissità 9 e quindi sono variabili i cui valori devono essere sicuramente esatti;
- definirla "marginale" in questo caso una variabile definita marginale viene corretta con l'imputazione sequenziale, seguendo la distribuzione marginale delle frequenze dei dati grezzi, frequenze che possono essere modificate con l'impostazione dei pesi.

Per ogni variabile impostata è possibile aggiungere note o commenti.

Con "exit" si esce senza salvare le modifiche.
Con "save and exit" si esce dalla funzione e si salvano le modifiche anche sul file esterno "VARFIX.dat".
Con "import" si importano variabili da un file esterno formattato del tipo "VARFIX.dat".

5.2.4.2. Impostazione dei pesi

Con questa funzione è possibile variare la distribuzione dei pesi, quale risulta dal passaggio di check, per i domini di variabili opportunamente scelte, in modo che sia applicata, in casi particolari, una distribuzione scelta dall'utente.

Il programma di correzione, nel caso debba imputare una variabile con un valore che debba essere forzato perché non trovato nel serbatoio donatori, oppure se la variabile è stata definita "marginale" (vedi § 5.2.4.1), prenderà i valori da imputare dalla distribuzione delle frequenze ottenute nel passaggio di check e registrate sul file "FREQUEN.dat".

Con la funzione "Pesi" è possibile modificare questa distribuzione all'interno dei valori del dominio di una variabile. Il programma mostra l'intera distribuzione delle frequenze nella "Lista totale dei pesi in %".

Per creare una variabile peso:

- Scegliere una variabile tra quelle mostrate; viene mostrato l'intero dominio della variabile con i pesi relativi in percentuale;
- Scegliere il dominio da modificare;
- Scrivere il nuovo peso in percentuale e dare invio;
- Modificare un altro dominio in modo che la somma dei pesi sia sempre 100;
- Alla fine "add/mod".

Per cancellare una variabile peso:

- sceglierla e poi "delete".

Da menu a tendina"File": Con "exit" si esce senza salvare le modifiche;
Con "save and exit" si esce e si salvano le modifiche sul file esterno "PESI.dat";
Con "import" si importano pesi da un file esterno "PESI.dat" selezionato dall'utente. 5.2.4.3. Impostazione dei parametri di esecuzione dell'imputazione

Con questa funzione si impostano i parametri che condizionano l'intera esecuzione del passo di imputazione, contrariamente alle impostazioni del paragrafo 5.2.4.1, che riguardano le singole variabili.

I parametri sono:

- Tipo di imputazione:

impostato all'esecuzione di tutti e tre i tipi di imputazione;
con questo parametro si può ridurre la sequenza dei tentativi di imputazione alle sole imputazioni allargata e sequenziale, oppure ancora più restrittivamente, alla sola imputazione sequenziale. Cambiare il tipo di imputazione può servire a diminuire il tempo di esecuzione del passaggio di correzione in fase di messa a punto del progetto.

- Statistiche:

impostato a SI, scelta consigliata.
Con NO si elimina la produzione delle statistiche di correzione.

- Numero record serbatoio donatori:

impostato a 2000; può essere diminuito;
notare che il serbatoio dei donatori viene rinnovato al cambio del valore delle eventuali variabili chiave.

- Numero massimo di donazioni:

impostato a 99999 (numero di donazioni senza limite).
Si può diminuire e serve a limitare le donazioni che un singolo record esatto può effettuare.

Con 'Save and exit' si registrano i parametri, nella cartella di progetto nel file PARM.dat, e si esegue il programma di correzione.

Se sono state definite variabili fisse di tipo "chiave" il programma, prima dell'esecuzione del passo di imputazione, domanda all'utente se deve ordinare il file degli ESATTI ed il file degli ERRATI, ordinamento che può essere evitato se i dati sono già ordinati per le suddette variabili.

5.2.4.4. Imputazione

La fase di correzione dei dati, o imputazione, trasforma i record errati, output della fase di controllo o check, in record corretti, utilizzando l'algoritmo del minimo cambiamento, una delle basi della metodologia di Fellegi-Holt.

Per ogni record errato, tramite l'insieme completo "MAXICE.dat", generato nella fase di derivazione degli edit impliciti, vengono verificate le regole di incompatibilità, e si cerca il numero minimo di variabili che, modificate con i valori presi da un serbatoio di donatori e tentando di prendere sempre il record esatto più somigliante, rendono corretto il record errato in esame.

Il serbatoio dei record donatori è costituito dal numero di record esatti, output del passaggio di check , determinato da un parametro di imputazione, per un massimo di 2000 record. Questo serbatoio, che viene rinnovato solo se esistono variabili definite "chiave", è l'unica fonte che fornisce i valori per la correzione delle variabili che fanno parte dell'insieme minimo di variabili da correggere.

Per prendere il record esatto più somigliante, il programma cerca la distanza minima tra il record da correggere e i record del serbatoio degli esatti, che viene rinnovato a rottura di strato determinato dalle variabili definite chiave, come segue: viene tentata prima l'imputazione ristretta, viene cioè cercato tra gli esatti un record con i valori delle variabili da non modificare uguali a quelle del record da correggere; se non è possibile trovare detto record nel serbatoio degli esatti, si tenta l'imputazione allargata, cioè trovare un record tra gli esatti con i valori "possibili" nelle variabili da non modificare, e infine, se anche questo tentativo d'imputazione non è riuscito, il record viene imputato sequenzialmente, una variabile da correggere alla volta, ricercando tra gli esatti un record compatibile, e se non trovato, forzando random tra i valori possibili, il valore esatto.

Il tempo necessario alla correzione dei record dipende dalla grandezza dell'insieme completo, dal tipo di imputazione prescelto, e ovviamente dal numero dei record errati.

I file utilizzati dal programma "genimpn2" sono:

- PARM.dat con i parametri di imputazione prescelti;
- TABVARF.dat con i domini separati in classi per ogni variabile;
- VARFIX.dat con le variabili definite fisse;
- MAXICE.dat insieme completo in forma binaria;
- SYSCHK.dat dal check con contatori esatti/errati;
- ESATTI.dat dal check record esatti;
- ERRATI.dat dal check record errati;
- CORRETTI.dat record errati corretti;
- INCORRETTI.dat eventuali record non correggibili perché fissati in modo errato;
- SYSIMP.dat con i seguenti contatori:

- Imput. congiunta ristretta: numero dei record corretti con l'imputazione ristretta.
- Imput. congiunta allargata: numero dei record corretti con l'imputazione allargata.
- Imput. Sequenziale: numero dei record corretti con l'imputazione sequenziale.
- Forzature: totale delle forzature effettuate nell'imputazione sequenziale.
- Incorretti: eventuali record incorretti - derivazione errata, MAXICE non valido.
- Incorretti senza ins.min.: eventuali record incorretti derivati da aver fissato a 9 variabili con valori errati.
- Corretti da incorretti: record corretti con insiemi minimi alternativi risultanti ad aver fissato a 9 molte variabili.

- STATIS.dat statistiche di correzione;
- FREQUEN output del check con frequenze dei dati grezzi per le variabili da correggere con forzature;
- PESI eventuale diversa distribuzione delle frequenze per alcuni domini per le variabili da correggere con forzature;

5.3. Analisi dei risultati

Fig. 5.10 Le funzioni di analisi dei risultati

Eseguita la fase di imputazione, CONCORD permette un'analisi dei risultati tramite funzioni specifiche.

5.3.1. Tavole di verifica

Viene proposta una maschera (vedi fig. 5.11) nella quale scegliere, con doppio click del mouse, fino a tre variabili, tra quelle mostrate, che identifichino in modo univoco i record del file dati prima e dopo la correzione.

Nel caso non esistano, tra quelle mostrate, variabili che identifichino univocamente i record del file dati, ma siano registrati sui dati grezzi valori adatti allo scopo, è possibile definire, fino ad un massimo di tre, nuove variabili con posizione e lunghezza. In questo caso il sistema nominerà automaticamente le variabili con key1, key2 e key3.

Queste variabili servono ad accoppiare il file dei dati grezzi, input della fase di check, con un file ottenuto dai dati corretti e dai dati esatti in modo da poter evidenziare le variazioni subite. Per questo motivo, i record devono essere identificabili in tutti gli archivi.

Se non esistono valori, e quindi variabili, nel file dei dati grezzi, che identifichino in modo univoco i record da sottoporre a check e correzione, è possibile utilizzare un programma di utilità, (vedi §8.1.2) per creare una variabile di numerazione adatta allo scopo e numerare i record del file di input prima del passaggio di check.

Esempio:sia dato un file con i seguenti record:

1___5____0____5_
record 1 0100100111222345
record 2 0100200304222354
record 3 0100300302232322
record 4 0100400102043421

con definite variabili a posizione 6 lunga 3, posizione 9 lunga 1, 10 lunga 2 e 15 lunga 2; non esistendo variabili che identifichino in modo univoco il record possiamo però definirne una con posizione 3 e lunghezza 3.

Se i dati invece fossero:

1___5____0____5_
record 1 0100100111222345
record 2 0100100304222354
record 3 0100300302232322
record 4 0100300102043421

non avremmo nessuna zona dei record che li possa identificare univocamente; dobbiamo perciò, prima dei passaggi di check e correzione, numerare con l'apposita funzione nei programmi di utilità (vedi § 8.1.2), i record a posizione 17 per 1 carattere e, una volta effettuati i passaggi di controllo e correzione, definire una variabile a posizione 17 lunga 1 che serva all'accoppiamento dei dati per le tavole di verifica.

Le tavole di verifica sono ottenute con procedure SAS quali SORT, MERGE e FREQ e in output si avranno la distribuzione delle frequenze per tutte le variabili definite, e la distribuzione incrociata di tutte le variabili definite tra il file dei dati grezzi, prima delle fasi di controllo e correzione, e il file dei record esatti più quello dei record corretti.

Dal menu a tendina "File": "Save and run": esegue l'elaborazione attraverso una macro SAS che sviluppa gli incroci per tutte le variabili ed esce.
"Exit": esce senza elaborare.
"Run source file": esegue l'elaborazione dei programmi generati dall'apposita funzione, sotto descritta, ed esce. Questa scelta è possibile solo se è stato generato il sorgente SAS. Dal menu "Funzioni": "Genera SAS source": dopo aver indicato le variabili è possibile generare, nella cartella di progetto, i sorgenti dei programmi SAS necessari all'elaborazione. Questa opzione permette all'utente di modificare, eventualmente, i sorgenti SAS per ottenere una elaborazione personalizzata, eliminando gli incroci per le variabili non interessanti.
"Clear": annulla tutte le variabili inserite ripristinando i campi.

Fig. 5.11 La maschera per le funzioni di verifica

5.3.2. Grafici

Con questa funzione è possibile ottenere, a video, dei grafici.
Sono possibili le seguenti scelte:

- Distribuzioni dei dati:
viene proposta una maschera nella quale bisogna selezionare la variabile e il tipo di istogramma desiderato.
Viene mostrata la distribuzione di frequenza, per la variabile selezionata, del valori dei dati grezzi e dei dati dopo la correzione.
- Frequenza errori
Viene mostrata la distribuzione di frequenza delle regole di incompatibilità verificate.

5.4. Errori di esecuzione

I seguenti errori bloccano i programmi durante l'esecuzione.

Programma | Errore | Causa
contreg (controllo delle regole) | Matrice troppo larga | Superati i limiti di memoria
genreg (controllo delle regole e generazione minimal-set ) | L'ampiezza dei domini > 1500 caratteri | Superati i limiti di memoria
| Manca il file delle regole | Non esiste il file REGOLE.dat
| VARIABILI DA GESTIRE > 500 | Superato il limite delle variabili
| MATRICE TROPPO GRANDE | Il numero degli edit espliciti > 2000
| Variabile xx nella regola yy errata | La variabile non esiste in VARDOM.dat
| Regola con una sola variabile | La regola deve avere al minimo 2 variabili
| edit con variabili uguali (lista errata?) | Nella lista esiste una variabile presente anche nella regola
| Valore vv della variabile xx nella regola yy errata | Valore fuori dominio
| Edit contraddittori | Regole in contraddizione tra loro
derivaz (derivazione edit impliciti) | TROPPI EDIT DELLA STESSA CLASSE EQUIVALENZA | Il numero di edit ha superato i limiti previsti
| TROPPE CLASSI DI EQUIVALENZA | Il numero delle classi ha superato i limiti previsti
| TROPPI EDIT GENERATI | Il numero di edit ha superato i limiti previsti
| EDIT DEGENERE, edit generati da edit contraddittori, edit contraddittori edit xx degenere per unione uguali a meno di uno | L'edit risultante dalla generazione ha una sola variabile. Nella matrice iniziale - minimal set - ci sono edit generati da regole contraddittorie; è possibile risalire agli edit espliciti la cui unione ha formato un edit degenere (con una sola variabile) tramite i file GENER.dat e COMPLETO.dat ove è indicata sia la variabile generatrice che gli edit uniti tra loro (gli edit tra parentesi su COMPLETO o con -9999 su GENER sono stati eliminati, perché ridondanti, da nuovi edit) vedi §5.2.3.
genckf (check dei dati grezzi) | MANCA IL FILE DELLE VARIABILI | Non esiste il file VARDOM.dat
| MANCA IL FILE DELLE REGOLE | Non esiste il file REGOLE.dat
| NON ESISTE IL FILE DATI INPUT | Non esiste il file DATI.dat
| RECORD > 5000 CARATTERI | Il record in input > limite previsto
genimpn2 (imputazione) | solo forzature per strato xx senza esatti | Per lo strato xx non esistono esatti nel serbatoio. Diminuire le variabili strato
| MANCA FILE DELLE VARIABILI | Non esiste il file VARDOM
| Troppi domini. Matrice insufficiente | Superati i limiti di programma
| TROPPI EDIT. Matrice insufficiente | Superati i limiti di programma
| MANCA INSIEME COMPLETO - fatta la derivazione? | Non esiste il file MAXICE
| TROPPI EDIT. Matrice insufficiente | Superati i limiti di memoria del programma
| TROPPI CAMPI CHIAVE | Sono state definite più di 5 variabili chiave
| RECORD > 5000 CARATTERI | Il record in input è troppo lungo
| NON ESISTE IL FILE ERRATI | Non è stata effettuata la fase di check o i dati sono tutti esatti
| NON ESISTE IL FILE ESATTI | Tutti i dati dalla fase di check sono errati

5.5. L'integrazione verso l'approccio deterministico

Le funzioni che permettono l'integrazione automatica, dall'approccio di correzione probabilistica all'approccio di correzione deterministica, si trovano nella definizione delle variabili e nella definizione delle regole. In ognuna di queste due fasi di definizione è disponibile dal menu a tendina una funzione di "export verso deterministico" che permette di generare automaticamente i file ASCII, formattati come necessario, per i programmi eseguiti nell'approccio deterministico.

Nel capitolo ESEMPIO di APPLICAZIONE sono elencati ed eseguiti tutti passi necessari alla completa integrazione tra i tre metodi di correzione.

DEFINIZIONE delle VARIABILI (vedi §5.1.1):

Usando la funzione di "export" nella definizione delle variabili si otterrà un file formattato con le stesse variabili pronte per essere utilizzate dal modulo deterministico e, particolarmente, con il tipo di variabile impostato ad alfabetico "A".

DEFINIZIONE delle REGOLE (vedi §5.1.3):

Usando la funzione di "export" da "File" nella definizione delle regole (vedi fig.5.12), funzione attiva solo dopo avere effettuato il controllo delle regole, si otterranno invece:

- il file "fvardom.dat" formattato con le stesse variabili pronte per essere utilizzate dal modulo deterministico e, particolarmente, con il tipo di variabile impostato ad alfabetico "A";
- il file "fliste.dat" formattato delle liste di valori, delle variabili probabilistiche che superano 5 definizioni da-a, con le variabili lista numerate L00001, L00002 ecc. e i valori espressi in forma di lista dei domini;
- il file "fregout.dat" formattato per il deterministico, sia delle regole di incompatibilità probabilistiche trasformate in testo per l'approccio deterministico, sia di regole, appositamente aggiunte, che servono a controllare se i valori delle variabili sono fuori dominio; ricordo che queste ultime regole non esistono nell'approccio probabilistico.

Per sfruttare l'integrazione automatica, una volta utilizzata la suddetta funzione dalla definizione delle regole nell'approccio probabilistico, basterà, quindi:

- chiudere il progetto probabilistico
- riaprirlo scegliendo l'approccio deterministico.

Poi, nelle funzioni di definizione delle variabili, liste e regole di controllo si dovranno importare i relativi file dalla cartella di progetto e salvarli con la scelta di "Save and exit".

Fig 5.12 La scelta di export per l'integrazione verso deterministico