HW 02 - Variabili casuali ed importazione file di dati

Data di consegna: martedì 08 ottobre 2024

Introduzione

In questo compito utilizzerai i comandi utili per:

  • gestire una funzione relativa ad una distribuzione di probabilità (variabile casuale discreta) in R
  • gestire una funzione relativa ad una funzione di densità (variabile casuale continua) in R
  • rappresentare graficamente una distribuzione di probabilità usando la grafica base di R
  • rappresentare graficamente una funzione di densità usando la grafica base in R
  • importare dati in differenti formati

Obiettivi di apprendimento

Lo svolgimento di questo compito ti permetterà di:

  • utilizzare l’approccio basato sui progetti in RStudio
  • usare R per verificare alcune semplici proprietà di due variabili casuali note
  • usare R per costruire rappresentazioni grafiche
  • importare tabelle dati in differente formato

Istruzioni per l’uso

Alternativa

Puoi scaricare insieme i sette file in un formato compresso usando questo link

  • Rispondi ai vari punti salvando le risposte in un file R con il nome “hw02_cognome_nome.R”: ad esempio nel mio caso il nome del file sarebbe “hw02_vistocco_domenico.R”.

  • Per rispondere ad ogni punto inserisci un’etichetta di sezione (che puoi inserire nello script usando la combinazione di testi CTRL/CMD + SHIFT + R) utilizzando il punto cui sta rispondendo. Ad esempio, per rispondere al punto 1 del compito, usa un’etichetta di sezione:

    # PUNTO 1 ------------------------------------------------
  • Utilizza i commenti per rispondere alle domande in cui viene chiesta un’interpretazione da parte tua: lo script deve cioè essere funzionante quando si eseguono tutti i comandi con il pulsante Source.

  • Lo script viene valutato sia in base alla correttezza del codice che in base alla qualità (stile utilizzato per rendere lo script leggibile ed ordinato).

Esercizi

Nota

Ricordati di utilizzare i commenti per le risposte aperte.

Parte 1: Un esempio relativo ad una variabile casuale discreta

  1. Crea un oggetto n assegnandogli il numero 10 e un oggetto pi_greco assegnandogli il numero 0.5

  2. Crea un oggetto distr_binomiale cui assegni la distribuzione di probabilità di una variabile casuale binomiale con parametri \(n = 10\) e \(\pi = 0.5\), usando i due oggetti creati al punto precedente

Suggerimento

Sfrutta la pagina di help della funzione dbinom per esplorare come passare gli argomenti di input alla funzione

  1. Rappresenta graficamente la distribuzione di probabilità della variabile casuale binomiale creata al punto precedente (oggetto distr_binomiale)
Suggerimento

Sfrutta la funzione generica plot passando in input i valori che può assumere la variabile casuale binomiale (asse x) e le corrispondenti probabilità (asse y):

  • l’argomento type = "h" ti permette di ottenere un diagramma ad aste o a bastoncini
  • puoi utilizzare gli argomenti xlab e ylab per le etichette dei due assi, e l’argomento main per il titolo del grafico
  • sfruttando l’argomento lwd (linewidth) puoi regolare lo spesso delle aste del grafico
  • l’argomento col (color) ti permette di impostare il colore della linea (i colori possono essere fissati usando un numero o una stringa di testo. Trovi un elenco dettagliato su questo link)
  1. Ripeti i punti da 1 a 3 assegnando a pi_greco il valore 0.2

  2. Ripeti i punti da 1 a 3 assegnando a pi_greco il valore 0.8

  3. Cosa è possibile dire circa la forma della variabile casuale binomiale quando \(\pi\) cambia? Rispondi confrontando i tre grafici ottenuti. Prova a spiegare perché era un risultato che ci si poteva aspettare?

  4. Ripeti i punti da 1 a 3 assegnando a pi_greco il valore 0.2 e ad n il valore 100

  5. Cosa è possibile dire circa la forma della variabile casuale binomiale quando \(n\) cambia per un \(\pi\) fissato? Rispondi confrontando i due grafici relativi al valore \(\pi = 0.2\) per \(n = 10\) ed \(n = 100\). C’è qualche risultato “teorico” che giustifica questo andamento?

Parte 2: Un esempio relativo ad una variabile casuale continua

  1. Crea un oggetto ascisse contenenti una sequenza di 1000 numeri equispaziati da -10 a + 10
Suggerimento

