Introduzione a R

117
INTRODUZIONE ALL’UTILIZZO DI R [email protected] 14 E 15 MARZO 2012 DIPARTIMENTO DI SCIENZE DELL'AMBIENTE E DELLA VITA UNIVERSITÀ DEGLI STUDI DEL PIEMONTE ORIENTALE

Transcript of Introduzione a R

Page 1: Introduzione a R

INTRODUZIONE ALL’UTILIZZO DI R

[email protected]

14 E 15 MARZO 2012

DIPARTIMENTO DI SCIENZE DELL'AMBIENTE E DELLA VITA

UNIVERSITÀ DEGLI STUDI DEL PIEMONTE ORIENTALE

Page 3: Introduzione a R

PRESENTAZIONE

WWW.CHEMIOMETRIA.IT (IN STATO DI COSTANTE NON AGGIORNAMENTO!!)

CHEMIOMETRIA.WORDPRESS.COM/ (IDEM COME SOPRA!!)

// Dott. Marco Calderisi - [email protected]

Page 4: Introduzione a R

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]

Page 5: Introduzione a R

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]

Page 6: Introduzione a R

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]

Page 7: Introduzione a R

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]

Page 8: Introduzione a R

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]

Page 9: Introduzione a R

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]

Page 10: Introduzione a R

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)

Page 11: Introduzione a R

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]

Page 12: Introduzione a R

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]

Page 13: Introduzione a R

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

Page 14: Introduzione a R

R //screenshots

// Dott. Marco Calderisi - [email protected]

Page 15: Introduzione a R

R //screenshots

// Dott. Marco Calderisi - [email protected]

Page 16: Introduzione a R

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]

Page 17: Introduzione a R

R //RStudio

// Dott. Marco Calderisi - [email protected]

Page 18: Introduzione a R

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]

Page 19: Introduzione a R

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]

Page 20: Introduzione a R

R //Concetti di base

Oggetti

Packages

Sintassi

Data types/structures

Functions

// Dott. Marco Calderisi - [email protected]

Page 21: Introduzione a R

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]

Page 22: Introduzione a R

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]

Page 23: Introduzione a R

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

Page 24: Introduzione a R

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]

Page 25: Introduzione a R

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]

Page 26: Introduzione a R

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]

Page 27: Introduzione a R

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]

Page 28: Introduzione a R

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]

Page 29: Introduzione a R

R //gli altri oggetti

Vettori

Matrici

Array

Liste

Data Frames

Funzioni

// Dott. Marco Calderisi - [email protected]

Page 30: Introduzione a R

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]

Page 31: Introduzione a R

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]

Page 32: Introduzione a R

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]

Page 33: Introduzione a R

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]

Page 34: Introduzione a R

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]

Page 35: Introduzione a R

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]

Page 36: Introduzione a R

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]

Page 37: Introduzione a R

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]

Page 38: Introduzione a R

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]

Page 39: Introduzione a R

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]

Page 40: Introduzione a R

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]

Page 41: Introduzione a R

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]

Page 42: Introduzione a R

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]

Page 43: Introduzione a R

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]

Page 44: Introduzione a R

R //operazioni con le matrici

// Dott. Marco Calderisi - [email protected]

Page 45: Introduzione a R

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]

Page 46: Introduzione a R

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]

Page 47: Introduzione a R

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]

Page 48: Introduzione a R

R //operazioni con le matrici

KT[KT[,1]>2,]

// Dott. Marco Calderisi - [email protected]

Page 49: Introduzione a R

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]

Page 50: Introduzione a R

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]

Page 51: Introduzione a R

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]

Page 52: Introduzione a R

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]

Page 53: Introduzione a R

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]

Page 54: Introduzione a R

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]

Page 55: Introduzione a R

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]

Page 56: Introduzione a R

R //dataframe

ESERCIZIO 6

Aggiungere al data frame x4.df una colonna contenente la media dei voti

// Dott. Marco Calderisi - [email protected]

Page 57: Introduzione a R

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]

Page 58: Introduzione a R

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]

Page 59: Introduzione a R

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

Page 60: Introduzione a R

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]

Page 61: Introduzione a R

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]

Page 62: Introduzione a R

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]

Page 63: Introduzione a R

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]

Page 64: Introduzione a R

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]

Page 65: Introduzione a R

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]

Page 66: Introduzione a R

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]

Page 67: Introduzione a R

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]

Page 68: Introduzione a R

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]

Page 69: Introduzione a R

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]

Page 70: Introduzione a R

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]

Page 71: Introduzione a R

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]

Page 72: Introduzione a R

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]

Page 73: Introduzione a R

OUTLINE

STATISTICA DI BASE

TEST UNIVARIATI PARAMETRICI

TEST UNIVARIATI NON PARAMETRICI

DISTRIBUZIONI

GRAFICA

// Dott. Marco Calderisi - [email protected]

Page 74: Introduzione a R

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]

Page 75: Introduzione a R

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]

Page 76: Introduzione a R

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]

Page 77: Introduzione a R

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]

Page 78: Introduzione a R

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]

Page 79: Introduzione a R

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]

Page 80: Introduzione a R

DISTRIBUZIONI

DISTRIBUZIONI (vedi file codice)

// Dott. Marco Calderisi - [email protected]

Page 81: Introduzione a R

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

Page 82: Introduzione a R

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]

Page 83: Introduzione a R

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]

Page 85: Introduzione a R

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]

Page 86: Introduzione a R

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

Page 87: Introduzione a R

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]

Page 88: Introduzione a R

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]

Page 89: Introduzione a R

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]

Page 90: Introduzione a R

GRAFICI

COMBINARE PIÙ PLOT

Una utile alternativa è quella fare più grafici insieme, utilizzando i comandi par() e mfrow()

// Dott. Marco Calderisi - [email protected]

Page 91: Introduzione a R

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]

Page 92: Introduzione a R

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]

Page 93: Introduzione a R

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]

Page 94: Introduzione a R

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]

Page 95: Introduzione a R

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]

Page 96: Introduzione a R

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]

Page 97: Introduzione a R

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]

Page 98: Introduzione a R

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]

Page 99: Introduzione a R

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]

Page 100: Introduzione a R

GRAFICI

GGPLOT2 (vedi file codice)

// Dott. Marco Calderisi - [email protected]

Page 101: Introduzione a R

GRAFICI

IPLOTS / JGR (http://rforge.net/JGR/files/)

(vedi file codice)

// Dott. Marco Calderisi - [email protected]

Page 102: Introduzione a R

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]

Page 103: Introduzione a R

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]

Page 104: Introduzione a R

GRAFICI

MAPPE

Si può usare il package “map”

// Dott. Marco Calderisi - [email protected]

Page 105: Introduzione a R

GRAFICI

COLORI

display.brewer.all()

// Dott. Marco Calderisi - [email protected]

Page 106: Introduzione a R

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]

Page 107: Introduzione a R

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]

Page 108: Introduzione a R

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]

Page 109: Introduzione a R

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]

Page 110: Introduzione a R

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]

Page 111: Introduzione a R

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]

Page 112: Introduzione a R

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]

Page 113: Introduzione a R

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]

Page 114: Introduzione a R

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

Page 115: Introduzione a R

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]

Page 116: Introduzione a R

REGRESSIONE LINEARE MULTIPLA

Abbiamo calcolato due modelli di regressione (esercizio 2). Ora li voglio confrontare

anova(twoPredictorModel, threePredictorModel)

// Dott. Marco Calderisi - [email protected]

Page 117: Introduzione a R

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]