Quando la Varianza segue la Media: i GLS

Seppur noi umani amiamo etichettare tutti gli eventi e i processi usando categorie ben definite, la realtà è molto più polimorfa. Questa natura delle cose si registra anche in Statistica.

Difatti, abbiamo parlato finora di regressione avendo come modello:

\hat{y} = \beta_{0} + \beta_{1}x + \epsilon ~ N(0,1)

Una delle principali assunzioni di questo modello riguarda gli errori \epsilon che vengono considerati come distribuiti secondo una Normale con media 0 e deviazione standard di 1. In questo caso dunque non esiste alcuna relazione tra la media e la varianza.

Nella vita reale però, lavorando con dati reali, questa assunzione può essere tutto fuorché vera: ci sono molte situazioni in cui tra la media e la varianza esiste una relazione, ossia:

\sigma^{2}_{i} = f(\hat{y_{i}})

In questi casi, ci vengono in aiuto i GLS (Generalized Least Squares). I GLS introducono una forma funzionale esplicita per la varianza degli errori. Le più comuni presentano una relazione positiva fra le due variabili:

  • Relazione di Potenza\hat{y} = \beta_{0} + \beta_{1}x + \epsilon ~ N(0,\sigma^{2}|\hat{y}_{i}|^{2m_{1}})
  • Relazione Esponenziale\hat{y} = \beta_{0} + \beta_{1}x + \epsilon ~ N(0,\sigma^{2}exp(2m_{2}\hat{y_{i}}))

m_{1}m_{2} sono due parametri che devono essere stimati col GLS.

Selezione Automatica di Variabili

In questo articolo vi darò la notizia che ciascuno di voi aspettava. La grandiosità del calcolo matematico unito al potere di calcolo automatico: la selezione automatica di variabili. Ossia, è possibile far selezionare dal computer la combinazione di variabili ottimale per un modello.

L’argomento si innesta su quello dell’articolo precedente, in cui abbiamo illustrato la collinearità.

Esistono tre metodi si selezione automatica di variabili:

  • Eliminazione all’indietro
  • Selezione in avanti
  • Selezione progressiva

Ognuno di questi metodi ha i suoi vantaggi e svantaggi:

Eliminazione all’indietro

Inizia con il creare il modello più complesso possibile, ossia introducendo tutte le variabili disponibili. Ad ogni passo elimina la variabile ‘meno importante’ fino a raggiungere un punto di ottimo usando una certa misura (vedi dopo).

Selezione in avanti

Inizia con il modello più semplice che esiste: solo con l’intercetta. Ad ogni passaggio aggiunge una variabile ‘importante’ fino al raggiungimento di un punto di ottimo.

Selezione progressiva

Combina i due metodi precedenti, cercando ad ogni passo variabili da escludere ed includere. È significativamente più calcolo intensivo.

Se tuttavia vogliamo automatizzare questi algoritmi, ‘l’importanza’ di ogni variabile deve essere misurata in modo oggettivo. Per fare ciò esistono innumerevoli metriche; quella più semplice ed usata si chiama AIC (Aikake Information Criterion). L’AIC è una misura di bontà di predizione penalizzata dal numero di variabili contenute nel modello. Quindi un AIC piccolo segnala un modello migliore. Bisogna tuttavia ricordare che l’AIC è una misura relativa e non assoluta. Formalmente:

AIC = -2 logL + 2p

dove:

  • logL (log-likelihood) è una misura di bontà (ne parleremo in seguito)
  • p è il numero di variabili nel modello statistico.

Un’altra misura molto usata è la BIC (Bayesian Information Criterion), che utilizza un penalità che cambia con la grandezza del campione:

BIC = -2 logL + log(N)p

Dove:

  • è la grandezza totale del campione.

Gli algoritmi di selezione automatica usano quindi queste misura (e altre simili) per dare un rango ad ogni modello (ognuno con una diversa combinazione di variabili) e scegliere quello migliore.