Puoi sfruttare l’argomento length.out della funzione seq per fissare la lunghezza desiderata della sequenza invece del passo

  1. Crea un oggetto normal_uno in cui calcoli il valore della funzione di densità di una distribuzione normale con media `\(\mu = 0\) e scarto quadratico medio \(\sigma = 1\)
Suggerimento

Puoi sfruttare la funzione dnorm per calcolare la funzione di densità di una variabile casuale normale. L’oggetto normal_one deve essere un vettore con \(1000\) elementi

  1. Crea un oggetto normal_due in cui calcoli il valore della funzione di densità di una distribuzione normale con media `\(\mu = -1\) e scarto quadratico medio \(\sigma = 1\)

  2. Crea un oggetto normal_tre in cui calcoli il valore della funzione di densità di una distribuzione normale con media `\(\mu = 2\) e scarto quadratico medio \(\sigma = 1\)

  3. Crea un oggetto normal_quattro in cui calcoli il valore della funzione di densità di una distribuzione normale con media `\(\mu = 0\) e scarto quadratico medio \(\sigma = 2\)

  4. Crea un oggetto normal_cinque in cui calcoli il valore della funzione di densità di una distribuzione normale con media `\(\mu = 0\) e scarto quadratico medio \(\sigma = 0.5\)

  5. Rappresenta graficamente la funzione densità della variabile casuale normale_uno

Suggerimento

Sfrutta la funzione generica plot passando in input i valori che può assumere la variabile casuale normale (asse x) e i corrispondenti valori della funzione di densità (asse y):

  • l’argomento type = "l" ti permette di ottenere un diagramma a linee
  • puoi utilizzare gli argomenti xlab e ylab per le etichette dei due assi, e l’argomento main per il titolo del grafico
  • sfruttando l’argomento lwd (linewidth) puoi regolare lo spessore delle line
  • l’argomento col (color) ti permette di impostare il colore della linea (i colori possono essere fissati usando un numero o una stringa di testo. Trovi un elenco dettagliato su questo link)
  1. Sovraimponi sul grafico una seconda linea per rappresentare la densità memorizzata nell’oggetto normale_quattro usando una linea di colore differente
Suggerimento

Sfrutta la funzione generica lines per sovraimporre una linea all’ultimo grafico creato, passando in input i valori da rappresentare sui due assi e il colore da utilizzare per linea (il colore di default è il nero)

  1. Sovraimponi sul grafico una terza linea per rappresentare la densità memorizzata nell’oggetto normale_cinque usando una linea di colore differente

  2. Ripeti la costruzione della rappresentazione grafica partendo questa volta rappresentando prima l’oggetto normale_cinque (funzione plot) e poi i due oggetti normale_uno e normale_quattro (funzione lines)

  3. Cosa puoi concludere circa il metodo utilizzato da R per costruire il grafico confrontando il grafico ottenuto partendo dall’oggetto normale_uno e quello ottenuto dall’oggetto normale_cinque?

  4. Prova a costruire un grafico che permetta di visualizzare completamente le cinque funzioni di densità

Suggerimento

Puoi sfruttare gli argomenti xlim e ylim della funzione plot per impostare i limiti che R utilizzerà per la rappresentazione grafica

  1. Prova ad aggiungere una legenda che permetta a chi legge di capire l’associazione tra le varie curve rappresentate sul grafico e i corrispondenti parametri \(\mu\) e \(\sigma\)
Suggerimento

Puoi sfruttare la funzione legend per aggiungere e gestire una legenda su un grafico base R. Cerca sulla rete informazioni su come utilizzarla. Un breve tutorial è disponibile su questo link

Parte 3: Importazione di file dei dati in differente formato

Suggerimento

Per l’importazione dei dati usa l’interfaccia di RStudio per aiutarti a comporre propriamente i comandi richiesti

  1. Scrivi i comandi utili ad importare il file pizza.xls salvando il risultato in un oggetto pizza_xls
Suggerimento

Apri il file in un editor di testo (blocco note o altro editor) per capire il formato in cui sono stati salvati i dati così da impostare opportunamente gli argomenti della funzione di importazione

  1. Scrivi i comandi utili ad importare il file pizza.xls senza importare la colonna Product salvando il risultato in un oggetto pizza_xls_small

  2. Scrivi i comandi utili ad importare il file pizza.csv salvando il risultato in un oggetto pizza_csv

Suggerimento + Richieste
  • Apri il file in un editor di testo (blocco note o altro editor) per capire il formato in cui sono stati salvati i dati così da impostare opportunamente gli argomenti della funzione di importazione
  • Rispondere sfruttando la voce del menu Import Dataset + From text (readr) - Rispondi sfruttando la voce del menu Import Dataset + From text (base)
  • Rispondi sfruttando la funzione read.table {base} (sfrutta l’help per impostare opportunamente gli argomenti)
  1. Scrivi i comandi utili ad importare il file pizza.csv2 salvando il risultato in un oggetto pizza_csv2
Suggerimento + Richieste
  • Apri il file in un editor di testo (blocco note o altro editor) per capire il formato in cui sono stati salvati i dati così da impostare opportunamente gli argomenti della funzione di importazione
  • Rispondere sfruttando la voce del menu Import Dataset + From text (readr) - Rispondi sfruttando la voce del menu Import Dataset + From text (base)
  • Rispondi sfruttando la funzione read.table {base} (sfrutta l’help per impostare opportunamente gli argomenti)
  1. Scrivi i comandi utili ad importare il file pizza.unk1 salvando il risultato in un oggetto pizza_unk1
Suggerimento + Richieste
  • Apri il file in un editor di testo (blocco note o altro editor) per capire il formato in cui sono stati salvati i dati così da impostare opportunamente gli argomenti della funzione di importazione
  • Rispondere sfruttando la voce del menu Import Dataset + From text (readr) - Rispondi sfruttando la voce del menu Import Dataset + From text (base)
  • Rispondi sfruttando la funzione read.table {base} (sfrutta l’help per impostare opportunamente gli argomenti)
  1. Scrivi i comandi utili ad importare il file pizza.unk2 salvando il risultato in un oggetto pizza_unk2
Suggerimento + Richieste
  • Apri il file in un editor di testo (blocco note o altro editor) per capire il formato in cui sono stati salvati i dati così da impostare opportunamente gli argomenti della funzione di importazione
  • Rispondere sfruttando la voce del menu Import Dataset + From text (readr) - Rispondi sfruttando la voce del menu Import Dataset + From text (base)
  • Rispondi sfruttando la funzione read.table {base} (sfrutta l’help per impostare opportunamente gli argomenti)
  1. Scrivi i comandi utili ad importare il file pizza.unk3 salvando il risultato in un oggetto pizza_unk3
Suggerimento + Richieste
  • Apri il file in un editor di testo (blocco note o altro editor) per capire il formato in cui sono stati salvati i dati così da impostare opportunamente gli argomenti della funzione di importazione
  • Rispondere sfruttando la voce del menu Import Dataset + From text (readr) - Rispondi sfruttando la voce del menu Import Dataset + From text (base)
  • Rispondi sfruttando la funzione read.table {base} (sfrutta l’help per impostare opportunamente gli argomenti)
  1. Scrivi i comandi utili ad importare il file pizza_fxw.txt salvando il risultato in un oggetto pizza_fxw.txt
Suggerimento + Richieste

Questo file è un file di testo a formato fisso, ovvero ogni colonna occupa una larghezza prefissata in termini di numero di caratteri. Usa un editor di testo per valutare la larghezza di ciascuna colonna e sfrutta la funzione read.fwf per importare la tabella (sfrutta l’help per impostare opportunamente gli argomenti)

  1. Salva il contenuto dell’intero workspace su un file pizzeria.RData nella directory corrente

ADD-IN: Installazione di package

  1. Installa i package janitor, pak e skimr sul disco utilizzando la funzione install.packages o l’interfaccia grafica (scheda Packages + Install)

  2. Verifica che l’installazione del package janitor sia andata a buon fine caricando il package utilizzando la seguente funzione

library(janitor)

Se vedi un messaggio di questo tipo non ti spaventare (è tutto ok):


Attaching package: 'janitor'
The following objects are masked from 'package:stats':

    chisq.test, fisher.test
  1. Verifica che l’installazione dei package pak e skimr sia andata a buon fine caricando i due package utilizzando la funzione library. In questo caso sulla console non compare alcun messaggio ma semplicemente il cursore standard di R

  2. Stampa sulla console un sommario della tabella pizza_xls_small sfruttando le tre seguenti alternative:

  • la funzione summary (R base)
  • la funzione glimpse (package dplyr, installato con tidyverse)
  • la funzione skim (package skimr)
  1. Commenta brevemente i risultati (e le differenze) tra gli output di summary, glimpse e skim.

Consegna

Per inviare la tua soluzione:

  • Salva il file .R con le tue soluzioni
  • Chiudi il progetto RStudio
  • Comprimi in un file .zip la cartella associata al progetto
  • Carica il file .zip salvato in risposta al compito assegnato su Teams

Valutazione

Totale punti disponibili: 110 punti

Component Punti
Es 1 - 35 100
Workflow & formattazione 101

Footnotes

  1. La valutazione al “Workflow & formattazione” tiene conto del principio di riproducibilità del codice: lo script caricato deve funzionare senza errori su qualunque PC dando gli stessi risultati↩︎