Sei sulla pagina 1di 10

############################### ##### CORSO DI FSSB ##### ## per INGEGNERIA BIOMEDICA ### ############################### ############################################### ################ LABORATORIO 1 ################ ## INTRODUZIONE

A R & STATISTICA DESCRITTIVA ## ################# (PARTE 1) ################### ############################################### # Contatti esercitatori di laboratorio # Andrea Ghiglietti: andrea.ghiglietti@mail.polimi.it # Paolo Zanini: paolo.zanini@mail.polimi.it # # # # Riferimenti bibliografici: TITOLO: Laboratorio di statistica con R AUTORI: F. Ieva, A. M. Paganoni, V. Vitelli EDITORE: Pearson

# Per scaricare R: http://www.r-project.org/ # Per maggiori informazioni su R: # - dall'interfaccia R: 'aiuto' -> 'Guida Html' # oppure 'aiuto' -> 'sito CRAN' # # # # # # # # # # # # # # # # # # # # # Argomenti trattati nel laboratorio 1: - Comandi base di R (scalari, vettori, matrici e relative operazioni) - Grafici - Esempi di analisi descrittiva di variabili qualitative. R un linguaggio interpretato; possibile: - scrivere il codice direttamente sulla console - (preferibile) scrivere il codice su uno script (come questo) e poi eseguirlo in console, una riga per volta oppure una selezione. Per eseguire il codice in console: ctrl + R (per Mac cmd + invio). Per aprire un nuovo script: - File -> Nuovo script Commento: tutto quanto preceduto da '#' non viene letto dalla Console di R possibile dunque eseguire indistintamente nella Console comandi e commenti senza dover togliere questi ultimi ( SEMPRE opportuno commentare i propri script come mostrato a laboratorio) MOLTO IMPORTANTE: R deve avere una DIRECTORY DI LAVORO, ovvero una cartella dove di default verranno cercati o salvati i file utilizzati da R. Quindi: create immediatamente una cartella in 'C:/USER_DATA', e chiamatela 'nome_cognome_lab1'; salvate poi in questa cartella i file che trovate sul sito del corso (pacchetti, dati,..) all'INIZIO di ogni laboratorio

# per selezionare la directory di lavoro: # seleziono la finestra della Console, e poi bottone # 'file' -> 'cambia directory', # oppure con un comando da tastiera # setwd('C:/USER_DATA/andrea_ghiglietti_lab1') # se non mi ricordo la directory di lavoro: getwd() # per sapere tutti i file presenti nella directory: dir()

### R come calcolatore # possibile utilizzare R per eseguire operazioni semplicissime (17*0.35)^(1/3) # in R sono definite le principali funzioni matematiche # (alcune serviranno spesso nell'analisi dei dati!) log(10) exp(1) 3^(-1) 1/3 ### OGGETTI IN R: assegnare valore alle variabili # operatore di assegnamento: <# funziona anche '=' ## scalari a <- 1 a a = 2 a b <- 3 b 4 -> c c a <- b a b ## vettori v <- c(2,3,7,10) # c() la funzione che serve a concatenare: un vettore # un insieme di numeri concatenati! v # vettori costituiti da sequenze ordinate di numeri: # possibile automatizzare la procedura # posso imporre il passo u <- seq(0,0.5,by=0.1) u # oppure la lunghezza del vettore u <- seq(0,0.5,length=10) u length(u) # passo negativo significa sequenza decrescente u1 <- seq(0.5,0,by=-0.1)

