R, open source per il calcolo statistico.

Ho pensato di unire con quest’articolo l’utile e il dilettevole.

Devo, e con piacere perchè lo sto trovando stimolante, studiare un pò di probabilità insieme alla soluzione software R.

Dal sito del progetto leggiamo che R è un linguaggio ed un ambiente per il calcolo statistico e la rappresentazione grafica in ambito statistico.

Sul sito del progetto troviamo tutto quanto può servire per approfondire le conoscenze di R: screenshot, wiki, manuali, faq e tanto altro.

Prima di tutto è importante dire che R è un progetto open source rilasciato con licenza GPL v.2 ed è multipiattaforma quindi disponibile per linux, mac os x e windows.

Quindi se conoscete solo windows e siete vissuti con esso, sappiate che non siete costretti a cambiare il vostro sistema operativo per utilizzare R.

Mi sono accorto che uno strumento per il calcolo statistico è di interesse per molti laureati che pur non avendo studiato nell’ambito del ramo dell’informazione conoscono la statistica più che me ma non sanno di strumenti che gli facilitino il calcolo e la rappresentazione.

Con questo articolo voglio provare ad introdurre ad R coloro che potrebbero trovare utile questo strumento.

Possiamo quindi scaricare R dalla pagina dei download del progetto scegliendo la locazione da cui scaricare il software più vicina a noi; naturalmente essendo distribuito con licenza gpl troviamo disponibili anche i sorgenti e nel momento in cui scrivo, l’ultima versione di R disponibile è la 2.10.0 rilasciata il 26 ottobre 2009.

Io personalmente ho installato R su Debian Lenny tramite il pacchetto “r-base” presente nel repository di lenny e mi ritrovo quindi installata la versione 2.7.1.

In tutti i casi possiamo scaricare da quella che viene indicata come rete CRAN, i cui server sono a vostra disposizione tramite i collegamenti della sezione download, l’utima versione binaria già compilata per alcune delle più diffuse distribuzioni linux rese disponibili di recente tra cui troviamo Debian Lenny, Ubuntu Karmic, Fedora 11 e Suse 11.1.

Mi perdonino gli utenti windows qualora si sentano trascurati ma immagino che l’installazione su lo stesso windows non sia differente da quella di altri software; se avete problemi provate a comunicarmelo e cercherò d’essere d’aiuto per quanto mi è possibile; con molta probabilità per windows bastera scaricare l’installer e cliccare due volte su di esso per avviare l’installazione di R che sarà poi disponibile nel menu di avvio di windows.

Se stiamo usando linux lanciamo R da terminale con il comando “R”.

Per questa volta cerchiamo di arrivare a tracciare una semplice densità Gaussiana.

Ci accorgiamo che R funziona benissimo senza alcuna interfaccia grafica ma questo non deve spaventare perchè non è così ostico da usare come può sembrare a chi non è abituato a software con interfaccia testuale.

Appena avviato R (nella versione che ho installato su Debian, ma non differisce molto per le altre), ci compare un messaggio che ci comunica la versione che stiamo utilizzando, ci dice che il software è un software libero e che è rilasciato senza alcuna garanzia, e ci propone di utilizzare dei primi comandi quali:

  • license()
  • help()
  • help.start()
  • q()

(Installando ora R su Ubuntu 9.10, a qualche giorno di distanza dalla prima bozza di questo articolo, il messaggio di benvenuto che appare una volta avviato R non “consiglia” da subito i comandi di help ma poco importa, questi ci sono sempre; interessante dovrebbe essere il suggerimento ad installare il pacchetto revolution-r il quale è una versione ottimizzata per Ubuntu del pacchetto r-revolution-revobase che dovrebbe contenre funzioni per il controllo della gestione del multithreading. Ora come ora non so niente su come funzionino queste funzioni ed in tutti casi se usate windows penso che questa parentesi non vi riguardi per niente)

Bene se ci siamo spaventati digitiamo “q()” senza le virgolette e premiamo il tasto invio, se ci viene chiesto di salvare qualcosa, digitiamo “n” per ora e saremo fuori del tutto.

Siamo usciti da R in tal caso, la paura è passata e possiamo riprovarci sapendo che non stiamo facendo nulla di male.

Se usiamo il comando license() vedremo il tipo di licenza con cui è distribuita la versione di R che stiamo utilizzando. Nel mio caso per la versione 2.7.1 e mi viene detto che questa versione è rilasciata con GPL 2.

(nei repository di Karmik è disponibile la versione 2.9.2)

Per avere informazioni sui comandi disponibili abbiamo a disposizione due tipi di help.

Se digitiamo solo help() ci viene descritto il comando che ci permette di cercare informazioni senza appogiarci ad un browser  mentre con help.start() verrà aperta con il nostro browser predefinito una pagina html all’interno della quale troviamo un link “Search Engine & Keywords” con il quale possiamo facilmente ricercare ciò che ci interessa.

