STATISTICA LAB Analisi dei dati con R - Ex 1 Marta Nai Ruscone LIUC - Università Carlo Cattaneo, Castellanza STATISTICA LAB STATISTICA LAB R è un ’ambiente’ per la gestione e l’analisi statistica di dati e la produzione di grafici. E’ disponibile gratuitamente sotto i vincoli della GPL (General Public Licence). Informazioni, risorse: http://www.r-project.org/ STATISTICA LAB 1 La versione più recente di R può essere scaricata dalla pagina http://cran.r-project.org/bin/windows/base/ 2 Una volta scaricato il file .exe sul proprio computer è sufficiente lanciare il programma di installazione STATISTICA LAB R è case sensitive E’ un ambiente interattivo, ossia i comandi producono una risposta immediata In R un’analisi è fatta attraverso una serie di passi, con risultati intermedi che sono immagazzinati in oggetti. 1 2 Rispetto ad altri programmi (SPSS, ecc), R fornisce un output minimo. I rimanenti risultati possono essere successivamente richiamati tramite opportuni comandi. STATISTICA LAB Iacus, Masarotto Laboratorio di statistica con R, McGraw-Hill Italia, 2003. Crivellari Analisi statistica dei dati con R, Apogeo, 2006. In rete sono inoltre disponibili numerose dispense per i primi passi di R. In particolare nel sito http://cran.r-project.org/other-docs.html/ si possono trovare anche dispense in italiano (sezione Other languages). STATISTICA LAB Avviato il programma R, apparirà una finestra (console) con il simbolo di prompt < STATISTICA LAB Una volta concluso il comando si digita il tasto ’Invio’: 1 se il comando è completo, comparirà una nuova riga di comando con il simbolo di prompt 2 altrimenti comparirà una nuova riga di comando con il simbolo + che sta a significare che il comando deve essere completato. Per richiamare i comandi già inseriti, basta usare i tasti ↑ e ↓ per scorrere in avanti e indietro. STATISTICA LAB La console di R può essere utilizzata come semplice calcolatrice. Alcuni esempi: > 3 + 2 [1] 5 > 2 * 2 [1] 4 > (2 - 3)/6 [1] -0.1666667 > 2^2 [1] 4 > sqrt(9) [1] 3 > log(1) [1] 0 STATISTICA LAB Operatori Relazioni di confronto: == ! = < <= >= logici: & per AND, | per OR, ! per NOT STATISTICA LAB Assegnare ’oggetti’ in R I risultati dei calcoli atti in R possono essere salvati con un nome scelto dall’utilizzatore, per essere richiamati in qualsiasi momento durante la sessione di lavoro. Per assegnare un nome al risultato dell’operazione si impiega il comando <> esempio <- 2 + 2 > esempio [1] 4 1 I nomi possono contenere un qualunque carattere alfa-numerico. 2 Non devono mai iniziare con un numero, nè con spazi vuoti. 3 E’ bene non dare ad una variabile il nome di una funzione o di un operatore (ad es. c, sum. etc). STATISTICA LAB Lo spazio di lavoro Gli oggetti vengono salvati nell ’spazio di lavoro’ (workspace) Il comando ls() permette di visualizzare i nomi degli oggetti memorizzati. Lo spazio di lavoro, di default, si trova nella cartella: C : \Programmi\R\R − (numero versione) per eliminare uno o più oggetti dallo spazio di lavoro si utilizza il comando rm(). Esempio: rm(x,y,z) per eliminare tutti gli elementi salvati si scrive: rm(list=ls()) STATISTICA LAB Salvataggio dello spazio di lavoro Alla fine di ogni sessione R chiede se si vuole salvare lo spazio di lavoro. Lo spazio di lavoro viene salvato in un file chiamato ’.RData’ nella cartella corrente. La successione di comandi viene salvata in un file chiamato ’.RHistory’. Questo file contiene tutti i comandi digitati. Quando si riapre R, cliccando sul file ’.RData’, lo spazio di lavoro ed i comandi vengono automaticamente caricati. STATISTICA LAB Cartella di lavoro Per cambiare cartella di lavoro, dal menù di R, cliccate su ’Cambia directory’, nel menu ’File’ si può scegliere la cartella su cui salvare il lavoro: STATISTICA LAB Cartella di lavoro In alternativa: setwd([path]) dove [path] indica la cartella di lavoro di destinazione. Per vedere qual è la cartella di lavoro corrente, si usa il comando getwd(). STATISTICA LAB Pacchetti Le funzioni di R sono organizzate in pacchetti, alcuni dei quali sono già disponibili quando si accende il programma. per alcune funzioni è però necessario caricare prima il pacchetto. Si può utilizzare direttamente il comando: library(nomepacchetto) Oppure il comando: require(nomepacchetto) Per avere informazioni generali sul pacchetto: help(package="nomepacchetto") STATISTICA LAB Pacchetti In alternativa, dal menù ’Pacchetti’ si scegie l’opzione ’Carica pacchetto’ STATISTICA LAB Pacchetti In tal caso apparirà una finestra con la lista dei pacchetti già installati. STATISTICA LAB Pacchetti Oppure: library() apparirà l’elenco delle librerie installate. STATISTICA LAB Pacchetti Per installare un pacchetto non presente nella versione di R, dal menù ’Pacchetti’ si seleziona ’Installa pacchetti’ STATISTICA LAB Pacchetti Successivamente, si dovrà selezionare il mirror da cui scaricare il pacchetto. STATISTICA LAB Pacchetti Infine selezionare il pacchetto dalla lista STATISTICA LAB Pacchetti In alternativa, si può caricare il file compresso del pacchetto dal seguente sito: http://cran.r-project.org/web/packages/ STATISTICA LAB Help help (mean) oppure ?mean cerca in tutte le librerie che sono state caricate. ??mean cerca in tutte le librerie che sono state installate. Se si vuole cercare nel web: > library(RSiteSearch) > RSiteSearch("mean") STATISTICA LAB Help Per ottenere esempi e demo di comandi e librerie: library(help=lattice) example(command) example(mean) example(sd) demo(image) Per reperire altre demo: demo(package = .packages(all.available = TRUE)) STATISTICA LAB Vettori Un vettore è un insieme ordinato di numeri. In R i vettori sono considerati vettori-colonna. Per definire un vettore si usa il comando c(). Esempio: > x <- c(1, 2, 3, 6, 7) > x [1] 1 2 3 6 7 Il verso della freccia indica cosa viene assegnato a chi. STATISTICA LAB Operazioni tra vettori Gli operatori aritmetici base possono essere utilizzati per compiere operazioni tra vettori: Esempio: > x <- c(1, 2, 3, 6, 7) > y <- c(2, 3, 4, 5, 5) > x + y [1] 3 5 7 11 12 > x * y [1] 2 6 12 30 35 STATISTICA LAB Operazioni tra vettori Per il prodotto scalare tra due vettori: > x <- c(1, 2, 3, 6, 7) > y <- c(2, 3, 4, 5, 5) > t(x) %*% y [,1] [1,] 85 dove la funzione t() opera la trasposizione del vettore. STATISTICA LAB Operazioni tra vettori Esempio: > x <- c(1, 2, 3, 6, 7) > y <- c(2, 3, 4, 5, 5) > sum(x * y) [1] 85 > (t(x) %*% y) [1,] [,1] 85 dove la funzione t() opera la trasposizione del vettore. STATISTICA LAB Estrazione di elementi da un vettore Gli elementi di un vettore possono essere selezionati tramite un vettore di indici racchiuse tra parentesi quadre. > y <- c(2, 3, 4, 5, 8) > y[1] [1] 2 > y[y <= 3] [1] 2 3 > y[c(1, 3)] [1] 2 4 > y[-c(1, 3)] [1] 3 5 8 STATISTICA LAB Altre operazioni Per calcolare le differenze esistenti tra i valori di x. > x <- c(4, 5, 7, 2, 3, 8) > diff(x) [1] 1 2 -5 1 5 Il vettore ritornato è costituito da n-1 elementi. STATISTICA LAB Altre operazioni Per conoscere i valori distinti presenti in x. > x <- c(1, 1, 2, 2, 2, 4, 8) > unique(x) [1] 1 2 4 8 STATISTICA LAB Altre operazioni Per rovesciare gli elementi di x > x <- c(1, 3, 2, 3, 2, 4, 8) > rev(x) [1] 8 4 2 3 2 3 1 Per ordinare in modo crescente i valori di x > sort(x) [1] 1 2 2 3 3 4 8 Per ordinare in modo decrescente i valori di x > sort(x, decreasing = T) [1] 8 4 3 3 2 2 1 oppure > rev(sort(x)) [1] 8 4 3 3 2 2 1 STATISTICA LAB Which Per cercare gli elementi all’interno di un vettore si usa il comando which > x <- -3:8 > which(x < 2) [1] 1 2 3 4 5 > which(x == 2) [1] 6 > which(x >= 2) [1] 6 7 8 9 10 11 12 > which((x >= -1) & (x < 5)) [1] 3 4 5 6 7 8 STATISTICA LAB Posizioni nel vettore x dove sono presenti dei valori duplicati precedentemente > x <- c(1, 1, 3, 4, 5) > which(duplicated(x)) [1] 2 Posizioni degli elementi che hanno valori uguali al massimo > which(x == max(x)) [1] 5 STATISTICA LAB L’operatore seq seq genera un vettore che contiene una sequenza regolare di numeri, generata in base a determinate regole. > seq(1, 5) [1] 1 2 3 4 5 > seq(1, 3, length = 5) [1] 1.0 1.5 2.0 2.5 3.0 > seq(1, 3, by = 0.5) [1] 1.0 1.5 2.0 2.5 3.0 > 1:5 [1] 1 2 3 4 5 Si osservi che seq(1,5) e 1:5 forniscono lo stesso risultato. STATISTICA LAB L’operatore rep rep genera un vettore in cui un numero, o una sequenza di numeri, o un vettore viene ripetuta un dato numero di volte. Esempi: > rep(1, 5) [1] 1 1 1 1 1 > rep(c(1, 2), 2) [1] 1 2 1 2 > seq(1, 3, by = 0.5) [1] 1.0 1.5 2.0 2.5 3.0 > x <- c(1, 2, 3, 4) > rep(x, 2) [1] 1 2 3 4 1 2 3 4 STATISTICA LAB Matrici Una matrice è un insieme di numeri con due dimensioni. Il comando per generare una matrice è matrix. Di norma una matrice viene generata con la seguente sintassi: A <- matrix(x,nrow=n,ncol=m, byrow=...) dove: x è un vettore di dati; nrow e ncol sono, rispettivamente il numero di righe e di colonne; byrow è un operatore logico. Di default è FALSE, per cui la matrice viene costruita per colonna. STATISTICA LAB Esempi di matrici > A <- matrix(1:8, nrow = 2) > A [1,] [2,] [,1] [,2] [,3] [,4] 1 3 5 7 2 4 6 8 > B <- matrix(1:8, nrow = 2, byrow = TRUE) > B [1,] [2,] [,1] [,2] [,3] [,4] 1 2 3 4 5 6 7 8 > B <- matrix(1:8, ncol = 4, byrow = T) > B [1,] [2,] [,1] [,2] [,3] [,4] 1 2 3 4 5 6 7 8 STATISTICA LAB Esempi di matrici Matrice di 0 > matrix(0, 2, 3) [,1] [,2] [,3] [1,] 0 0 0 [2,] 0 0 0 Matrice di 1 > matrix(1, 2, 3) [1,] [2,] [,1] [,2] [,3] 1 1 1 1 1 1 Riempimento senza assegnazione di valori (NA) > matrix(, 2, 3) [1,] [2,] [,1] [,2] [,3] NA NA NA NA NA NA STATISTICA LAB Esempi di matrici Alcuni esempi > A <- matrix(1:18, 3, 6) > A[1:2, 3:4] [,1] [,2] [1,] 7 10 [2,] 8 11 > A[-c(1, 3), ] [1] 2 5 8 11 14 17 STATISTICA LAB Matrici da unione di più vettori Una matrice può anche essere generata unendo più vettori o matrici. I comandi cbind e rbind, rispettivamente, generano una matrice unendo i vettori (le matrici per colonna e per riga). STATISTICA LAB Esempi di matrici Esempi: > x <- c(1, 2, 3, 6) > y <- c(2, 3, 4, 5) > rbind(x, y) x y [,1] [,2] [,3] [,4] 1 2 3 6 2 3 4 5 > cbind(x, y) [1,] [2,] [3,] [4,] x 1 2 3 6 y 2 3 4 5 STATISTICA LAB Esempi di matrici Esempio: > x <- c(1, 2, 3, 6) > A <- matrix(1:8, nrow = 2) > rbind(x, A) x [,1] [,2] [,3] [,4] 1 2 3 6 1 3 5 7 2 4 6 8 STATISTICA LAB Operazioni tra matrici Le operazioni aritmetiche sulle matrici sono eseguite termine a termine per colonne. Le operazioni devono coinvolgere due matrici che hanno le ’stesse dimensioni’, o una matrice ed un vettore. In questo caso, la lunghezza del vettore deve essere un sottomultiplo di quella della matrice. STATISTICA LAB Operazioni tra matrici > A <- matrix(1:6, ncol = 2) > B <- matrix(11:16, ncol = 2, byrow = T) > A + B [1,] [2,] [3,] [,1] [,2] 12 16 15 19 18 22 > A - B [1,] [2,] [3,] [,1] [,2] -10 -8 -11 -9 -12 -10 STATISTICA LAB Operazioni tra matrici > A <- matrix(1:6, ncol = 2) > B <- matrix(11:16, ncol = 2, byrow = T) > A * B [1,] [2,] [3,] [,1] [,2] 11 48 26 70 45 96 > A/B [,1] [,2] [1,] 0.09090909 0.3333333 [2,] 0.15384615 0.3571429 [3,] 0.20000000 0.3750000 STATISTICA LAB Operazioni tra matrici L’operatore % ∗ % permette il prodotto matriciale tra due matrici conformi, o tra un vettore ed una matrice. Esempi: > A <- matrix(1:6, ncol = 2) > B <- matrix(11:16, ncol = 2, byrow = T) > A %*% t(B) [,1] [,2] [,3] [1,] 59 69 79 [2,] 82 96 110 [3,] 105 123 141 > t(A) %*% B [,1] [,2] [1,] 82 88 [2,] 199 214 STATISTICA LAB Estrazione di dati da una matrice Per l’estrazione dei dati bisogna tener conto del fatto che la matrice ha due dimensioni. A[i,j] estrae l’elemento che si trova nell’i-ma riga e nella j-ma colonna. Esempi: > A <- matrix(1:6, ncol = 2) > A [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > A[1, 2] [1] 4 > A[1, c(1, 2)] [1] 1 4 STATISTICA LAB Estrazione di dati da una matrice > A[2, ] [1] 2 5 > A[, 1] [1] 1 2 3 > A[-2, c(1, 2)] [1,] [2,] [,1] [,2] 1 4 3 6 STATISTICA LAB Data-frame I data-frame sono delle matrici in cui le colonne possono essere di natura differente. Sono particolarmente utili per trattare matrici di dati, in cui le colonne rappresentano le variabili e le righe le unità. Per questo motivo, di solito solo le colonne sono identificate con un nome. Il comando per generare un data-frame è data.frame L’estrazione di dati da un data-frame può essere effettuata nello stesso modo in cui si opera per le matrici. L’estrazione di una colonna da un data-frame può anche essere fatta in questo modo: nomedata-frame$nomecolonna STATISTICA LAB Esempio data-frame > data <- cars > head(cars) 1 2 3 4 5 6 speed dist 4 2 4 10 7 4 7 22 8 16 9 10 STATISTICA LAB Esempio data-frame > head(cars[1]) 1 2 3 4 5 6 speed 4 4 7 7 8 9 > names(cars) [1] "speed" "dist" STATISTICA LAB Esempio data-frame > summary(cars) speed Min. : 4.0 1st Qu.:12.0 Median :15.0 Mean :15.4 3rd Qu.:19.0 Max. :25.0 dist Min. : 2.00 1st Qu.: 26.00 Median : 36.00 Mean : 42.98 3rd Qu.: 56.00 Max. :120.00 STATISTICA LAB Esempio data-frame > str(cars) 'data.frame': $ speed: num $ dist : num 50 obs. of 2 variables: 4 4 7 7 8 9 10 10 10 11 ... 2 10 4 22 16 10 18 26 34 17 ... > str(cars[, 1]) num [1:50] 4 4 7 7 8 9 10 10 10 11 ... > cars[1:3, ] 1 2 3 speed dist 4 2 4 10 7 4 STATISTICA LAB Importare dati in R R legge i dati in ogni formato. Per i dati salvati da altri pacchetti statistici è necessario caricare il pacchetto foreign. I file di testo possono essere letti direttamente senza caricare alcun pacchetto aggiuntivo. I file di dati importati vengono convertiti in un data-frame. E’ conveniente mettere il file di dati nella cartella di lavoro corrente. STATISTICA LAB read.table Se il file di testo con estensione .txt può essere importato in R con la funzione read.table La sintassi del comando è: read.table("[path] nomefile.txt") dove [path] indica il percorso per individuare il file. Se il file si trova nella cartella corrente, basta scrivere: read.table("dati.txt") in alcuni casi occorre anche specificare l’elemento separatore tra le colonne, con l’argomento sep, o l’elemento separatore dei decimali, con dec. Inoltre, a volte bisogna specificare se la prima riga contiene i nomi delle variabili. STATISTICA LAB Importare file da Excel I file con estensione .xls non possono essere importati con la funzione vista prima. In questo caso si può impiegare la funzione read.xls dal pacchetto xlsReadWrite. In alternativa, la funzione odbcConnect dal pacchetto RODBC, che può essere impiegata anche per file provenienti da Access, o da altri programmi di gestione di data-base. STATISTICA LAB Esportare file di dati Per esportare un data-frame da R si impiega la funzione write.table La sintassi del comando è: write.table(nomedata-frame,"[path] nomefile.txt") dove [path] indica la directory dove si vuole salvare il file. Se si vuole salvare il file nella cartella corrente, basta scrivere: write.table(nomedata-frame,"dati.txt") attenzione R non avverte se si sovra-scrive su un file esistente. STATISTICA LAB Esportare file di dati Analogamente a quanto visto sopra, è possibile esportare i dati anche in altri formati. File con estensione .xls con write.xls dal pacchetto xlsReadWrite o sqlSave dal pacchetto RODBC. STATISTICA LAB