6. L’approccio di correzione deterministica

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

Le regole di controllo, o edit, in un piano di compatibilità possono essere distinte in:

- regole formali, che derivano dalla struttura del modello, cioè direttamente dalle norme di compilazione e dai "percorsi interni", o "salti", del modello;
- regole sostanziali, che derivano da considerazioni di tipo statistico o matematico, o da conoscenze specifiche a priori del fenomeno oggetto di rilevazione.

E' chiaro che la natura degli edit, sia formali che sostanziali, di un piano di compatibilità è strettamente dipendente dal tipo di variabili, qualitative o quantitative, oggetto di verifica. Mentre nel caso di variabili qualitative, infatti, tali edit hanno la forma di relazioni logiche tra le variabili, nel caso di variabili quantitative le regole di incompatibilità possono essere anche espresse in forma di relazioni statistico/matematiche.

Una volta individuati i record i cui valori violano uno o più vincoli del piano di compatibilità, il problema diventa la localizzazione delle variabili i cui valori devono essere considerati errati e, in quanto tali, da sottoporre ad un passo di correzione.

Sia il problema della localizzazione dei record errati, sia quello dell'individuazione delle variabili che, per ogni record errato, sono da considerarsi responsabili della violazione di una o più regole di compatibilità, possono essere risolti adottando un approccio di tipo deterministico.

Per ogni record, o per gruppi di record, vengono cioè applicate regole che, se verificate, segnalano sicuramente la presenza di errori.

Ad esempio:

SE (sesso = maschio E professione = casalinga) ALLORA sussiste incompatibilità x.

Una regola di questo tipo non individua, di per sé, l'errore che ne causa l'attivazione: infatti, il valore non vero può celarsi in una o nell'altra delle variabili, o in entrambe.

Nell'approccio deterministico, una situazione di incompatibilità è seguita, contestualmente, dall'indicazione delle variabili che debbono considerarsi errate, e, in quanto tali, da imputare. Nell'esempio considerato avremo, per ipotesi:

SE (sesso = maschio E professione = casalinga) ALLORA sesso ¬ femmina

il che significa che, se in un record è attivata la condizione di incompatibilità "maschio e casalinga", nella regola stessa viene indicata l'azione da effettuare per correggere l'errore, che consiste nell'imputare la modalità "femmina" alla variabile sesso.

Generalizzando, una volta attivate, mediante le regole di compatibilità, una o più condizioni di errore in un dato record, sono determinate a priori le azioni da intraprendere per riportare il medesimo record in una situazione di correttezza.

Le procedure deterministiche sono generalmente costituite da regole di imputazione deterministica, dette R.I.D., del tipo:

SE (incompatibilità) ALLORA (localizzazione e correzione errore)

La condizione di incompatibilità esprime relazioni inammissibili intercorrenti tra due o più variabili; la localizzazione consiste nell’indicazione di quali variabili considerare errate e quali valori assegnare per correggerle. Un record, durante l'esecuzione della procedura di correzione, potrà causare l'attivazione delle regole in corrispondenza delle quali è verificata la parte SE: in tal caso, eventualmente, saranno modificate le variabili indicate nella parte ALLORA assegnando loro valori predefiniti o scelti in altro modo.

In CONCORD le regole di imputazione deterministica possono essere del tipo:

SE (incompatibilità) [ALLORA (localizzazione e correzione errore)].

Può essere, cioè, definita la sola incompatibilità applicando, eventualmente, la localizzazione e correzione dell'errore.

6.1. La fase di definizione

Figura 6.1 - Le funzioni di definizione

6.1.1. Definizione delle variabili

Vengono trattate sia variabili qualitative che quantitative registrate in un file in ASCII con caratteri di tipo testo su record di lunghezza fissa. Per definire le variabili è necessario avere il piano di registrazione, del questionario in esame, e il tracciato record nel quale siano indicate le posizioni iniziali e le lunghezze dei vari campi.

E' possibile definire solamente le variabili che vogliamo sottoporre a controllo per un massimo di 500; il resto del record verrà ricopiato senza modifiche.

Per ogni variabile e' necessario indicare:

- NOME: univoco e lungo al massimo 6 caratteri (esempio ETA,Q12,COL1_6,...); il nome deve essere univoco anche rispetto ai nomi di eventuali liste (vedi §6.1.2);
- TIPO: "N" per variabile numerica, "A" per variabile alfanumerica;
- POSIZIONE: cioè la colonna del tracciato record dove inizia la variabile, in un valore compreso tra 1 e 9999;
- LUNGHEZZA della variabile: da 1 a 18 caratteri per variabile numerica; da 1 a 20 caratteri per variabile alfabetica;
- NUMERO DECIMALI da 0 a 4 se la variabile è numerica (0 per default).