Ovviamente, questi algoritmi automatici sono totalmente indipendenti dal contesto in cui il modello viene creato, i.e. non tengono in considerazione l’ambito scientifico del modello. È qui che il Data Scientist deve usare la sua esperienza ed arte per decidere come agire. L’analista deve dunque capire se prediligere la capacità predittiva (e quindi rischiare di introdurre troppi parametri) o scegliere la capacità descrittiva ed includere solo variabili scientificamente significative.

Largo ad R!

AIC e BIC possono essere calcolati usando queste funzioni, entrambe nel pacchetto {stats}

AIC(object, ...)
BIC(object, ...)

Per la selezione automatica si usa invece questa, sempre nel pacchetto {stats}:

step(object, scope, scale = 0,
direction = c("both", "backward", "forward"),
trace = 1, keep = NULL, steps = 1000, k = 2, ...)

È anche possibile utilizzare la funzione dredge nel pacchetto {MuMIn} che permette la scelta di misure diverse oltre all’AIC.

Ecco un esempio completo di Selezione Progressiva usando il dataset freeny:
Il codice
linearAll = lm(y~., data = freeny)
step.linearALL = step(linearAll, direction = "both")

e l’output

Come vediamo, il modello migliore è con tutte le variabili tranne lag.quarterly.revenue: non includerla produce il più basso AIC possibile.

Collinearità

Una volta costruito un modello lineare col metodo di Maximum Likelihood come si può decidere quali variabili introdurre nel modello? Ovviamente, noi vogliamo introdurre variabili dipendenti che:

  1. abbiano una relazione genuina con la variabile dipendente
  2. aggiungono informazione al modello, considerando le altre indipendenti già presenti nel modello.

Ovviamente, vorremmo allo stesso tempo escludere variabili che forniscono la stessa informazione di quelle già presenti; ossia, vogliamo evitare la collinearità.

Collinearità

Quando variabili collinari sono inserite insieme in un modello, quest’ultimo risulta instabile e otterremo errori standard maggiorati per i parametri. La collinearità può essere individuata tramite i Variance Inflation Factors (VIFs).

I VIFs si calcolano costruendo un modello lineare tra ogni covariata e tutte le altre covariate. Ad esempio, per la prima variable indipendente

x_{1i} = \delta_{0} + \delta_{1}x_{2i} + \cdots + \delta_{p}x_{pi} + u_{i}

dove u_{i} è l’errore.

Un modello di questo tipo è costruito per ogni indipendente e prendendo l’R2 si calcola il VIF:

VIF_{j} = \frac{1}{1-R^{2}_{j}}

per le covariate j = 1, . . ., p.

Grandi VIFs indicano collinearità. Tuttavia non ci sono regole ben precise sul ‘grandi’: la regola più comune è di considerarli problematici quando VIF > 4, perché l’intervallo di confidenza (IC) del parametro j sarà grande il doppio del normale (ossia \sqrt{VIF} indica quanto sarà dilatato l’IC)

Facciamo un esempio in R:

LinearAll = lm(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data = iris) # Creiamo il modello lineare
library(car) # Carichiamo la libreria per la funzione 'vif'
vif(LinearAll)

Ecco l’output:

Sepal.Width Petal.Length Petal.Width
1.270815    15.097572   14.234335

Come possiamo vedere le variabili ‘Petal.Length’ e ‘Petal.Width’ sono altamente collineari: se le togliessimo otterremo una maggiore stabilità del modello

Un’altra prova del fatto che che il modello sia affetto da collinearità sono parametri il cui valore cambia sostanzialmente quando nuove variabili sono aggiunte al modello.

Come risolvere la collinearità? La soluzione più semplice è di rimuovere le variabili collinari: molto spesso questo accade automaticamente quando si usano algoritmi di selezione automatica.

Post-Verità e la casualità dell’esistenza

O anche: ‘La Statistica è morta. Lunga vita alla Statistica!’


I recenti sviluppi politici mondiali hanno sicuramente confuso i più riguardo cosa sia cambiato nella mente dell’elettorato, sul perché idee apparentemente irrazionali1 e populiste abbiano avuto il sopravvento. L’evento più lampante (se non folkloristico) è stata l’esclamazione di Gove, un politico sostenitore della Brexit:

Britain has had enough of experts

Questa frase, oltre ad avere un significato filosofico profondo, ha anche dei risvolti sinificativi a livello statistico, perché riflette la sfiducia del cittadino contemporaneo nella misurazione quantitativa dello realtà, ossia la Statistica.

Un recente articolo apparso sul Guardian ha per l’appunto affrontato questo tema, che risulta essere epocale, tanto da aver generato il neologismo di post-verità.

Uno studio di Marketplace ha rilevato come il 47.5% dell’elettorato Trump e il 25% del totale “non crede ai dati economici ufficiali pubblicati dal governo federale”.

Risultati studio Marketplace sull’elettorato americano

Allo stesso modo, in un altro studio YouGov/Uni Cambridge, il 55% dei rispondenti crede che “il governo stia nascondendo il numero reale di immigrati viventi nel paese”.

Pare dunque ovvio che il pubblico occidentale non creda più all’oggettività della misurazione e al metodo scientifico della Statistica. Non solo, sembra anche, come risulta dalle parole di Gove, che tale oggettività risulti arrogante e debba essere combattuta; ecco dunque che gli unici argomenti che contano sono solo soggettivi e altamente personalizzati.

Un esempio? Un report del think-tank BritishFuture ha dimostrato come le persone siano emotivamente colpite da storie personali e struggenti di immigrati; al contrario, i “freddi” dati generano l’effetto diametralmente opposto, soprattutto se dimostrano l’influenza positiva degli immigrati sull’economia. La motivazione? Le persone assumono automaticamente che siano dati contraffatti.

Si potrebbe discutere per ore sulle motivazioni profonde di questa ostilità verso i dati statistici ufficiali (una mia spiegazione personale e ‘a pelle’ è che il bias di conferma sia più forte di quanto pensiamo), ma forse questa non è la sede più adatta.

Tuttavia, voglio sottoporci ad un esperimento mentale riguardo le implicazioni statistiche di questo fenomeno: e se avessero ragione? Ossia, se i dati fossero davvero non rappresentativi della realtà?

Questa domanda fa riflettere in maniera profonda sulla natura dei dati statistici: essi sono infatti nati per riassumere la stocasticità del mondo in maniera oggettiva ed inequivocabile. Esistono proprio per demolire la diversità e riassumerla in una piccola panoplia di numeri in modo tale da ‘rendere’ la realtà più semplice ed interpretabile dalle nostre menti limitate. Il problema però, è che seppur la nostra rappresentazione del mondo è ora semplice, il mondo rimane complesso, qualsiasi modello tu voglia usare. Esempio lampante in statistica economica: il GDP misura davvero la produzione di un paese? A che geografia è meglio produrlo? Nazionale? Regionale? Che cosa vogliamo contarci dentro: produzione metallurgica? Prostituzione? E i lavori domestici?

Ecco dunque l’insegnamento centrale della Statistica, che a mio avviso dovrebbe essere insegnato prima ancora dei numeri aleatori:

la Statistica è un compromesso tra il comprendere e il descrivere.

Più la descrizione è dettagliata, meno è comprensibile, e vice versa. Non a caso esistono misure come R2 o la Devianza, proprio per aiutarci a scegliere un livello di questo compromesso. Ma ancora: sono di nuovo misure, usate per misurare altre misure. Sta al Data Scientist, allo Statistico l’onere di scegliere, di valutare tutte queste misure, perché da soli i numeri non vogliono dire nulla: la magia sta tutta qui, nell’esperienza dell’analista che usa una mente umana per cercar di comprendere la stocasticità dell’esistenza.

Resta solo da vedere che strada prenderanno le nuove tendenze Statistiche come la Machine Learning e la Data Science, che creano delle vere e proprie macchine automatiche: la seconda vita della Statistica; dai semplice numeri, alle macchine.

E intanto, il mondo resta comunque casuale, in barba a tutti noi.

Note

