Università di Bologna - Facoltà di Scienze Statistiche Laurea Triennale in Statistica e Ricerca Sociale Corso di Analisi di Serie Storiche e Multidimensionali Introduzione a R Ovvero: Come non avere limiti nella programmazione se non quelli dettati dalla nostra stessa mente Francesca Marta Lilja Di Lascio dilascio@stat.unibo.it Dip. di Scienze Statistiche P. Fortunati Università di Bologna 1
Outlines 1. Cosa è R e a cosa serve 2. Dove nasce, Dove si scarica e Come si installa 3. Bibliografia essenziale 4. Come si organizza il lavoro e si diventa autonomi (2/2) 5. Nozioni di base: dai vettori alle funzioni, dai data frame alle strutture logiche (16/16) 6. Potenzialità e limiti di R 2
1. Cosa è R e a cosa serve È un linguaggio di programmazione ad alto livello interpretato È un linguaggio orientato all analisi dei dati: permette di strutturare, elaborare, gestire e visualizzare dati complessi ed eterogenei, fornendo un ambiente integrato di risorse software Supporta paradigmi di programmazione object oriented e dispone di interfacce verso programmi scritti con altri linguaggi (es: C++, Fortran) Ambiente di sviluppo e package open source disponibili free in internet. È uno dei più usati linguaggi per le analisi statistiche 3
2. Dove nasce, Dove si scarica e Come si installa R è un progetto Open Source (conforme per la maggior parte ad S, un linguaggio ed un sistema sviluppati da John Chambers e collaboratori negli anni 80 presso i Laboratori Bell, da cui deriva) Inizialmente sviluppato da R. Ihaka and R. Gentleman (Università di Auckland (NZ)) e, attualmente, da una comunità internazionale di ricercatori e sviluppatori in ambito accademico e industriale Opera attraverso il web: CRAN the Comprehensive R Archive Network: http://cran.r-project.org/ (ci sono anche mirror locali) Archivi software e documentazione: http://cran.r-project.org/ (CRAN the Comprehensive R Archive Network) Disponibili distribuzioni binarie per: Win, Mac e Linux L installazione domestica sul proprio PC è semplice. F. Marta L. Di Lascio - Dip. di Scienze Statistiche P. Fortunati, Univ. di Bologna 4
3. Bibliografia essenziale Libri e manuali introduttivi disponibili on-line o in biblioteca: - W. Venables e D.M. Smith, An Introduction to R http://cran.rproject.org/doc/manuals/r-intro.pdf, 2006. - J. Maindonald, Using R for Data Analysis and Graphics http://www.maths.anu.edu.au/ johnm, 2000. - S. M. Iacus e G. Masarotto, Laboratorio di statistica con R McGraw Hill, Milano, 2003. Libri e manuali specifici sul linguaggio e riguardanti lo sviluppo dei Package - R Development Core Team, R Language Definition http://cran.rproject.org/doc/manuals/r-def.pdf, 2006. - R Development Core Team, Writing R extensions http://cran.rproject.org/doc/manuals/r-exts.pdf, 2006. - R Development Core Team, R Data Import/Export http://cran.rproject.org/doc/manuals/r-data.pdf, 2006. 5
4. Come si organizza il lavoro 1/2 Specificare la directory di lavoro identificabile digitando getwd() e modificabile mediante setwd(). Altrimenti andate in File Changedir... Salvare files dei dati e dei codici digitati nella directory di lavoro specificata - File.Rhistory: riporta i codici digitati sul prompt. Si salva da File Save History... - File.Rdata: e il vostro work space. Si salva da File Save Workspace... Le immagine possono essere salvate in diversi formati:.ps,.bmp,.jpg,.pdf,.png,.emf. Potete sempre richiamare ogni workspace di R, importandolo in altre sessioni, mediante load() o File Load Workspace... o avviando R dal file.rdata di interesse. Ditemi che conoscete Latex! Se no, : (...usate WordPad. 6
4. Come si diventa autonomi 2/2 Studiare, studiare e studiare! Cercare il materiale cartaceo ed elettronico, leggerlo e provare a riprodurre cose già fatte per vedere se si sta eseguendo tutto bene Studiare la teoria statistica prima di usare i pacchetti R aiuta mediante - Manuali in pdf, manuali in HTML, documentazione dei package (dall Help)... - Digitando dal prompt uno dei seguenti comandi: help(xxx)? xxx help.search( xxx ) help.start() 7
5. Nozioni di base 1/16 Le principali strutture dati fornite da R sono: Vettori, Matrici, Fattori, Liste e Data frame I vari oggetti che R può maneggiare sono: Character, Numeric, Integer, Logical e Complex Esempi: c(1,4,5): crea un vettore di interi c( A, B, C ): crea un vettore di caratteri c( New York, micio, 7 ): crea un vettore di stringhe c( TRUE, FALSE ): crea un vettore logico 8
Un vettore può 5. Nozioni di base: Vettori numerici 2/16 1. essere assegnato ad una variabile, vecchia o nuova, mediante x1< c(1,2) o x2=c(1,2) o assign( x3,c(1,2)) 2. essere assegnato ad una nuova variabile cancellando il contenuto precedente: y< 2, y< c(3,4) 3. essere concatenato ad altri: z< c(x1,y,9) Le operazioni aritmetiche vengono eseguite mediante simboli standard : +,,, /, sqrt(), log(), exp(),... Altre funzioni comuni, tra cui quelle statistiche, vengono eseguite mediante: sum(x1,y), prod(y), mean(x1), sd(x1), rnorm(n), cor(x1,y), order(x1),... Provate a fare la somma di due vettori di dimensione diversa...scoprirete la cosiddetta Regola del Riciclo. 9
5. Nozioni di base: Vettori logici e di caratteri 3/16 Vettori di caratteri: x < c( A, T, G ), y < c( ATA, GCTCG ) possono essere concatenati: paste( A, T, G, sep= ) Vettori logici: Es.1: x < 1:5; x; y < x > 3; y Es.2: c2 < gatto == topo dove <, <=, >, >=, ==,! = sono gli operatori logici Es.3: c1< c(3,4)>c(2,6); c2< c(1,2)<c(2,8); c1&c2 dove &,,! sono i connettivi logici, che operano elemento su elemento Domanda: Come si accede agli elementi di un vettore? Risposta: Esiste la funzione [ ]. Es: x < c(1:5, NA, NA); x[!is.na(x)] 10
5. Nozioni di base: Fattori 4/16 I fattori sono strutture dati per rappresentare valori che possono assumere solo valori discreti, definiti come livelli. Es: dati qualitativi o dati ordinali. Esempio: trt < factor(rep(c( Control, Treated ),c(3,4))) levels(trt): visualizza i livelli del fattore str(trt): visualizza la struttura del fattore summary(trt): fornisce una tabella delle frq dei livelli 11
Generazioni di matrici: 5. Nozioni di base: Matrici 5/16 - In modo diretto: Es.1: m < matrix(1:12, nrow=4) Es.2: m < matrix(1:12, ncol=4, byrow=true) - Mediante le funzioni cbind ed rbind: x < 1:3, y < 4:6 m < cbind(x,y) oppure m < rbind(x,y) Richiamo dei suoi attributi: length(m); dim(m); mode(m) Richiamo dei suoi elementi: m[1,1]; m[1,]; m[,1]; m[1 : 2,1 : 2] Operazioni semplici e non: +, % %,, t(), diag(), solve()... p.s. Ricorda la regola del riciclo!! Es: m < matrix(1:10,nrow=4) p.s.2 Chi é curioso scopra da solo cosa sono gli array! 12
5. Nozioni di base: Liste 6/16 Le liste rappresentano un insieme ordinato di oggetti (componenti) che possono non essere dello stesso tipo o modo, ad es: un vettore numerico, un valore logico, una matrice, una funzione o anche un altra lista. La lista è quindi una struttura dati ricorsiva. Es.1: li1 < list(true, c(1,3,7,0,9)) Es.2: li2 < list(val=true, vector=c(1,3,7,0,9)) Richiamo/Accesso ai suoi elementi tramite: - un indice numerico: li1[[1]] - il nome delle componenti: li2$val - un indice a caratteri : li2[[ val ]] Si concatenano tramite la funzione c: c(li1,li2) 13
5. Nozioni di base: Data Frame 7/16 Può essere considerato una matrice le cui colonne rappresentano dati eterogenei (variabili con attributi differenti): vettori (numerici, a caratteri, logici), fattori, matrici, liste, altri data frame; Es.: li < list(a=matrix(1:12, nrow=3) v=c( G, G, C ) m < matrix(13:18, nrow=3), daf < data.frame(li,v,m) Si accede ai suoi elementi tramite: un indice numerico: daf[[2]] il nome delle componenti: daf$v un indice a caratteri: daf[[ v ]] un indice a modo matrice : daf[1,2] un indice di espressioni logiche: daf[daf$a.2> 4,] Anche per i data frame si può usare str() e summary() Unica limitazione: le componenti devono avere tutte la stessa lunghezza 14
5. Nozioni di base: Programmi e Funzioni 8/16 Un programma in linguaggio R è costituito da una sequenza di espressioni che vengono valutate dall interprete una alla volta e, se sintatticamente completa, viene ritornato un valore che può essere assegnato ad una variabile I programmi vengono realizzati tramite funzioni che possono essere definite dall utente (Es. 1) o richiamate/caricate da R (Es. 2). Es.1: sum2 < function(x,y) { x+y } sum2(4,7) - x,y sono gli argomenti formali e 4,7 quelli attuali mentre x+y è il corpo della funzione che é un espressione del programma Es.2: Dal prompt digitare sum oppure (1) Dal prompt source( name ) o (2) Dal menu File/Source R code... 15
5. Nozioni di base: Strutture di Controllo 9/16 I programmi sono eseguiti sequenzialmente, istruzione dopo istruzione, ma in alcuni casi il flusso di esecuzione può scegliere vie alternative o ripetersi ciclicamente. In R esistono strutture di controllo specifiche per regolare il flusso di esecuzione di un programma: Blocchi di istruzioni, Istruzioni condizionali e Istruzioni di looping. 1. Blocchi di Istruzioni Le istruzioni possono essere raggruppate insieme utilizzando le parentesi graffe. Una sequenza di istruzioni fra parentesi graffe costituisce un blocco. Es.: {x < 0; y < 1; z < x + y; z + 3; } Si noti che i blocchi vengono valutati solo dopo la chiusura delle parentesi graffe. 16
5. Nozioni di base: Strutture di Controllo 10/16 2. Istruzioni Condizionali: sintassi ed esempi (i) if... else: if (condizione), blocco1, else, blocco2 if (x<=0) {x 2} else {x} Provate a dare x < 2 e poi x < -2 e vedete cosa accade! (ii) La funzione ifelse: ifelse (condizione, a, b) ifelse (x <= 0, x 2, x) (iii) La funzione switch: switch (istruzione, lista) x < 3 switch(x, 2+2, mean(1:100), rnorm(3)) 17
5. Nozioni di base: Strutture di Controllo 11/16 3. Istruzioni di Looping: sintassi ed esempi (i) for: for (nome in v) blocco di istruzioni (v vettore o lista) v=round(runif(50) 5) for(i in 1:5) { (v[i]= M ) } v (ii) while: while (condizione), blocco di istruzioni f < function(y) { i < 0; while (y > 2) { y < y/2; i < i + 1; } i } 18
5. Nozioni di base: Strutture di Controllo 12/16 3. Istruzioni di Looping: sintassi ed esempi (iii) repeat: repeat, blocco di istruzioni f1 < function(y) { i < 0; repeat { if (y <= 1) break; y < y/2; i < i + 1; } i } 19
5. Nozioni di base: Import/Export Dati 13/16 In R esistono diverse funzioni di input/output di file Per maggiori dettagli si consulti il manuale R Data Import/Export disponibile on-line ed installato sulle macchine del laboratorio Facciamo qualche esempio: Es.1: m < matrix(1:6,nrow=2); v < c( B, M ); dati < data.frame(m,v); write.table(dati, file= dati.df ) dati2 < read.table( dati.df ) Es.2: Create una tabella in Excel, salvatela in estensione CSV e caricatela digitando: read.csv(file, header = TRUE, sep =,,...) Es.3: Dal prompt caricate dati in memoria: Es.: data(iris) Es. 4: Per l elenco dei dataset in memoria digitare: data() 20
5. Nozioni di base: L Ambiente Grafico 14/16 R è dotato di un ambiente grafico versatile e facile da usare. Facciamo qualche esempio: x < rnorm(50), plot(x) plot(sin,0,2*pi, type= l,col= blue,main= Funzione seno ) data(iris), plot(iris), boxplot(iris[,1:4], col= yellow ) z < rnorm(100), qqnorm(z) Per la grafica 3D: image, persp, contour Per un esempio di funzioni grafiche in R si esegua: demo(graphics) 21
5. Nozioni di base: Package 15/16 Forniscono uno strumento semplice ed efficiente per gestire collezioni di funzioni e di dati (librerie) Vengono caricati in memoria quando necessario e possono essere scaricati in qualsiasi momento. Funzioni, dati e documentazione sono installati con un singolo comando Estendibili ed adattabili: si possono creare nuovi package (si veda il manuale on line Writing R extensions ) I package possono essere installati: 1. direttamente dal sito CRAN selezionando dal menu Packages della finestra RGui l opzione Install packages from CRAN 2. da file locali compressi selezionando dal menu Packages l opzione Install packages from local zip files 22
5. Nozioni di base: Package 16/16 Analogamente l aggiornamento di package già installati può essere effettuato selezionando l opzione Update packages from CRAN. Per caricare in memoria i package (per poterli utilizzare) si può: 1. Selezionare, dal menu Packages, l opzione Load package 2. Digitare dal prompt: library(nome package) Es: library(), library(cluster) La documentazione sui package installati si trova: 1. Selezionando dal menu Help l opzione HTML help; poi Packages dalla pagina del browser, si sceglie il package desiderato e si accede alle informazioni dettagliate in formato HTML 2. Digitare dal prompt: help(package=xxx) 23
6. Potenzialità e Limiti di R Potenzialità: infinite! Limiti: nessuno se non - le nostre conoscenze teoriche - la nostra fantasia e la nostra creatività 24