Esempi di variabili:

ETA Alfabetica, posizione 1, lunghezza 1;
SESSO Alfabetica, posizione 5, lunghezza 1;
REDDIT Numerica, posizione 345, lunghezza 7, decimali 0;

Le posizioni e lunghezze si possono sovrapporre permettendo la ridefinizione.

I dati sui record riferiti ad una variabile numerica devono essere allineati a destra e completati con zeri iniziali; una variabile definita numerica "N" permette algoritmi di tipo aritmetico nelle regole di controllo e di correzione.

Nel riquadro variabile:

"add/mod" salva le modifiche di una variabile;
"clear" annulla tutte le modifiche di una variabile.

Da menu a tendina "File": "View" mostra tutte le variabili ordinate per posizione;
"Exit" esce senza salvare le modifiche;
"Save and exit" salva le modifiche sul file esterno formattato "fvardom.dat";
"Import" legge le variabili da un file esterno formattato "fvardom.dat". 6.1.2. Definizione delle variabili di lista

Le variabili lista, create per agevolare la scrittura delle regole, sono variabili associate a liste di valori, oppure associate ad un file esterno, ordinato in senso ascendente per la zona del record interessata ai valori da prendere in considerazione.

Definendo una variabile tipo lista possiamo poi, nelle regole, confrontarla con qualsiasi variabile di tipo alfanumerico "A", e il confronto verrà automaticamente effettuato con tutti i valori della lista.

La variabile lista deve essere inserita con:

- NOME, univoco e lungo al massimo 6 caratteri univoco anche rispetto ai nomi delle variabili. (esempio ETA, Q12, COL1_6, ecc...).

Se la variabile è associata ad un file che contiene i valori allora:

- NOME del FILE compreso il percorso;
- POSIZIONE, posizione di partenza sul record della zona contenente il valore;
- LUNGHEZZA, lunghezza del campo;

e fare attenzione che il file sia ordinato in senso ascendente per queste posizioni, altrimenti si avrà un messaggio di errore in esecuzione della fase di controllo.

Esempio di variabile lista associata ad un file esterno:

Nome lista: LISCOM; File di riferimento: C:\fdl\comuni.dat; Posizione: 3; Lunghezza: 6
la variabile lista si chiama "LISCOM" e i valori di lista si trovano registrati nel file "C:\fdl\comuni.dat" nelle posizioni 3-8 di ogni record.
Nelle regole potremo scrivere:
[se] COMUNE = LISCOM e in esecuzione la variabile COMUNE sarà confrontata con tutti i record del file "C:\comuni\comuni.dat" da posizione 3 a 8;

Se la variabile lista non è associata ad un file che contiene i valori allora:
inserimento della variabile lista:

- scrivere il nome della lista;
- inserire i valori associati scrivendo nel relativo campo della zona "VALORE" il valore e poi invio o "add/mod";
- "add/mod" nella zona LISTA

variazione del nome della lista:

- scegliere la variabile lista;
- scrivere il nuovo nome;
- "add/mod" nella zona LISTA

cancellazione della lista:

- scegliere la lista;
- "delete" nella zona LISTA.
- "clear" nella zona LISTA annulla tutte le variazioni.

Attenzione! Modificando o cancellando il nome di una lista si perdono tutti i valori associati; inoltre bisogna considerare anche le regole in cui essa figurava per evitare errori o inesattezze quali valori inesistenti, lista inesistente, valori diversi da ecc.. Quindi è necessario ricontrollare le regole .

Valori di una variabile lista:
inserimento dei valori:

- scrivere nel campo il valore per un massimo di 20 caratteri;
- invio oppure "add/mod" nella zona "VALORE".

variazione dei valori:

- scegliere il valore da modificare;
- scrivere il nuovo valore per un massimo di 20 caratteri;
- "add/mod" nella zona "VALORE".

cancellazione dei valori:

- scegliere la variabile lista;
- scegliere il valore da modificare;
- "delete" nella zona "VALORE".

"clear" annulla tutte le operazioni effettuate.

Alla fine delle operazioni "add/mod" nella zona "LISTA" e il nome della lista viene mostrato nell'apposita listbox;