Sulla stessa pagina html che ci compare con il comando help.start() troviamo con il link packages la documentazione a tutti i pacchetti che compongono R e le funzioni/comandi da questi fornite.

R è composto da diversi pacchetti che forniscono i vari comandi/funzioni ed è possibile estendere le sue funzionalità installando tanti altri pacchetti provenienti da persone che contribuiscono allo sviluppo del software; con il comando contributors() possiamo scorrere i nomi e i contatti mail di chi ha contribuito allo sviluppo.

In particolare i pacchetti (d’ora in poi package) più utilizzati sono base, graphics e stats.

Proviamo a utilizzare per ora la ricerca tramite pagina html ricordando che R parla inglese e quindi se cerchiamo quali sono i comandi che riguardano la distribuzione di Gauss o Normale dobbiamo cercare “normal“.

Cerchiamo la parola chiave “normal” e troviamo i comandi che hanno a che vedere con la distribuzione normale o di Gauss.

Avviata la ricerca ci compariranno vari risultati con abbinata una descrizione e tra questi troviamo: Normal con descrizione “The Normal Distribution“.

Cliccando sul link Normal ci appare una pagina descrittiva nella quale viene detto che i comandi inerenti la distribuzione normale sono forniti dal package stats e ne viene spiegata la sintassi.

Leggiamo ad esempio che il comando dnorm() ha quattro parametri che sono: una variabile di tipo vettore dei quantili per cui vogliamo che la densità sia definita, la moda, la varianza e un variabile logica chiamata log che può valere TRUE o FALSE e permette di ottenere, se posta a TRUE, come risultati del comando il logaritmo delle probabilità al posto delle probabilità stesse.

Se l’argomento log viene omesso il comando funzionerà parimenti e considererà log=FALSE.

Ad es. una invocazione del comando potrebbe essere dnorm(x,0,1) ed in tal caso se abbiamo definito un vettore x di quantili “abbastanza denso” composto magari da 2000 punti tra i valori -4 e 4 otterremo come output del comando una serie di valori che compongono il vettore delle densità di probabilità corrispettive per i vari quantili forniti al comando e che rappresentati su di un grafico ci darebbero una bella distribuzione normale o di gauss.

Prima di utilizzare il comando però abbiamo bisogno di definire quantomeno un vettore di punti x; vediamo quindi come fare.

Se vogliamo definire un vettore di 8001 punti compreso tra -4 e 4. dobbiamo assegnarlo alla variabile x ad esempio con il seguente comando:

x<-(-4*1000:4*1000)/1000

se avessimo voluto 801 punti avremmo dovuto effettuare l’assegnamento cosi:

x<-(-4*100:4*100)/100

o anche

x=(-4*100:4*100)/100

se ora vogliamo vedere il vettore di valori che è stato assegnato alla variabile x digitiamo x in R e premiamo invio.

Cia appariranno tante righe di valori e ogni riga inzierà con un valore tra parentesi crescente del tipo [1] per la prima riga che non è un valore del vettore delle x ma l’indice che identifica il valore nel vettore; se infatti voglia sapere il valore del cinquecentosessantesimo quantile del vettore x possiamo digitare x[560] e premere il tasto invio.

A questo punto digitanto i comandi a seguire avremo un vettore di quantili x e un vettore di densità y accoppiati; se non facciamo attenzione con i valori che assegnamo R ci dirà che la dimensione dei due vettori non corrisponde:

x<-(-4*1000:4*1000)/1000

assegnamo ad y i valori della densità con il prossimo comando

y<-dnorm(x,0,1)

e poi se vogliamo visualizzare questi punti su di un piano cartesiano digitiamo:

plot(x,y)

Dovrebbe ora apparire il grafico della nostra normale standard con moda e media uguali a 1 e deviazione standard pari a 1.

Quando conosciamo già il nome di un comando, ad esempio dnorm per dnorm(), e non ricordiamo alcuni parametri/argomenti possiamo cercare subito la sintassi di questo comando digitando help(dnorm) e premendo invio, senza dover di nuovo cercare la voce normal.

Se proviamo infatti a digitare help(plot) troveremo informazioni su come dire al comando plot di inserire dei titoli per gli assi o anche colorare il grafico se il nero non ci piace.

Potremmo ad esempio decidere di usare il comando cosi:

plot(x,y,col=”red”,xlab=”quantili”,ylab=”densità”)

e otterremmo in tal caso una bella curva di gauss rossa con gli assi x e y intitolati rispettivamente quantili e densità.

Schermata di R con digitati i comandi per disegnare una gaussiana standard

Plot di una curva di gauss disegnata con R

Magari cercherò di scrivere qualcos’altro a proposito di R prossimamente, in tutti i casi chi conosce la statistica più di me a questo punto dovrebbe potersi divertire parecchio.

Sperando al solito di non aver commesso troppi errori vi auguro buon divertimento con R,

Andrea Stani