Università di Bologna - Facoltà di Scienze Statistiche Laurea Triennale in Statistica e Ricerca Sociale Corso di Analisi di Serie Storiche e Multidimensionali Prof.ssa Marilena Pillati Introduzione a R Ovvero: Come non avere limiti nella programmazione se non quelli dettati dalla nostra stessa mente Francesca Marta Lilja Di Lascio [email protected] Facoltà di Scienze Statistiche 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 F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 2 1. Cosa è R e a cosa serve • È un linguaggio di programmazione ad alto livello • È un linguaggio interpretato • È un linguaggio oriantato all’analisi dei dati e fornisce un ambiente integrato di risorse software per la elaborazione interattiva e la gestione di dati, e per la visualizzazione di grafici • Dispone di interfacce verso programmi scritti con altri linguaggi (es.: C++ e Fortran) • Ambiente di sviluppo e package open source disponibili free in internet. È uno dei più usati linguaggi per le analisi statistiche F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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 (Univ. 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 - Fac. di Scienze Statistiche, 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, 2004. - J. Maindonald, Using R for Data Analysis and Graphics http://wwwmaths.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 - R Development Core Team, Writing R extensions http://cran.rproject.org/doc/manuals/R-exts.pdf F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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 to File. . . ” - File .Rdata: è 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 un editor di testo alternativo. F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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 packages (le librerie di R)! • 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() F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 7 5. Nozioni di base 1/16 • Le principali strutture dati fornite da R sono: → Vettori, Array e Matrici, Fattori, Liste e Data frame • Le entità su cui R opera sono informalmente definite come oggetti che sono caratterizzati da attributi • Un tipo di attributo è il modo: 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 F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 8 5. Nozioni di base: Vettori numerici 2/16 • Un vettore può 1. essere assegnato ad una variabile, vecchia o nuova (non vale il viceversa), mediante x <- c(1,2) o x = 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(x,y,9) • Le operazioni aritmetiche vengono eseguite mediante simboli ‘standard’: +, ∗, −, /, sqrt(), log(), exp(),. . . • Altre funzioni comuni, tra cui quelle statistiche, vengono eseguite mediante: sum(), prod(), mean(), sd(), rnorm(), cor(), order(), . . . ⇒ Provate a fare la somma di due vettori di dimensione diversa. . . Scoprirete la cosiddetta “Regola del Riciclo”. F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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)] F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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 F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 11 5. Nozioni di base: Matrici 5/16 • Generazioni di matrici: - In modo diretto: m <- matrix(1:12, nrow=4) 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:12,nrow=4) p.s.2 Chi è curioso scopra da solo cosa sono gli array! F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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 componenti: li2$val - un indice “a caratteri”: li2[["val"]] • Si concatenano tramite la funzione c: c(li1,li2) F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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,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 F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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). 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. . . F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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. {x <- 0; y <- 1; z <- x + y; z + 3; z} Si noti che i blocchi vengono valutati solo dopo la chiusura delle parentesi graffe. F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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){y <- x^2}else{x} (ii) La funzione ifelse: ifelse (condizione, a, b) ifelse (x <= 0, y <- x^2, x) Provate a dare x <- 2 e poi x <- -2 e vedete cosa accade! (iii) La funzione switch: switch (istruzione, lista) x <- 2 switch(x, 7, mean(1:100), rnorm(3)) F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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 <- vector(length=5) for(i in 1:5){ v[i] <- round(runif(1),3) } (ii) while: while (condizione), blocco di istruzioni (condizione è un’espressione logica) f <- function(y){ i <- 0; while (y > 1){ y <- y/2; i <- i + 1; } i } f(3) F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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 } f(3); f(-3) F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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: 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") write(m, "dati"); dati3 <- scan(m) Create una tabella in Excel, slavatela in estensione CSV e caricatela digitando: read.csv(file, header = TRUE, sep = ",", ...) Dal prompt caricate dati in memoria: data(iris) F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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) F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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 F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 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(cluster), library( ) apre una finestra contenente la lista dei pacchetti installati • 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) F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 23 6. Potenzialità e Limiti di R • Potenzialità: infinite! • Limiti: nessuno se non - le nostre conoscenze teoriche - la nostra fantasia e la nostra creatività F. Marta L. Di Lascio – Fac. di Scienze Statistiche, Univ. di Bologna 24