Laboratorio 1
Installazione del pacchetto ISLR
Prima di vedere i codici di questa lezione, dobbiamo installare la libreria legata al nostro libro di testo, che è il pacchetto ISLR in cui sono contenuti molti data set che analizzeremo. Come faccio a installare il pacchetto? Nella barra in alto clicco pacchetti, installa pacchetti ISLR. Una volta installato, per poterlo utilizzare lo devo caricare attraverso questa funzione: library(ISLR).
Importare un file di dati
Oggi ci occupiamo di capire come fare ad importare un file di dati, come aprire un dataset e come poter effettuare le prime analisi preliminari dei nostri dati. Noi lavoreremo con dei data.frame che sono dei data set composti da una lista di vettori della stessa lunghezza ma sono di classi diverse. Saranno della stessa lunghezza perché ciascun vettore rappresenterà una variabile e noi riceveremo il valore di queste variabili con le stesse unità statistiche. Queste variabili però possono essere di diversa natura, potrebbero essere qualitative o quantitative, e quindi i vettori saranno di classi diverse.
1. Importare i dati
- read.table: mi consente di importare i file di dati salvati in formato testo; in particolar modo con questa funzione importeremo il file Auto.data.
- read.csv: mi consente di importare dei file csv; in particolar modo con questa funzione importeremo il file Auto.csv.
Lanciamo il codice: Auto <- read.table("Auto.data", header=T, na.strings="?"). Così facendo ho importato un file Auto.data, nella parentesi tonda troviamo gli argomenti richiesti dalla funzione read.table: il primo argomento è il nome del file, il nostro file si chiama Auto.data e gli altri due argomenti, che non sono in realtà necessari cioè li scrivo solo se sono necessari, sono ad esempio header=T che mi dice semplicemente che io sto dicendo ad R che quando mi importa il file deve riconoscere che sulla prima riga del mio dataset sono elencati i nomi delle variabili del data set (e non i dati), se invece scrivo na.strings="?" uguale a qualche cosa allora semplicemente ad R che nel mio dataset ci sono dei dati mancanti e dico ad R come sono segnati i dati mancati nel mio dataset, in questo caso gli dico che i dati mancanti sono segnati con un punto di domanda. Il dataset che importo lo chiamo Auto, se lo scrivo con la lettera maiuscola, lo devo sempre scrivere così altrimenti R mi segnerà errore.
Per poter visualizzare il dataset che ho appena importato, devo scrivere fix(Auto): con questo comando mi si apre una finestra nel quale è riportato il dataset che ho importato.
Vediamo ora come fare ad importare un file csv, lanciamo la funzione: Auto <- read.csv("Auto.csv", header=T, na.strings="?"). In questo caso gli argomenti sono identici a sopra, cambia il formato del testo che in questo caso è csv, per visualizzare il dataset devo scrivere anche in questo caso fix(Auto) e si apre la finestra identica a prima. Questo dataset che abbiamo importato dalla nostra cartella esterna, è in realtà un dataset già contenuto nella libreria ISLR quindi non dobbiamo caricarlo dall’esterno ma possiamo utilizzare il comando data(nome del dataset) quindi in questo caso dovremo scrivere data(Auto).
2. Dimensione del dataset
Proviamo ora a fare delle prime analisi del dataset e in particolar modo proviamo ad analizzare la dimensione del data con la funzione dim(nome del dataset) ossia dim(Auto) che ci permette di individuare il numeri di righe e di colonne del dataset. Lanciandola su R, il programma ci restituisce un output, in questo caso [1] 397 9 ossia il numero delle righe è 397 ossia abbiamo 397 unità statistiche e 9 è il numero delle colonne ossia 9 variabili.
All’interno del nostro dataset sono però presenti anche dei dati mancanti, quindi io volendo attraverso i comandi posso eliminare i dati mancanti ossia eliminare quelle unità statistiche che contengono dei dati mancanti: Auto = na.omit(Auto) e poi riscrivendo dim(Auto), in questo caso ci esce l’output [1] 392 9. Per analizzare il dataset proviamo a capire cosa contiene questo dataset, visto che questo dataset è già contenuto nella libreria ISLR, attraverso la funzione ?Auto un help di R che mi permette di capire il contenuto del dataset dove su google mi si apre una finestra con tutte le informazioni.
3. Nome delle variabili contenute nel dataset
Cominciamo ora a vedere il contenuto di questo dataset, attraverso la funzione names(Auto) io posso capire il nome delle variabili contenute nel dataset. Con la funzione str(Auto) invece vado a vedere la struttura del mio dataset, cioè mi dice che il nostro dataset è un data frame che contiene 392 osservazioni con 9 variabili, viene fatto un elenco delle variabili, le variabili sono precedute da un simbolo che è il $ che indica come poter fare per accedere a quelle variabili partendo dal dataset Auto. Di fianco al nome delle variabili abbiamo le classi e vediamo che quasi tutte le variabili sono numeriche, tranne l’ultima che è fattoriale.
4. Come accedere alle variabili (colonne) o ai dati del data frame
Per potere accedere alle variabili noi dobbiamo utilizzare questo codice: "nomedataframe$nomevariabile". Per esempio se io scrivo Auto$mpg sto dicendo ad R di darmi l’accesso per la prima variabile. Con il comando invece Auto$mpg[1] vado a selezionare un solo valore, quello di posizione 1, del primo vettore contenuto nel dataset Auto. Con Auto[ ,1] indico che voglio avere accesso alla prima colonna del dataset Auto e tutte le righe di questa prima colonna. Se voglio avere alla prima riga quindi voglio vedere le risposte di ciascuna variabile per la prima unità statistica devo fare Auto[1, ]: vengono riportati i valori per ciascuna variabile contenuta nel dataset ma solo per la prima riga ossia per la prima unità statistica. Con Auto[1,1] chiedo a R ad avere accesso al primo elemento della prima colonna.
Io posso anche essere interessata a fare delle operazioni di selezione un po’ più complesse, per esempio con questo codice pippo <- Auto$mpg[Auto$cylinders > 5] sto andando a creare l’oggetto pippo, in che modo? Io vado a selezionare dal dataset la variabile mpg ma di questa variabile io non voglio tutte le osservazioni, ma voglio solo quelle che soddisfano una determinata condizione che è quella segnata nella parentesi quadra. Cioè con il comando Auto$mpg vado a selezionare la prima colonna del nostro data frame, quindi variabile mpg, ma io non voglio tutte le righe ma voglio solo quelle che soddisfano questa condizione [Auto$cylinders > 5], cylinders > 5 significa che io voglio selezionare solo i valori della variabile mpg tale per cui le unità statistiche avranno un numero di cilindri maggiore a 5. Questo nuovo vettore lo chiamo pippo. Dopo aver lanciato il codice pippo <- Auto$mpg[Auto$cylinders > 5], devo scrivere il nome del nuovo vettore pippo e mi esce l’output di questo nuovo oggetto.
5. Grafici
Quando si effettua un’analisi di un dataset, di solito la prima cosa che si fa è quella di disegnare un grafico, i grafici che possiamo fare solo quelli per esempio a dispersione e quindi possiamo rappresentare i nostri punti osservati in un grafico a dispersione per visualizzare l’andamento della nostra nuvola dei punti. Per fare i grafici a dispersione possiamo utilizzare il comando plot(nome del dataset) ad esempio: plot(Auto) faccio il grafico a dispersione per tutte le possibili coppie di variabili contenute all’interno del mio dataset. Metterò sull’asse delle ascisse i valori di una variabile, sull’asse delle ordinate i valori di un’altra variabile e disegnerò con un puntino tutte le coppie osservate visualizzando così la nostra nuvola di punti per capire se c’è una relazione tra le due variabili considerate: esempio se all’aumentare dei valori assunti dalla variabile che sta sull’ascisse, aumentano o diminuiscono i valori assunti dalla variabile che sta sulle ordinate. Noi possiamo fare questo grafico solo se le variabili sono di tipo quantitativo, nel nostro caso la variabile 9 è una variabile qualitativa per cui quando faccio il grafico dovrei escluderla, come faccio? Attraverso il comando plot(Auto[ ,-9]) ossia specifico nella parentesi quadra che voglio eliminare una colonna di questo dataset e lo faccio mettendo -9.
Se invece voglio escludere due variabili uso questo comando: plot(Auto[ ,-c(8,9)]) ossia utilizzo il segno – e c per colonne per indicare quali colonne voglio eliminare nella costruzione del grafico. Io potrei fare il grafico a dispersione solo per un coppia di variabili, all’interno della funzione plot scriverò il nome della funzione che voglio mettere sull’asse delle ascisse e il nome della variabile che voglio mettere sull’asse delle ordinate e in questo caso avrò: plot(Auto$cylinders, Auto$mpg). Volendo io potrei anche evitare di fare questa operazione ossia di usare nome del dataset $ nome della variabile per richiamare le variabili: per fare questo devo lanciare il comando attach(Auto) in cui R memorizza il nome delle variabili contenute nel dataset, dataframe Auto, e quindi così facendo non sarà più necessario utilizzare nome del dataset $ nome della variabile e quindi possiamo evitare di usare il $. Per esempio possiamo lanciare il comando plot(cylinders, mpg) per fare il grafico. Io volendo posso fare anche delle operazioni per abbellire il grafico e per renderlo interattivo: con questa funzione identify(cylinders, mpg, name) io posso rendere il grafico interattivo cliccando le unità statistiche che compongono i punti del mio grafico e R mi mostrerà il nome dei veicoli perché all’interno della funzione ho esplicitato la variabile name.
La funzione pairs è un’altra funzione che mi permette di fare grafici a dispersione, come la funzione plot di prima. Se io lancio il comando pairs(Auto) R mi fa il grafico a dispersione di tutte le coppie di variabili presenti nel dataset Auto. Se io invece voglio selezionare solo alcune variabili del dataset con le quali voglio utilizzare il grafico a dispersione, utilizzo il comando: pairs(~mpg+displacement+horsepower+acceleration+weight, Auto) e metto come argomento il nome delle variabili che voglio utilizzare separati con un simbolo + e all’inizio devo utilizzare il simbolo tilde e alla fine il nome del dataset.
Oltre questi grafici a distorsione io posso essere interessata anche a fare altri tipi di grafici: esempio box plot e istogrammi. Per fare un grafico box plot utilizzo il comando boxplot(nome della variabile) quindi per esempio boxplot(Auto$mpg) oppure usando il comando attach(Auto) scriverò boxplot(mpg). I box plot mi danno un’indicazione sintetica della distribuzione della variabile considerata. Io posso creare dei box plot della variabile mpg incondizionatamente dai valori assunti da un’altra variabile: esempio con questo comando boxplot(Auto$mpg ~ Auto$cylinders, col="red", varwidth=T) voglio costruire il boxplot per la variabile mpg condizionatamente dai valori assunti dalla variabile cylinders quindi negli argomento metterò il nome della variabile per la quale voglio costruire il boxplot, poi il nome della variabile rispetto alla quale voglio condizionare i valori assunti dalla variabile mpg e poi ci sono dei comandi per “abbellire il grafico ossia con il comando col indico a R di che colore voglio fare il grafico, in questo caso red, e con il comando varwidth sto dicendo ad R che io il grafico non lo voglio della stessa ampiezza, ma voglio l’ampiezza in base alle unità statistiche che cadono nei vari gruppi costruiti attraverso la variabile cylinders.
Per fare un istogramma utilizzo il codice hist(nome della variabile) ad esempio se voglio costruire l’istogramma della variabile mpg scriverò il comando hist(mpg): sull’asse delle ascisse mettiamo le classi e sull’asse delle ordinate la frequenza. Anche in questo caso posso modificare il grafico inserendo il colore che preferisco e il numero dei rettangoli, in questo caso con il comando hist(mpg, col="2", breaks=2) fisso 2 valori soglia per la variabile mpg e quindi vado a creare 3 rettangoli di colore rosso.
6. Statistiche prodotte per ogni variabile del data frame “summary()”
La prima cosa che facciamo di solito quando analizziamo i dati è fare delle analisi descrittive, ad esempio possiamo voler calcolare la media, la varianza, i quartili ecc. Esiste il comando summary() che permette di calcolare diverse statistiche descrittive per tutte le variabili contenute nel nostro dataset: se io lancio il comando summary(Auto) mi escono una serie di statistiche descrittive per ciascuna variabile contenuta nel nostro dataset. Se invece vogliamo delle statistiche descrittive per una sola variabile dobbiamo mettere come argomento il nome della variabile, per esempio solo per la variabile mpg, scriverò il comando summary(mpg).
Posso anche calcolare direttamente singoli indici, per esempio se voglio calcolare la media e la varianza per una variabile selezionata scriverò mean(mpg) e var(mpg). Il codice cor(Auto), invece, serve per calcolare il coefficiente di correlazione lineare per tutte le coppie di variabili che sono contenute nel dataset. Il coefficiente di correlazione lineare valuta la tendenza alla linearità delle osservazioni, assume valore che vanno da -1 a +1, se è positivo significa che c’è una tendenza alla linearità positiva, significa che c’è un legame lineare tra le due variabili; se è negativo significa che c’è una tendenza alla linearità negativa e quindi le due variabili tendono a stare lungo una retta che però è inclinata negativamente. Il coefficiente di correlazione lineare può essere calcolato solo per le variabili quantitative, quindi nel nostro specifico dataset devo escludere la variabile qualitativa 9, names, e quindi scriverò il codice: cor(Auto[ , -9]). Questo comando ci dà come output la matrice dei coefficienti di correlazione lineare, sulla diagonale abbiamo tutti 1 perché calcola il coefficiente per la stessa variabile. Se per esempio prendiamo il coefficiente calcolato tra mpg e cylinders vediamo che è: -0.7776 e questo significa che ho un coefficiente di correlazione lineare negativo, una relazione inversa tra le due variabili, i dati tendono a stare lungo una retta ma questa retta è inclinata negativamente. Attraverso l’analisi dei grafici e della matrice di correlazione, noi effettueremo la scelta delle variabili da inserire nel modello.
7. Creazione di una variabile dicotomica
Vediamo come creare una variabile dicotomica, a volte saremo interessati a costruire questa variabile dicotomica attraverso la funzione ifelse: y <- ifelse(Auto$cylinders < 5, 1, 0) in questo caso voglio creare una variabile binaria che assume solo due valori, 1 e 0, partendo da un’altra variabile che è la variabile cylinders; in particolar modo creo la variabile y che assumerà valore 1 se la variabile cylinders è minore di 5 oppure assumerà valore 0 se la variabile cylinders è maggiore o uguale a 5. Questo lo farò per ogni unità statistica e quindi creerò un nuovo vettore di valori 0,1 e questo vettore lo chiamo y.
Laboratorio 2
Regressione lineare semplice
Oggi parleremo di regressione lineare e in particolar modo il modello di regressione lineare semplice. La regressione lineare semplice è uno degli approcci più semplici di statistical learning che ha lo scopo di spiegare una variabile dipendente quantitativa in funzione di variabili esplicative. La regressione lineare assume che questa dipendenza sia di tipo lineare, noi tratteremo questo argomento da un punto di vista inferenziale e l’obiettivo è quello di prendere delle decisioni che valgono a livello generale ossia valgono per la popolazione da cui è stato estratto quel campione. Nella realtà sappiamo che le funzioni F che descrivono Y in funzione di variabili esplicative, non sono quasi mai lineari: questa funzione di linearità è solo un’approssimazione della realtà.
Tuttavia questo modello è un modello molto utilizzato per diverse ragioni: è facile da stimare, è molto semplice da interpretare e perché molti modelli di statistical learning risultano essere estensioni di questo modello lineare. Consideriamo un esempio: un data set che contiene i dati relativi alle vendite di un determinato prodotto in funzione del budget per pubblicità su tv, radio e giornali. L’obiettivo è cercare di capire se c’è una relazione tra le vendite, ossia variabile dipendente, e i budget per pubblicità, ossia 3 variabili esplicative. Bisogna capire anche quanto è forte è questa relazione e potremmo anche interessarci a quali variabili esplicative influenzano la variabile dipendente e anche a quanto è accurata la stima che facciamo nei parametri del modello e quanto è buono il modello che è stato costruito, ossia quanto si adatta ai dati.
Oggi facevamo riferimento al modello lineare semplice: quindi consideriamo una sola variabile esplicativa, sono i parametri incogniti del modello: è l’intercetta, è la pendenza della retta, è il termine di errore che rappresenta tutto quello che X e il modello non riesce a spiegare di Y. Indicheremo con gli stimatori dei due parametri, che cosa rappresentano? Una volta ottenute le due stime sulla base del campione, possiamo interpretare i valori ottenuti: rappresenterà il valore medio previsto per la variabile Y, in questo caso le vendite, quando X è pari a zero ossia quando la spesa per la pubblicità è pari a zero; rappresenterà l’effetto atteso che l’aumento di una unità della variabile esplicativa ha sul valore delle vendite, cioè l’incremento su all’aumentare di una unità della variabile x.
I parametri del modello vengono stimati con il metodo dei minimi quadrati ordinari, questo metodo avviene andando a minimizzare una funzione.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Statistical learning, appunti di teoria completa, prof. Osmetti
-
Statistical learning
-
Appunti di Statistical Learning Theory (STALT)
-
Riassunto esame Multivariate analysis and statistical learning, Prof. Merlini Stefano, libro consigliato An introdu…