#-----------------------------------------------------# # # # LABORATORIO DI METODI STATISTICI # # PER LA FINANZA # # PROF F. BARTOLUCCI # # # # LAB-01 # #-----------------------------------------------------# ########################################################################## # Lezione 1: INTRODUZIONE ALL'USO DI R ##########################################################################1 # # Indice: # # * R come calcolatrice # * operazioni di comparazione # * operatori logici # * assegnazione di un nome ad un oggetto # * diversi tipo di oggetto in R # * vettori # * matrici # * data frame # * estrazione/selezione di elementi # * read.table() # * salvare ed uscire ########################################################################## #----------------------------------------------------------------- # * elaborazione minima: R come calcolatrice #----------------------------------------------------------------- # Cominciamo dall'elaborazione minima ## somma e sottrazione 5+2 5-2 5*2 5/2 # ... ma possiamo anche usare funzioni matematiche più complesse ... ## radice quadrata sqrt(4) ## elevamento a potenza 2^2 ## valore assuluto abs(-2) ## logaritmi ed esponenziali exp(2) log(2) #------------------------------------------------------ # * operazioni di comparazione #------------------------------------------------------ # * "uguale" --------> == # ** "maggiore"/"minore" --------> >; < # *** "maggiore o uguale" / "minore o uguale" --------> >= ; <= # **** "diverso" --------> != ## il confronto tra due oggetti restituisce un valore TRUE (T) o FALSE (F) 3*6 == 18 6 > 8 #----------------------------------------------------- # * operatori logici #----------------------------------------------------- # * "and" -----> & # ** "or" -----> | # *** "not" -----> ! -2 >5 & 3-1>0 3*2 >5 | 3-1<0 !FALSE #------------------------------------------------------- # * assegnazione di un nome ad un oggetto #------------------------------------------------------- # Proviamo ad assegnare ad una variabile chiamata "a" il valore di uno scalare numerico a = 3 3 = a # ops!! a3 = 3 # ...o anche... b <- 2 1 -> c # per vedere il contenuto dell'oggetto print(a3) # oppure, in maniera abbreviata, a # operazioni tra gli oggetti c = a + b c # che fine ha fatto c = 1 ?? # c ora è a + b = 5 ... sovrascrivendo abbiamo perso quello che avevamo prima! # ---> non assegnare lo stesso nome ad un oggetto diverso # per vedere quali oggetti abbiamo "creato" ossia quali oggetti sono presenti in memoria (nel workspace) ls() # per rimuovere un oggetto a rm(a) a ls() # per rimuovere tutto... rm(list=ls()) #----------------------------------------------------- # * diversi tipo di oggetto in R #----------------------------------------------------- # Le entita' piu' semplici che possono costituire un oggetto di R # (a cui assegnare un nome) sono gli SCALARI. Questi posso essere # [1] di tipo numerico: interi e reali a = 10 ## interi A = 15.53 ## reali a A ## NB. R è case-sensitive! # [2] di tipo striga d = "Ciao" d2 = "ciao" e = "Pippo" # [3] di tipo logico f = TRUE g = FALSE h = F i = T #------------------------------------------------------ # * VETTORI #------------------------------------------------------ # funzione c() v.numerico = c(0,2,-3,5,6,7,8,9,1) v.stringa = c("a","b","c") v.logico = c(T,T,F,T) # per verificare la natura di un oggetto mode(v.numerico) mode(v.stringa) mode(v.logico) # ATTENZIONE: tutti gli elementi di un vettore devono avere la stessa natura #----------------------------------------------------------------- # * MATRICI #----------------------------------------------------------------- # funzione matrix() ?matrix # Definiamo una matrice avente tutti i termini uguali dati = c(1,2,3,4,5,6) m = matrix(dati, nrow = 3, ncol = 2) m mode(m) # assegnare un nome alle righe e alle colonne della matrice # rownames() # colnames() rownames(m) = c("prima", "seconda", "terza") colnames(m) = c("prima", "seconda") m # attenzione -- R riempie le celle della matrice per colonna # e se volessi un riempimento per riga? m2 = matrix(dati, nrow = 3, ncol = 2, byrow = T) m2 # matrici di tipo stringa m.stringa = matrix(c("a","b","c","d"), ncol=2) # anche indicando una sola dimensione! m.stringa # matrici di tipo logico m.logico = matrix(c(T,TRUE,FALSE), nrow = 1, ncol = 3) m.logico # matrice diagonale diag(1, 5) #----------------------------------------------------------------- # estrazione di elementi da vettori e matrici # ---------------------------------------------------------------- # ESTRAZIONI SULLA BASE DELLE POSIZIONI DEGLI ELEMENTI v.numerico # estrazione del terzo elemento v.numerico[3] # estrazione del primo e del terzo elemento v.numerico[c(1,3, 8,9,10)] v.numerico[1:6] # estrazione dei primi tre elementi del vettore altezza m # estrazione dell'elemento di posizione (1,2) m[1,2] # estrazione degli elementi della prima riga m[1,] # estrazione degli elementi della seconda colonna m[,2] # ESTRAZIONE DI ELEMENTI CHE SODDISFANO UNA CONDIZIONE v.numerico maggiore0 = v.numerico >0 v.numerico[maggiore0] # oppure in maniera più rapida v.numerico[v.numerico>0] v.numerico[v.numerico<0] # combinando diverse condizioni logiche v.numerico[v.numerico >0 & v.numerico<6] v.numerico[v.numerico <0 | v.numerico>6] #----------------------------------------------------------------- # * DATA FRAME #----------------------------------------------------------------- # gli elementi di vettori e matrici devono avere tutti la stessa natura # oggetti di natura diversa possono essere combinati insieme nei DATA FRAME # funzione data.frame() # definiamo qualche oggetto # definiamo qualche vettore 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 nomi = c("Francesca","Marco","Stefania","Davide","Luca","Valentina") sex = c("F", "M", "F", "M", "M", "F") laurea = c(TRUE, FALSE, FALSE, T, T, F) # per metterli insieme df = data.frame(nomi,altezza,peso,bmi,sex,laurea) df # definiamo un nuovo oggetto patente = c(T,F,T,T) patente = c(T,F,T,T, NA, NA) df2 = data.frame(nomi,altezza,peso,sex,laurea,patente) # OPS! # ATTENZIONE: tutte le variabili considerate devono avere lo stesso numero di osservazioni! # estrazione delle colonne di un dataframe # in base alla posizione df[[2]] # in base all'etichetta df$altezza # ----------------------------------------------------- # VARIABILI DI TIPO CATEGORICO: I FATTORI # ----------------------------------------------------- # partiamo da una variabile di tipo stringa giudizio = c("mediocre","buono","sufficiente","buono","mediocre","ottimo") # trasformiamola in una variabile categorica giudizio.fact = factor(giudizio) giudizio.fact # modalità della variabile levels(giudizio.fact) # definiamo ora in maniera diversa la variabile categorica giudizio.fact2 = factor(giudizio,levels=c("mediocre","sufficiente","buono","ottimo")) # differenza tra l'oggetto giudizio.fact e giudizio.fact2: giudizio.fact giudizio.fact2 # --------------------------------------------------------------- # * importazione di dati in formato txt -- read.table() # --------------------------------------------------------------- dati = read.table("provastringhe.txt") # ATTENZIONE: Dobbiamo cambiare la directory di lavoro! # dove di troviamo? getwd() # per cambiare: funzione setwd() # o più semplicemente, dal menu "Session" - Set Working Directory - dati = read.table("provastringhe.txt") dati # ATTENZIONE: ancora qualcosa che non va # intestazione dei "campi" dati <- read.table("provastringhe.txt", header = T) dati # per verificare la dimensione del dataset dim(dati) #----------------------------------------------------------------- # * salvare comandi e oggetti #----------------------------------------------------------------- getwd() savehistory("history_lez1.txt") save.image("lez1.Rdata")