Analisi dei dati ed estrazione della conoscenza

CLEI/S. 6 CFU.

A.A. 2008/2009

prova pratica dell'8 Settembre 2009


Modalità di svolgimento

La prova pratica è strettamente individuale. Qualora venissero consegnati degli elaborati simili, più di quanto è lecito attendersi da soluzioni indipendenti allo stesso problema, gli stessi verrebbero annullati. Non saranno ammesse motivazioni del tipo "abbiamo già provato a risolvere un esercizio simile, per questo i nostri compiti sono uguali". Se davvero avete scritto del codice R che risolve un esercizio simile, e lo volete utilizzare come base di partenza per questo, siete liberissimi di farlo, purché consegniate entro 15 minuti dall'inizio dell'esame il suddetto codice al docente.

Per la consegna dell'elaborato, utilizzare il modulo web disponibile al sito di sottomissione on-line. L'invio del file deve avvenire entro le ore 12:00, secondo l'orario indicato nel sito stesso.

Testo del compito

Il compito consiste di due esercizi. Il voto massimo che si può ottenere risolvendo correttamente il primo esercizio è 24, mentre il voto massimo per una corretta soluzione del secondo esercizio è 30 e lode. Consiglio vivamente a tutti di risolvere prima l'esercizio n. 1 e solo successivamente passare al numero 2.

  1. Scrivere una funzione replace.na che prende un unico argomento v, vettore numerico, e restituisce lo stesso vettore v, rimpiazzando però tutti i valori NA con la media dei valori di v (ovviamente la media dei soli valori diversi da NA). Ad esempio:
    > replace.na(c(1,3,NA,4,NA))
    [1] 1.000000 3.000000 2.666667 4.000000 2.666667
          
  2. Scrivere una funzione stratified.replace.na che prende due argomenti, un vettore numerico v e un vettore label di etichette. I due vettori vanno visti come attributi diversi delle stesse entità. La nuova funzione si comporta esattamente come replace.na, ma anziché rimpiazzare ogni NA con la media di tutti i valori di v, lo rimpiazza con la media dei valori che hanno la stessa etichetta. Ad esempio:
    > stratified.replace.na(c(1,3,NA,4,NA),c("A","A","A","A","A"))
    [1] 1.000000 3.000000 2.666667 4.000000 2.666667   
    > stratified.replace.na(c(1,3,NA,4,NA),c("A","A","A","B","B"))
    [1] 1.000000 3.000000 2.000000 4.000000 4.000000   
          
    Notare che nel primo caso il risultato è uguale a quello di replace.na, poiché tutti i valori hanno la stessa etichetta, ma nel secondo caso il primo NA ha etichetta A, quindi è rimpiazzato con la media di 1 e 3, mentre il secondo NA ha etichetta B.

    Per svolgere questo esercizio puà essere utile la funzione tapply.