Da menu a tendina "File": "Save and exit" salva, nella cartella di progetto, i nomi delle liste sul file "fvardom.dat" e salva gli eventuali valori associati nel file "fliste.dat";
"Exit" esce senza salvare le modifiche;
"Import" importa le variabile da un file esterno "fvardom.dat" e "fliste.dat" scelti con apposita maschera. 6.1.3. Definizione delle regole di incompatibilita'

Le regole di controllo definite per l'approccio deterministico, similmente a quelle dell'approccio probabilistico, sono regole di incompatibilità; bisogna, quindi, descrivere una condizione che, se verificata, determina un errore.

Una regola di incompatibilità è formata da un'espressione di variabili, costanti e operatori, unite da "and" o "or" e racchiuse, se necessario, tra vari ordini di parentesi "( )".

La scrittura di una regola di incompatibilità segue, praticamente, la sintassi di uno statement "IF", non nidificato, del SAS base con omessa la "IF" iniziale.

Le regole di incompatibilità che iniziano con un "#" sono considerate commenti.

Gli operatori che, in una regola, mettono in relazione tra loro variabili e costanti sono di tipo:

- operatore aritmetico:

- ** indica l'elevazione a potenza;
- * indica prodotto;
- / indica rapporto;
- + indica somma;
- - indica sottrazione.

- operatore logico:

- > oppure gt per indicare "maggiore di";
- < oppure lt per indicare "minore di";
- = oppure eq per indicare "uguale a";
- ne per indicare "diverso da";
- ge per indicare "non minore di";
- le per indicare "non maggiore di".

- operatore booleano:

- & oppure and per indicare contemporaneità;
- | oppure or per indicare alternatività.

Gli operatori, nello sviluppo di una regola, vengono considerati nell'ordine di priorità di descrizione, quindi verranno considerati prima gli operatori aritmetici e, nel loro ambito, prima la potenza, poi il prodotto ecc., poi quelli logici e, nel loro ambito, prima il ">" poi "<" e così via e, per ultimi, gli operatori booleani.

Si possono usare indifferentemente i simboli doppi, quali ">" o "gt", "&" o "and", ecc.

Esempi di regole:

1) #------ esempio di regola ------------- (commento)
2) sesso = 2 and profes = list1
(se sesso uguale a 2 e professione uguale a un valore contenuto nella lista list1 allora il record è errato)
3) ateco ne listac and ((totdip > 1200 & salar < 1200000) or (totdip < 1201 & salar < 1100000))
(se ateco diverso dai valori della lista listac e, il totale dei dipendenti è maggiore di 1200 e il salario minore di 1200000, oppure il totale dei dipendenti è minore di 1201 e il salario minore di 1100000 allora il record è errato).

Per inserire una regola:

- è possibile scrivere direttamente nell'area apposita dando poi invio;

oppure:

- scegliere la variabile tra quelle mostrate o il simbolo "(";
- scegliere l'operatore necessario tra quelli mostrati;
- scegliere una seconda variabile o la parentesi o una costante (fare attenzione che se la costante si riferisce ad una variabile di tipo "A" - alfanumerica- deve essere inclusa tra singoli apici, ad esempio 'costante' ) e così via;
- alla fine scegliere "add";

La regola viene subito controllata sintatticamente e, se non ci sono errori, aggiunta alla fine dell'insieme di regole, altrimenti viene segnalato in chiaro l'errore.

Attenzione! Per inserire una nuova regola dopo una determinata regola selezionare quest'ultima con un solo click del mouse;

Per modificare una regola:

- scegliere la regola con doppio click del mouse;
- modificare la regola evidenziando con il mouse la zona da variare;
- alla fine "modify"; la regola viene controllata e, se non ci sono errori, sostituita.

Attenzione! La modifica potrebbe influenzare eventuali regole di correzione associate.

Per cancellare una regola:

- selezionare la regola da cancellare e poi "delete";

Attenzione! Verranno cancellate anche le eventuali regole di correzione associate.

"clear" annulla le modifiche della regola.

Da menu a tendina "File": "Save and exit" registra, nella cartella di progetto, le operazioni effettuate sul file esterno "fregout.dat" che conterrà le regole in chiaro, e sul file esterno "fregole.dat" che conterrà invece le regole codificate sotto forma di matrice, interpretabile dai moduli del programma di controllo deterministico; inoltre registra il file esterno "FSCREEN.dat" che può essere utilizzato per il controllo interattivo dei dati con la funzione gestione dati (vedi §8.1.1);
"Exit" esce senza salvare le modifiche;
"Import" importa le regole da un file esterno "fregout.dat" scelto con apposita maschera. 6.1.4. Definizione delle regole di correzione

