17 dicembre 2010

Installazione di RKWard su Windows

RKWard è un progetto molto curato in ambiente Linux, mentre è dichiaratamente un "progetto giovane" in ambiente Windows, con diversi bug legati soprattutto alle interfacce di selezione dei file e al download "interattivo" di file da internet (tipicamente, l'installazione di una libreria).
Tra le GUI che conosco è quella che, forse, si presenta con la migliore "veste grafica". 
Le maschere di dialogo con cui si interagisce sono perfettamente analoghe a software come SPSS o STATISTICA, in cui si seleziona il dataset di input, le variabili e le varie opzioni in base all'output che si vuole ottenere (...con questo non voglio dire che si tratta di strumenti equivalenti...). Ad esempio, questo è il menu per le statistiche descrittive:


L'output che si ottiene, inoltre, è analogo, ad esempio, a quanto si ottiene in SPSS, ossia un insieme di risultati in formato "report" (il tutto altamente personalizzabile). 

Per quanto riguarda l'installazione, che spesso è l'aspetto che blocca molti utenti (non molto esperti, in ambiente windows) nell'utilizzo di uno strumento software, nella pagina ufficiale si suggerisce il download di un "semplice" file .exe, così come avviene, in generale, in Windows.

Diversamente da quanto suggerito in tali pagine, io consiglio l'installazione personalizzata (della quale, comunque, se ne parla sempre nella pagina ufficiale). Quanto riporto di seguito, quindi, è consigliabile per chi dispone già di una versione di R installata sulla propria macchina. Preciso, inoltre, che ci riferiamo a Windows - 32 bit (XP, vista o 7).
Quindi, la prima cosa da fare è il download di:
Nello stesso ordine appena riportato, installate queste componenti.
Per quanto riguarda KDE, scegliete le impostazioni riportate negli screenshot qui di seguito (che dovrebbero presentarsi nello stesso ordine):

il complier mode è MinGW4


qui ho scelto il server ftp.unina.it







scegliere kdebase-workspace


A questo punto verranno scaricate una serie di pacchetti necessari al funzionamento corretto e sarà necessario un po' di tempo. Evidenzio che la seguente procedura prevede un'installazione su una macchina connessa ad internet!
Successivamente, si passerà all'installazione di RKWard. Si presenteranno due finestre in cui scegliere le directory di installazione di R e KDE (installato precedentemente). Se state usando questa "guida", immagino (e, in caso non sia così, consiglio) che abbiate una macchina con installazioni "standard" dei vari software che utilizzate. Quindi, la directory di riferimento sarà sempre quella in cui sono installati i programmi.
Ad esempio, nella maschera successiva ho selezionato la directory in cui è installato R: 



Analogamente, sceglierò quella in cui è installato KDE:


Al termine di questi step (se tutto è andato a buon fine) l'avvio di RKWard avviene diversamente da quanto siamo abituati con un generico "software" in Windows. Nella classica cartella "Programmi", infatti, non sarà disponibile la relativa directory.
Per il suo avvio, infatti, sarà necessario cliccare sul file rkward.bat che, se avete effettuato l'installazione in linea con quanto precedentemente indicato, sarà presente nella directory "\KDE\bin". Ad esempio, nella mia installazione su Vista, questa è la directory:






29 novembre 2010

20 settembre 2010

Importare in R le serie storiche di Yahoo! Finanza

Ho notato non essere chiaro, ad alcuni utenti di R, la possibilità di importazione "diretta" delle Serie Storiche disponibili in Yahoo! Finanza. Con una sola riga di codice, quindi, è possibile effettuare l'importazione del dataset e, quindi, lavorare con l'analisi delle serie storiche.
Dal sito è, in genere, disponibile il file csv relativo al titolo che ci interessa. Ad esempio, qui dovrebbero essere disponibili le quotazioni storiche del NASDAQ. In fondo alla schermata, è possibile cliccare su "Preleva i dati su foglio di calcolo" e salvare i dati in csv.
Per effettuare l'importazione direttamente in R, è sufficiente eseguire le seguenti istruzioni:
  • invece di cliccare su "Preleva i dati su foglio di calcolo", tasto destro > copia indirizzo;
  • digitare in R l'istruzione riportata di seguito (nelle prime tre righe, si può notare l'indirizzo che ho copiato al passo precedente).
  • Sucessivamente, in R sarà disponibile il data.frame "db" con i dati del NASDAQ.
db<-read.table("http://ichart.yahoo.com/table.csv?s=%5EIXIC&d=8&e=21&f=2010&g=d&a=1&b=5&c=1971&ignore=.csv",
dec=".",
sep=",",
header=T)

24 giugno 2010

Test F nel DOE per distribuzioni non normali