u1 # sequenza di passo 1 u2 <- 1:5 # vettori costituiti da ripetizioni di numeri: # possibile automatizzare la procedura w <- rep(1,10) w # Primo argomento di rep: valore o vettore di valori che voglio ripetere # Secondo argomento di rep: valore o vettore di valori che indicano # come il primo argomento va ripetuto w1 <- rep(c(1,2,3,4),3) w1 # quale sar la lunghezza di w1? # ... length(w1) # N.B. i comandi rep e seq possono essere utilizzati insieme! w2 <- rep(1:8,rep(3,8)) w2 w3 <- rep(seq(0,10,length=6),1:6) w3 w4 <- rep(c(5,9,1,3),c(1,4,2,0)) w4 ## matrici W <- matrix(data = c(1,2,3,4,5,6,7,8,9,10,11,12), nrow = 4, ncol = 3, byrow = FA LSE) W ## Attenzione: W e w sono variabili diverse!! # oppure W <- rbind(c(1,5,9),c(2,6,10),c(3,7,11),c(4,8,12)) W # oppure (pi furbo..) W <- cbind(1:4,5:8,9:12) W # Attenzione: in R i vettori non sono matrici n*1 o 1*n! # fondamentale ricordarselo quando si vuole estrarre un elemento # da un vettore ## Estrazione di elementi da un vettore o da una matrice v v[2] v[2:3] v[c(1,3)]

v[-1] # tutto il vettore tranne il primo elemento v[-length(v)] # tutto il vettore tranne l'ultimo elemento W # estrazione di elementi da una matrice W[2,3] dim(W) W[2:4,1] W[4,c(1,3)] # estrazione di righe o colonne di una matrice W[3,] W[,2] # estrazione di sottomatrici W[c(1,3,4),2:3] ### OPERAZIONI ALGEBRICHE IN R # NB: R di default effettua le operazioni componente per componente # a b c d e f W Z Z consideriamo i seguenti oggetti <- 1 <- 2 <- c(2,3,4) <- c(10,10,10) <- c(1,2,3,4) <- 1:6 # dimensioni 4x3 da prima <- rbind(rep(0,3),1:3,rep(10,3),c(4,7,1)) # Z ha le stesse dimensioni di W

# operazioni su scalari e vettori a+b # scalare + scalare c+d # vettore + vettore a*b # scalare * scalare c*d # vettore * vettore (componente per componente) c+a # vettore + scalare c^2 # attenzione: operazioni sono sempre componente per componente exp(c) # vedi sopra c(c,d,e) # la funzione c() serve a concatenare qualsiasi tipo di oggetti, anche vettori! # operazioni su matrici Z+W # matrice + matrice (componente per componente) Z*W # matrice * matrice (componente per componente) ## funzioni che permettono operazioni algebriche in R sum(c) # somma componenti vettore c sum(Z) # somma componenti matrice Z (somma tutto!!) prod(c) # prodotto componenti vettore c prod(Z) # prodotto componenti matrice Z (come sopra) V <- t(W) # trasposizione di matrice # V una matrice 3x4

V V*W # matrice * matrice (componente per componente) # Errore: le matrici hanno dimensioni diverse! # Moltiplicazione matriciale: anche qui bisogna fare # attenzione alle dimensioni.. V %*% W W %*% V W+a # matrice + scalare W c W+c # matrice + vettore ... ATTENZIONE! (somma il vettore per colonna) # Per visualizzare e cancellare le variabili ls() #fornisce la lista delle variabili esistenti rm(a) #rimuove la variabile a ls() rm(list=ls()) #rimuove tutte le variabili nel workspace ls() ### ALTRI OGGETTI IN R: DATAFRAME # Dataframe: oggetti costituiti da vettori di ugual lunghezza, # anche di tipo diverso. esame <- data.frame( matricola = as.character(c(45020,45679,46789,43126,42345,47568,45674 )), voti_S = c(30,19,29,NA,25,26,27), voti_O = c(3,3,1,NA,3,2,NA), voti_TOT = c(30,22,30,NA,28,28,27)) esame # agli elementi di un dataframe si accede con il simbolo $ # altrimenti R non li pu vedere.. voti_S esame$voti_S # possibile per fare in modo che anche le variabili contenute # in un dataframe risultino visibili attach(esame) voti_S detach(esame) voti_S # NB: non stiamo rimuovendo il dataframe, ma solo l'accesso diretto!! # Un dataframe si pu anche importare in R utilizzando il comando # read.table(). Prima di importare i dati conveniente guardare # il file che viene importato esame2=read.table("esame.txt",header=TRUE)