1. Seppur io faccia fatica a non esprimermi a livello politico, cerco di resistere alla brama.

La Statistica è così poetica!

Il mese scorso ad Edinburgo si è tenuta l’annuale Scottish Governement Statistical Conference. Il contenuto delle presentazioni è stato più amministrativo che tecnico: gli oratori hanno di fatto presentato la strategia Open Data e il nuovo sistema organizzativo del dipartimento statistico del governo.

In mezzo a tutta ‘sta noia però, si è anche tenuta una sfida poetica: ogni partecipante alla conferenza poteva inviare una poesia alla giuria, a patto fosse di contenuto statistico.

Orbene, come immaginerete non ho potuto esimermi dalla tentazione di diventare un Omero statistico per consegnarmi alla Gloria eterna. Ecco dunque il testo incriminato:

The Outlier legacy (or violation of Normality)

Unmodelled by LM:

Thou, be not like the Median,

but a Life of Deviance.

Ovviamente, quando morirò, qualche critico scoprirà questa poesia e scriverà pagine e pagine di interpretazione rompendo i maroni a poveri studenti liceali.

Oppure no.

Breve digressione Natalizia sul confronto distribuzionale.

Recentemente al lavoro, ho dovuto scrivere un software che introduca della variabilità nei dati del Censo Scozzese. La motivazione di questa operazione è di proteggere la privacy dei cittadini, rendendo impossibile risalire agli utenti partendo dai dati.

Ovviamente, tale operazione, se fatta in maniera erronea, può portate a dei bias nei dati e inquinare tutte le potenziali analisi.

Dunque, come controllare che i dati processati siano simili ai dati originali?

In gergo statistico, fare questo procedimento significa controllare che le due serie di dati provengano dalla stessa distribuzione. Il test per eccellenza da utilizzare in questo caso è l’altisonante Kolmogorov-Smirnov. In generale, le comparazioni distribuzioni sono utilissime: ad esempio per controllare che misurazioni provenienti da due processi differenti possano essere analizzate usando gli stessi metodi. Insomma, per ipotizzare una somiglianza da due processi apparentemente diversi.

In R, il test di Kolmogorov-Smirnov può essere eseguito con la seguente funzione:

ks.test() {stats} 

 

Le assunzioni del modello lineare

In un articolo precedente abbiamo descritto la meccanica di un modello lineare. Come accennato, questi modelli sono costruiti su quattro assunzioni (because there’s no free lunch):

  • Normalità degli errori \epsilon_{i}
  • Deviazione standard degli errori costante
  • Indipendeza degli errori
  • Linearità della relazione tra la risposta e le variabili indipendenti

La violazione di questi requisiti causa conseguenze più o meno gravi sull’affidabilità del modello. Tuttavia, grazie a vari test, è possibile identificare e controllare se tali violazioni esistano. Nei paragrafi seguenti si illustrerà come eseguire questi test con R e la relativa matematica sottostante.

Da tenere a mente: gli errori di un modello sono definiti come:

\epsilon_{i} = y_{i} - \hat{y}_{i}

dove:

  • y_{i}: è il valore della risposta osservato.
  • \hat{y}_{i}: è il valore della risposta predetto dal modello.

Solitamente, per controllare queste assunzioni, gli errori devono essere standardizzati, ossia ridotti a seguire una distribuzione Normale con media 0 e dev standard uguale ad 1.

r_{i}^{s} = \frac{r_{i}}{\sqrt{s^{2}(1-h_{i,i})}}

h_{i,i} è la diagonale di una matrice, chiamata design matrix. Lasciamola da parte: l’importante è ricordarsi che gli errori standardizzati dovrebbero (se tutte le assunzioni sono rispettate) seguire una N(0,1).

Normalità

Gli errori dovrebbero essere approssimativamente distribuiti secondo una Normale con media zero e deviazione standard \sigma. Per controllare questa assunzione possiamo sia fare un test visivo che numerico.

Il test visivo consiste nel creare un QQ Plot, ossia raffigurare gli errori standardizzati contro un campione casuale di una N(0,1): se gli errori sono Normalmente distribuiti, essi devono posizionarsi sulla diagonale del piano:

Sinistra: errori distribuiti secondo N(0,1). Destra: normalità pesantemente violata.

Come test numerico invece, esistono numerose alternative (e siete liberi di procedere come meglio preferite). Per quanto mi riguarda uso (quasi) sempre il Shapiro-Wilk dove H0 è ‘Normalità rispettata’. In R:

shapiro.test(residuals(linearModel))

dove shapiro.test() è la funzione del test vera e propria e residuals(linearModel)) calcola gli errori per il nostro modello lineare.

La normalità tuttavia non è un’assunzione critica; violazioni minime possono essere comunque considerate accettabili.

Linearità

Per un modello lineare semplice, deve esistere una relazione lineare tra ogni variabile indipendente e quella dipendente. Per controllarla, basta un grafico della variabile in questione contro la dipendente: i punti devono posizionarsi in lungo una linea retta.

Omoschedasticità

Ossia varianza degli errori costante (chiamarla omoschedasticità però vi farà sembrare molto più professionali). Per controllarla, è necessario il test di Breusch-Pagan, dove H0 è ‘omoscedasticità rispettata’.

In R: ncvTest(linearModel)

Varianza degli errori costante è un’assunzione critica per un modello statistico: se non è rispettata può portarci a concludere che alcune variabili indipendenti siano utili per spiegare la dipendente, quando in realtà non lo sono. Ossia, ci può portare a trarre conclusioni errate sulle relazioni tra le variabili. Per risolvere questo problema, bisognerà abbandonare il modello lineare semplice per avventurarsi con qualche altro strumento (un GLS per esempio).

Indipendenza

Per indipendenza si intende che l’errore non deve essere correlato all’errore i + 1. Per controllarla, anche in questo caso, è possibile eseguire un test: il Durbin-Watson.

In R si esegue cosí durbinWatsonTest(linearModel). 

L’indipendenza è un’altra assunzione critica. Come per l’omoschedasticità, violazioni possono portare a erronee stime delle deviazioni standard, con conseguenti errori nei test di significatività. Un GLS potrebbe di nuovo essere una soluzione.

Sul futuro della Data Science

La Data Science e l’Intelligenza Artificiale sono sempre più vicine. tenetevi pronti.

Nell’ultima decade, i Data Scientist si sono focalizzati soprattutto sull’analisi di dati provenienti da web; difatti, tra il web 1.0 e il web 2.0 gli analisti si accorsero dell’enorme mole di dati disponibile a costo nullo che emergeva dal www. Questa mole di dati noscondeva inoltre un impressionate valore inutilizzato, pronto per essere raccolto con metodi statistici e visivi.

Azzarderei oltretutto ad affermare che, senza questa fase di ‘dati web’, la Data Science non sarebbe mai diventata così figa e di moda come ora. Infatti, durante questi anni sono stati costruiti algoritmi fantastici per comprendere il Web ed automatizzare il maggior numero possibile di operazioni: ormai i frutti più bassi dell’albero sono stati raccolti. L’innovazione contemporanea nella Data Science sul web si basa sopratutto sull’ottimizzazione di tali algoritmi e sull’aggiustamento di particolari (e possiamo dire, marginali) aspetti tecnici.

Quale sarà dunque il futuro della Data Science?

La sorgente di dati del Web, inaridendosi di grandi opportunità di innovazione, lascierà spazio a nuove fonti di dati. Ritengo che questo spazio sarà riempito da dati di origine fisica, ossia dati da sensori misuranti l’ambiente in cui l’Uomo interagisce ogni giorno. Pensiamo, ad esempio, alle enormi opportunità di analisi ed automazione che scaturiranno dall’Internet delle cose. Oppure dal vasto mondo di sensori medici: difatti, uno dei campi che nel futuro sarà maggiormente coinvolto dalla marea statistica, sarà proprio la Medicina (Wired sembra essere d’accordo).

