########################################################################## # Laboratorio di Analisi delle Serie Storiche con R # Prof.ssa Lea Petrella # Facolta' di Economia # Dipartimento Metodi e Modelli per l'Economia il Territorio e la Finanza # Sapienza Universita' di Roma # a.a. 2017-2018 # valentina.raponi@uniroma1.it ########################################################################## ########################################################################## # Lezione 1: INTRODUZIONE ALL'USO DI R (Parte 1) ########################################################################## # # Indice: # # * cosa e' R? # * vantaggi/svantaggi # * primi passi: settare la cartella di lavoro # * scaricare ed installare R ed R studio # * elaborazione minima: R come calcolatrice # # * chiedere aiuto ad R # * assegnazione di un nome ad un oggetto # # * verifica della natura di un oggetto R # * "personaggi scomodi" # * vettori # * percorso di ricerca degli oggetti di R/ installazione e caricamento pacchetti # * matrici # * operazioni tra scalari, vettori e matrici # * estrazione/selezione di elementi # * ordinamenti in R # * dataframe # * salvare e chiudere # ########################################################################## #----------------------------------------------------------------- # * cosa e' R? #----------------------------------------------------------------- # R is a language and environment for statistical computing and graphics # ovvero e' un ambiente integrato che permette di: # - eseguire calcoli; # - elaborare dati; # - descrivere modelli statistici anche molto complessi; # - rappresentare graficamente i dati; # - e' un linguaggio object-oriented, cioe' costituito da oggetti che # interagiscono fra loro mediante funzioni. # - key-sensitive. # - packages-pacchetti di R #----------------------------------------------------------------- # * vantaggi/svantaggi #----------------------------------------------------------------- # VANTAGGI: # - e' gratutito e open-source, ovvero è un codice (sorgente) aperto che # permette a più persone di guardare il codice sorgente e, eventualmente, # apporre delle modifiche che consentano di migliorarlo, permettendone # uno sviluppo piu' veloce e ottimale. # SVANTAGGI # - non e' semplice da utilizzare. # - problemi con dataset grandi (dell'ordine di decine di milioni) # ---> ultimamente passi avanti. #----------------------------------------------------------------- # * scaricare ed installare R #----------------------------------------------------------------- # # 1. dal sito: http://www.r-project.org/ # 2. cliccate su CRAN dal menu Download # 3. selezionate un mirror # 4. selezionate il vostro sistema operativo # 5. scaricate o aprite il file eseguibile # 6. procedete con l'installazione... # # NOTA: il cancelletto viene usato per i commenti! NOTA: il cancelletto viene usato per i commenti! ## ops! #----------------------------------------------------------------- # * scaricare ed installare R Studio (dopo aver installato R) #----------------------------------------------------------------- # 1. accedere al sito https://www.rstudio.com/products/rstudio/download/ # 2. scaricare la versione open source di R studio adatta al vostro sistema operativo # 3. installate R Studio tramite il file eseguibile scaricato #----------------------------------------------------------------- # * Settare la cartella di lavoro #----------------------------------------------------------------- getwd() # Mi dice in quale cartella sono attualmente # Si puo fare anche in via grafica dai menu di R Studio # setwd("C:/........") # Per cambiare working directory (attenzione all'uso di "/") # In Rstudio: Session --> set working directory #----------------------------------------------------------------- # * elaborazione minima: R come calcolatrice #----------------------------------------------------------------- # cominciamo dall'elaborazione minima # ovvero dalla possibilita' di usare erre come calcolatrice 2+2 4-3 2*4 9/3 # possibile anche piu' operazioni sulla stessa riga di codice 2+2 ; 4-1 ; 3*5 ; 14/3 #----------------------------------------------------------------- # * chiedere aiuto ad R #----------------------------------------------------------------- # Diversi modi di interrogare l'help !!! # Richiesta di aiuto attraverso una parola chiave help.search("Logarithm") # cerca nell'help i temi associati ad una parola chiave # (occhio alla sintassi con le virgolette!) # ...in maniera abbreviata... ??Logarithm log(10) # in base e # Richiesta di aiuto per un comando specifico ?log log(100,10) # in base 10 # quante altre operazioni numeriche e con quale sintassi? # puo' essere utile dare un'occhiata alla sezione See also nell'help di un comando... help("Arithmetic") # ...in maniera abbreviata... ?arithmetic ## ops! KEY SENSITIVE!!! ?Arithmetic 2^3 # elevamento a potenza 8%%5 # modulo 8%/%3 # quoziente intero sqrt(4) 4^1/2 # ..e la radice n-esima?? 8^(1/3) #----------------------------------------------------------------- # * assegnazione di un nome ad un oggetto #----------------------------------------------------------------- # Proviamo ad assegnare ad una variabile chiamata "a" il valore # di uno scalare numerico a = 3 # ...o anche... b <- 2 1 -> c print(a) print(b) print(c) # ...in maniera abbreviata a b c # ...operazioni tra gli oggetti c=a+b c # che fine hanno fatto c=1 ?? # c ora e' a+b=5...sovrascrivendo abbiamo perso quello che avevamo prima! # ---> non assegnare lo stesso nome ad un oggetto diverso # R sovrascrive allo stesso oggetto nuovi valori perdendo quelli precedenti # per vedere gli oggetti abbiamo "creato"? ls() #In R Studio e' presente la finestra Environment che riepiloga tutti gli oggetti presenti nel workspace # per rimuovere un oggetto? a rm(a) a ls() # per rimuovere tutto... rm(list=ls()) # in R non c'e'il tasto "undo"... # per rimettere gli oggetti cancellati bisogna ricrearli... a=3 b=2 c=1 ls() #----------------------------------------------------------------- # * diversi tipo di oggetto in R #----------------------------------------------------------------- # Oggetti SCALARI: # [1] elementi scalari numerici: interi, reali o complessi a=10 b=15.53 complex=3.51+1.2i # [2] elementi scalari stringhe di caratteri d="Ciao" # [3] elementi scalari logici f=TRUE g=FALSE h=F i=T 0/4 4/0 0/0 # NaN vuol dire Not a Number: una forma indeterminata is.na(0/0) #----------------------------------------------------------------- # * Vettori #----------------------------------------------------------------- vettore1=c(1,2,3) vettore2=c("a","b","c") vettore3=c(f,g,h,i) vuoto=c() # operazioni su vettori "numerici" length(vettore1) # lunghezza di un vettore sum(vettore1) # somma degli elementi di un vettore prod(vettore1) # prodotto degli elementi di un vettore min(vettore1) # minimo tra gli elementi di un vettore max(vettore1) # massimo tra gli elementi di un vettore vettore1*vettore1 vettore1*5 vettore1*c(1,2,3) vettore1*c(5,2) vettore1*c(1,2,1,2,1) # Warning message: # non e' un errore...ti avverte solo che e' successo un qualcosa di "strano" # NOTA: i vettori creati sono vettori colonna (anche se non sembra...) t(vettore1) # trasposta di un vettore t(vettore1)%*%vettore1 # prodotto scalare t(vettore1)%*%vettore1 vettore1%*%c(2,3) # ops! prodotto scalare solo tra vettore di stessa lunghezza # ESEMPIO BMI altezza = c(1.75, 1.80, 1.65, 1.90, 1.80, 1.71) peso = c(60, 72, 57, 90, 82, 72) bmi = peso/altezza^2 # Body Mass Index # si possono associare etichette agli elementi di un vettore altezza names(altezza) nomi=c("Unit 1", "Unit 2", "Unit 3", "Unit 4", "Unit 5", "Unit 6") # un modo piu' smart? nomi=paste("Unit",1:length(altezza),sep=" ") # Nota: R lavora con logica ricorsiva names(altezza) = nomi altezza # se volessi togliere le etichette? names(altezza)=NULL # Funzione seq() help(seq) v1=seq(1,10) v1 # ...alternativamente... vv1 = 1:10 vv1 v2 = seq(0, 9.9, by=0.7) v2 # ...alternativamente... vv2 = seq(0, 9.9, 0.7) vv2 v3 = seq(0,10,length=21) v3 # Funzione rep() help(rep) v4 = rep(10, 100) v4 v5 = rep(c(1,2), 10) v5 vv5 = rep(c(1,2),length=9) v6 = rep(a, 3) v7 = rep(vettore2, 4) v8=rep(c(0,1),c(2,8)) v8 #Funzione sum() #Somma gli elementi di un vettore e ne restituisce il valore sum(peso) sum(altezza) #Come potrei ottenere l'altezza media e il peso medio? mean(altezza) # e la varianza? var(altezza) # La funzione var() calcola la varianza campionaria # Come possiamo calcolare la varianza in popolazione? #Funzione cbind() #Funzione di concatenamento per colonne cbind(altezza,peso) cbind(altezza,rep(1,3)) #OPS #Funzione rbind() #Funzione di concatenamento per righe rbind(altezza,peso) rbind(peso,seq(1,12,1.2)) # Missing values? altezza2 = c(1.75, 1.80, 1.65, 1.90, 1.80, NA, 1.75) peso2 = c(60, 72, 57, 90, 82, NA, 69) mean(altezza2) # ops!!! var (altezza2) # ops!!! try with the option na.rm #correlazione lineare cor(altezza2, peso2) cor(altezza2,peso2) # ops!! # na.rm non funziona per la funzione cor--> help(cor)--> use="complete.obs" # estrazione di un sottoinsieme di dati # altezza2[1:2] # help("subset") #----------------------------------------------------------------- # * percorso di ricerca degli oggetti di R #----------------------------------------------------------------- # per vedere gli oggetti presenti in memoria ls() #in RStudio c'e' la finestra che riepiloga gli oggetti. search() # Workspace piu' elenco dei pacchetti attualmente caricati #dove si trovano gli oggetti appena creati? ---> ".GlobalEnv" # Come disporre delle funzioni di un pacchetto: # Due step: # 1. Installare (una sola volta) ---> comando install.packages # 2. Caricare (ogni volta che si apre R) ---> comando library #...cosa accade quando carico un pacchetto? library(MASS) # e se il pacchetto non e' installato .... install.packages("MASS") # ...oppure utilizzare finestra del menu': # Pacchetti&Dati / installa pacchetti... #Su R-studio e' possibile caricarli e installarli dalla finestra grafica. ######################################################################### # # # CONSIGLIO: Evitate di dare nomi di funzioni già definite in R # # ad oggetti creati da voi. (NO rep,seq,order,c,ecc ecc) # # # # # ######################################################################### #----------------------------------------------------------------- # * matrici #----------------------------------------------------------------- ?matrix # Definiamo una matrice avente tutti i termini uguali matrice = matrix(1, nrow = 3, ncol = 2) matrice matrice.prova = matrix(c(1,2,3,4,5),ncol=3,nrow=3) matrice.prova matrice.prova1 = matrix(c(1,2,3,4,5),ncol=3) matrice.prova1 matrice1=matrix(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20),nrow=5,ncol=4) matrice1 matrice1=matrix(1:20,nrow=5) # ncol fissato! ncol=4 matrice1 rownames(matrice1) colnames(matrice1) colnames(matrice1)=c("colonna-1","colonna-2","colonna-3","colonna-4") # ...se avessi tante colonne come faccio?? # ...c'e'un modo piu' "elegante" per fare la stessa cosa?? # ricordiamo la funzione paste()... colnames(matrice1)=paste("colonna",1:4,sep="-") # ...stessa cosa per le righe rownames(matrice1)=paste("riga",1:5,sep="-") matrice1 # se volessi ordinamento per riga dei valori? matrice2=matrix(1:20,nrow=5, byrow=T) #l'opzione byrow=T riempie la prima riga e poi passa alla seconda, e così via rownames(matrice2)=paste("riga",1:5,sep="-") colnames(matrice2)=paste("colonna",1:4,sep="-") matrice2 matrice3=matrix(1:5,ncol=2,nrow=5) matrice3 matrice4=matrix(1:5,ncol=2,nrow=4) # completamento automatico! matrice4 dim(matrice) nrow(matrice) ncol(matrice) length(matrice) # ---> considera l'oggetto "matrice" come un vettore ?length # Matrice diagonale matrice5 = diag(1, 5) matrice5 matrice6 = diag(c(18,56,3,79,67), 5) matrice6 #----------------------------------------------------------------- # * operazioni tra scalari, vettori e matrici #----------------------------------------------------------------- # prodotto per uno scalare 3*vettore1 3*matrice1 # prodotto elemento per elemento vettore1*vettore1 c(1,2,3,4,5)*matrice1 matrice1*c(1,2,3,4,5) # Trasposta di un vettore/matrice/data.frame t(vettore1) # vettore riga! t(matrice1) t(df1) # prodotto scalare/matriciale: vettore1%*%vettore1 # [1,3] x [3,1] = [1,1] t(vettore1)%*%vettore1 # [1,3] x [3,1] = [1,1] vettore1%*%t(vettore1) # [3,1] x [1,3] = [3,3] t(vettore1)%*%t(vettore1) # [1,3] x [1,3] ---> elementi incompatibili! c(1,2,3,4,5)%*%matrice1 # [1,5] x [5,4] = [1,4] matrice1%*%c(1,2,3,4,5) # [5,4] x [5,1] (o [5,4] x [1,5]) ---> OPS! matrice1%*%c(1,2,3,4) # [5,4] x [4,1] = [5,1] # NOTA: i vettori creati con la funzione c() son vettori colonna. # Nel caso dei prodotti scalari esegue la trasposta in automatico # a seconda della posizione... # fai attenzione che effettivamente R fa quel che vuoi!! # determinante di una matrice x = matrix(0:3, ncol = 2) x det(x) # inversione di una matrice quadrata non singolare solve(x) solve(x)%*%x # per visualizzare la diagonale principale di una matrice diag(x) # per calcolare la traccia di una matrice sum(diag(x)) # o in maniera abbreviata library(psych) tr(x) # se vogliamo la somma per righe di una matrice: rowSums(x) # se vogliamo la somma per colonne di una matrice: colSums(x) # possiamo usare il comando "apply" per eseguire semplici funzioni di riga e/o colonna #help(apply) apply(df1, 2, mean) apply(df1, 2, mean,na.rm=TRUE) # Per uscire : q()