Introduzione a R
-
Upload
mcalderisi -
Category
Education
-
view
3.273 -
download
0
Transcript of Introduzione a R
INTRODUZIONE ALL’UTILIZZO DI R
14 E 15 MARZO 2012
DIPARTIMENTO DI SCIENZE DELL'AMBIENTE E DELLA VITA
UNIVERSITÀ DEGLI STUDI DEL PIEMONTE ORIENTALE
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 - [email protected]
PRESENTAZIONE
WWW.CHEMIOMETRIA.IT (IN STATO DI COSTANTE NON AGGIORNAMENTO!!)
CHEMIOMETRIA.WORDPRESS.COM/ (IDEM COME SOPRA!!)
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
R //web sources
// Dott. Marco Calderisi - [email protected]
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)
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 - [email protected]
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 - [email protected]
R //user groups
Rante
Collocazione: Padova
Organizzatori: associazione R.O.S.P.O.
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 - [email protected]
Da pochi giorni esiste anche MilanoR
R //screenshots
// Dott. Marco Calderisi - [email protected]
R //screenshots
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
R //RStudio
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
R //Concetti di base
Oggetti
Packages
Sintassi
Data types/structures
Functions
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
R //un oggetto...
Calcolare il valore di y al variare di x
π = pi
y
y
esercizio 1: creo un “oggetto” usando R come “calcolatrice”
// Dott. Marco Calderisi - [email protected]
R //un oggetto...
esercizio 1: creo un “oggetto” usando R come “calcolatrice”
// Dott. Marco Calderisi - [email protected]
> 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
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
R //gli altri oggetti
Vettori
Matrici
Array
Liste
Data Frames
Funzioni
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 25
sum(y[y >= 10]) [1] 81
sum(x[x<20], x[x>40]) [1] 135
sum(x>30) [1] 3
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
R //operazioni con le matrici
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
R //dataframe
ESERCIZIO 6
Aggiungere al data frame x4.df una colonna contenente la media dei voti
// Dott. Marco Calderisi - [email protected]
R //dataframe
ESERCIZIO 6
Average <- (x4.df$Vote.1 + x4.df$Vote.2)/2
X <- data.frame(x4.df,Average)
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
R //operatori logici e di confronto
// Dott. Marco Calderisi - [email protected]
Operatori di confronto Operatori logici
< minore> maggiore<= minore uguale>= maggiore uguale== uguale!= diverso
& per AND| per OR! per NOT
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
R //function
La sintassi per creare una funzione è
nomeFunzione <- function(arg1, arg2,...){
}
che si usa così: output <- nomeFunzione (arg1, arg2,...)
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
OUTLINE
STATISTICA DI BASE
TEST UNIVARIATI PARAMETRICI
TEST UNIVARIATI NON PARAMETRICI
DISTRIBUZIONI
GRAFICA
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
STATISTICA DI BASE
CORRELAZIONE
cor(mtcars, use="complete.obs", method="pearson")
cov(mtcars, use="complete.obs")
methods= pearson, spearman, kendall
// Dott. Marco Calderisi - [email protected]
TEST UNIVARIATI PARAMETRICI
TEST UNIVARIATI PARAMETRICI
La 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 - [email protected]
TEST UNIVARIATI NON PARAMETRICI
TEST UNIVARIATI NON PARAMETRICI
# due campioni indipendentiwilcox.test(y~x) # dove y è numerica e x è un fattore binario
# due campioni indipendentiwilcox.test(y1,y2) # dove y1 e y2 sono numeriche
# paired t-testwilcox.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 - [email protected]
GRAFICI
What can R do for you this is what I mean by “R has the most advanced graphic system”
a b
!"" #"" $"" %"" &"""
"
!""
#""
$""
%""
&"""
&'(!)"#&"((&#")&)(%!&&"!#$&!%&!'&$#'(&('%$)#!&%#()"#*!&(!)'($!#
+,-./0
c d
Figure 8: Four di!erent visualizations of a scatterplot of flow cytometrydata (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 hexagonrepresents the number of data points that it contains. c: color representationof smooth point densities calculated from the data using a kernel densityestimator. In the sparse regions of the density, the plot is augmented byblack dots that represent individual data points. In the denser regions,these are omitted. d : usual scatterplot with points colored according to thelocal density.
17
Hosted by The Berkeley Electronic Press
Figure 12: A heatmap representation of the CLL data. Genes were selectedusing a t-test comparing those with a progressive disease and those with astable disease.
4.5 Heatmaps
In Figure 12 a heatmap showing genes selected according to the p-value in at-test comparing those with stable disease to those with progressive disease.The top bar contains one small block for each sample, those samples thatcorrespond to the stable disease phenotype have a dark colored block, thosewith progressive disease a light colored block. It is not surprising that thetwo groups are well separated (all the dark blocks are to the left), since thatis how genes were selected.
4.6 Diagnostics
The RNA digestion plot, Figure 13, indicates that there is in fact one unusualarray, CLL1. These plots show the is a relationship between the probeposition and intensity. In general, the relationship is non-constant, and
21
Hosted by The Berkeley Electronic Press
Random edge graph
100 nodes 50 edges
degree distribution
Thursday, 16 June 2011
Past, Present and Future of RFirst Turin R net conference, 16-June-2011
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 - [email protected]
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 - [email protected]
GRAFICI
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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
1= continua 2= trattini 3= puntini
UN ALTRO PARAMETRO IMPORTANTE È LTY CHE DETERMINA IL TIPO DI LINEA
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 - [email protected]
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 - [email protected]
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 - [email protected]
GRAFICI
COMBINARE PIÙ PLOT
Una utile alternativa è quella fare più grafici insieme, utilizzando i comandi par() e mfrow()
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
GRAFICI
DOT PLOT
dotchart(mtcars$mpg,labels=row.names(mtcars),cex=.7,main="Gas Milage for Car Models", xlab="Miles Per Gallon")
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
GRAFICI
SCATTER PLOT TRIDIMENSIONALI
library(scatterplot3d)
scatterplot3d(wt,disp,mpg, main="3D Scatterplot")
Se devo esaminare più di tre variabili
library(Rcmdr)
scatter3d(wt, disp, mpg)
// Dott. Marco Calderisi - [email protected]
GRAFICI
CORRELOGRAMMI
install.packages(corrgram)
library(corrgram)
corrgram(mtcars, order=TRUE, lower.panel=panel.shade, upper.panel=panel.pie, text.panel=panel.txt, main="Correlazioni di mtcars")
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
GRAFICI
IPLOTS / JGR (http://rforge.net/JGR/files/)
(vedi file codice)
// Dott. Marco Calderisi - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
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 - [email protected]
REGRESSIONE LINEARE MULTIPLA
Plot 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 - [email protected]
REGRESSIONE LINEARE MULTIPLA
Istogramma dei residui
hist(stdR, freq = FALSE)
curve(dnorm, add = TRUE)
Q-Q plot
qqnorm(stdRes)
abline(0,1)
// Dott. Marco Calderisi - [email protected]
REGRESSIONE LINEARE MULTIPLA
Confronto tra misurati e predetti
plot(y,fitted(mod))
abline(a=1,b=1, col="red", lty=2))
// Dott. Marco Calderisi - [email protected]
REGRESSIONE LINEARE MULTIPLA
Faccio qualche plot diagnostico
layout(matrix(c(1,2,3,4),2,2)) # optional 4 graphs/page
plot(fit)
// Dott. Marco Calderisi - [email protected]
REGRESSIONE LINEARE MULTIPLA
Esercizio 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 - [email protected]
ASTRO.SWARTHMORE.EDU/ASTRO121/ANSCOMBE.HTML
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 - [email protected]
REGRESSIONE LINEARE MULTIPLA
Abbiamo calcolato due modelli di regressione (esercizio 2). Ora li voglio confrontare
anova(twoPredictorModel, threePredictorModel)
// Dott. Marco Calderisi - [email protected]
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 - [email protected]