Chiunque si occupa di DOE (Design of Experiment), quindi di applicazioni della statistica in ambito industriale, si trova nella situazione di dover eseguire un test F per verificare la significatività dei trattamenti e delle loro interazioni. Parlando in un gergo più generale, non specifico della Statistica Industriale, tale analisi consiste (in genere) nell'esecuzione di una ANOVA, che sappiamo essere legata alle ipotesi di normalità e omoschedasticità.
La deviazione dall'assunto di normalità viene gestita mediante analisi non parametriche, mediante trasformazioni delle variabili, oppure giustificando il tutto mediante la robustezza del metodo allo scostamento da tale distribuzione.
In realtà, un'importante giustificazione è riportata in Design and Analysis of Experiments, noto testo di Montgomery. Secondo quanto evidenziaato, infatti, basta pensare al test F in un contesto non parametrico e, più precisamente, basato sulla teoria dei permutation test.
Nell'ipotesi nulla di assenza di diversa influenza tra trattamenti, è possibile costruire l'insieme di tutte le possibili suddivisioni (senza ripetizione) degli N elementi in k gruppi, dove k è il numero di fattori, N il numero totale di misurazioni (N=n * k). Per ognuna di queste suddivisioni, possiamo calcolare la statistica F (rapporto tra MSE) e considerare come si distribuisce al variare di tutte le possibili suddivisioni. A questo punto, secondo la metodologia che è alla base dei permutation test, è sufficiente verificare se il valore della F osservato mediante il nostro Disegno Fattoriale, è situato "troppo a destra" nella distribuzione ottenuta.
Ebbene, così come riportato nel testo citato, si dimostra che la distrubuzione "esatta" della statistica F calcolata in questo modo, distribuzione detta exact randomization distribution, è ben approssimata dalla distribuzione F di Snedecor, relativa all'ipotesi di normalità dei dati. Questo, in altri termini, significa che l'esecuzione di un Disegno Fattoriale mediante la F di Snedecor, quando non è valido l'assunto di normalità, può essere comunque visto come l'esecuzione di un test F non parametrico di tipo permutation test (continuando, quindi, a rimanere valido l'intero esperimento!).

20 maggio 2010

Grafici in PostgreSQL con R

Nel precedente post ho evidenziato le possibilità di integrazione di R in PostgreSQL, con un esempio sull'esecuzione di un test statistico per la normalità, direttamente nel db.
In questo breve post, faccio un altro esempio per la creazione di un grafico mediante un'opportuna funzione. Anche in questo caso, il motore di creazione dei grafici è R, eseguito in background mediante il linguaggio PL/R. Le potenzialità di questo metodo di lavoro sono evidenti: in Postgres è direttamente disponibile una vastissima gamma di grafici di alto livello.
Ovviamente ciò non significa che, in seguito alla chiamata della funzione, verrà visualizzato il grafico a video. L'esecuzione della procedura, invece, andrà a creare un grafico (nel mio caso, un file jpeg) in un'opportuna cartella.
Il codice per la creazione della funzione è il seguente e penso sia abbastanza immediato per gli utenti di R.

CREATE OR REPLACE FUNCTION createGraph(tb text)
RETURNS text AS
'
sql<-paste("select * from", tb)
rs<-pg.spi.exec(sql)
x<-rs[,1]
y<-rs[,2]
jpeg("graph.jpg")
plot(x,y)
dev.off()
print("done")
'
LANGUAGE 'plr';


L'utente dovrà successivamente scegliere un'opportuna tabella contenente dati da visualizzare in un grafico a due dimensioni. I dati saranno quelli contenuti in due specifici campi. Quindi, per esempio, la chiamata della funzione:

SELECT createGraph('tbOrdini');


andrà a creare un file jpg, contenente il grafico che in R visualizzo con il comando plot(x,y). Sottolineo che la directory di default in cui viene salvato il file è la cartella '...\PostgreSQL\8.X\data'. Ovviamente, è possibile cambiare il percorso in cui salvare il file .jpg, specificandolo nel comando jpeg (utilizzato in PL/R), ma questo potrebbe comportare qualche problema agli utenti Vista, nel caso dell'eventuale assenza di permessi in scrittura.
Ovviamente, l'esempio è volutamente semplice, ma può essere personalizzato ed esteso a situazioni più complesse.

05 marzo 2010

R in PostgreSQL

L'integrazione di R con i DBMS è un aspetto molto importante per la realizzazione di soluzioni analitiche in questo linguaggio. Se si lavora in ambito industriale, ad esempio, i dati saranno raccolti in un database. Quindi, sarà necessario sviluppare un'interfaccia "facile" al motore di calcolo e permettere all'utente di interrogare i dati, sia per estrarre informazioni "semplici" (in tal caso R dovrebbe essere superfluo), sia per applicare una qualche forma di sintesi. Se per quest'ultimo tipo di elaborazione, le funzioni di aggregazione previste nel db non fossero sufficienti, è possibile ricorrere ad R. Una prima possibilità, sicuramente molto più diffusa, è quella di lavorare importando i dati in R ed eseguendo, direttamente in tale ambiente, le necessarie elaborazioni. Tale tipo di approccio, ad esempio, lo si realizza facilmente mediante il package RODBC.
Esiste tuttavia un'altra possibilità che, in base ad una mia personale sensazione, è poco conosciuta. Nell'universo dei DBMS, esiste ed è molto diffuso PostgreSQL . Per tale tipo di database, è prevista la possibilità di utilizzare un particolare linguaggio procedurale, ossia PL/R, che permette di scrivere (ed utilizzare) direttamente in PostgreSQL, funzioni in linguaggio R (in realtà esiste anche la possibilità di lavorare in R mediante RPgSQL, ma spero di dedicarci un post a parte). Quindi, saranno disponibili tutte le normali funzioni già previste in R, nelle varie librerie, così come sarà possibile sviluppare nuove funzioni di PostrgreSQL, utilizzando la sintassi di R.
Per l'utilizzo di tali modalità, ovviamente, è necessario avere una certa conoscenza di questo database, oltre che una certa familiarità con R. Per le problematiche di installazione (in particolare, in ambiente Windows) ed utilizzo, in generale, si rimanda ai siti:
Oltre a fare questa segnalazione, quindi, intendo riportare degli esempi utili ad evidenziare le potenzialità di tale modalità di sviluppo.

Immaginiamo di progettare, in ambito industriale, un database che raccoglie dati sulla produzione di semilavorati in un centro siderurgico, ad esempio dei tubi di acciaio. Periodicamente, a campione, viene misurata e registrata la circonferenza esatta di tali prodotti che, ovviamente, deve rispettare determinati livelli di tolleranza prestabiliti. In tale processo industriale, quindi, ci si aspetta un "errore" nella produzione, ossia degli scostamenti dalla circonferenza media prevista. Per controlloare questo aspetto, ad esempio, si cercherà di testare l'ipotesi di normalità dei dati, quindi la casualità degli scarti. Nell'esempio che propongo successivamente, quindi, vado proprio ad eseguire un test statistico sulla normalità dei dati direttamente nel database, in maniera "nativa". A mio parere, questo è un risultato eccezionale! Non mi sembra esistano possibilità analoghe in altri DBMS!
Non è superfluo evidenziare che si tratta solo di un esempio! Nell'ambito del controllo statistico della qualità, il controllo della produzione è realizzato mediante processi più complessi.

Quindi, riepilogando, è sufficiente crare un'apposita funzione in PostgreSQL, mediante il seguente codice:

CREATE OR REPLACE FUNCTION testNormality(tb text, col text)
RETURNS double precision AS
'
sql<-paste("select", col, "from", tb)
rs<-pg.spi.exec(sql)
shapiro.test(rs[,1])$p.value
'
LANGUAGE 'plr';

In generale, in PostgreSQL è possibile utilizzare diversi estensioni di linguaggio procedurale (come pgSQL, Python, Java ...), che rendono altamente personalizzabili le funzioni presenti nel database. Nello specifico, qui stiamo usando il linguaggio PL/R che, appunto, mi permette di scrivere in R. La documentazione ufficiale la trovate qui. In particolare, si noti che tra gli apici va riportato il codice R, che verrà eseguito alla chiamata della funzione.
Nel nostro caso, quindi, sto definendo la funzione testNormality che prende in input due parametri di tipo testo: il nome di una tabella (tb) e il nome di un campo di quest'ultima (col). Tali informazioni vengono "passate" ad R in cui creo la stringa sql che, appunto è la query in linguaggio SQL:

SELECT col FROM tb;

10 febbraio 2010

Statistica e Scienza dell’Informazione: riflessioni di uno statistico

Non so quanti di voi siano informati del fatto che la SIS, Società Italiana di Statistica, dedica una sezione del sito per pubblicare il Sis-Magazine, giornale online ricco di riflessioni. Io ho l'impressione che sia poco conosciuto nel mondo di quelli che chiamo "statistici applicati", ossia quelli che lavorano per aziende private, ovviamente in ambito statistico. E' evidente che vengono trattati anche argomenti interessanti per questo tipo di utenti.
Ebbene, lo scorso mese è stato pubblicato un articolo (veramente bello) del prof. Isabella Verdinelli, ricco di riflessioni sulle similarità e differenze tra Metodi Statistici e Metodi di Machine Learning. Questo il link, invito tutti a leggerlo!
In merito a quanto scritto, io direi che uno statistico deve essere oggi anche un informatico: deve programmare, deve lavorare con i database, deve conoscere i sistemi operativi. Inoltre, non è pensabile oggi di proporre un metodo statistico senza valutare la sua fattibiltà da un punto di vista computazionale. Lo sforzo importante, in base a quelle che sono state le mie esperienze lavorative, sarebbe quello di "orientare" maggiormente all'informatica i corsi di laurea in Statistica (...ammesso ovviamente che questo oggi non stia già accadendo...).