# L'opzione header=TRUE o FALSE indica se il file che viene # importato contiene i nomi delle variabili. names(esame2) # Mostra i nomi delle variabili nel dataframe head(esame2) # Mostra le prime sei righe del dataframe # Che tipo di variabili ci sono nel nostro dataframe? # Quali sono variabili categoriche e quali quantitative? str(esame2) # Struttura del dataframe! # Il comando is.na() restituisce TRUE dove ci sono dati # non disponibili (NA=Not Available) is.na(esame2) # Per contare il numero di NA sum(is.na(esame2)) ### GRAFICI # Funzione plot: grafici nel piano cartesiano.. # Argomenti: ascisse e ordinate dei punti da plottare x <- c(0,1,2,3) y <- c(4,5,2,10) plot(x,y) x <- seq(0,3,by=0.01) y <- x^2 plot(x,y) # anzicch punti, tracciare una linea che passa per i vari punti plot(x,y,type='l') # aggiungere in rosso il vettore z=x^3 z <- x^3 points(x,z,type='l',col='red') # alternativamente possibile utilizzare direttamente il comando lines plot(x,y,type='l') lines(x,z,col='red',lty=2,lwd=4) # inoltre, se so di voler aggiungere al plot un altro vettore, posso # regolare i valori limite sull'asse delle ascisse/ordinate in modo # che entrambi i vettori vengano interamente visualizzati plot(x,y,type='l',xlim=range(x),ylim=range(cbind(y,z))) lines(x,z,col='red') # provate il comando demo(graphics): rassegna di possibili grafici # cliccate sul grafico per passare al successivo # di volta in volta vedremo i comandi per i grafici che ci interessano demo(graphics)

### HELP # # # # cosa fare quando ci si ricorda nome del comando ma non si ricordano il suo scopo oppure i suoi argomenti? help(NOMECOMANDO) oppure ?NOMECOMANDO ad esempio:

help(plot) ?plot # quando invece non ci si ricorda nome del comando si pu utilizzare # help.search("KEYWORD") help.search("points") # resituisce un elenco di pacchetti::comandi nel cui help # contenuta la keyword specificata. A destra compare anche una # brevissima spiegazione del comando. ### SALVARE # per salvare lo script: # selezionare la finestra dello script, e cliccare # il bottone 'file', 'salva', ... # per salvare un grafico: # selezionare la finestra del grafico, e cliccare # il bottone 'file', 'salva con nome', ... # oppure si usa la funzione png() (o jpg() etc... guardare help(png)) png("nomegrafico.png") plot(x,y,type='l',xlim=range(x),ylim=range(cbind(y,z))) lines(x,z,col='red') dev.off() # per salvare tabelle quali datasets, vettori, matrici, o altri oggetti # (esportazione dataframe) in un file .txt: W <- cbind(1:4,5:8,9:12) W write.table(W, 'la-mia-matrice.txt') # oppure possibile salvare i dati direttamente come variabili di R, # in un file .RData save(W,file='la-mia-matrice.RData') # Per caricare i file .RData precedentemente salvati con save: load('la-mia-matrice.RData') # # # # ATTENZIONE: la tabella o il file .RData verr salvata nella directory di lavoro che avete selezionato (se ne avete selezionata una), altrimenti in quella di default (MAI USARE QUELLA DI DEFAULT!!)

write.table(W, 'la-mia-matrice.txt') # controllate nella vostra directory! # per salvare area di lavoro:

# selezionare la finestra della Console, cliccare il bottone # 'file' -> 'salva area di lavoro', ... (anche quando richiesto # a chiusura di R -> SCONSIGLIATO in questo caso) ### ANALISI DESCRITTIVA DI UNA VARIABILE ### ALEATORIA QUALITATIVA (DATI CATEGORICI) # RIFERIMENTI BIBLIOGRAFICI: # # # # # # # # # # Titolo: Introduzione alla statistica Autori: Ross, S.M. Editore: Apogeo Capitoli 2 e 3 Le variabili qualitative non possono essere descritte numericamente; possibile solamente trovare la tabella di distribuzione di frequenze per le categorie della variabile, e tracciare grafici (diagrammi a barre e a torta). Nei prossimi due esercizi cercheremo di prendere confidenza con questi strumenti.

########################################## ############# ESERCIZIO 1 ############# ########################################## # Creo un vettore di realizzazioni di una variabile categorica # La funzione factor converte l'argomento (vettore di numeri o caratteri) # in una serie di realizzazioni di una variabile aleatoria categorica, # i cui valori possibili sono riportati in Levels. province <- c("MI","MI","VA","BG","LO","LO","CR","Alt","CR","MI","Alt","CR","LO" ,"VA","MI","Alt","LO","MI") province prov <- factor(province, levels=c('MI','LO','BG','CR','VA','Alt')) prov provi <- as.factor(province) provi plot(prov) # giocare un po' con le opzioni grafiche! plot(prov,col='red') # # # # # il comando plot, se applicato ad una variabile creata con 'factor' o 'as.factor' capisce da solo che deve fare un grafico di una variabile aleatoria categorica, ovvero un grafico a barre. L'altezza di ogni rettangolo corrisponde alla frequenza assoluta di ogni livello.

provASSOLUTE <- table(prov) # tabella delle frequenze assolute provASSOLUTE provRELATIVE <- table(prov)/length(prov) #tabella delle frequenze realtive provRELATIVE #oppure: provRELATIVE <- prop.table(provASSOLUTE) provRELATIVE

barplot(prop.table(provASSOLUTE),xlab="province",ylab="proporzioni",main="Bar pl ot delle province") # L'altezza di ogni rettangolo corrisponde alla frequenza relativa # di ogni livello. windows() # serve per creare un nuovo device grafico, e tenere # aperti pi grafici contemporaneamente #Per aprire una nuova finestra grafica: # x11() #Linux # windows() #Solo per Windows # quartz() #Solo per Mac pie(provRELATIVE) # grafico a torta help(pie) pie(provRELATIVE,radius=1,col=c('red','orange','yellow','green','lightblue','vio let'),main='Grafico a torta Province') # Anche qui si pu giocare un po' con le opzioni grafiche # per abbellire il grafico # L'area di ogni fetta proporzionale alla frequenza di ogni livello. # Per estrarre la frequenza assoluta/relativa di una specifica categoria: provASSOLUTE[2] provASSOLUTE["LO"] provRELATIVE[2] provRELATIVE["LO"] # L'unico indice di posizione per le variabili categoriche la moda, # ossia la categoria con la frequenza assoluta/relativa maggiore. # per estrarre la moda non esiste un comando diretto, dobbiamo fare: provASSOLUTE[which(provASSOLUTE==max(provASSOLUTE))] # oppure in maniera pi coincisa provASSOLUTE[which.max(provASSOLUTE)] ########################################## ############# ESERCIZIO 2 ############# ########################################## # Analisi dei dati categorici # 'Esposizione ai pesticidi' pesticide <- c('O','O','J','O','J','O','F','O','F','O','N','F','J','J','F','J',' O', 'J','O','N','C','O','F','O','F','N','N','B','B','O','O','N','B','N','B', 'C','F','J','M','O','O','F','O','O','J','J','J','O','O','B','M','M','O', 'O','O','B','M','C','B','F') # DOMANDE # 1) Creare le tabelle di frequenza assoluta e relativa # 2) Visualizzare mediante opportuni grafici il dataset

# 3) Calcolare la categoria modale

Potrebbero piacerti anche