Riepilogo Funzioni R
alto sx script
basso sx console
alto dx environment/scrivania
basso dx varie
Nell’environment trovi tutte le variabili (oggetti) creati nella sessione di lavoro
script= file di test in cui posso scrivere codice/comandi e commenti
per scrivere commenti bassa scrivere #.........
working directory è la posizione (cartella) in cui R salverà le robe su cui sto
lavorando
Getwd mi dice in quale working directory sto lavorando
setwd(il posto in cui voglio salvare) mi permette di impostarla
Capisci che cazzo è un progetto lol
Per salvare uno script
file
OGGETTI
NOTA: tutto ciò che possiamo creare in R viene definito oggetto
Sia = sia <- creano oggetti
Character: stringhe di valori alfanumerici. Vengono delimitati dalle doppie
vigolette “Hello world!” o virgolette singole ‘Hello world!’
Numeri: interi o decimali
Regole denominazione oggetti
Deve iniziare con una lettera e può contenere lettere, numeri, underscore
( _ ), o punti (.).
Potrebbe anche iniziare con un punto (.) ma in tal caso non può essere
seguito da un numero.
es.
Non deve contenere caratteri speciali come #, &, $, ?, etc.
Non deve essere una parola riservata ovvero quelle parole che sono
utilizzate da R con un significato speciale es. TRUE
Esistono nomi non proibiti ma scosigliati
o T e F (che R può considerare TRUE e FALSE
o Nomi di funzioni es. sum
NOTA BENE: R è case sensitive, cioè oggetto con la maiuscola è != da oggetto
con la minuscola
Di default gli oggetti sono creati nel global environment accessibile con ls() o
visibile in R Studio con anche alcune informazioni aggiuntive:
Possiamo eliminare un oggetto presente nel nostro enviroment attraverso il
comando rm("nomeoggetto").
E’ possibile anche pulire completamente/svuotare il nostro enrivoment
attraverso il comando rm(list = ls()).
FUNZIONI
Tutto quello che facciamo in R è chiamare funzioni su oggetti. Le funzioni ci
permettono di creare e modificare oggetti.
Dati dei valori in input, le funzioni eseguono dei specifici calcoli e restituiscono
in output il risultato ottenuto.
Gli argomenti delle funzioni sono quelli che da utenti dobbiamo conoscere ed
impostare nel modo corretto per fare in modo che la funzioni faccia quello per
cui è stata pensata. Nell’esempio precedente l’unico argomento era x. Vediamo
invece l’help della funzione mean().
o così o “?mean”
Se cerchi qua in riquadro basso a dx trovi come funziona la funzione, quali sono
i suoi argomenti ecc
Per impostare questi argomenti ci sono 2 regole: l’ordine non conta SE
DEFINISCO NOME DELL’ARGOMENTO con x = vettore, [Link] = TRUE, etc.
l’ordine conta SE NON DEFINISCO IL NOME DELL’ARGOMENTO. Posso quindi
omettere argomento = valore ma devo rispettare l’ordine con cui è stata scritta
la funzione.
Per impostare questi argomenti ci sono 2 regole:
1. l’ordine non conta SE DEFINISCO NOME DELL’ARGOMENTO
con x = vettore, [Link] = TRUE, etc.
devo usare le paroline!!!!
Quando specifichi esplicitamente il nome dell’argomento (argomento =
valore), R associa il valore al parametro corretto indipendentemente
dalla posizione.
Funzionano entrambi perché:
x viene assegnato al parametro x
[Link] viene assegnato al parametro [Link]
L’ordine è irrilevante perché R usa il matching per nome.
2. l’ordine conta SE NON DEFINISCO IL NOME DELL’ARGOMENTO. Posso
quindi omettere argomento = valore ma devo rispettare l’ordine con cui è
stata scritta la funzione.
Se scrivi solo i valori senza indicare il nome del parametro, R li assegna
in base alla posizione nella definizione della funzione.
[Link] mi dice cosa fare con valori mancanti
se = FALSE li conta
se= TRUE li rimuove e poi calcola coi dati rimanenti
TRIM mi dice quali valori “esterni” escludere
utile se ho outliars
NOTA: se non definisco gli argomenti R li compila da solo assegnando valori di
default, es TRIM=0, [Link]=FALSE
PACCHETTI
In R è possibile installare e caricare pacchetti aggiuntivi che non fanno altro
che rendere disponibili librerie di funzioni create da altri utenti. Per utilizzare un
pacchetto:
Installare il pacchetto con [Link]("nomepacchetto")
Caricare il pacchetto con library(nomepacchetto)
Accedere ad una funzione senza caricare il pachetto
nomepacchetto::nomefunzione(). Utile se serve solo una funzione o ci
sono conflitti)
OPERATORI
MATEMATICI
NOTA: round(1.738, 2) 2 mi dice a che cifra decimale vuoi arrotondare?
R segue le regole della matematica per svolgere operazioni (es prima parentesi
ecc)
RELAZIONALI
possibile valutare se una data relazione è vera o falsa. R valuterà le
proposizioni e ci restituirà il valore TRUE se la proposizione è vera oppure FALSE
se la proposizione è falsa.
ricorda, R è case specific
LOGICI
ERRORI IN R
diversi livelli di allerta quando scriviamo codice:
messaggi: la funzione ci restituisce qualcosa che è utile sapere, ma tutto
liscio
warnings: la funzione ci informa di qualcosa di potenzialmente
problematico, ma (circa) tutto liscio
error: la funzione non solo ci informa di un errore ma le operazioni
richieste non sono state eseguite
Come risolvere?
Capire il messaggio
Leggere la documentazione della funzione
Cercare il messaggio su internet
Chiedere aiuto nei forum dedicati
DIVERSI TIPI DI OGGETTI IN R
VETTORI
Vettori sono struttura unidimensionale e hanno solo lunghezza (e sono
indicabili le posizioni dei dati)
COME CREO UN VETTORE?
c(elementi che voglio mettere nel vettore) indicando tra le parentesi i valori
degli elementi nella sucessione desiderata e separati da una virgola.
comando length() è possibile ottenere la lunghezza del vettore
class(vettore) mi dice tipologia di dati da cui è formato un vettore
NOTA: vettore deve essere formato da elementi tutti dello stesso tipo,
altrimenti R mi dice che è tutto un character
NOTA: Possiamo testare o convertire (quando possibile) la tipologia del vettore
attraverso le funzioni is. & as.
Vettore character vettore numeric
vettore logical mi dice se gli elementi del vettore rispettano una certa regola o
meno
Indicizzazione: estraggo elementi da un vettore
[numero] mi estrae il valore in quella posizione nel vettore
Indicizzazione logica: estraggo i valori che rispettano un certo criterio (e quindi
su TRUE e FALSE
Nel vettore numeri[gli elementi di numeri>2 & elementi di numeri <5]
NOTA: R lavora su tutti gli elementi del vettore tendenzialmente
OPERAZIONI MATEMATICHE SUI VETTORI
Possiamo eseguire operazioni sui vettori, ed applicare la stessa operazione a
tutti gli elementi del vettore (element-wise)
FATTORI
sono vettori speciali!
Sono simili a vettori character
Attraverso la funzione factor() è possibile creare un fattore, specificando: il
vettore character, l’ordine dei livelli del fattore (levels = ), le etichette per
ciascun livello (labels = )
Levels mi individua sia quali sono i lv, ma anche l’ordine di presentazione!
Posso o decidere quello che è il mio fattore con [Link](???)
O posso trasformare un vettore character in un fattore con [Link]()
posso anche >1? booo
La funzione rep() permette di ripetere gli elementi di un vettore. In questo
esempio creo prima un vettore di tipo character e poi lo trasformo a fattore
attraverso il comando [Link]().
Perché l’ordine dei livelli differisce? Di default, la funzione factor() assegna
l’ordine dei livelli alfabeticamente, a meno che non lo forziamo con l’argomento
levels.
NOTA: se non gli scrivo i levels li ordina da solo!
I fattori sono trattati come numeri interi. R prende i valori unici, li mette in
ordine alfabetico e assegna loro progressivamente i numeri 1, 2, 3, ecc. Questo
rispecchia come R valuta le stringhe di testo:
I fattori permettono di avere dei livelli levels() come metadati, a prescindere da
quali dati siano effettivamente presenti nel vettore.
Es se creo unfattore composto solo dagli elementi di my_fact1 != da “LM”
I livelli di my_fact2 saranno gli stessi di my_fact1 (“LM” incluso) anche se “LM”
non è presente come osservazione
NOTA2: R legge tutti i nomi come numeri poi li ritrasforma
Accedo ai lv del fattore con levels(nomefattore)
NOTA: i lv sono a prescindere dai valori nel fattore
Con droplevels posso rimuovere i lvelli non contenuti nel nuovo vettore/fattore
MATRICI
Matrici solo un tipo di dati o numeri o characters (dataframe no)
Le matrici sono una struttura dati bidimensionale (caratterizzate da 2
dimensioni dim() ) dove il numero di righe rappresenta la dimensione 1 e il
numero di colonne la dimensione 2
Caratteristiche:
Possono contenere una sola tipologia di dati
Essendo bidimensionali, abbiamo bisogno di due indici di posizione (righe
e colonne) per identificare un elemento
Possono essere viste come un insieme di singoli vettori
NOTA: Il numero di righe e colonne non deve essere lo stesso necessariamente
(matrice quadrata) ma il numero di righe deve essere compatibile con il vettore
data:
Cosa fa R di default in sto caso?
Indicizzazione: nomematrice[riga,colonna]
E’ possibile anche selezionare un’intera riga o colonna non scrivendo niente al
posto della colonna o la riga
Posso aggregare vettori in matrici
I vettori si creano attraverso la funzione c() e possono essere concatenati tra
loro sempre attraverso la stessa funzione:
NOTA: non puoi attaccare robe con lunghezze diverse
Le matrici possono essere unite tra loro attraverso i comandi:
cbind()
rowbind()
OPERAZIONI CON LE MATRICI
Come per i vettori, anche alle matrici si possono applicare operazioni
matematiche:
DATAFRAME
Il dataframe è la struttura più “complessa”, utile e potente di R.
ogni elemento è un vettore con un nome associato (aka una colonna)
ogni colonna deve avere lo stesso numero di elementi
di conseguenza ogni riga ha lo stesso numero di elementi (struttura
rettangolare)
Si creano attraverso il comando; [Link](nome colonna 1 = , nome colonna
2= bla bla)
ATTRIBUTI DEI DATAFRAME
Possiamo utilizzare le funzioni names() , dim(), nrow(), ncol()… per ottenere
informazioni sulle caratteristiche del dataframe.
La funzione più utile è str() poichè ci restituisce una veloce overview della
struttura del dataframe: dimensioni, quante e quali tipi di variabili ecc.
Indicizzazione
Nome dataframe[numero della colonna]
Posso estrarre anche con il comando $, chiamando le colonne(?) per nome
Indicizzazione logica mi permette di “filtrare”, di estrarre/valutare un
sottoinsieme di valori nel dataset
es. Includo solo le righe per cui alla colonna numeri i valori sono maggiori di 2
Prima parte righe , seconda parte colonne????????? capisci
Indicizzazione subset
Indicizzazione subset mi permette di creare un dataframe con un sottoinsieme
di elementi del dataframe originale
L’argomento subset= definisce la condizione da valutare per la selezione degli
elementi di my_df.
Posso anche selezionare le colonne con l’argomento select=
subset(df, select = ...)
Possiamo anche combinare le due cose:
subset(df, subset = ..., select = ...)
valuto la condizione per riga (subset = lettere == "a" & numeri > 2)
seleziono le colonne (subset = c(lettere, numeri))
La maggiorparte delle volte ci troveremo ad accedere alle variabili tramite
l’operatore $. Questo comando può essere utilizzato anche per creare una
nuova variabile…
Potete sia creare che modificare variabili accedendo attraverso $
Mydf$nome colonna = Mydf$colonna e operazione
Combinare i dataframe
importante che i names (vedi pag dopo) dei dataframe siano uguali
Essendo simili a delle matrici, i dataframe si possono combinare tra loro
attraverso le funzioni rbind():
NOTA: quando unisco i due Dataframe
I Dataframe devono avere lo stesso numero di colonne
I nomi delle colonne devono essere identici
Quindi
Potrebbe anche capitarvi di dover raccogliere differenti tipi di dato dallo stesso
partecipante, e successivamente combinare le informazioni raccolte…
Si possono unire anche in colonna con “merge(x=primo df, y=secondo df,
by=subj cioè ciò che accomuna quei dati
In questo caso, è possibile utilizzare la funzione merge():
ESPORTAZIONE E IMPORTAZIONE DATI
In R è possibile importare dati in molti formati differenti, più comunemente vi
troverete ad importare dati .csv oppure .xlsx. Qui per esempio, esporto i
dataframe in tre formati differenti…
Importo
Statistica descrittiva e inferenziale
Statistica descrittiva: Riassume, descrive ed esplora i dati osservati. Prima
fase nella valutazione delle proprietà psicometriche di uno strumento.
Riassume, descrive, esplora i dati osservati
Prima fase nella valutazione delle proprietà psicometriche di uno strumento
Statistica inferenziale: Usa i dati di un campione per fare inferenze sulla
popolazione (confronti tra gruppi, valutazione di interventi, validazione di test).
Usa i dati di un campione per fare inferenze sulla popolazione Confronti tra
gruppi, valutazione di interventi, validazione di test
Preparazione dei Dati in R
2.1 Comandi base
# Pulire lo spazio di lavoro
rm(list = ls())
# Impostare working directory
setwd('/percorso/cartella')
# Caricare dataset
burnout = [Link]("data/[Link]") (o lo puoi fare da qua)
# Visualizzare struttura
str(burnout)
# Definire natura della variabile
burnout$StressLevel = [Link](burnout$StressLevel) per renderla
var ordinale
burnout$StressLevel ti mostra tutta la variabile es.
2.2 Notazioni fondamentali
Frequenze
3.1 Frequenze Assolute Semplici
Definizione: Numero naturale di unità statistiche che presentano una data
categoria.
#per avere la frequenza assoluta delle singole classi in una variabile
fi = table(burnout$StressLevel)
3.2 Frequenze Assolute Cumulate
Definizione: Somma delle frequenze assolute semplici delle categorie
precedenti alla categoria data più la frequenza assoluta semplice della
categoria data.
#per avere la frequenza cumulata assoluta delle singole classi in una variabile
Fi = cumsum(table(burnout$StressLevel))
3.3 Frequenze Relative Semplici
Definizione: Rapporto tra la frequenza assoluta semplice e il numero totale di
unità statistiche. Varia sempre tra 0 e 1.
#per avere la frequenza relativa semplice delle singole classi in una variabile
pi = table(burnout$StressLevel) / n
dove
n = nrow(burnout) # numero unità statistiche oppure n =
length(burnout$StressLevel)
3.4 Frequenze Relative Cumulate
Definizione: Somma delle frequenze relative semplici delle categorie
precedenti più la frequenza relativa semplice della categoria data. Varia
sempre tra 0 e 1.
#per avere la frequenza relativa cumulata delle singole classi in una variabile
Pi = cumsum(table(burnout$StressLevel) / n)
3.5 Visualizzazione
grafico di frequenze assolute semplici
barplot(table(burnout$StressLevel),
ylab = "Frequenze assolute semplici")
grafico di frequenze relative
barplot(table(burnout$StressLevel) / n,
ylab = "Frequenze relative semplici")
NOTA: cambia solo asse y
grafico di frequenze cumulate assolute
barplot(cumsum(table(burnout$StressLevel)),
ylab = "Frequenze assolute cumulate")
grafico di frequenze cumulate relative
barplot(cumsum(table(burnout$StressLevel)/n),
ylab = "Frequenze relative cumulate")
Indici di Tendenza Centrale
4.1 Definizione
Un indice di tendenza centrale è un valore che descrive e riassume il centro
di una distribuzione di dati.
4.2 Moda
Definizione: Categoria che si presenta con la massima frequenza.
Per trovare la moda
table(burnout$StressLevel) e vedi qual è la categoria più frequente
in sto caso la 1
4.3 Mediana
Definizione: Dato che occupa la posizione centrale rispetto alla distribuzione
dei dati ordinati.
2 modi per trovarla
median([Link](burnout$StressLevel))
Oppure
NOTA: è la classe all’interno della quale cade il dato (n+1)/2
i = (n + 1) / 2 # posizione centrale
cumsum(table(burnout$StressLevel)) # trovare prima freq cumulata >= i
4.4 Media Aritmetica
Definizione: Somma dei dati divisa per il numero di unità statistiche.
Come la calcolo?
Manualmente
sum(burnout$Age) / length(burnout$Age)
Funzione diretta
mean(burnout$Age)
Indici di Variabilità
5.1 Definizione
La variabilità (o dispersione) misura quanto i punteggi di una distribuzione
sono sparsi, ovvero quanto siano simili o dissimili tra loro.
Valori sempre positivi o nulli
Variabilità minima = 0 (tutti i punteggi uguali)
5.2 Campo di Variazione (Gamma)
Definizione: Differenza tra valore massimo e minimo osservato.
in R
team_A = c(38, 42, 44, 36, 39, 42, 38, 41)
max(team_A) - min(team_A)
utile anche
range(team_A) mi dà il max e il min
5.3 Varianza
Definizione: Media degli scarti al quadrato tra i dati e la media dei dati stessi.
come?
Oppure var(team_A) MA occhio, calcola varianza campionaria, divide per n-1
per dati descrittivi si usa n, per stimare la varianza della popolaz da cui è stato
estratto il campione si usa n-1
5.4 Deviazione Standard
Definizione: Radice quadrata della varianza. Riporta l’indice di variabilità sulla
scala della variabile.
funzione
sd(burnout$WorkHoursPerWeek) anche questa campionaria (n-1)
5.5 Coefficiente di Variazione
Definizione: Rapporto tra deviazione standard e valore assoluto della media.
Indice di variabilità relativa per confrontare fenomeni misurati su scale diverse.
Esempio
sd_esp
[1] 9.148267
sd_ore
[1] 11.83242
cv_esp
[1] 0.9080617
cv_ore
[1] 0.2386147
5.6 Differenza Interquartilica (IQR)
Definizione: Differenza tra terzo e primo quartile. Misura la dispersione del
50% centrale dei dati. Indice robusto (valori estremi incidono poco).
NOTA: i quartili sono 3 LOL
La funzione quantile() permette di calcolare i quantili. L’argomento prob
= ... definisce che percetile vogliamo ottenere.
Q1 = quantile(burnout$Experience, prob = 0.25)
Q3 = quantile(burnout$Experience, prob = 0.75)
differenza_iqr = Q3 - Q1
# Limiti outlier
limite_inferiore = Q1 - (1.5 * differenza_iqr)
limite_superiore = Q3 + (1.5 * differenza_iqr)
5.7 Boxplot
Visualizzazione della variabilità:
Outlier: valori oltre1.5xIQR dai quartili
Per identificare outlier:
subset(burnout, #dataset
select = c(Name, Experience), # colonne d'interesse
subset = Experience>limite_superiore) # valuto per riga
# Equivalente con dataframe[valuto per riga, colonne d'interesse]:
burnout[burnout$Experience > limite_superiore, c("Name",
"Experience")]
6 Percentili
6.1 Definizione
Il percentile di ordine p è quella categoria/valore che è:
preceduta da almeno p% dei casi
superata da almeno (1-p)% dei casi
Tipi:
Quartili: percentili di ordine 25, 50, 75
Decili: percentili di ordine 10, 20, …, 90
Percentili: percentili di ordine 1, 2, …, 98, 99
quantile(burnout$SatisfactionLevel,
probs = c(0.05, 0.25, 0.50, 0.75, 0.95)) NOTA: mi da
anche diversi quantili!
6.2 Rango Percentile
Definizione: Percentuale di casi che hanno un valore uguale o inferiore a un
particolare punteggio Xi.
con Rp=rango percentile
B=numero di casi <Xi con Xi=pteggio di
interesse
N= numero tot casi
su R
rango = rank(burnout$SatisfactionLevel)
N = nrow(burnout)
Rp_SatisfactionLevel = (rango / N) * 100
# Aggiungere al dataset
burnout$Rp_SatisfactionLevel = Rp_SatisfactionLevel
# visualizzo le prime 6 righe del dataset
head(burnout$Rp_SatisfactionLevel, n = 6)
NOTA: Rp e percentile sono quasi inversi. Rp ti dice la percentuale prima di un
numero, percentile ti dice quale valore sta subito dopo una certa percentuale
cumulata
Indici di Forma
7.1 Definizione
Gli indici di forma descrivono come è distribuita una variabile, oltre alla sua
posizione centrale e dispersione. Due distribuzioni possono avere stessa media
e deviazione standard ma forma diversa.
7.2 Asimmetria (Skewness)
Definizione: Misura quanto una distribuzione si discosta dalla simmetria
rispetto al centro.
Come?
# Installare e caricare pacchetto
# [Link]("psych")
library(psych)
# Calcolare asimmetria
skew(burnout$WorkHoursPerWeek)
Se asimmetria vedi che i baffi del boxplot hanno lunghezza diversa
7.3 Curtosi (Kurtosis)
Definizione: Misura quanto i dati si concentrano nelle code della distribuzione.
Molti software riportano l’eccesso di curtosi (valore in relazione alla curtosi
della distribuzione normale = 3).
Si parla di eccesso di kurtosi
NOTA: Il discorso son le code piuttosto che il picco
canguri coda pesante, platypus coda leggera
Come?
kurtosi(burnout$WorkHoursPerWeek)
platicurtica
7.4 Confronto Multiple Variabili
7.4 Confronto Multiple Variabili
La funzione describe() del pacchetto psych calcola le statiche descrittive per
tutte le variabili in un dataset