Asou.Mbaye_La relazione sulle macchine termiche.pptx
Introduzione a R
1. INTRODUZIONE
ALL’UTILIZZO DI R
M.CALDERISI@KODE-SOLUTIONS.NET
14 E 15 MARZO 2012
DIPARTIMENTO DI SCIENZE DELL'AMBIENTE E DELLA VITA
UNIVERSITÀ DEGLI STUDI DEL PIEMONTE ORIENTALE
2. PRESENTAZIONE
LAUREATO IN CHIMICA A PISA NEL 2000
DOTTORATO IN METABOLOMICA NEL 2010
ASSEGNISTA PRESSO IL DIPARTIMENTO DI SCIENZE
AGRARIE E DEGLI ALIMENTI - UNIMORE
DAL 2003 CHEMIOMETRA /CONSULENTE
DAL 2012 ... KODE
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
3. PRESENTAZIONE
WWW.CHEMIOMETRIA.IT (IN STATO DI COSTANTE NON
AGGIORNAMENTO!!)
CHEMIOMETRIA.WORDPRESS.COM/ (IDEM COME SOPRA!!)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
4. OUTLINE
GIORNO 1
INTRODUZIONE AD R
GIORNO 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. R //cos’è?
R is data analysis software: data scientists, statisticians, analysts and others who need to
make sense of data use R for statistical analysis, data visualization, and predictive
modeling.
R is an environment for statistical analysis: Available in the R language are functions
for virtually every data manipulation, statistical model, or chart that the data analyst
could ever need
R is a programming language: you do data analysis in R by writing scripts and
functions in the R programming language. R is a complete, interactive, object-oriented
language: designed by statisticians, for statisticians.
R is an open-source software project. Not only does this mean that you can download and
use R for free, but the source code is also open for inspection and modification to anyone
who wants to see how the methods and algorithms work under the covers
R is a community. The project leadership include more than 20 leading statisticians and
computer scientists from around the world. In addition, there are more then 2 million
users worldwide.
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
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 flessibile
CONTRO:
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. R //storia
R può essere considerato come una implementazione di S
(ambiente/linguaggio per l’analisi dei dati), che è una linguaggio
sviluppato presso i BELL Laboratories della AT&T nel 1976
All’inizio degli anni ‘90 R. Gentleman e R. Ihaka (University of
Auckland, NZ) iniziano lo sviluppo di R
Nel 1997 è nato l'R Development Core Team, gruppo formato da
statistici di tutto il mondo che si occupano dello sviluppo e della
distribuzione del programma
Il codice sorgente di R è disponibile come "Free Software" il cui
utilizzo è regolato dalla GNU General Public License della Free
Software Foundation
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
8. R //descrizione
Vi è un nucleo centrale che contiene l’interprete di R e alcune
funzionalità di base
Tutte le altre funzionalità sono rese disponibili attraverso
pacchetti (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, MASS
Vi sono poi circa 2000 pacchetti, resi disponibili da utilizzatori di
R (i Contributed Packages), che riguardano "tutto il resto"
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
9. R //web sources
Home 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. R //web sources
Stack 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 Twitter
R-bloggers
blog aggregator di contenuti raccolti da altri bloggers che scrivono
su R (in inglese)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
11. R //packages
http://cran.stat.unipd.it/ (o altri mirror accessibili dal sito
ufficiale di R: http://www.r-project.org/index.html)
http://www.inside-r.org/packages
http://crantastic.org/ (package selezionati per interesse)
http://dirk.eddelbuettel.com/cranberries/ (aggregatore di
aggiornamenti)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
12. R //testi
Chemometrics with R - Multivariate Data Analysis in the Natural
Sciences and Life Sciences di Ron Wehrens (Springer). Package:
ChemometricsWithR
Introduction to Multivariate Statistical Analysis in
Chemometrics di Kurt Varmuza e Peter Filzmoser (CRC Press).
Package: chemometrics
Libri...
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
13. R //user groups
Rante
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/rante
Torino 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. R //screenshots
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
15. R //screenshots
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
16. R //Rstudio
R è un po’ ostico, soprattutto per chi usa windows, per il quale
esiste una interfaccia decisamente scomoda.
Fortunatamente ci viene in soccorso Rstudio, che è un
ambiente 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. R //RStudio
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
18. R //file
R “produce” due tipi di file:
. R, l’equivalente di un file di testo o di un file .m (contiene, ad
esempio, le function)
.Rdata, raccoglie gli oggetti (ovvero la variabili, le matrici, i
vettori che abbiamo creato). E’ l’equivalente di un .mat
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
19. R //Concetti di base
R è un linguaggio object-oriented
Quasi qualunque cosa, dentro R, è un oggetto
Un oggetto è una “entità che R crea e manipola: variabili,
matrici, stringhe di caratteri, funzioni...”
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
20. R //Concetti di base
Oggetti
Packages
Sintassi
Data types/structures
Functions
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
21. R //un oggetto...
x <- 1 # x è un oggetto (numerico) di R
x + x
x*100
y <- “casa” # anche y è un oggetto (stringa) di
R
Suggerimento: 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. 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. 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. R //workspace
Salviamo quanto fatto in un file che contiene tutti i nostri
“oggetti”...un file “.RData”. In alternativa
save(x, file=”esercizio.Rdata”)
RStudio ci da l’opportunità di lavorare in un project (.Rproj), in
cui conservare tutto ciò che produciamo
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
25. R //workspace
Con dir() si visualizzano i nomi dei file presenti nella directory
di lavoro
dir()
Con ls() si visualizzano i nomi degli oggetti memorizzati nel
workspace
ls()
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
26. R //workspace
Per eliminare uno o più oggetti dallo spazio di lavoro utilizzo
rm(x)
Per eliminare tutti gli oggetti presenti nello spazio di lavoro, uso:
rm(list = ls())
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
27. R //workspace
Comandi 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. 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. R //gli altri oggetti
Vettori
Matrici
Array
Liste
Data Frames
Funzioni
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
30. R //vettori
Per creare un vettore il comando di base è c()
numbers <- c(1,2,3,4,5)
towns <- c(“Pisa”, “Lucca”, “Livorno”)
...aggiungo un dato mancante
y <- c(1,2,3,NA)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
31. R //vettori
Un vettore si può costruire anche in altri modi:
a <- 1:8 # crea una successione di numeri da 1 a 8
b <- seq(from=1, to=8, by=1) # crea una successione di
numeri da 1 a 8 con il passo indicato con by
c <- seq(from=1, to=8, length=5) # crea una successione
di lunghezza = ‘length’ di numeri da 1 a 8
d <- rep(1,5) # replica 1, 5 volte
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
32. R //operazioni con i vettori
a <- 1:5
b <- 2:6
calcolare
a+b length(a) log(a)
a*b prod(b) a*2+b
a>b mean(a) plot(a)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
33. R //operazioni con i vettori
Esercizio 2
Dati valori: 26, 13, 46, 32, 34, 17, 35, 18, 47, 14, 48, 16
1. costruire un vettore e determinarne lunghezza, somma e prodotto degli
elementi
2. calcolare poi media e varianza
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
34. R //operazioni con i vettori
Esercizio 2
x <- c(26, 13, 46, 32, 34, 17, 35, 18, 47, 14, 48, 16)
length(x)
sum(x)
prod(x) [1] 9.155457e+16
media <- sum(x)/length(x)
varianza <- sum((x-media)^2)/(length(x)-1)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
35. R //vettori (estrazione di elementi)
Dato
a <- 1:5
calcola:
a[2] # estraggo il secondo elemento
a[a>=3] # estraggo gli elementi con valore maggiore uguale a 3
a[c(1,3)] # estraggo il primo ed il terzo elemento
a[-3] # estraggo tutti gli elementi eccetto il terzo
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
36. R //vettori (estrazione di elementi)
ESERCIZIO 3
Dati 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 y
b. sommare gli elementi di y minori o uguali a 10
c. sommare gli elementi di x con valori inferiori a 20 o superiori a 40
d. quanti elementi di x sono maggiori di 30
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
38. R //fattori
I fattori sono “vettori” che rappresentano variabili che possono assumere solo
valori discreti (livelli).
vet <- c("a", "b", "a", "a", "c", "b", "c")
fat <- factor(vet)
levels(fat) # mostra i livelli del fattore
str(fat) # mostra la struttura del fattore
summary(fat) o table(fat)
# mostrano le frequenze dei livelli
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
39. R //matrici
Una matrice è un insieme di elementi di uno stesso tipo (numerici,
testuali,...), con due dimensioni
a <- 1:8
A <- matrix(a, nrow=2, ncol=4, byrow=F)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
40. R //matrici
Una matrice può essere creata anche unendo vettori per riga o per colonna
a <- 1:8
b <- 11:18
Ac <-cbind(a,b) # affianco i vettori per colonna
Ar <-rbind(a,b) # affianco i vettori per riga
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
41. R //operazioni con le matrici
A <- matrix(1:8, nrow=2)
B <- matrix(11:18,nrow=2)
Calcolo
A+B A*B
A-B A/B
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
42. R //operazioni con le matrici
At <- t(A) # trasposta di A
dim(At) # dimensioni di At
Calcolo
At%*%B # prodotto tra matrici
colSums() colMeans()
rowSums() rowMeans()
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
43. R //operazioni con le matrici
ESERCIZIO 4
Data una matrice K
K <- matrix(1:12,nrow=3)
costruire una matrice KT in cui sia riportata K con, in aggiunta, le sue
somme di riga e di colonna
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
44. R //operazioni con le matrici
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
45. R //operazioni con le matrici
# nomino le righe
rownames(A) <- c('r1', 'r2')
# nomino le colonne
colnames(A) <- c('c1', 'c2', 'c3', 'c4')
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
46. R //operazioni con le matrici
Ogni elemento è identificato da due coordinate [i, j]
# estraggo un elemento
A[1,3]
# estraggo una riga
A[1,]
# estraggo una colonna
A[,2]
# estraggo una parte di dati
A[1:2,c(2,4)]
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
47. R //operazioni con le matrici
ESERCIZIO 5
estrarre dalla matrice KT , definita precedentemente, tutte le colonne di quelle righe in
cui gli elementi della prima colonna sono maggiori di 2
selezione elementi 2 e 4 riga , dalla 2 alla 3
colonna
estrarre righe e colonne in cui elementi>max
colonna 2
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
48. R //operazioni con le matrici
KT[KT[,1]>2,]
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
49. R //array
Equivale ad una matrice, ma può avere più di due dimensioni
arr <- array(1:24, dim=c(2,3,4))
dim(arr)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
50. R //liste
Le liste sono delle raccolte di altri oggetti, che possono anche essere di diverso
tipo e dimensione tra loro
lista<-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. R //dataframe
Il 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. R //dataframe
Per 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. R //dataframe
Si può creare unendo più vettori e, ad esempio, nominando successivamente righe
e 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$ID
x2.df <- x2.df[,-1]
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
54. R //dataframe
Ci 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. R //dataframe
Ci 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. R //dataframe
ESERCIZIO 6
Aggiungere al data frame x4.df una colonna contenente la
media dei voti
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
57. R //dataframe
ESERCIZIO 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. R //operazioni con i dataframe
L’estrazione dei dati funziona esattamente come per matrix,
In più è possibile effettuare ricerche mirate, sfruttando anche
appositi operatori logici e di confronto
Operatori di confronto
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
59. R //operatori logici e di confronto
Operatori 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. R //operazioni con i dataframe
Estraggo i dati per i soggetti di sesso femminile
x4.df[x4.df$Sex=="F",]
Estraggo i dati per i soggetti di sesso femminile con Vote.1
maggiore di 7
x4.df[x4.df$Sex=="F" & 4v.df$Vote.1>7,]
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
61. R //operazioni con i dataframe
Una alternativa più versatile è data dalla funzione subset
x.sub <- subset(dati, condizione, eventuale
selezione delle variabili da includere o da
escludere)
x.sub <- subset(x4.df, subset=x4.df$Sex=="F",
select= "Age")
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
62. R //operazioni con i dataframe
str() # per vedere la struttura del dataset
summary() # per avere delle statistiche di base
fix() # per editare rapidamente il dataset (non
funziona in RStudio)
attach()/detach() # per collegare e scollegare il
dataset semplificandone l’accesso
Esempio
attach(x4.df)
a<-subset(x4.df,Age>30)
detach()
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
63. R //operazioni con i dataframe
ESERCIZIO 7
Creare questo data.frame
v0 <- 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. R //operazioni con i dataframe
1. Aggiungere poi una variabile con la spesa complessiva per
famiglia
2. Selezionare le famiglie con spesa totale superiore alla media
3. 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. R //operazioni con i dataframe
Punto 1
dfSpese1 <- cbind(dfSpese, SpesaTot=rowSums(dfSpese[,c
(6:8)]))
oppure
attach(dfSpese)
dfSpese1 <- cbind(dfSpese, SpesaTot=(sPane+sFruVer
+sLatte))
detach(dfSpese)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
66. R //operazioni con i dataframe
Punto 2
dfSpese.M <- subset(dfSpese1, SpesaTot>mean(SpesaTot))
Punto 3
colMeans(dfSpese.M[,c
("Eta","sPane","sFruVer","sLatte")])
summary(dfSpese.M$Prov)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
67. R //packages
Le funzioni di R sono raccolte in packages
E’ possibile installare un package direttamente dalla GUI
install.packages()
Per utilizzarlo è necessario “caricarlo”
require()
library()
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
68. R //function
La sintassi generica per chiamare una funzione è
functionname(arglist)
dove arglist è una lista di argomenti separati da una virgola
Esempio: sd(x, na.rm = FALSE)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
69. R //function
La 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. R //impor tare i dati
R è in grado di leggere moltissimi formati, utilizzando comandi di base o
ricorrendo 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 cartella
che lo contiene)
header = T o F specifica se la prima riga contiene i
nomi delle variabili o meno
sep = indica il separatore dei campi: , ; t” (tab) ...
dec = è il separatore decimale: , o .
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
71. R //espor tare i dati
Il modo più semplice e veloce consiste nello scrivere un file txt o csv
nella directory di lavoro, con il comando write.table()
write.table(x, file = "nomefile.txt
oppure .csv", append = FALSE, sep = " ,
oppure ;", na = "NA", dec = ".", row.names =
TRUE, col.names = TRUE)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
72. R //help
Per accedere direttamente all’help di un determinato comando
help(nomecomando) oppure ?nomecomando
Nel caso non si conosca con sicurezza il nome del comando si può
fare una ricerca estesa con
??nomecomando
In RStudio di può anche premere F1 con il cursore sul nome del
comando (con tab si vedono gli input)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
73. OUTLINE
STATISTICA DI BASE
TEST UNIVARIATI PARAMETRICI
TEST UNIVARIATI NON PARAMETRICI
DISTRIBUZIONI
GRAFICA
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
74. STATISTICA DI BASE
STATISTICA DI BASE
La funzione principale è summary, che restituisce: minimo,
massimo, media, mediana, percentili e numero di missing value
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
75. STATISTICA DI BASE
MISSING VALUE
in 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 NA
in genere si possono gestire dalle funzioni stesse, ad esempio
mean(x, na.rm=T)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
76. STATISTICA DI BASE
TAVOLE 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. STATISTICA DI BASE
CORRELAZIONE
cor(mtcars, use="complete.obs", method="pearson")
cov(mtcars, use="complete.obs")
methods= pearson, spearman, kendall
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
78. TEST UNIVARIATI PARAMETRICI
TEST UNIVARIATI PARAMETRICI
La funzione principale è t.test()
# due campioni indipendenti
t.test(y~x) # dove y è numerica e x è un fattore binario
# due campioni indipendenti
t.test(y1,y2) # dove y1 e y2 sono numeriche
# due campioni accoppiati
t.test(y1,y2,paired=TRUE) # dove y1 e y2 sono numeriche
# one samle t-test
t.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. TEST UNIVARIATI NON
PARAMETRICI
TEST UNIVARIATI NON PARAMETRICI
# due campioni indipendenti
wilcox.test(y~x) # dove y è numerica e x è un fattore
binario
# due campioni indipendenti
wilcox.test(y1,y2) # dove y1 e y2 sono numeriche
# paired t-test
wilcox.test(y1,y2,paired=TRUE) # dove y1 e y2 sono
numeriche
Si può usare alternative="less" o "greater" per
specificate il test ad una coda.
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
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 Electronic
Thursday, 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. GRAFICI
PER CREARE UN GRAFICO IL COMANDO DI BASE È
plot()
PLOT IN GENERE SI USA PER FARE I GRAFICI A
DISPERSIONE
UTILIZZIAMO UN DATASET DI ESEMPIO INCLUSO IN R:
MTCARS
attach(mtcars)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
83. GRAFICI
CI SONO DIVERSE OPZIONI CHE SI POSSONO USARE PER
CUSTOMIZZARE L’ASPETTO DI UN GRAFICO:
type per definire il tipo di grafico
cex per intervenire sulla dimensione dei font
pch per intervenire sulla forma dei “punti”
col per cambiare i colori
PER AVERE PIÙ INFORMAZIONI
help (par)
oppure http://www.statmethods.net/advgraphs/
parameters.html
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
84. GRAFICI
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
85. GRAFICI
IN UN GRAFICO È POSSIBILE SOSTITUIRE I PUNTI CON DEL
TESTO: IL COMANDO È
text()
SI POSSONO POI SPECIFICARE IL TITOLO DEL GRAFICO
(MAIN) ED I NOMI DEGLI ASSI
xlab e ylab
SI POSSONO INTRODURRE LINEE DI RIFERIMENTO
abline()
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
86. GRAFICI
Per creare grafici con una (o più) linea sia usa
lines()
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 vogliamo
disegnare:
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. GRAFICI
LEGENDA
E’ una funzione con molte opzioni, la più delicata è quella
relativa al posizionamento, dato che potrebbe andare a coprire parti
utili del grafico
legend (location, title, legend,...)
location si può mettere in due modi (vedi file)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
88. GRAFICI
PER SALVARE UN GRAFICO IL COMANDO DIPENDE DAL TIPO DI
FILE CHE SI VUOLE SALVARE
pdf("mygraph.pdf") pdf file
png("mygraph.png") png file
jpeg("mygraph.jpg") jpeg file
bmp("mygraph.bmp") bmp file
NELL’HELP DI CIASCUNA FUNZIONE SONO DESCRITTI I
DETTAGLI SPECIFICI PER CIASCUN SALVATAGGIO.
IN RSTUDIO LA PROCEDURA È SEMPLIFICATA
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
89. GRAFICI
OGNI VOLTA CHE FACCIO UN NUOVO GRAFICO, QUESTO MI
SOVRASCRIVE IL PRECEDENTE. PER EVITARE CHE CIÒ
ACCADA APRO UN ALTRA FINESTRA PER OSPITARE IL
NUOVO GRAFICO
windows() # per windows
quartz()oppure X11()# per MacOs e Linux
Anche in questo caso RStudio ci viene in aiuto, conservando una
timeline completa dei nostri grafici
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
90. GRAFICI
COMBINARE PIÙ PLOT
Una utile alternativa è quella fare più grafici insieme,
utilizzando i comandi par() e mfrow()
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
91. GRAFICI
Istogrammi
hist(mpg)
Kernel density plot
plot(density(mpg), main="Kernel Density of Miles
Per Gallon")
nota: kernel density estimation is a non-parametric way
of estimating the probability density function of a
random variable
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
93. GRAFICI
Bar plot
counts <- table(mtcars$gear)
barplot(counts, main="Car Distribution",
xlab="Number of Gears")
nota: non confondere gli istogrammi con i grafici a
barre!!
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
94. GRAFICI
BOX PLOT
boxplot(mpg~cyl,data=mtcars, main="Car Milage
Data",xlab="Number of Cylinders", ylab="Miles
Per Gallon")
La funzione boxplot si può utilizzare anche per estrarre statistiche
dal dataset
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
95. GRAFICI
SCATTER PLOT
Come abbiamo già visto il comando principale per fare uno
scatterplot è plot().
E’ possibile però fare anche scatterplot multipli, con il comando
pairs()
pairs(mtcars[,1:3], main="Scatterplot Matrix")
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
96. GRAFICI
HIGH DENSITY PLOT
Quando è necessario mettere in grafico moltissimi punti, che
possono essere anche in gran parte sovrapposti
smoothScatter(x,y)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
99. GRAFICI
PACKAGE SPECIFICI
ggplot2 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
102. GRAFICI
Trellis graph (package=”lattice”)
Un grafico trellis mostra una o più
variabili, condizionate rispetto ad
un’altra o più variabili fattoriali.
Per esempio ~x|A mostra la variabile
numerica x per ciascun livello del
fattore A
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
103. GRAFICI
MATPLOT
Si usa per mettere in grafico le colonne di una matrice, rispetto a
quelle di un altra. Ad esempio un set di spettri rispetto alle relative
lunghezze d’onda
E’ interessante, soprattutto in questo caso, la funzione
manipulate, che ci mette a disposizione RStudio
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
106. GRAFICI
ESERCIZIO - ANSCOMBE’S QUARTET
Importa 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. GRAFICI
ESERCIZIO - ANSCOMBE’S QUARTET
Anscombe's quartet comprises four datasets that have identical simple statistical
properties, 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. REGRESSIONE LINEARE MULTIPLA
Il 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. REGRESSIONE LINEARE MULTIPLA
Chiedo 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
115. REGRESSIONE LINEARE MULTIPLA
Esercizio 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. REGRESSIONE LINEARE MULTIPLA
Abbiamo calcolato due modelli di regressione (esercizio 2). Ora li
voglio confrontare
anova(twoPredictorModel, threePredictorModel)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net
117. REGRESSIONE LINEARE MULTIPLA
In caso voglia considerare anche delle interazioni tra i fattori
ad esempio
twoPredictorModel <- lm(ROLL~UNEM+HGRAD+UNEM:HGRAD,
dataset_enrollmentForecast)
oppure
twoPredictorModel <- lm(ROLL~UNEM*HGRAD,
dataset_enrollmentForecast)
// Dott. Marco Calderisi - m.calderisi@kode-solutions.net