Introduzione a R

4,898 views
4,728 views

Published on

Published in: Education
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,898
On SlideShare
0
From Embeds
0
Number of Embeds
61
Actions
Shares
0
Downloads
107
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Introduzione a R

  1. 1. INTRODUZIONEALL’UTILIZZO DI R M.CALDERISI@KODE-SOLUTIONS.NET 14 E 15 MARZO 2012 DIPARTIMENTO DI SCIENZE DELLAMBIENTE E DELLA VITA UNIVERSITÀ DEGLI STUDI DEL PIEMONTE ORIENTALE
  2. 2. PRESENTAZIONELAUREATO IN CHIMICA A PISA NEL 2000DOTTORATO IN METABOLOMICA NEL 2010ASSEGNISTA PRESSO IL DIPARTIMENTO DI SCIENZEAGRARIE E DEGLI ALIMENTI - UNIMOREDAL 2003 CHEMIOMETRA /CONSULENTEDAL 2012 ... KODE // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  3. 3. PRESENTAZIONEWWW.CHEMIOMETRIA.IT (IN STATO DI COSTANTE NONAGGIORNAMENTO!!)CHEMIOMETRIA.WORDPRESS.COM/ (IDEM COME SOPRA!!) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  4. 4. OUTLINEGIORNO 1 INTRODUZIONE AD RGIORNO 2 STATISTICA DI BASE, DISTRIBUZIONI, TEST, GRAFICA PER RAPPRESENTARE I DATI IN MODO EFFICACE, REGRESSIONE LINEARE MULTIPLA // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  5. 5. R //cos’è?R is data analysis software: data scientists, statisticians, analysts and others who need tomake sense of data use R for statistical analysis, data visualization, and predictivemodeling.R is an environment for statistical analysis: Available in the R language are functionsfor virtually every data manipulation, statistical model, or chart that the data analystcould ever needR is a programming language: you do data analysis in R by writing scripts andfunctions in the R programming language. R is a complete, interactive, object-orientedlanguage: designed by statisticians, for statisticians.R is an open-source software project. Not only does this mean that you can download anduse R for free, but the source code is also open for inspection and modification to anyonewho wants to see how the methods and algorithms work under the coversR is a community. The project leadership include more than 20 leading statisticians andcomputer scientists from around the world. In addition, there are more then 2 millionusers worldwide. // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  6. 6. R //cos’è?PRO: gratuito, multi-piattaforma, implementa la stragrande maggioranza degli algoritmi e delle procedure statistiche attualmente disponibili, facilmente interfacciabile con quasi tutto, gestito dagli sviluppatori, non da commerciali comunità on-line ampia e viva è un linguaggio di programmazione, quindi è molto flessibileCONTRO: decisamente poco user-friendly curva di apprendimento inizialmente ostica è un più linguaggio di programmazione che un tipico software di statistica // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  7. 7. R //storiaR può essere considerato come una implementazione di S(ambiente/linguaggio per l’analisi dei dati), che è una linguaggiosviluppato presso i BELL Laboratories della AT&T nel 1976All’inizio degli anni ‘90 R. Gentleman e R. Ihaka (University ofAuckland, NZ) iniziano lo sviluppo di RNel 1997 è nato lR Development Core Team, gruppo formato dastatistici di tutto il mondo che si occupano dello sviluppo e delladistribuzione del programmaIl codice sorgente di R è disponibile come "Free Software" il cuiutilizzo è regolato dalla GNU General Public License della FreeSoftware Foundation // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  8. 8. R //descrizioneVi è un nucleo centrale che contiene l’interprete di R e alcunefunzionalità di baseTutte le altre funzionalità sono rese disponibili attraversopacchetti (packages)Alcuni pacchetti (circa 25) sono presenti nella distribuzione base:base, utils, stats, datasets, graphics, grDevices, methods, boot,cluster, codetools, foreign, KernSmooth, lattice, mgcv, nlme,rpart, survival, MASSVi sono poi circa 2000 pacchetti, resi disponibili da utilizzatori diR (i Contributed Packages), che riguardano "tutto il resto" // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  9. 9. R //web sourcesHome page The R Project for statistical computing (http://www.r- project.org/)Download The Comprehensive R Archive Network (CRAN) (http://cran.r- project.org/ - 3 mirror in Italia, Milano, Padova e Palermo)CRAN Task Views (http://cran.r-project.org/web/views/) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  10. 10. R //web sourcesStack Over Flow Se avete delle domande questo potrebbe essere il posto giusto per trovare delle risposte (tag “r”)The Video Rchive registrazioni di interventi a congressi o a user meetings#rstats su TwitterR-bloggers blog aggregator di contenuti raccolti da altri bloggers che scrivono su R (in inglese) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  11. 11. R //packageshttp://cran.stat.unipd.it/ (o altri mirror accessibili dal sitoufficiale di R: http://www.r-project.org/index.html)http://www.inside-r.org/packageshttp://crantastic.org/ (package selezionati per interesse)http://dirk.eddelbuettel.com/cranberries/ (aggregatore diaggiornamenti) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  12. 12. R //testiChemometrics with R - Multivariate Data Analysis in the NaturalSciences and Life Sciences di Ron Wehrens (Springer). Package:ChemometricsWithRIntroduction to Multivariate Statistical Analysis inChemometrics di Kurt Varmuza e Peter Filzmoser (CRC Press).Package: chemometricsLibri... // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  13. 13. R //user groupsRante Collocazione: Padova Da pochi giorni esiste Organizzatori: associazione R.O.S.P.O. anche MilanoR Blog: http://rante.org Mailing list: http://groups.google.com/group/ranteTorino R net Collocazione: Torino Organizzatori: Alessandra Durio, Daniele Amberti, Matteo Morini, Pietro Terna Web site: http://torinor.net/ // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  14. 14. R //screenshots // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  15. 15. R //screenshots // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  16. 16. R //RstudioR è un po’ ostico, soprattutto per chi usa windows, per il qualeesiste una interfaccia decisamente scomoda.Fortunatamente ci viene in soccorso Rstudio, che è unambiente di sviluppo (IDE) gratuito ed open source, che puòessere utilizzato sul proprio desktop (Windows, Mac, or Linux)o via web, utilizzando RStudio Server. // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  17. 17. R //RStudio // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  18. 18. R //fileR “produce” due tipi di file:. R, l’equivalente di un file di testo o di un file .m (contiene, adesempio, le function).Rdata, raccoglie gli oggetti (ovvero la variabili, le matrici, ivettori che abbiamo creato). E’ l’equivalente di un .mat // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  19. 19. R //Concetti di baseR è un linguaggio object-orientedQuasi qualunque cosa, dentro R, è un oggettoUn oggetto è una “entità che R crea e manipola: variabili,matrici, stringhe di caratteri, funzioni...” // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  20. 20. R //Concetti di baseOggettiPackagesSintassiData types/structuresFunctions // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  21. 21. R //un oggetto... x <- 1 # x è un oggetto (numerico) di R x + x x*100 y <- “casa” # anche y è un oggetto (stringa) di RSuggerimento: conviene sempre aprire un file .R (ctrl/cmd+shift+N) ed utilizzarlo per tenere traccia del proprio lavoro (usare # per i commenti) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  22. 22. R //un oggetto...esercizio 1: creo un “oggetto” usando R come “calcolatrice” Calcolare il valore di y al variare di x y y π = pi // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  23. 23. R //un oggetto...esercizio 1: creo un “oggetto” usando R come “calcolatrice” > x <- 2 > (1/sqrt(x-1))*exp(1/(5-x)) [1] 1.395612 > x <- 3 > (1/sqrt(x-1))*exp(1/(5-x)) [1] 1.165822 > x <- 10 > (1/sqrt(x-1))*exp(1/(5-x)) [1] 0.2729103 > s <- 1; m <- 4; x <-2 > (1/(sqrt(2 * pi)* s))* exp(-((x - m)^2/(2 * s^2))) [1] 0.05399097 > s <- 2; m <- 2; x <- 1 > (1/(sqrt(2 * pi)* s))* exp(-((x - m)^2/(2 * s^2))) [1] 0.1760327 // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  24. 24. R //workspaceSalviamo quanto fatto in un file che contiene tutti i nostri“oggetti”...un file “.RData”. In alternativasave(x, file=”esercizio.Rdata”)RStudio ci da l’opportunità di lavorare in un project (.Rproj), incui conservare tutto ciò che produciamo // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  25. 25. R //workspaceCon dir() si visualizzano i nomi dei file presenti nella directorydi lavorodir()Con ls() si visualizzano i nomi degli oggetti memorizzati nelworkspacels() // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  26. 26. R //workspacePer eliminare uno o più oggetti dallo spazio di lavoro utilizzorm(x)Per eliminare tutti gli oggetti presenti nello spazio di lavoro, uso:rm(list = ls()) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  27. 27. R //workspaceComandi per la gestione dello spazio di lavoro sono: source("comandi.R") # legge il file comandi.R ed esegue i comandi in esso contenuti save(x, y, file = "xy.Rdata") # salva solo gli oggetti x e y nel file indicato load("xy.Rdata") # legge il file indicato e ripristina gli oggetti precedentemente salvati // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  28. 28. R //gestione car telle Per verificare quale sia l’attuale cartella di lavoro getwd() oppure ctrl+shift +K Per cambiare directory di lavoro: setwd(.../nomecartella)Suggerimento: una volta scelta la cartella di lavoro con ctrl+D, individuo il percorso con setwd() e lo inserisco in getwd() (sul file aperto in precedenza) per avere sempre lo spazio di lavoro pronto // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  29. 29. R //gli altri oggettiVettoriMatriciArrayListeData FramesFunzioni // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  30. 30. R //vettoriPer creare un vettore il comando di base è c()numbers <- c(1,2,3,4,5)towns <- c(“Pisa”, “Lucca”, “Livorno”)...aggiungo un dato mancantey <- c(1,2,3,NA) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  31. 31. R //vettoriUn vettore si può costruire anche in altri modi:a <- 1:8 # crea una successione di numeri da 1 a 8b <- seq(from=1, to=8, by=1) # crea una successione dinumeri da 1 a 8 con il passo indicato con byc <- seq(from=1, to=8, length=5) # crea una successionedi lunghezza = ‘length’ di numeri da 1 a 8d <- rep(1,5) # replica 1, 5 volte // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  32. 32. R //operazioni con i vettoria <- 1:5b <- 2:6calcolarea+b length(a) log(a)a*b prod(b) a*2+ba>b mean(a) plot(a) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  33. 33. R //operazioni con i vettori Esercizio 2 Dati valori: 26, 13, 46, 32, 34, 17, 35, 18, 47, 14, 48, 161. costruire un vettore e determinarne lunghezza, somma e prodotto degli elementi2. calcolare poi media e varianza // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  34. 34. R //operazioni con i vettoriEsercizio 2x <- c(26, 13, 46, 32, 34, 17, 35, 18, 47, 14, 48, 16)length(x)sum(x)prod(x) [1] 9.155457e+16media <- sum(x)/length(x)varianza <- sum((x-media)^2)/(length(x)-1) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  35. 35. R //vettori (estrazione di elementi)Datoa <- 1:5calcola:a[2] # estraggo il secondo elementoa[a>=3] # estraggo gli elementi con valore maggiore uguale a 3a[c(1,3)] # estraggo il primo ed il terzo elementoa[-3] # estraggo tutti gli elementi eccetto il terzo // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  36. 36. R //vettori (estrazione di elementi)ESERCIZIO 3Dati i vettori:x <- c(11, 41, 26, 25, 11, 10, 40, 12, 50, 25)y <- c(19, 7, 15, 9, 14, 13, 5, 20)a. trovare i valori di x superiori al massimo di yb. sommare gli elementi di y minori o uguali a 10c. sommare gli elementi di x con valori inferiori a 20 o superiori a 40d. quanti elementi di x sono maggiori di 30 // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  37. 37. R //vettori (estrazione di elementi)x <- c(11, 41, 26, 25, 11, 10, 40, 12, 50, 25)y<-c(19, 7,15, 9,14,13, 5,20)x[x > max(y)] [1] 41 26 25 40 50 25sum(y[y >= 10]) [1] 81sum(x[x<20], x[x>40]) [1] 135sum(x>30) [1] 3 // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  38. 38. R //fattoriI fattori sono “vettori” che rappresentano variabili che possono assumere solovalori discreti (livelli).vet <- c("a", "b", "a", "a", "c", "b", "c")fat <- factor(vet)levels(fat) # mostra i livelli del fattorestr(fat) # mostra la struttura del fattoresummary(fat) o table(fat) # mostrano le frequenze dei livelli // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  39. 39. R //matriciUna matrice è un insieme di elementi di uno stesso tipo (numerici,testuali,...), con due dimensionia <- 1:8A <- matrix(a, nrow=2, ncol=4, byrow=F) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  40. 40. R //matriciUna matrice può essere creata anche unendo vettori per riga o per colonnaa <- 1:8b <- 11:18Ac <-cbind(a,b) # affianco i vettori per colonnaAr <-rbind(a,b) # affianco i vettori per riga // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  41. 41. R //operazioni con le matriciA <- matrix(1:8, nrow=2)B <- matrix(11:18,nrow=2)CalcoloA+B A*BA-B A/B // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  42. 42. R //operazioni con le matriciAt <- t(A) # trasposta di Adim(At) # dimensioni di AtCalcoloAt%*%B # prodotto tra matricicolSums() colMeans()rowSums() rowMeans() // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  43. 43. R //operazioni con le matriciESERCIZIO 4Data una matrice KK <- matrix(1:12,nrow=3)costruire una matrice KT in cui sia riportata K con, in aggiunta, le suesomme di riga e di colonna // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  44. 44. R //operazioni con le matrici // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  45. 45. R //operazioni con le matrici# nomino le righerownames(A) <- c(r1, r2)# nomino le colonnecolnames(A) <- c(c1, c2, c3, c4) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  46. 46. R //operazioni con le matriciOgni elemento è identificato da due coordinate [i, j]# estraggo un elementoA[1,3]# estraggo una rigaA[1,]# estraggo una colonnaA[,2]# estraggo una parte di datiA[1:2,c(2,4)] // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  47. 47. R //operazioni con le matriciESERCIZIO 5estrarre dalla matrice KT , definita precedentemente, tutte le colonne di quelle righe incui gli elementi della prima colonna sono maggiori di 2selezione elementi 2 e 4 riga , dalla 2 alla 3colonnaestrarre righe e colonne in cui elementi>maxcolonna 2 // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  48. 48. R //operazioni con le matriciKT[KT[,1]>2,] // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  49. 49. R //arrayEquivale ad una matrice, ma può avere più di due dimensioniarr <- array(1:24, dim=c(2,3,4))dim(arr) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  50. 50. R //listeLe liste sono delle raccolte di altri oggetti, che possono anche essere di diversotipo e dimensione tra lorolista<-list(matrix(1:9,nrow=3),rep(0,3),c(bianco,nero))lista[[1]] # per estrarre gli elementi // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  51. 51. R //dataframeIl dataframe è l’oggetto più importante. Può contenere colonne di natura diversa (numeri, fattori,...). Le righe e le colonne possono essere nominate // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  52. 52. R //dataframePer creare un dataframe il comando è data.frame() Si può creare “da zero” x.df <- data.frame(ID=c(1,2,3), sex=factor(c ("M", "F", "F")), age=c(23,24,43), row.names=1) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  53. 53. R //dataframeSi può creare unendo più vettori e, ad esempio, nominando successivamente righee colonne a=c(1,2,3) b=factor(c("M", "F", "F")) c=c(23,24,43)x2.df <- data.frame(a,b,c) colnames(x2.df) <- c("ID", "Sex", "Age") rownames(x2.df) <- x2.df$IDx2.df <- x2.df[,-1] // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  54. 54. R //dataframeCi sono due modi per aggiungere altre variabili:Soluzione 1 vt <- c(7,8,7) # vettore x3.df <- data.frame(x2.df, Vote = vt) vt <- matrix(c(7,8,7,5,4,3), nrow=3) # matrice x4.df <- data.frame(x2.df, Vote = vt) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  55. 55. R //dataframeCi sono due modi per aggiungere altre variabili:Soluzione 2 vt <- c(7,8,7) # vettore x2.df$Vote <- vt vt <- matrix(c(7,8,7,5,4,3), nrow=3) # matrice x2.df$Vote <- vt // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  56. 56. R //dataframeESERCIZIO 6 Aggiungere al data frame x4.df una colonna contenente la media dei voti // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  57. 57. R //dataframeESERCIZIO 6 Average <- (x4.df$Vote.1 + x4.df$Vote.2)/2 X <- data.frame(x4.df,Average) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  58. 58. R //operazioni con i dataframeL’estrazione dei dati funziona esattamente come per matrix,In più è possibile effettuare ricerche mirate, sfruttando ancheappositi operatori logici e di confrontoOperatori di confronto // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  59. 59. R //operatori logici e di confrontoOperatori di confronto Operatori logici< minore> maggiore & per AND<= minore uguale | per OR>= maggiore uguale ! per NOT== uguale!= diverso // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  60. 60. R //operazioni con i dataframeEstraggo i dati per i soggetti di sesso femminilex4.df[x4.df$Sex=="F",]Estraggo i dati per i soggetti di sesso femminile con Vote.1maggiore di 7x4.df[x4.df$Sex=="F" & 4v.df$Vote.1>7,] // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  61. 61. R //operazioni con i dataframeUna alternativa più versatile è data dalla funzione subsetx.sub <- subset(dati, condizione, eventualeselezione delle variabili da includere o daescludere)x.sub <- subset(x4.df, subset=x4.df$Sex=="F",select= "Age") // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  62. 62. R //operazioni con i dataframestr() # per vedere la struttura del datasetsummary() # per avere delle statistiche di basefix() # per editare rapidamente il dataset (nonfunziona in RStudio)attach()/detach() # per collegare e scollegare ildataset semplificandone l’accessoEsempioattach(x4.df)a<-subset(x4.df,Age>30)detach() // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  63. 63. R //operazioni con i dataframeESERCIZIO 7Creare questo data.framev0 <- c(1:15)v1 <- paste(sample(LETTERS,15),sample(letters,15),sep="")v2 <- factor(sample(c("FC","RA","RN"),15,replace=TRUE))v3 <- sample(19:65,15,replace=TRUE)v4 <- sample(1:5,15,replace=TRUE)v5 <- matrix(sample(50:100,45,replace=TRUE),nrow=15)dfSpese <- data.frame(v0,v1,v2,v3,v4,v5,stringsAsFactors=FALSE)names(dfSpese) <- c("Progr","Sigla","Prov","Eta","nComp","sPane","sFruVer","sLatte") // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  64. 64. R //operazioni con i dataframe1. Aggiungere poi una variabile con la spesa complessiva per famiglia2. Selezionare le famiglie con spesa totale superiore alla media3. Per questo sottoinsieme calcolare l’età media del capofamiglia, le spese medie pro-capite dei singoli generi alimentari e quante sono queste famiglie per provincia // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  65. 65. R //operazioni con i dataframePunto 1dfSpese1 <- cbind(dfSpese, SpesaTot=rowSums(dfSpese[,c(6:8)]))oppureattach(dfSpese)dfSpese1 <- cbind(dfSpese, SpesaTot=(sPane+sFruVer+sLatte))detach(dfSpese) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  66. 66. R //operazioni con i dataframePunto 2dfSpese.M <- subset(dfSpese1, SpesaTot>mean(SpesaTot))Punto 3colMeans(dfSpese.M[,c("Eta","sPane","sFruVer","sLatte")])summary(dfSpese.M$Prov) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  67. 67. R //packagesLe funzioni di R sono raccolte in packagesE’ possibile installare un package direttamente dalla GUIinstall.packages()Per utilizzarlo è necessario “caricarlo”require()library() // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  68. 68. R //functionLa sintassi generica per chiamare una funzione èfunctionname(arglist)dove arglist è una lista di argomenti separati da una virgolaEsempio: sd(x, na.rm = FALSE) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  69. 69. R //functionLa sintassi per creare una funzione ènomeFunzione <- function(arg1, arg2,...){}che si usa così: output <- nomeFunzione (arg1, arg2,...) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  70. 70. R //impor tare i datiR è in grado di leggere moltissimi formati, utilizzando comandi di base oricorrendo a package specifici.Per importare un file di testo (csv) si usa read.table() ... o RStudio!X <- read.table(file, header=T, sep=”;”, dec=”.”)file = nome del file (si opera da dentro la cartellache lo contiene)header = T o F specifica se la prima riga contiene inomi delle variabili o menosep = indica il separatore dei campi: , ; t” (tab) ...dec = è il separatore decimale: , o . // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  71. 71. R //espor tare i datiIl modo più semplice e veloce consiste nello scrivere un file txt o csvnella directory di lavoro, con il comando write.table()write.table(x, file = "nomefile.txtoppure .csv", append = FALSE, sep = " ,oppure ;", na = "NA", dec = ".", row.names =TRUE, col.names = TRUE) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  72. 72. R //helpPer accedere direttamente all’help di un determinato comandohelp(nomecomando) oppure ?nomecomandoNel caso non si conosca con sicurezza il nome del comando si puòfare una ricerca estesa con??nomecomandoIn RStudio di può anche premere F1 con il cursore sul nome delcomando (con tab si vedono gli input) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  73. 73. OUTLINESTATISTICA DI BASETEST UNIVARIATI PARAMETRICITEST UNIVARIATI NON PARAMETRICIDISTRIBUZIONIGRAFICA // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  74. 74. STATISTICA DI BASESTATISTICA DI BASELa funzione principale è summary, che restituisce: minimo,massimo, media, mediana, percentili e numero di missing value // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  75. 75. STATISTICA DI BASEMISSING VALUEin R si indicano con NA is.na() per vedere dove sono sum(is.na()) per contarli complete.case() indica quali campioni non hanno NA na.omit() restituisce l’oggetto senza i campioni con NAin genere si possono gestire dalle funzioni stesse, ad esempiomean(x, na.rm=T) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  76. 76. STATISTICA DI BASETAVOLE DI FREQUENZA ad esempio table(cyl, vs) ...sul dataset (mtcars) data(mtcars) attach(mtcars) table(cyl, vs) detach(mtcars) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  77. 77. STATISTICA DI BASECORRELAZIONEcor(mtcars, use="complete.obs", method="pearson")cov(mtcars, use="complete.obs")methods= pearson, spearman, kendall // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  78. 78. TEST UNIVARIATI PARAMETRICITEST UNIVARIATI PARAMETRICILa funzione principale è t.test()# due campioni indipendentit.test(y~x) # dove y è numerica e x è un fattore binario# due campioni indipendentit.test(y1,y2) # dove y1 e y2 sono numeriche# due campioni accoppiatit.test(y1,y2,paired=TRUE) # dove y1 e y2 sono numeriche# one samle t-testt.test(y,mu=3) # Ho: mu=3 Si può usare var.equal = TRUE per specificare “varianze uguali”. Si può usare alternative="less" o "greater" per specificate il test ad una coda. bartlett.test() per verificare l’omogeneità delle varianze // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  79. 79. TEST UNIVARIATI NON PARAMETRICITEST UNIVARIATI NON PARAMETRICI# due campioni indipendentiwilcox.test(y~x) # dove y è numerica e x è un fattorebinario# due campioni indipendentiwilcox.test(y1,y2) # dove y1 e y2 sono numeriche# paired t-testwilcox.test(y1,y2,paired=TRUE) # dove y1 e y2 sononumeriche Si può usare alternative="less" o "greater" per specificate il test ad una coda. // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  80. 80. DISTRIBUZIONIDISTRIBUZIONI (vedi file codice) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  81. 81. GRAFICI What can R do for you this is what I mean by “R has the most advanced graphic system” Random edge graph 100 nodes 50 edges a b degree Figure 12: A heatmap representation of the CLL data. Genes were selected distribution using a t-test comparing those with a progressive disease and those with a &""" +,-./0 stable disease. %"" ($!# (!) #*!& #()" #!&% $"" %$) 4.5 Heatmaps (&( &$# #"" !%&! !#$& In Figure 12 a heatmap showing genes selected according to the p-value in a !&&" &)(% &#") t-test comparing those with stable disease to those with progressive disease. !"" &"(( )"# The top bar contains one small block for each sample, those samples that " (! & correspond to the stable disease phenotype have a dark colored block, those !"" #"" $"" %"" &""" with progressive disease a light colored block. It is not surprising that the two groups are well separated (all the dark blocks are to the left), since that c d is how genes were selected. 4.6 Diagnostics The RNA digestion plot, Figure 13, indicates that there is in fact one unusual array, CLL1. These plots show the is a relationship between the probe position and intensity. In general, the relationship is non-constant, and 21 Figure 8: Four different visualizations of a scatterplot of flow cytometry Press Hosted by The Berkeley ElectronicThursday, 16 June 2011 data (forward light scatter versus side light scatter). a: the usual scatterplot. Because of the large number of points, it is a rather featureless black blot. b: the result of a hexagon binning procedure. The color code at each hexagon represents the number of data points that it contains. c: color representation of smooth point densities calculated from the data using a kernel density Past, Present and Future of R estimator. In the sparse regions of the density, the plot is augmented by black dots that represent individual data points. In the denser regions, these are omitted. d : usual scatterplot with points colored according to the First Turin R net conference, 16-June-2011 local density.
  82. 82. GRAFICIPER CREARE UN GRAFICO IL COMANDO DI BASE Èplot()PLOT IN GENERE SI USA PER FARE I GRAFICI ADISPERSIONEUTILIZZIAMO UN DATASET DI ESEMPIO INCLUSO IN R:MTCARSattach(mtcars) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  83. 83. GRAFICICI SONO DIVERSE OPZIONI CHE SI POSSONO USARE PERCUSTOMIZZARE L’ASPETTO DI UN GRAFICO:type per definire il tipo di graficocex per intervenire sulla dimensione dei fontpch per intervenire sulla forma dei “punti”col per cambiare i coloriPER AVERE PIÙ INFORMAZIONIhelp (par)oppure http://www.statmethods.net/advgraphs/parameters.html // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  84. 84. GRAFICI // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  85. 85. GRAFICIIN UN GRAFICO È POSSIBILE SOSTITUIRE I PUNTI CON DELTESTO: IL COMANDO È text()SI POSSONO POI SPECIFICARE IL TITOLO DEL GRAFICO(MAIN) ED I NOMI DEGLI ASSI xlab e ylabSI POSSONO INTRODURRE LINEE DI RIFERIMENTO abline() // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  86. 86. GRAFICIPer creare grafici con una (o più) linea sia usalines()Questo comando però segue sempre plot (con l’opzione type=”n”), perchè da solo non èin grado di fare un grafico.Un importante parametro di lines è type, che indica il tipo di linea che vogliamodisegnare: p= punti l= linea o=punti sulla linea b=punti uniti da linee s= scalini n=niente UN ALTRO PARAMETRO IMPORTANTE È LTY CHE DETERMINA IL TIPO DI LINEA 1= continua 2= trattini 3= puntini
  87. 87. GRAFICILEGENDAE’ una funzione con molte opzioni, la più delicata è quellarelativa al posizionamento, dato che potrebbe andare a coprire partiutili del graficolegend (location, title, legend,...)location si può mettere in due modi (vedi file) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  88. 88. GRAFICIPER SALVARE UN GRAFICO IL COMANDO DIPENDE DAL TIPO DIFILE CHE SI VUOLE SALVAREpdf("mygraph.pdf") pdf filepng("mygraph.png") png filejpeg("mygraph.jpg") jpeg filebmp("mygraph.bmp") bmp fileNELL’HELP DI CIASCUNA FUNZIONE SONO DESCRITTI IDETTAGLI SPECIFICI PER CIASCUN SALVATAGGIO.IN RSTUDIO LA PROCEDURA È SEMPLIFICATA // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  89. 89. GRAFICIOGNI VOLTA CHE FACCIO UN NUOVO GRAFICO, QUESTO MISOVRASCRIVE IL PRECEDENTE. PER EVITARE CHE CIÒACCADA APRO UN ALTRA FINESTRA PER OSPITARE ILNUOVO GRAFICOwindows() # per windowsquartz()oppure X11()# per MacOs e LinuxAnche in questo caso RStudio ci viene in aiuto, conservando unatimeline completa dei nostri grafici // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  90. 90. GRAFICICOMBINARE PIÙ PLOTUna utile alternativa è quella fare più grafici insieme,utilizzando i comandi par() e mfrow() // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  91. 91. GRAFICIIstogrammihist(mpg)Kernel density plotplot(density(mpg), main="Kernel Density of MilesPer Gallon")nota: kernel density estimation is a non-parametric wayof estimating the probability density function of arandom variable // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  92. 92. GRAFICIDOT PLOTdotchart(mtcars$mpg,labels=row.names(mtcars),cex=.7,main="Gas Milage for CarModels", xlab="Miles Per Gallon") // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  93. 93. GRAFICIBar plotcounts <- table(mtcars$gear)barplot(counts, main="Car Distribution", xlab="Number of Gears")nota: non confondere gli istogrammi con i grafici abarre!! // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  94. 94. GRAFICIBOX PLOTboxplot(mpg~cyl,data=mtcars, main="Car MilageData",xlab="Number of Cylinders", ylab="MilesPer Gallon")La funzione boxplot si può utilizzare anche per estrarre statistichedal dataset // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  95. 95. GRAFICISCATTER PLOTCome abbiamo già visto il comando principale per fare unoscatterplot è plot().E’ possibile però fare anche scatterplot multipli, con il comandopairs()pairs(mtcars[,1:3], main="Scatterplot Matrix") // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  96. 96. GRAFICIHIGH DENSITY PLOTQuando è necessario mettere in grafico moltissimi punti, chepossono essere anche in gran parte sovrappostismoothScatter(x,y) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  97. 97. GRAFICISCATTER PLOT TRIDIMENSIONALIlibrary(scatterplot3d)scatterplot3d(wt,disp,mpg, main="3DScatterplot")Se devo esaminare più di tre variabililibrary(Rcmdr)scatter3d(wt, disp, mpg) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  98. 98. GRAFICICORRELOGRAMMIinstall.packages(corrgram)library(corrgram)corrgram(mtcars, order=TRUE,lower.panel=panel.shade, upper.panel=panel.pie,text.panel=panel.txt, main="Correlazioni dimtcars") // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  99. 99. GRAFICIPACKAGE SPECIFICIggplot2 http://had.co.nz/ggplot2/iplots http://rosuda.org/iplots/lattice Lattice is a powerful high-level data visualization system, with an emphasis on multivariate data // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  100. 100. GRAFICIGGPLOT2 (vedi file codice) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  101. 101. GRAFICIIPLOTS / JGR (http://rforge.net/JGR/files/) (vedi file codice) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  102. 102. GRAFICITrellis graph (package=”lattice”)Un grafico trellis mostra una o piùvariabili, condizionate rispetto adun’altra o più variabili fattoriali.Per esempio ~x|A mostra la variabilenumerica x per ciascun livello delfattore A // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  103. 103. GRAFICIMATPLOTSi usa per mettere in grafico le colonne di una matrice, rispetto aquelle di un altra. Ad esempio un set di spettri rispetto alle relativelunghezze d’ondaE’ interessante, soprattutto in questo caso, la funzionemanipulate, che ci mette a disposizione RStudio // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  104. 104. GRAFICIMAPPESi può usare il package “map” // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  105. 105. GRAFICICOLORIdisplay.brewer.all() // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  106. 106. GRAFICIESERCIZIO - ANSCOMBE’S QUARTETImporta il file e verifica:- le medie,- le deviazioni standard,- i coefficienti di correlazione tra X123 e Y1, Y2, Y3 e tra X4 e Y4,- coefficienti di regressione e R2, tra le medesime coppie...fai i grafici // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  107. 107. GRAFICIESERCIZIO - ANSCOMBE’S QUARTETAnscombes quartet comprises four datasets that have identical simple statisticalproperties, yet appear very different when graphed.Source: Anscombe, F.J. "Graphs in Statistical Analysis." The American Statistician. Vol. 27, No. 1 (1973):19. // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  108. 108. REGRESSIONE LINEARE MULTIPLAIl comando di base per effettuare una regressione lineare,univariata o multivariata che sia, è lm() ad esempio: mod <- lm(y~x, data=mydata) summay(mod) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  109. 109. REGRESSIONE LINEARE MULTIPLAChiedo qualche altra informazione utile coefficiets(mod) # coefficienti confint(mod,level=0.95) # intervalli di confidenza fitted(mod) # valori calcolati residuals(mod) # residui anova(mod) # tabella anova // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  110. 110. REGRESSIONE LINEARE MULTIPLAPlot dei residui stdPred <- scale( predict(mod)) stdRes <- scale(resid(mod)) plot(stdPred, stdRes, main = "Standardized Residuals Plot", xlab = "Standardized Predicted Values", ylab = "Standardized Residuals") abline(h=0) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  111. 111. REGRESSIONE LINEARE MULTIPLAIstogramma dei residui hist(stdR, freq = FALSE) curve(dnorm, add = TRUE)Q-Q plot qqnorm(stdRes) abline(0,1) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  112. 112. REGRESSIONE LINEARE MULTIPLAConfronto tra misurati e predetti plot(y,fitted(mod)) abline(a=1,b=1, col="red", lty=2)) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  113. 113. REGRESSIONE LINEARE MULTIPLAFaccio qualche plot diagnostico layout(matrix(c(1,2,3,4),2,2)) # optional 4 graphs/ page plot(fit) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  114. 114. REGRESSIONE LINEARE MULTIPLAASTRO.SWARTHMORE.EDU/ASTRO121/ANSCOMBE.HTMLEsercizio 1 Utilizzando il dataset stackloss, calcolo lo stack loss se airflow=72, water temperature=20 e acid concentration=85 determinarne l’intervallo di confidenza (con α=0.95) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  115. 115. REGRESSIONE LINEARE MULTIPLAEsercizio 2 Utilizzando il dataset enrollmentForecast, calcolare il modello di regressione per determinate il fall enrollment (ROLL) in base all’ unemployment rate (UNEM) e al number of spring high school graduates (HGRAD) calcolare ROLL se UNEM=9% e HGRAD=100000 aggiungo la variabile INC e riprovo // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  116. 116. REGRESSIONE LINEARE MULTIPLAAbbiamo calcolato due modelli di regressione (esercizio 2). Ora livoglio confrontare anova(twoPredictorModel, threePredictorModel) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net
  117. 117. REGRESSIONE LINEARE MULTIPLAIn caso voglia considerare anche delle interazioni tra i fattori ad esempiotwoPredictorModel <- lm(ROLL~UNEM+HGRAD+UNEM:HGRAD,dataset_enrollmentForecast) oppuretwoPredictorModel <- lm(ROLL~UNEM*HGRAD,dataset_enrollmentForecast) // Dott. Marco Calderisi - m.calderisi@kode-solutions.net

×