Ritengo dunque che nella prossima decade, la sfida più eccitante per i Data Scientist sarà quella di creare ecosistemi e algoritmi partendo da dati di sensori: si genererà tutta una nuova serie di domande e necessità sia hardware che software.

Insomma, automazione sarà una delle parole chiave per il futuro prossimo della materia.

Regressione Lineare e diventare milionari

Regressione Lineare: predire le vendite

Ogni affarista che si rispetti dovrà prima o poi fare delle proiezioni di vendite: vuoi per ordinare il volume corretto dai fornitori, vuoi per dimostrare la validità del business ai finanziatori oppure per fare colpo con quanti affari farà il prossimo anno; le motivazioni sono molteplici e più o meno mondane. Ed ecco che il Data Scientist arriva in salvataggio! (E tornerà a casa con una bella parcella…)

Questo primo tutorial insegnerà proprio come, partendo da dati pre-esistenti, sia possible predire le future vendite di un business. Naturalmente, da buon accolito della statistica, non potrò esimermi da presentare la matematica sottostante: se ti annoia, salta alla sezione successiva dove mostrerò il lato pratico usando R.

1. Il Dataset

Il dataset che useremo si trova pre installato in R, ed è chiamato freeny. Di dimensioni 39×5 [39 righe/osservazioni x 5 colonne/variabili], rappresenta le vendite trimestrali di un non ben identificato business. Le variabili presenti sono:

  1. y: le vendite. Notate la notazione: in statistica/Data Science,  identifica sempre la variabile da predire, anche chiamata variabile dipendente risposta (in inglese, dependent variable/response).
  2. lag.quarterly.revenue: le vendite del trimestre precedente.
  3. price.index: livello dei prezzi dei beni venduti.
  4. income.level: livello degli stipendi della clientela.
  5. market.potential: indice dell’attrattività del mercato.

Ecco una vista di come appare:

Il dataset freeny.

Nota: per creare modelli di forecasting utilizzeremo sempre dataset in forma matriciale.

2. La Regressione Lineare (LM)

la matematica no!

Come accennato precedentemente, il nostro obbiettivo è quello di predire le vendite per un trimestre futuro. Qual’è il ragionamento da seguire? Noi, esseri mortali, non conosciamo le vendite future dato che non si sono ancora verificate. Tuttavia, abbiamo a nostra disposizione una serie di altre variabili di cui conosciamo perfettamente il valore, anche futuro. In questo caso ad esempio, conosciamo le vendite passate (lag.quarterly.revenue), possiamo decidere che prezzo mettere (price.index), sappiamo il livello degli stipendi (income.level) tramite l’Eurostat e conosciamo anche il potenziale di un certo mercato (market.potential), magari tramite un sondaggio. Qual’è dunque il procedimento più logico per raggiungere il nostro obbiettivo? Spiegare le vendite come una funzione delle variabili a noi note; in altre parole, cercare una relazione tra le vendite e tutto il resto.

In Statistica, questo tipo di relazione, viene chiamato regressione. La forma funzionale più semplice è la seguente:

y_{i} = \beta_{0} + \beta_{1}x_{i} + \epsilon_{i}

Dove:

  • y_{i} : è il valore per le vendite (variabile dipendente) all’osservazione i, ossia alla riga i
  • x_{i} : è il valore per una variabile indipendente (una di quelle che usiamo per predire) all’osservazione i
  • \beta_{0} : è un parametro, anche chiamato intercetta (vedremo tra poco il motivo)
  • \beta_{1} :  è un altro parametro, anche chiamato pendenza, che rappresenta il cambio di per ogni unità di differenza in x. Ossia se \beta_{1} = 2, e aumenta di 1, allora aumenterà di 2.
  • \epsilon_{i} : i residuali, la componente casuale, che riamane insperata dal modello.

Gli amanti della geometria noteranno che tale funzione non è altro che una retta (da qui i termini ‘intercetta’ e ‘pendenza’). E infatti, quello che cerchiamo di fare è proprio questo: cercare di creare una retta che si adatti il meglio possibile ai dati.

Ad esempio:

Vendite per livello stipendi

