Uso di RStudio Sommario - unich.it di...6 La finestra storia visualizza la serie di comandi eseguite...
Transcript of Uso di RStudio Sommario - unich.it di...6 La finestra storia visualizza la serie di comandi eseguite...
1
Uso di RStudio
Sommario Concetti preliminari da apprendere ................................................................................................................... 2
Come installare i pacchetti da RStudio .............................................................................................................. 3
Descrizione della finestra di interfaccia di RStudio .......................................................................................... 5
Alcune nozioni sui dati in R ............................................................................................................................ 11
Creazione gestione e rimozione delle variabili ................................................................................................ 14
Altre funzioni sulle variabili ............................................................................................................................ 14
Valori nulli o mancanti .................................................................................................................................... 18
Importazione di un dataset ............................................................................................................................... 19
Programmazione in RStudio ............................................................................................................................ 22
Quali pacchetti installare per l’EPG 1 – Analisi multivariate con RStudio .................................................... 27
2
Concetti preliminari da apprendere
Prima di usare R o RStudio, occorre essere a conoscenza di alcuni termini che permettono all’utente
di orientarsi nell’ambiente di R.
R è un’applicazione programmabile, nel senso che, a differenza di altre applicazioni statistiche
come SPSS, è necessario scrivere dei comandi per poter eseguire una qualsiasi operazione.
Gli oggetti delle programmazione sono le variabili (variables) e i comandi (commands). La
variabile è un simbolo alfanumerico che assume un valore. Il valore può essere un numero o una
stringa. Il comando serve per assegnare un nuovo valore alla variabile o modificarlo.
Uno dei comandi basilari di R è la creazione di un vettore (array) di dati, ossia una variabile che
contiene una serie di valori numerici o stringhe. Per es.:
> x <- c(2,3,4,5,6,8,8)
è un comando che crea una nuova variabile “x” che assume la serie di valori 2, 3, 4, ecc. Il comando
è costituito da c(...), dove “c” indica che i valori nella parentesi vanno “concatenati” per creare il
vettore. Nella console di RStudio i caratteri della riga dei comandi sono di colore blu (mentre in R
sono rossi). La riga dei comandi inizia sempre con il carattere “>” (anche in R). Se si digita in una
nuova riga solo il carattere “x”, si ottiene la visualizzazione dei valori contenuto della variabile
come si vede di seguito
> x [1] 2 3 4 5 6 8 8
“[1]” indica che ciò che viene stampato in seguito è un output. L’output può essere semplicemente
la visualizzazione del contenuto di una variabile oppure il risultato di un’operazione o funzione
applicata alla variabile. Il comando è una semplice operazione o funzione. L’operazione è un
comando che serve per modificare i valori di una variabile. Ad esempio la somma, la sottrazione, la
moltiplicazione e la divisione sono operazioni. Un esempio di operazione è la seguente:
> 4 + 7 [1] 11
Un esempio di funzione è il calcolo della media di una serie di valori, come nel caso seguente
> mean(c(2,3,4,5)) [1] 3.5
Se si vuole calcolare la media della variabile “x” allora scriviamo
> mean(x) [1] 5.142857
3
Occorre evidenziare alcune cose per quanto riguarda le funzioni di R. Tali funzioni sono eseguibili
perché sono incluse in un pacchetto (package o library). Se tale pacchetto non viene installato, la
funzione non è eseguibile. Installando R vengono contemporaneamente installati alcuni pacchetti
che permettono le analisi statistiche di base (il pacchetto base), come ad es. il calcolo della media e
della varianza, però altri tipi di funzioni richiedono prima l’installazione dei pacchetti per poter
essere usate. Se si esegue una funzione senza aver prima caricato il pacchetto, il programma da un
segnale d’errore comunicando che non riesce a trovare la funzione digitata. Nel paragrafo seguente
viene spiegata la procedura per caricare nuovi pacchetti.
Come installare i pacchetti da RStudio
I pacchetti psy, psych e userfriendly science sono utili per eseguire le analisi sui database ottenuti
con test, questionari e interviste. Il pacchetto apaTables è utile per creare delle tabelle relativa ai
principali tipi di analisi statistiche nel formato importo dalle riviste dell’American Pscychological
Association, che è il formato adottato praticamente da tutte le riviste psicologiche, anche non
americane.
Qui di seguito è riportata la procedura per installare i pacchetti di cui sopra tramite il programma
Rstudio.
Una volta installato Rstudio ed essersi connessi ad internet, aprire il programma.
Comparirà la finestra quadripartita del programma. Andare sul menu e cliccare “Tools”. Comparirà
una finestra a tendina su cui si deve cliccare su “Install Packages”, come nella figura qui sotto.
4
Dopo aver cliccato compare una finestra in cui c’è un campo vuoto (il campo “Packages”). Scrivete
il nome del pacchetto nel campo.
Mentre scrivete il programma ricerca dall’elenco dei pacchetti i vari pacchetti che hanno lo stesso
nome. Potete scegliere tra i pacchetti che il programma vi indica, come nell’esempio qui sotto.
Una volta scritto il nome del pacchetto, cliccate su “Install”. L’installazione avverrà
automaticamente e nella finestra di console il programma vi dirà che i pacchetti sono stati scaricati e
correttamente installati. Se ciò non avviene, ripetere l’operazione finché non avrà successo (a volte
l’insuccesso dipende dal tipo di connessione internet).
5
Descrizione della finestra di interfaccia di RStudio
La finestra di RStudio presenta quattro riquadri come evidenziato nella Fig. X
Fig. X. Strutturazione in riquadri della finestra d’interfaccia di RStudio
I quattro riquadri di RStudio sono:
La finestra degli script: in questo riquadro compare una finestra a linguette (tab window) ossia
una finestra articolabile in più finestre attivabili cliccando sulla linguetta (tab) corrispondente. Gli
script sono delle serie di operazioni e funzioni che permettono di effettuare dei calcoli o delle
modifiche sui dati in input e che restituiscono dei risultati in output. Solitamente i dati in input sono
vettori (array) di dati o matrici di dati. Tale finestra consenta anche la visualizzazione delle matrici
di dati (data.frame).
La finestra della console: la console è la finestra dove si scrivono i comandi e dove viene
presentato l’output o risultato delle operazioni o funzioni. È possibile copiare l’output della console
e incollarlo in qualsiasi tipi di file (ad es., un documento di word). Questo perché la console stampa
testi grafici. Se si vuole, invece, stampare grafici e figure, queste vengono visualizzate nel riquadro
delle finestre di servizio.
La finestra d’ambiente o di storia è una finestra che consente di visualizzare quante e quali
variabili sono state create durante l’esecuzione delle analisi statistiche (ambiente) e quali operazioni
o funzioni sono state eseguite durante le analisi (storia). Queste finestre sono molto utili per sapere
quali variabili abbiamo, dato che possiamo sempre avere la necessità di recuperare i valori di una
vecchia variabile, oppure per sapere quali operazioni abbiamo effettivamente eseguito.
La finestra ambiente visualizza le variabili che possono essere matrici, liste, vettori o singole
variabili create durante le analisi
Console
Finestra degli
script
Finestra d’ambiente e storia
Finestre di servizio
Barra dei menù
6
La finestra storia visualizza la serie di comandi eseguite durante il processo di analisi
La finestra di servizio presenta diverse finestre che svolgono varie funzioni utili per chi esegue le
analisi statistiche. Esse sono:
La finestra Files: tale finestra permette di visualizzare tutti i file contenuti all’interno di una
cartella. In tale finestra due comandi utili sono il comando per scegliere la cartella o directory di
lavoro (rappresentato dai tre punti “...”) e il comando “More”, cliccando sul quale compare un menù
a tendina che permette di selezionare la cartella di lavoro (cliccando sul comando “Set As Working
Directory”). È estremamente importante, prima di iniziare ogni analisi statistica, creare una
directory di lavoro all’interno della quale è possibile non solo mettere il file dati, ma anche i file di
output delle analisi (solitamente e preferibilmente i file di output sono file di testo “.txt”), i file di
script (con suffisso “.R”) ed i file (“.Rdata”) che registrano tutte le variabili create durante il
processo di analisi (variabili d’ambiente). Conviene salvare tutti questi file all’interno di un’unica
directory, affinché non vadano dispersi, e, se si fanno tante analisi, creare una directory specifica
per ciascuna analisi. Conviene, poi, che le directory delle varie analisi vengano conservate dentro
un’unica cartella, sempre per evitare il rischio di dispersione dei dati e dei file operativi.
7
La finestra Plots: serve per stampare i grafici. Sopra il grafico c’è il comando “Zoom” che serve
per aprire il grafico in una nuova finestra più grande. Il comando “Exporto” serve per salvare il file
in formato grafico o PDF oppure per incollarlo negli Appunti da cui può essere inserito in qualsiasi
altri tipo di documento (documento word, per esempio). Il comando serve per cancellare il file
dalla finestra, mentre il comando serve per cancella tutti i grafici stampati. Se l’analisi prevede
la creazione di diversi tipi di grafici in successione, allora vengono create tante finestre plots quanti
sono i grafici. È possibile passare da una finestra all’altra usando i tasti freccia .
8
La finestra Package: tale finestra serve per vedere quanti e quali sono i pacchetti di R installati nel
computer. Occorre far notare che i comandi non funzionano se non sono stati installati i pacchetti
che li contengono. Nella finestra Package c’è il comando “Install” che attiva la finestra per
l’installazione dei pacchetti (attivabile anche usando il menù “Tools”, come descritto
precedentemente). Oltre a questo comando, c’è il comando “Update” che permette
l’aggiornamento dei pacchetti installati. È raccomandabile riaggiornare di tanto in tanto i pacchetti
dato che possono emergere dei bug che successivamente vengono corretti, oppure vengo aggiunti
nuovi comandi che potenziano le capacità operative del pacchetto. Cliccando su Update comparirà
una finestra di messaggio che permette di selezionare quali pacchetti si intende aggiornare,
altrimenti si possono selezionare ed aggiornare tutti i pacchetti. Il processo di riaggiornamento
richiede alcuni minuti di tempo (dipende da quanti pacchetti vengono aggiornati e dalla velocità di
connessione internet). Nella finestra c’è un campo di ricerca che permette di visualizzare uno
specifico pacchetto. Il campo di ricerca è utile per sapere se il pacchetto, indispensabile per eseguire
alcune analisi specifiche, è già stato installato oppure se occorre installarlo. Nella lista dei pacchetti,
accanto a ciascun pacchetto compare un riquadro di controllo (checkbox) che può essere spuntato o
no. Se non è spuntato ( ) allora il pacchetto non è stato caricato dal programma. Se è spuntato (
), allora significa che il pacchetto è stato caricato. Nota Bene: i comandi non sono attivi se
prima non viene caricato il pacchetto che li contiene. I pacchetti possono essere caricati usando la
finestra Package, oppure direttamente dalla console scrivendo i comandi “library” o “require”. Vedi
un esempio qui sotto:
> library(acepack) > require(ade4)
Tasti freccia
Cancella il grafico attuale
Cancella tutti i grafici
9
Carico il pacchetto richiesto: ade4
La differenza tra i due comandi è che il comando require da un avviso quando il pacchetto viene
caricato.
La finestra Help: serve per ottenere informazioni sui comandi, sui pacchetti, su operazioni o
funzioni eseguibili con R. La finestra contiene un campo di ricerca nel quale, digitando il nome di
un comando o pacchetto (es. “mean”) è possibile visualizzare tutte le informazioni riguardo quel
comando o pacchetto. Le informazioni sono strutturate in vari paragrafi che spiegano a cosa serve il
comando, quali sono i valori da dare in entrata, che tipo di output fornisce e degli esempi su come
scrivere il comando nella console per effettuare il calcolo o l’elaborazione. L’Help è utile non solo
per sapere come scrivere i comandi ed assegnare i valori, ma anche per sapere in quale pacchetto
sono contenuti. Ad esempio, nell’help della funzione mean in alto a sinistra compare la scritta
, in cui la scritta tra le parentesi graffe riporta il nome del pacchetto (base) che
contiene la funzione mean. L’help visualizza il pacchetto per tutti i comandi.
10
Campo di ricerca
Nome del comando e relativo
pacchetto
11
Alcune nozioni sui dati in R
In R i dati sono di quattro tipi.
1. Variabili semplici: sono variabili che assumono un valore specifico. Es.:
> x <- 5 > x [1] 5
I simboli “<- “ indicano l’assegnazione del valore o dei valori alla variabile (nota bene: si può
anche usare il simbolo “=”, ma si usa la freccia perché permette di definire la direzione
dell’assegnazione come vedete qui sotto).
> x -> s > s [1] 5
(In questo caso l’assegnazione va da sinistra a destra. Con il simbolo “=” l’assegnazione va sempre
da destra a sinistra).
2. Vettori di dati (array): sono variabili che assumono una serie di valori. Es.:
> x2<-c(1,2,3,4,5,6,7,8,9) > x2 [1] 1 2 3 4 5 6 7 8 9
3. Matrici di dati: sono variabili bidimensionali, composte da un certo numero di righe e colonne,
che possono contenere una notevole quantità di dati. Esistono due tipi di matrice: la matrice o
matrix che contiene tutti valori dello stesso tipo (numeri o caratteri) e i data frame che sono
matrici che possono contenere valori di diverso tipo, come numero o caratteri o stringhe.
4. Liste: sono variabili che possono contenere diversi elementi, come variabili specifiche, array o
matrici, di tipo numerico o stringa.
I comandi eseguibili sulla variabili dipendono dal tipo di variabili. Sulle variabili semplici è
possibile solo eseguire operazioni (addizione, sottrazione, moltiplicazione, divisione, elevamento a
potenza, logaritmo, ecc...), mentre sui vettori si possono eseguire funzioni statistiche semplici
(media, varianza) o complesse (correlazione, regressione, t di Student, ecc...). Operazioni e funzioni
possono essere eseguite in relazione alle caratteristiche della variabile, per cui è importante
conoscere bene il tipo o “classe” di variabile. Ad esempio, dato il vettore “x2” se scriviamo il
comando “class” otteniamo
> class(x2) [1] "numeric"
12
“numeric” indica che la variabile contiene valori numerici, per cui possiamo eseguire operazioni
numerico (es.: addizione) sui suoi valori.
Se creiamo una variabile “a” contenente una serie di lettere e poi applichiamo il comando class
otteniamo la seguente risposta
> a<-c("a","b","c") > class(a) [1] "character"
“character” indica che la variabile a contiene caratteri (o sigle o parole) e su tale variabile possono
essere applicate solo le operazioni eseguibili solo con i caratteri.
La matrice di numeri o caratteri può essere creata come segue. Ad esempio, una matrice contenente
i numeri a 1 a 12 può essere creata con i seguenti comandi
> m<-matrix(c(1,2,3,4,5,6,7,8,9,10,11,12),nrow = 3,ncol=4) > m [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12
“nrow” e “ncol” definiscono il numero di righe e colonne, rispettivamente, della matrice. Il
comando “c()” assegna i valori numerici alla matrice. Come si vede, l’assegnazione per default si fa
prima per colonna e poi per riga, Se, invece, si vogliono assegnare i valori prima per riga e poi per
colonna allora si scrive
> m<-matrix(c(1,2,3,4,5,6,7,8,9,10,11,12),nrow = 3,ncol=4,byrow = TRUE) > m [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12
Come si vede, i valori assegnati hanno un orientamento diverso rispetto a quello precedente.
Se si vuole creare una matrice contenente caratteri il comando è
> m2<-matrix(c("a","b","c","d","e","f","g","h"),nrow=2,ncol=4) > m2 [,1] [,2] [,3] [,4] [1,] "a" "c" "e" "g" [2,] "b" "d" "f" "h"
Il data frame è una matrice di valori che può contenere sia numeri che caratteri o stringhe. È una
variabile utile perché di solito i dati vengono codificati o in forma di carattere (ad es.: “M” per
maschio e “F” per femmina) o di numero. Le variabili contenenti caratteri di solito sono usate per
definire i livelli del fattore ossia i gruppi a cui appartengono i dati numerici. Ad es., se si usano le
sigle M ed F per codificare il sesso dei soggetti, allora tali caratteri permettono di definire a quale
13
gruppo o livello del fattore sesso appartengono i valori numerici. In questo modo è possibile
applicare i test statistici per confrontare tra di loro i gruppi (t di Student, ANOVA, ecc...) oppure è
possibile eseguire analisi statistiche separate per ciascun gruppo, ad es. il calcolo della media e della
varianza separatamente per maschi e femmine.
Il comando per creare un data frame è
> df<-data.frame(x=c("a","b","c","d"),y=c(1,2,3,4)) > df x y 1 a 1 2 b 2 3 c 3 4 d 4
Il comando “data.frame” crea una matrice in cui si ha una colonna di valori x costituiti da caratteri
ed una colona di valori y costituiti da numeri.
Il comando “list” crea invece una variabile che può essere la combinazione di più variabili diverse
tra loro. Ad es., se creo una variabile lista “L” composta dalla variabile singola x, dalla matrice m e
dal data frame df, allora ottengo
> L<-list(sing=x,matr=m,frame=df) > L $`sing` [1] 5 $matr [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 $frame x y 1 a 1 2 b 2 3 c 3 4 d 4
Posso decidere di visualizzare le singole componenti della lista. Per farlo occorre usare il simbolo
“$” seguito dal nome della componente della lista. Ad es., se voglio visualizzare solo il data frame,
il cui nome è “frame, allora scrivo
> L$frame x y 1 a 1 2 b 2 3 c 3 4 d 4
Se voglio visualizzare il valore della variabile singola “sing” scrivo
> L$sing
14
[1] 5
Creazione gestione e rimozione delle variabili
Le variabili si creano automaticamente tramite l’assegnazione di valori con il comando <- o =. Per
la rimozione esiste il comando rm() (remove) che consente l’eliminazione di variabili ormai
ridondanti o inutili. Ad es., se voglio eliminare la variabile x, scrivo
> rm(x)
ed automaticamente la variabile x verrà cancellata dall’ambiente.
Il comando ls() consente di visualizzare tutte le variabili presente nell’ambiente, ma è molto più
utile consultare la finestra ambiente o Environment in cui è possibile vedere dettagliatamente le
singole variabili. Il comando class(), come abbiamo detto, è utile per capire la tipologia della
variabile.
Altre funzioni sulle variabili
Elenchiamo qui di seguito alcune operazioni o funzioni che possono essere utili sulle variabili
Per quanto riguarda la variabili numeriche, se abbiamo un vettore dati e vogliamo sapere quanti
elementi contiene, si usa la funzione length che permette di determinare la lunghezza del vettore,
ossia quanti valori contiene. Ad esempio, la lunghezza del vettore x2 è:
> length(x2) [1] 9
ossia il vettore x2 contiene 9 valori.
La funzione min e max determinano, rispettivamente, il valore minimo e massimo del vettore. Per il
vettore x2, ad es., abbiamo
> min(x2) [1] 1 > max(x2) [1] 9
Altre funzioni importanti sono quelle che permettono di ordinare l’insieme di valori. La funzione
sort mette i valori di un array dal più piccolo al più alto, come nel seguente esempio in cui il
vettore y, contenente valori non ordinati viene trasformato in un vettore con valori ordinati (y2).
> y<-c(5,3,2,3,6,1,8,5) > y2<-sort(y) > y [1] 5 3 2 3 6 1 8 5 > y2 [1] 1 2 3 3 5 5 6 8
15
L’ordine per default, è ascendente. Se si vuole impostare un ordine discendente occorre impostare
“decreasing = TRUE”, come nel seguente esempio
> sort(y,decreasing = TRUE) [1] 8 6 5 5 3 3 2 1
Un altro modo per ordinare I dati è la funzione order che da come output l’ordine dei dati. Ossia,
sempre in relazione al vettore y, la funzione restituisce i seguenti valori
> order(y) [1] 6 3 2 4 1 8 5 7
I numeri di output indicano che il primo valore occupa la sesta posizione, il secondo la terza, il terzo
la seconda e così via. Possiamo ordinare i valori di y con la funzione order nel seguente modo
> y[order(y)] [1] 1 2 3 3 5 5 6 8
Per l’ordine discendente basta scrivere
> y[order(-y)] [1] 8 6 5 5 3 3 2 1
oppure
> y[order(y,decreasing = TRUE)] [1] 8 6 5 5 3 3 2 1
La funzione è utile per ordinare un dataset in base ai valori di una specifica variabile. Ad es., il data
frame df ha il seguente ordinamento:
> df x y 1 a 1 2 b 2 3 c 3 4 d 4
Se voglio ordinare i valori di df in base ai valori decrescenti della colonna y, allora scrivo
> df[order(-df$y),] x y 4 d 4 3 c 3 2 b 2 1 a 1
ed ottengo un nuovo ordinamento dei valori di df secondo i valori decrescenti della colonna y.
Un’altra importante funzione è la funzione che permette di selezionare determinati valori. Ad
esempio, supponiamo di voler selezionare all’interno dell’array y i valori compresi tra 4 e 6 (inclusi
gli estremi), allora usiamo la funzione scrivendo
> p<-which(y>= 4 & y<=6) > p [1] 1 5 8
16
L’array p indica in quali posizione dell’array y si trovano i valori tra 4 e 6. Per selezionarli basta
scrivere
> y[p] [1] 5 6 5
ed abbiamo estratto dall’array y i valori che ci interessano.
Se da un array vogliamo estrarre uno specifico valore basta scrivere dentro le parentesi quadre la
posizione in cui si trova il valore. Ad es., l’array y ha 8 valori. Se voglio sapere il valore nella
quarta posizione scrivo
> y[4] [1] 3
ed ottengo il valore 3. Se voglio estrarre i valor dalla terza alla quinta posizione scrivo
> y[3:5] [1] 2 3 6
Oppure, se voglio estrarre i valori nella prima terza ed ottava posizione, scrivo
> y[c(1,3,8)] [1] 5 2 5
Nel caso di una matrice, ad es. la matrice m, se voglio estrarre uno specifico valore devo indicare
sia il numero di riga che il numero di colonna in cui si trova quel valore. Ad es., per la matrice m
> m [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12
Il valore nella terza riga e seconda colonna è
> m[3,2] [1] 10
Se voglio estrarre tutti i valori della terza riga scrivo
> m[3,] [1] 9 10 11 12
Se voglio, invece, estrarre tutti i valori della seconda colonna scrivo
> m[,2] [1] 2 6 10
Le procedure di estrazione dei valori da una matrice si possono applicare anche ad un data frame.
Dato che nel data frame le variabili di colonna hanno un titolo (ad es. il data frame df ha le colonne
x ed y) per estrarre i valori di una specifica colonna basta scrivere il nome del data frame con il
simbolo “$” e il nome della colonna, come nel seguente esempio
> df$x
17
[1] a b c d Levels: a b c d
(essendo x una colonna di caratteri, il programma specifica che le lettere indicano I diversi livelli
della variabile che viene considerate automaticamente come un fattore).
La funzione permette di creare un nuovo tipo di variabile definita, appunto, “fattore”. Per fattore si
intende una variabile in cui i diversi valori specificano un livello che può essere usato per
raggruppare i valori di altre variabili. Se i valori di altre variabili appartengono ad uno stesso livello
di un fattore vengono raggruppati assieme. La variabile fattore è utile per eseguire analisi statistiche
comparative tra gruppi diversi di soggetti o tra diverse condizioni sperimentali. È possibile creare
una variabile fattore usando sia un array di caratteri, come nel seguente es.:
> as.factor(a) [1] a b c Levels: a b c
sia un array di numeri, come nel seguente caso:
> as.factor(x2) [1] 1 2 3 4 5 6 7 8 9 Levels: 1 2 3 4 5 6 7 8 9
Conviene, quando si deve creare un fattore, effettuare un’assegnazione in modo da poter usare il
fattore nelle analisi successive, come nel seguente es.:
> fattore <- as.factor(a)
Se si ha un data frame, le colonne contenente caratteri sono automaticamente trasformate in fattori e
possono essere usate per le analisi statistiche. Se si hanno solo colonne numeriche, nel senso che i
livelli del fattore sono codificati con numero (ad es. 0 per maschio e 1 per femmina) allora occorre
prima trasformare le colonne in fattori.
Un’altra importante funzione è quelle che permette di creare array di dati con valori ripetuti. Ad
esempio voglio creare un array con i valori 1, 2 e 3, ognuno ripetuto 4 volte, invece di scrivere
r <- c(1,1,1,1,2,2,2,2,3,3,3,3)
scrivo
> r<-rep(c(1,2,3),each =4) > r [1] 1 1 1 1 2 2 2 2 3 3 3 3
Il commando each è importante perché se lo ometto ottengo
> r<-rep(c(1,2,3)) > r [1] 1 2 3
ossia non ottengo alcuna ripetizione di valori.
Se invece scrivo
> r<-rep(c(1,2,3),4)
18
> r [1] 1 2 3 1 2 3 1 2 3 1 2 3
Ottengo la ripetizione della sequenza di valori 1, 2 e 3 per quattro volte.
Le variabili con valori ripetuti sono importanti perché se le trasformo in fattori, come nel seguente
es.
> r<-rep(c(1,2,3),each =4) > as.factor(r) [1] 1 1 1 1 2 2 2 2 3 3 3 3 Levels: 1 2 3
Il programma riconosce che la variabile r, composta in tutto da 12 valori, in realtà è un fattore con
tre livelli, ciascuno dei quali contiene 4 osservazioni o dati. Quando si hanno lo stesso numero di
osservazioni per ciascun livello del fattore si ha un disegno sperimentale bilanciato. I disegni
sperimentali bilanciati sono quelli che usano lo stesso numero di soggetti per ciascun livello della
variabile indipendente. Spesso, però, si ha a che fare con disegni non bilanciati, ossia con un
numero diverso di osservazioni per ciascun livello come nel caso seguente in cui il livello 1 del
fattore r2 ha 4 osservazioni, il livello 2 ne ha 3 ed il livello 3 ne ha 2:
> r2<-c(1,1,1,1,2,2,2,3,3) > as.factor(r2) [1] 1 1 1 1 2 2 2 3 3 Levels: 1 2 3
Per ulteriori spiegazioni sui comandi di R è possibile consultare la guida su internet il cui sito web
è: https://www.statmethods.net/index.html. Il sito fornisce molte informazioni utili sia per chi è
ancora agli inizi nell’uso di R, sia anche per chi ha raggiunto una certa esperienza.
Valori nulli o mancanti
In R un problema importante è la presenza di valori anomali o mancanti. I valori anomali
solitamente sono valori assurdi o fuori scale come infinito (Inf). Se divido un numero per zero
ottengo il valore anomali Inf
> 6/0 [1] Inf
I valori anomali sono, di solito, il risultato dell’applicazione sbagliata delle operazioni matematiche.
I valori o dati mancanti (missing) invece sono valori che spariscono o perché non è possibile
applicare l’operazione sui valori della variabile e, quindi, il risultato dell’operazione è nullo, o
perché il dataset presenta delle lacune. I valori mancanti sono codificati in R con i simboli “NaN” o
“NA”.
I dati mancanti all’interno di un dataset sono un problema piuttosto importante, in quanto se sono
troppo frequenti il rischio che si corre è di ottenere analisi distorte. È possibile rimpiazzare il dato
mancante con qualche tecnica statistica, ma se i dati mancanti sono troppi, allora rischiamo di
ottenere distribuzioni di dati non verosimili. In linea di principio, dataset con più del 10% di dati
mancanti per unità osservativa rischiano di essere inattendibili. Ad esempio, se i un questionario di
100 item, un soggetto risponde a 77 item su 23, quel soggetto andrebbe scartato in quanto la
percentuale di missing sul totale è del 23%. In certi casi è possibile stimare i dati mancanti oppure
19
utilizzare lo stesso i dati del soggetto anche se sono presenti dei missing, però più è elevato il
numero di missing più è alto il rischio di fare analisi su dati che non corrispondono alla realtà.
Nel file dove verranno spiegate le tecniche multivariate di analisi con RStudio verrà spiegato come
trattare i dati mancanti nei dataset.
Importazione di un dataset
Importare un dataset in RStudio è relativamente facile. Solitamente i formati più comuni dei dataset
sono .txt (testo), .xls o .xlsx (Excel di Office 1997-2003 o di Office 2010) o .csv (comma-separated
values, il formato più in uso attualmente). Esistono molti altri formato, ma hanno un uso minore.
Consigliamo di usare il formato Excel per la costituzione di un dataset, sia perché il formato excel è
compatibile con molti altri formati, sia perché tale formato consente la gestione di un ampio dataset.
I file excel sono molto duttili per la creazione di un dataset, in quanto un ricercatore, soprattutto se
utilizza molti strumenti di misura, deve registrare una notevole varietà di dati. Pertanto, ogni
ricercatore dovrebbe sapere come creare un dataset per conservar ei dati su cui eseguire le analisi
statistiche. Nel file XXX viene spiegato come creare un dataset in excel.
Nella riquadro della finestra d’ambiente e storia di RStudio vi sono i comandi che permettono di
caricare un dataset. La procedura step by step per caricare un dataset, supponiamo in formato excel,
è la seguente.
1. Nella finestra d’ambiente e storia cliccare sul comando . Comparirà in seguito
un menù a tendina in cui ogni voce chiede di specificare il formato del dataset
I formati supportati sono .csv, Excel e quelli dei più diffusi programmi di statistica in commercio
(SPSS, SAS e Stata).Selezioniamo Excel
2. Compare una finestra che permette di trovare il fle contenente il dataset e di importarlo.
20
3. Cliccate su per scegliere il file. Aspettate che il file venga caricato (il tempo di
attesa dipende dalla grandezza del dataset).
21
4. Una volta importato il file compare nella finestra di anteprima (preview) il dataset con indicati i
nomi delle variabili o degli item, il tipo di variabile (ad es. double indica che il formato numerico è
di tipo decimale). Vi sono poi delle frecce che permettono di ordinare i dati in ordine ascendente
o discendente i relazione alla specifica colonna selezionata.
5. è possibile, usando il riquadro delle opzioni per l’importo (Import Options) decidere come
importar ei dati. Ad es., se il dataset non prevede che la prima riga non sia usata per scrivere il
nome delle variabili (scelta poco consigliabile), allora basta togliere la spunta al checkbox
. Inoltre dato che excel prevede diversi fogli di lavoro, di cui solitamente il
primo foglio viene caricato di default, è possibile scegliere il foglio di lavoro usando il comando
. Il comando permette di stabilire come trattare
i missing (possono essere indicati con il simbolo “NA”, il valore zero oppure le celle vengono
lasciate vuote). Per la codifica ed il trattamento dei missing si rimanda al file delle analisi
multivariate con RStudio.
6. Il riguardo Code Preview visualizza il comando da scrivere sulla console per importare il dataset
excel. Se si prevede di importare più dataset, si può copiare il comando e riportarlo sulla console,
con le opportune modifiche in modo da evitare di fare troppe operazioni.
7. Cliccando sul tasto si porta a termine l’operazione di importazione mentre il tasto
la annulla.
Una volta importato il dataset, è possibile visualizzare il suo contenuto tramite il comando View().
Il contenuto del dataset viene visualizzato nella finestra degli script, come si vede di seguito:
22
Occorre far notare che il comando permette di visualizzare fino ad un massimo di 100 colonne.
Questo è un limite imposto dai creatori del programma per evitare un sovraffaticamento
dell’applicazione.
Se avete un dataset, chiamiamolo example, con più di 100 colonne, upponiamo con 300 colonne,
per visualizzare tutte le colonne potete scrivere: View(example[,101:200]) e
View(example[,201:300]). In questo modo potete visualizzare tutte le colonne del vostro dataset.
Programmazione in RStudio
Un notevole vantaggio di RStudio è la possibilità di scrivere dei programmi, detti script, che
consentono l’esecuzione di più operazioni e funzioni nello stesso momento. Ad es., se voglio
eseguire un t test per confrontare le medie di due gruppi e devo capire se i due gruppi hanno
varianza omogenea o no per decidere il tipo di test, allora devo anche eseguire un test
dell’omogeneità della varianza, come ad es. il test di Levene. Se usassi solo la console di RStudio
dovrei prima eseguire il test di Levene e poi, sulla base del test, decidere il tipo di t test, quello per
gruppi con varianze omogenee o con varianze eterogenee. Questa procedura risulta piuttosto lenta e
faticosa, ma il grosso rischio è che, se si deve ripetere l’analisi, occorre poi riscrivere daccapo tutti i
comandi. Dato che si dovrebbe sempre eseguire un test di Levene prima di eseguire il t test vero e
proprio, conviene allora scrivere un programma o un script che includa entrambi i tipi di test. Il
vantaggio degli script è duplice: permette di scrivere in un unico codice di programmazione più
comandi e può essere riutilizzato ogni volte che serve senza dover essere costretti a riscrivere
daccapo tutti i comandi.
La creazione di uno script non è semplice, ma nemmeno impossibile. Occorre seguire alcune regole.
Ovviamente chi ha già avuto esperienza di programmazione ha più facilità ad apprendere queste
regole. Tuttavia R ha il vantaggio che una volta imparata la logica di programmazione, è possibile
poi proseguire da soli nella creazione dei programmi. Inoltre, su internet esistono tantissimi forum
di R ed RStudio ormai ai quali rivolgersi per chiedere delucidazioni ed informazioni sui problemi
che potremmo incontrare quando costruiamo un nuovo programma e constatiamo che non funziona
a dovere. Alcuni siti consultabili sono:
1. https://www.dummies.com/programming/r/
2. https://stackoverflow.com/
3. http://www.sthda.com/english/
4. https://www.rdocumentation.org/
Esistono molti altri siti, perciò ci siamo dovuti limitare a quelli che forniscono la maggior gamma di
risposte utili agli utenti.
Solitamente prima di spiegare come si programma in R, si spiega l’esecuzione dei programmi
direttamente sulla console. Tuttavia esistono già al proposito numerose guide che spiegano l’uso dei
comandi semplici in R. Pertanto se uno vuole conoscere come si fa ad eseguire il calcolo di una
madia, della deviazione standard, della correlazione o di un t test basta che consulti la guida “Breve
introduzione a R”.
Il riquadro della console di RStudio consente l’esecuzione di semplici comandi. Ad esempio se
voglio calcolare la media e la deviazione standard di due gruppi di dati e poi fare un t test, basta
scrivere nella console di RStudio i seguenti dati:
> y<- c(3,3,3,12,15,16,17,19,23,24,32,20,13,13,20,29,32,23,20,25,15,30)
23
> group<-rep(c("a","b"),each=11)
La variabile y è l’array che contiene i dati o misure su cui si deve fare il test statistico. Abbiamo due
gruppi di 11 soggetti ciascuno, perciò abbiamo creato una variabile fattore group nella quale
abbiamo inserito ripetutamente le etichette “a” e “b” per distinguere i soggetti dei due gruppi.
Per calcolare media, deviazione standard ed eseguire il t test possiamo prima creare un data fram
con il seguente comando
> M<-cbind.data.frame(y,group)
Il data frame sarà organizzato nel seguente modo:
> M
y group
1 3 a
2 3 a
3 3 a
4 12 a
5 15 a
6 16 a
7 17 a
8 19 a
9 23 a
10 24 a
11 32 a
12 20 b
13 13 b
Continua...
Ossia la prima colonna y contiene le misure e la seconda colonna group definisce i livelli del fattore
o il numero di gruppi.
Per calcolare la media o la deviazione standard esistono diverse procedure. O calcoliamo la media
selezionando nella colonna y i valori corrispondenti la gruppo “a” o quelli corrispondenti al gruppo
“b”, come nel seguente esempio
> p<-which(M$group=="a")
> mean(M$y[p])
[1] 15.18182
> p<-which(M$group=="b")
> mean(M$y[p])
[1] 21.81818
oppure, per semplificare le operazioni, usiamo la funzione “tapply” la quale consente di calcolare la
media separatamente per i gruppi “a” e “b” nel data frame M senza dover prima selezionare i
soggetti.
> tapply(M$y,M$group,mean)
a b
15.18182 21.81818
Nello stesso modo per la deviazione standard otteniamo
24
> tapply(M$y,M$group,sd)
a b
9.463807 6.675600
Nella funzione tapply si deve inserire la variabile dipendente o misura (M$y), il fattore (M$group ) e
poi il nome della funzione (mean o sd) per eseguire il calcolo separatamente per i due gruppi.
Il comando per eseguire il t test è “t.test” e basta scrivere semplicemente
> t.test(M$y ~ M$group,alternative="two.sided")
Il simbolo “~” si chiama tilde1 ed in R si usa per far capire al programma che la variabile a sinistra
della tilde è la misura e quella a destra della tilde è il fattore o i gruppi per i quali si deve eseguire il
test statistico. Nel comando del t test la funzione “” serve per dividere se il test deve essere ad una o
a due code. Il test a due code implica che l’area dell’errore α viene divisa nella due estremità della
distribuzione della statistica t, per cui se α = 0,05, nel test a due code viene dimezzato per cui α =
0,025. Nel test ad una coda l’area delle’errore α è localizzata nell’estremità inferiore o superiore
della distribuzione di t, per cui l’errore α non viene dimezzato. Il test a due code si fa se non si sa se
la differenza tra le medie dei due gruppi è positiva o negativa. Per es., posso calcolare il punteggio
ad un test e confrontare i punteggi dei maschi con quello delle femmine. Se non so cosa aspettarmi
ossia se non sono se i maschi o le femmine daranno punteggi più alti, allora eseguo in test a due
code. Nel comando di R, basta scrivere “alternative="two.sided"” per eseguire il test a due
code (oppure niente, dato che è il test fornito di default). Invece se sappiamo già prima di
raccogliere i dati che i soggetti del secondo gruppo daranno punteggio più alti, o bassi rispetto al
primo gruppo, allora conviene eseguire il test ad una coda. In R, scrivendo “alternative="less"”
vogliamo verificare se la media del primo gruppo è minore di quella del secondo (in questo caso t
assume valore negativo). Scrivendo “alternative="greater"” vogliamo verificare se la media
del primo gruppo è maggiore di quella del secondo (in questo caso t assume valore positivo).
Nel nostro esempio, eseguendo il t test otteniamo il seguente output
Welch Two Sample t-test
data: M$y by M$group
t = -1.9005, df = 17.977, p-value = 0.07353
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-13.9732668 0.7005395
sample estimates:
mean in group a mean in group b
15.18182 21.81818
Osserviamo che il valore di p è 0,0735, superiore a 0,05, per cui la differenza tra i due gruppi non è
significativa. Osserviamo anche che i gradi libertà del test hanno un valore decimale (df = 17,97) e
non intero. Questo perché è stato eseguito un t test per gruppi con varianze eterogenee, che è il test
che il programma esegue di default (è il test più conservativo. Per eseguire un t test ipotizzando
varianze omogenee tra i gruppi scriviamo
1 Il segno di tilde difficilmente si trova sulla tastiera di un computer. Per scriverlo occorre usare l’applicazione
“charmap” cliccando sulla barra di Windows.
25
> t.test(M$y~M$group,alternative="two.sided",var.equal=TRUE)
La funzione “var.equal=TRUE” dice al programma di eseguire l’analisi supponendo che i due
gruppi abbiano le stesse varianze.
L’output è Two Sample t-test
data: M$y by M$group
t = -1.9005, df = 20, p-value = 0.07188
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-13.9203462 0.6476189
sample estimates:
mean in group a mean in group b
15.18182 21.81818
Come si vede, assumendo le varianze omogenee i gradi di libertà sono indicati da un valore intero
(df = 20) e il valore di p è lievemente diverso da quello del test precedente (p = 0,0719).
Tuttavia, se avessimo eseguito un test ad una coda cosa avremmo ottenuto? Supponendo che fin
dall’inizio avessimo previsto che il gruppo a deve dare punteggi più bassi rispetto al gruppo b,
allora possiamo scegliere l’opzione “less” per il tipo di ipotesi. Effettuando i calcoli otteniamo
> t.test(M$y~M$group,alternative="less",var.equal=TRUE)
Two Sample t-test
data: M$y by M$group
t = -1.9005, df = 20, p-value = 0.03594
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
-Inf -0.6138144
sample estimates:
mean in group a mean in group b
15.18182 21.81818
Si vede, ora, che il valore di p = 0,0359 è diventato significativo in quanto inferiore a 0,05. Questo
perché nel test a due code l’errore α è stato dimezzato riducendo, così, la potenza del test.
Come salvare le variabili d’ambiente man mano che si effettuano le analisi in RStudio
Abbiamo detto che esistono delle funzioni importanti che permettono di salvare i dati man mano
che si eseguono le analisi. Ad esempio, se ho un array di dati, all’inizio posso decidere di effettuare
alcuni tipi di analisi (come il calcolo della media, della deviazione standard o del t di Student). I
risultati di queste analisi possono essere assegnati a delle variabili, in modo da poterli recuperare in
seguito o riutilizzarli. Ad esempio, se voglio assegnare le medie dei due gruppi a e b dell’esempio
precedente a duna variabile, a cui do il nome “medie.gruppi”, scrivo
> medie.gruppi<-tapply(M$y,M$group,mean)
Se scrivo
26
> medie.gruppi
a b
15.18182 21.81818
visualizzo la media sia del gruppo a che del gruppo b. Se voglio visualizzare le medie di uno solo
dei due gruppi posso scrivere
> medie.gruppi[names(medie.gruppi)=="a"]
a
15.18182
> medie.gruppi[names(medie.gruppi)=="b"]
b
21.81818
La funzione “names()” consente di selezionare i valori in base al loro nome (attenzione, però che
l’array o la matrice contengano dei nomi od etichette per i loro valori).
Ora se voglio conservare la variabile medie.gruppi per le successive analisi, occorre usare il
comando “save.image()”- Tale comando consente di salvare la variabile medie.gruppi e tutte le
successive nuove variabili su un file con estenzione “.Rdata”. Questo file conserva tutte le variabili,
di qualsiasi formato (numerico, carattere, array, matrice, data frame, lista, ecc.) che possono poi
essere recuperate quando si inizia una nuova analisi.
Prima di usare il comando save.image è necessario esserci spostati nella directory di lavoro,
altrimenti si rischia di non sapere in quale directory si è salvato il file. Nella finestra files del
riquadro delle finestre di servizio si sceglie la directory di lavoro e una volta scelta, allora si passa al
salvataggio di tutte le variabili presenti nella console nel file “.Rdata”. Per il salvataggio basta
semplicemente scrivere nella console di RStudio:
> save.image(file="my.Rdata")
Nel commando save.image la funzione “file=” serve per creare un file con le variabili esistenti nella
console di RStudio il cui nome sarà “my.Rdata”. Attenzione: è importantissimo assegnare al nome
del file l’estensione “.Rdata”, debitamente scritta, altrimenti il programma non potrà caricare le
variabili quando necessario (ad esempio, se scriviamo save.image(file="my.txt"), il programma
salva lo stesso il file, ma è un file testo illeggibile ed inutilizzabile per ricaricare la variabile
nell’ambiente della console).
Se l’operazione è andata a buon fine, nella finestra files della directory di lavoro dovrebbe esser
visualizzato il file . Rdata, come si vede nel seguente esempio
27
Cliccando sul file my.Rdata, il programma ricarica tutte la variabili che sono state salvate.
Comparirà una finestra di messaggio che chiede se si vuole effettivamente o no caricare le variabili
nell’ambiente di RStudio. Selezionando la risposta affermativa, tutte le variabile presenti in
my.Rdata verranno visualizzate nella finestra d’ambiente del riquadro delle finestre d’ambiente e
storia e saranno disponibili per le analisi successive.
Si consiglia di creare due file con estensione “.Rdata”, perché se capita di effettuare un salvataggio
che, malauguratamente, cancella alcune variabili o dataset precedenti, allora è possibile riutilizzare
l’altro file .Rdata per recuperare le variabili o i dataset perduti. Infatti, occorre ricordare che il
comando save.image salva le variabili effettivamente presenti nella console. Se qualche variabile
viene, per errore, cancellata dalla console, tale variabile verrà cancellata anche nel successivo
salvataggio in .Rdata.
Quali pacchetti installare per l’EPG 1 – Analisi multivariate con
RStudio
I pacchetti presenti alla prima installazione di RStudio sono i pacchetti “stats”, “graphics”,
“grDevices”, “utils”, “datasets”, “methods”, “base”.
I pacchetti da installare per eseguire alcuni comandi delle analisi descrittive ed inferenziali della
parte 1 e parte 2 delle analisi multivariate con RStudio sono: “psych”, “QuantPsyc”, “car”,
“lmSupport” e “gplots”.
Per installare i pacchetti aggiuntivi direttamente da RStudio consultate la sezione “Come installare i
pacchetti da RStudio”.