Nell'approccio deterministico è fondamentale poter far seguire alla condizione "IF" anche il relativo "THEN", con il quale assegnare valori ad una o più variabili indicate dall'utente.

Quindi una regola di correzione è l'assegnazione di un'espressione aritmetica o di una costante o di una variabile ad una data variabile, al verificarsi di un errore determinato da una regola di incompatibilità.

Scegliendo questa funzione appare una maschera che elenca, nel listbox "REGOLE" (vedi fig.6.2), le regole di incompatibilità definite nella funzione precedente:

Per inserire una regola di correzione:

- selezionare nella zona suddetta, con un click del mouse, la regola di incompatibilità per la quale effettuare la correzione dalla lista delle regole;
- selezionare la variabile da modificare tra quelle mostrate nel listbox "Variabili"; il simbolo di assegnazione "=" verrà inserito automaticamente dal programma;
- scrivere la regola utilizzando variabili ed operatori.

Esempi di regole di correzione:

1. eta = 1998 - datana (che significa l'età sarà uguale a 1998 - data di nascita);
2. ateco = '10101' (che significa mettere il valore 10101 nella variabile ateco).

La regola viene controllata sintatticamente al momento dell'inserimento e la numerazione associata è automatica.

E' possibile inserire più correzioni per una stessa incompatibilità, in questo modo si possono cambiare i valori di più variabili in funzione di un singolo errore.

Una variabile corretta da una regola di correzione rientra nei controlli successivi nel passo di check.

Per modificare una regola di correzione:

- selezionare la regola di correzione da modifica;
- modificare la regola;
- premere "add/mod".

Per cancellare una regola di correzione:

- selezionare la regola da cancellare;
- premere "delete".

"clear" annulla le modifiche della regola.

Da menu a tendina "File": "Save and exit" registra le operazioni effettuate sul file esterno fdetout.dat, che conterrà le regole in chiaro, e sul file esterno fregdet.dat, che conterrà invece le regole codificate sotto forma di matrice interpretabile dai moduli del programma da correzione deterministico; i file verranno registrati nella cartella di progetto;
"Exit" esce senza salvare le modifiche;
"Import" importa le variabili dal file esterno "fdetout.dat" scelto con apposita maschera.

Figura 6.2 - La maschera per la gestione delle regole di correzione

6.2. Le funzioni

Fig 6.3 La scelta della funzione per il check dei dati

6.2.1. Check e correzione dei dati

sono possibile tre scelte:

> 1) CHECK

Il check e l'eventuale correzione dei dati, eseguibile dopo la fase di definizione delle variabili, liste, regole di incompatibilità e regole di correzioni, separa i dati grezzi, scelti con apposita maschera dall'utente, in dati esatti e dati errati, verificando per i record di input, l'incompatibilità descritta nelle regole relative.

Scegliendo la funzione "Check", il programma chiede di selezionare il file esterno di input per il passo di check.

Una volta selezionato con "apri", o cliccando due volte sul nome del file scelto, viene generato nella cartella di progetto il file "tabgran.prm" che contiene il nome dei file che saranno utilizzati nel passo di check, e viene eseguito il programma di controllo e contemporanea correzione.
I record del file di input devono essere di lunghezza fissa.
Nel passaggio di check se anche una sola incompatibilità è vera, e non esistono correzioni per quella incompatibilità, il record viene registrato nel file degli errati "ferrati.dat" e il numero della regola, che ha determinato l'errore, viene registrato nel file "ferrori.dat".
Se invece esistono regole di correzioni per l'incompatibilità verificatasi, i record verranno registrati nel file "fcorretti.dat".

In questo passo, che esegue il programma "granada.exe", vengono usati i seguenti file esterni i cui nomi sono registrati nel file "tabgran.prm":

- fvardom.dat - variabili;
- fliste.dat - liste di valori;
- fregole.dat - regole di incompatibilità in codice;
- flischk.dat - lista delle regole di incompatibilità verificate;
- fregerr.dat - parallelo a ferrati.dat contenente per ogni record errato i numeri delle regole che hanno determinato l'errore;
- fsyschk.dat - con i contatori;
- fdati.dat - input dati grezzi;
- fesatti.dat - dati esatti;
- ferrati.dat - dati errati non corretti;
- fregdet.dat - regole di correzione in codice;
- fregerc.dat - parallelo a fcorretti.dat;
- fcorrett.dat - dati corretti;
- fregout.dat - regole di incompatibilità;