visualizza la relazione esistente tra le vendite e il livello degli stipendi. Come possiamo vedere, essa non è una retta perfetta: questo perché c’è ovviamente una componente aleatoria nella relazione. Costruendo una retta perfetta che si adattati al meglio a questi dati, andremo proprio a separare la relazione ‘vera’ dalla componete aleatoria; separeremo il segnale dal rumore di fondo, che è casuale. Ecco il risultato di questo procedimento:

Linea di regressione (in rosso)

Per costruire questa retta dobbiamo ‘aggiustare’ i due parametri \beta_{0}, \beta_{1}. In che modo? Minimizzando la distanza tra ogni punto e la retta!

Ossia usando il metodo dei least squaresi quadrati minimi; minimizzando questo tizio qui:

\sum\limits_{i=1}^{n}(y_{i} - (\beta_{0} + \beta{1}x_{i}))^{2}

Questo caso con una sola variabile indipendente può essere poi generalizzato a più variabili:

y_{i} = \beta_{0} + \beta_{1}x_{1i} + \beta_{2}x_{2i} + \cdots + \beta_{p}x_{pi} + \epsilon_{i}

La logica è sempre la stessa, anche se ora è impossibile visualizzare la relazione con un grafico (il massimo possibile sono 3 dimensioni. Per ovvie ragioni).

Naturalmente, come ogni elemento statistico, anche i parametri della regressione avranno una componente di variabilità, rappresentata dalla loro varianza e deviazione standard.

Inoltre, i modelli di regressione lineare semplice sono basati su quattro assunzioni:

  • Normalità degli errori \epsilon_{i}.
  • Deviazione standard degli errori \epsilon_{i} costante.
  • Linearità della relazione tra le variabili.
  • Indipendenza degli errori.

Data la vastità dell’argomento, delle assunzioni parleremo più nel dettaglio in un articolo successivo.

3. In R

Finalmente la pratica.

La regressione lineare semplice, in R, richiede ben pochi sforzi. La funzione da utilizzare è lm() nel pacchetto di {stats} (che è già preinstallato).

Per creare il modello basta dunque scrivere :

attach(freeny) # Per caricare il dataset
View(freeny) # Per visionare il dataset in forma matriciale
modello = lm(y~., data = freeny) # Per creare il modello

Il modello cosí creato avrà come variabile dipendente e tutte le altre (il ‘.’) come indipendenti.

Per visionare il contenuto, ovvero i parametri del modello, la loro variabilità e i relativi p-value, bisogna utilizzare la funzione summary():

summary(modello)

Ecco l’output:

Output del LM

Come possiamo vedere, la variabile log.quarterly.revenue, quando tutte le altre variabili sono presenti, non risulta avere una relazione statisticamente significativa con le vendite.

Iniziare come Data Scientist

Fino ad ora si è parlato in generale riguardo la Data Science e dintorni. Ma naturalmente il vero Data Scientist non vuole accontentarsi solo di teoria: anzi, la pratica è la forza trainante di questa materia. In questo articolo (abbastanza lungo) si parla proprio di questo: quali sono i passi da intraprendere per diventare un Data Scientist (e analizzare ‘sti famigerati Big Data)

Fase I: MaIoNonSoNienteDiStatistica!

Partendo dal principio (ossia, assumendo che tu, lettore, non sappia nulla sull’argomento), la prima cosa da fare per entrare in questo fantastico mondo è di rinfrescarsi (o imparare) la statistica di base. Quindi:

  • Campionamento
  • Rappresentazioni grafiche di dati
  • Probabilità base (numeri aleatori, almeno le distribuzioni Normale e Binomiale)
  • Indici di posizione (media, moda, mediana et cet.)
  • Indici di variabilità (varianza et cet.)
  • Intervalli di confidenza
  • Test di ipotesi (almeno i t-test e il chi-squared)
  • Regressione lineare semplice

Mi sarò sicuramente dimenticato qualcosa. In ogni caso questa lista rappresenta già un buon punto di partenza: consiglio di iniziare col vecchio metodo carta e penna; è molto meglio delle macchine per fissare i meccanismi matematici. Ovviamente, il modo più efficace sarebbe seguire un corso universitario di statistica base. Invece, per i pochi tra noi con abbastanza palle da procedere da soli, ci sono innumerevoli risorse, sia online che fisiche.

Come libro di testo consiglio Statistica di P. Newbold et al. Qui il libro su Amazon. Lo so, viene 40 palanche. Ne vale la pena comunque: è stato il mio primo libro di statistica ed è diventato un po’ la mia Bibbia parte I (aka Il Vecchio Testamento. Il nuovo è un altro libro di cui parlerò più avanti).

Vedo ora che in italiano non esistono siti con corsi di statistica gratuiti (magari ci faccio un pensierino di farne partire uno). Se cercate in inglese, ne troverete a camionate: uno tra i più importanti è KhanAcademy.

Fase II: La Programmazione

La statistica, come il resto della matematica, è già bella e pura di per sè. Per questo meriterebbe di essere studiata for its own sake. Ma i Data Scientist non si accontentato di contemplare la bellezza: vogliono anche averla. Per questo vengono in aiuto quegli individui oscuri che sono gli informatici: la programmazione (e le macchine) permettono alla statistica di entrare con il botto in mezzo ai dati e di generare risultati tangibili. Senza i computer, la statistica avrebbe un valore pratico molto basso (vi vorrei vedere a fare una regressione con un 1Gb di dati. A mano).

Imparare a programmare da zero senza aiuto di alcun tipo è fattibile: ci sono numerosi tutorial online, anche in italiano. Ma sarà un’impresa non semplice: il segreto per riuscirci è senza alcun dubbio la perseveranza. Imparare a programmare consiste, sostanzialmente, a smadonnare per ore ed ore cercando di trovare il bug. Che poi nel 70% dei casi, si rivela essere un errore di battitura. A quel punto smadonnerete ancora di più, rimpiangento le ore buttate al vento.

Il linguaggio con cui consiglio di inziare è R: totalmente gratuito, potete scaricarlo da qui per Windows, da qui per Mac o da qui per Linux. R è perfetto per l’analisi dei dati perchè è stato creato proprio con la statistica in mente. Essendo un linguaggio Open Source, sono disponibili una miriade di librerie che permettono al Data Scientist di eseguire azioni più disparate. Per esempio: se volessi calcolare l’indice V di Cramér non posso utilizzare il semplice R. Per farlo devo prima installare questa libreria (o pacchetto) che contiene una funzione (ossia un programma) atto al calcolo di quell’indice. R è un linguaggio interpretato e ad oggetti.

Dopo aver installato R, consiglio vivamente di scaricare ed installare questa GUI (Graphic User Interface): oltre ad essere gratis e bella esteticamente, aumenta notevolmente gli strumenti in mano all’analista. Di sequito, ecco come appare:

Screenshot di RStudio

Il linguaggio che si vede nei riquadri a sinistra è proprio R. La schermata è composta da 4 riquadri. Partendo da sinistra in alto e in senso orario:

  • Script: il programma che stiamo scrivendo
  • Workspace & Cronologia: indicano tutti gli oggetti esistenti nella sessione corrente e la cronologia dello script.
  • Files, Plot, Packages & Help: l’albero di directory della sessione, gli eventuali grafici creati, le librerie installate e la finestra di aiuto. Per installare un nuovo pacchetto, è necessario andare nella finestra Librerie, cliccare su Installa nuovo e seguire lo wizard.
  • Console: mostra il codice e i suoi  risultati quando viene eseguito.

Se non si volesse installare RStudio, bisognerà allora programmare usando la semplice GUI di R, che offre molti meno strumenti.

Una volta installati questi software, i.e. la GUI e la lingua vera e propria (o meglio il traduttore da R a linguaggio-macchina), siete pronti per partire. Nei prossimi articoli comincerò a portare degli esempi, complicati e non, di analisi dati in R [successivamente anche in Python] con tanto di codice al seguito.