Alla fine del passaggio vengono mostrati i contatori dei record letti, esatti, errati e corretti e la lista delle regole di controllo attivate, con il relativo numero di regola e quante volte ogni regola è stata attivata.

> 2) VISTA REGOLE IN USO

La scelta della funzione "Vista delle regole in uso" mostra le regole numerate registrate sul file esterno "fregout.dat".
Se una regola di incompatibilità è corredata da una o più regole di correzione, regole che sono registrate nel file esterno "fdetout.dat", queste ultime vengono mostrate precedute da un "THEN" sotto la relativa regola di incompatibilità.

3) STATISTICA ERRORI

I contatori e la lista delle regole di incompatibilità attivate, vengono mostrate automaticamente alla fine dell'esecuzione del programma di check e correzione dei dati.
E' possibile rivedere la lista delle regole di incompatibilità attivate, che sono registrate sul file esterno "flischk.dat" nella cartella di progetto, scegliendo la funzione "Statistica degli errori".

Il file esterno "fsyschk.dat" contiene la lista dei contatori dei record letti, esatti, errati e corretti dell'ultimo passaggio di check effettuato.

6.3. Analisi dei risultati

6.3.1. 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, prima della correzione, e dei dati esatti più i dati corretti, dopo la correzione.

- Frequenza errori:

Viene mostrata la distribuzione di frequenza delle regole di incompatibilità verificate.

6.4. Errori di esecuzione

Errore | Causa
Errore apertura file xxx: | Il file xxx non esiste.
Lista non ordinata | Il file delle liste non è ordinato per posizione e lunghezza e vengono mostrati i due valori della lista non ordinati.
Liste troppo numerose | I valori di lista superano i 10000.

6.5. L'integrazione verso la correzione con donatore

L'integrazione, dall'approccio di correzione deterministica alla correzione effettuata con il metodo del donatore, si attua utilizzando le regole di correzione deterministica.

Vediamo come è possibile applicare l'integrazione tra i due metodi.

Dopo aver effettuato il passaggio di controllo deterministico "senza" correzioni, bisogna analizzare i risultati ottenuti e decidere quali sono le variabili che vogliamo, successivamente, sottoporre a correzione tramite donatore.

Per queste sole variabili scriviamo le regole di correzione che, in questo caso, possiamo definire "regole di impostazione dei caratteri di riconoscimento" poiché serviranno solamente a cambiare il valore delle variabili da correggere in caratteri specifici (vedi §7.1.1).

Una volta scritte le regole di correzione, possiamo nuovamente effettuare il passaggio di controllo e, questa volta di correzione deterministica o, se vogliamo, di impostazione, e otterremo il file dei dati "corretti" o, meglio, "flaggati", nel quale le variabili da sottoporre successivamente a correzione con donazione saranno chiaramente individuabili.

Chiudiamo l'approccio deterministico e lo riapriamo con il donatore.

Nella definizione delle variabili di correzione (vedi §7.1.1) scegliamo, tramite l'apposita listbox, le variabili da correggere tra quelle mostrate, che sono tutte le variabili definite nell'approccio di correzione deterministico e che, a loro volta, possono essere state migrate dall'approccio probabilistico, completando così l'integrazione tra i tre metodi.

Esempio:

Dopo aver effettuato un passaggio di check deterministico dei dati decidiamo di correggere le variabili CAROCC , POSPRO e HADIP.
Decidiamo di assegnare alla prima il carattere "§", alla seconda i caratteri "@@" e alla terza il carattere "#".
Attenzione! Il carattere scelto deve essere dato per tutta la lunghezza della variabile; potremmo assegnare qualsiasi carattere, anche semplici lettere maiuscole o minuscole.
Scriveremo allora le seguenti regole di correzione:

CAROCC = '§'
POSPRO = '@@'
HADIP = '#'

selezionando opportunamente le regole di incompatibilità in funzione delle quali vogliamo che vengano corrette le variabili.

Eseguiamo il passaggio di controllo e correzione.

Alla fine del passaggio il file "fcorretti.dat" avrà le variabili impostate ai caratteri prescelti e potrà essere usato per la correzione tramite donatore (vedi cap.7).

Fig 6.4 La maschera per la gestione delle correzioni