Statistica con R
Jody Tubi. Email: jodytubi@[Link]
INTRODUZIONE.
Accesso ai dati.
La diffusione dei PC ha reso disponibile una quantit di dati immensa: le
imprese private dispongo di dati su clienti e fornitori e gli enti pubblici
dispongono di dati sulla cittadinanza.
La necessit di migliorare beni e servizi ha reso indispensabile studiare i dati a
disposizione e, per questo motivo sono disponibili molti programmi di statistica
come per esempio, STATA, SPSS, SAS, e R.
3/37
Perch usare R ?
Sebbene ci siamo molti software, esistono delle ragioni specifiche per usare R:
a differenza di molti software, R gratuito;
permette pressoch qualsiasi tipo di analisi statistica;
offre la possibilit di estendere le funzionalit di base attraverso l'uso dei
pacchetti;
disponibile per sistemi Windows, Mac OS e Linux e la sintassi sempre la
stessa.
4/37
Perch usare RStudio ?
RStudio un'applicazione che integra alcuni strumenti di R rendendoli pi
accessibili, e consentendo, cos, di essere produttivi. Ad esempio,
ha una migliore gestione degli script;
rende pi facile l'installazione e l'aggiornamento dei vari pacchetti;
ha la stessa interfaccia grafica indipendentemente dal sistema operativo;
consente di produrre report facilmente riproducili.
5/37
Cos' R?
R un linguaggio e un ambiente per calcoli statistici. Nasce da un'idea di John
Chambers ed in grado di fornire un'ampia scelta di tecniche statistiche e
grafiche.
R un linguaggio di programmazione object oriented: permette di creare
(definire) oggetti che possono interagire gli uni con gli altri.
Le capacit del linguaggio possono essere ampliate tramite l'installazione e l'uso
di pacchetti specifici che contengono ulteriori funzioni.
6/37
I pacchetti.
I pacchetti sono dei file che estendono le possibilit di R e contengono funzioni e
dati. Vanno installati con uno specifico comando. Se, ad esempio, vogliamo
installare il pacchetto car, usiamo il comando [Link]()
[Link](car)
I pacchetti devono essere richiamati all'avvio del programma. Per richiamare
car, usiamo il comando library():
library(car)
Sul sito [Link] si trovano le istruzioni per tutte le funzioni
presenti nei vari pacchetti. In alternativa, si pu usare il tab Help nel pannello in
basso a destra di RStudio.
7/37
GLI OGGETTI IN R.
Gli oggetti.
Gli oggetti sono semplicemente le "cose" che creiamo (o meglio, definiamo)
all'interno di R.
Alcuni degli oggetti pi comuni sono, ad esempio:
i vettori;
i data-frame;
le serie storiche.
9/37
I vettori - 1.
Un vettore pu essere pensato come la colonna di una tabella. Pu essere
chiamato anche variabile.
ESEMPIO: creiamo il vettore v contenente i numeri da 1 a 5:
v = c(1,2,3,4,5)
La c una funzione generica che concatena gli elementi per formare un vettore.
10/37
I vettori - 2.
Esistono diversi tipi di vettori:
vettori numerici (numeric vectors);
vettori con caratteri (character vectors);
vettori logici (logical vectors).
a = c(1,2,5.3,6,-2,4) # vettore numerico
b = c("uno","due","tre") # vettore con caratteri
c = c(TRUE,TRUE,TRUE,FALSE,TRUE,FALSE) # vettore logico
11/37
I dataframe - 1.
Un data-frame un insieme di vettori e, banalmente, pu essere pensato come
una tabella con pi colonne. Spesso chiamato anche dataset.
Esempio:
creiamo le colonne della tabella
d = c(673,773,845,923)
e = c("rosso","verde","blu","bianco")
f = c(TRUE,TRUE,TRUE,FALSE)
Creiamo la tabella con il comando [Link]()
dat = [Link](d,e,f)
12/37
I dataframe - 2.
Infine, visualizziamo la tabella scrivendo il nome che le abbiamo assegnato:
dat
##
##
##
##
##
1
2
3
4
d
e
f
673 rosso TRUE
773 verde TRUE
845
blu TRUE
923 bianco FALSE
13/37
Lavorare con i dataframe.
A volte pu essere necessario lavorare solo con alcune variabili del data-frame.
Per fare ci ci sono 2 modi:
usare i comandi attach() e detach()
attach(dat) # "apro" il dataframe
e # richiamo la variabile
detach(dat) # "chiudo" il dataframe
usare il comando $
dat$e # sintassi: NomeDataFrame$NomeVariabile
14/37
Le serie storiche.
Le serie storiche sono, semplicemente, dei dati legati al tempo.
In R, il comando ts() la serie storica pi semplice e consente di trasformare un
insieme di dati in serie storiche.
Per fare questo necessario conoscere l'istante di partenza della serie storica e
la frequenza.
15/37
Esempio.
Disponiamo del numero di laureati triennali in materie umanistiche rilevato
annualmente fra il 2002 e 2008 e vogliamo "trasformare" il vettore in una serie
storica.
lut=c(77312,90929,102935,121557,144322,143881,140697)
LUT=ts(lut,start=2002,frequency=1)
LUT
##
##
##
##
##
Time Series:
Start = 2002
End = 2008
Frequency = 1
[1] 77312 90929 102935 121557 144322 143881 140697
16/37
RAPPRESENTAZIONE DEI DATI.
Scatterplot - 1.
importante rappresentare graficamente i dati di cui si dispone per renderli pi
comprensibili. Uno dei grafici pi comuni il grafico a dispersione o
"scatterplot", un tipo di grafico che mette in relazione 2 variabili.
data(mtcars)
plot(mtcars$hp, mtcars$mpg, xlab = "Potenza (cv)",
ylab = "Consumo (miglia US/gallone)", [Link]=1.2,
[Link]=1.8, main="Consumo e Potenza", font = 2,
[Link] = 2, [Link]="DodgerBlue",
[Link]="DarkSlateGray", pch = 16, col = "RoyalBlue")
abline(lm(mtcars$mpg~mtcars$hp), lwd = 3,lty = 4, col = "SeaGreen")
text(155,25,"retta di regressione", font=2,col = "SeaGreen", cex=1.5)
18/37
Scatterplot - 2.
19/37
STATISTICA DI BASE.
Statistica di base.
Con R calcolare le statistiche di base come media, davvero molto semplice.
v1=c(134,636,139,131,237,144,901,656,149,604,093,154,918,648,161,304,728,
163,293,324,944,594,110,189,132,502,844,604,147,264,156,976,156,854,434)
mean(v1) # calcola la media
## [1] 412.0857
median(v1) # calcola la mediana
## [1] 293
21/37
var(v1) # calcola la varianza campionaria
## [1] 89140.79
sd(v1) # calcola la standard deviation campionaria
## [1] 298.5645
v2=c(134636,139131,144901,149040,154918,161030,163293)
v3=c(94494,110189,132004,147264,156976,156854,159434)
cor(v2,v3) # calcola la correlazione
## [1] 0.9452311
22/37
Statistica di base - 3.
Esistono delle funzioni, poi, che con un unico comando ci riassumono tutte le
informazioni che ci servono:
summary(v1)
##
##
Min. 1st Qu.
93.0
151.5
Median
293.0
Mean 3rd Qu.
412.1
642.0
Max.
976.0
library(psych)
describe(v1)
##
vars n
mean
sd median trimmed
mad min max range skew kurtosis
## 1
1 35 412.09 298.56
293 387.97 238.7 93 976
883 0.57
-1.27
##
se
## 1 50.47
23/37
I TITOLI AZIONARI.
Le serie storiche delle azioni - 1.
Le serie storiche dei titoli azionari sono oggetti pi complessi degli oggetti ts che
abbiamo visto prima: in R sono scaricati con il pacchetto quantmod e gestiti dal
pacchetto xts.
#[Link]("quantmod") # installo il pacchetto quantmod
library(quantmod) # richiamo il pacchetto quantmod
getSymbols("[Link]") # scarico i valori dell'azione
## [1] "[Link]"
L'oggetto ottenuto ha classe xts zoo.
25/37
Le serie storiche delle azioni - 2.
tail([Link], n = 5)
##
##
##
##
##
##
##
##
##
##
##
##
2015-12-07
2015-12-08
2015-12-09
2015-12-10
2015-12-11
2015-12-07
2015-12-08
2015-12-09
2015-12-10
2015-12-11
[Link] [Link] [Link] [Link] [Link]
12.88
13.11
12.87
13.02
8601400
12.91
12.93
12.67
12.74
9105300
12.80
12.84
12.55
12.64
10476800
12.59
12.76
12.51
12.62
8652200
12.57
12.63
12.31
12.48
10499000
[Link]
13.02
12.74
12.64
12.62
12.48
26/37
Ancora grafici - 1.
La prima cosa da fare quando abbiamo una qualsiasi serie storica tracciarne il
grafico. Nel caso delle serie storiche finanziarie usiamo il comando
chartSeries():
[Link]=[Link]['2015-10-01::2015-12-11']
chartSeries([Link], type = "candlesticks",
name="Fiat Chrysler Automobiles",
theme = chartTheme("black"))
27/37
Ancora grafici - 2.
28/37
Le serie storiche delle azioni - 3.
In pratica, l'oggetto [Link] una specie di data-frame composto da 6 colonne e
ciascuna colonna una serie storica.
Come per i data-frame, possibile usare delle colonne con il comando $. Ad
esempio, per usare solo la colonna con i valori di apertura scriviamo:
[Link]$[Link].
29/37
Ancora grafici - 2.
Per esempio, diciamo di voler rappresentare i valori di chiusura del titolo:
chartSeries([Link]$[Link], name="Fiat Chrysler Automobiles")
30/37
RENDIMENTI.
Rendimenti giornalieri del titolo FCA.
Anche calcolare i rendimenti giornalieri di un titolo azionario con R molto
semplice, basta usare la funzione periodReturn() contenuta nel pacchetto
quantmod:
rendimenti1=periodReturn([Link],period='daily',type='log')
rendimenti2=periodReturn([Link],period='daily',type='log')
Per avere un data-set sui rendimenti dei giornalieri, settimanali, mensili,
trimestrali e annuali, si pu usare la funzione allReturns():
RendGen=allReturns([Link],type="log")
32/37
Statische sui rendimenti - 1.
possibile applicare le funzioni della statistica descrittiva di base anche ai
rendimenti:
mean(rendimenti1); sd(rendimenti1)
## [1] 0.0003121559
## [1] 0.02847879
mean(rendimenti2); sd(rendimenti2)
## [1] 0.0008023816
## [1] 0.01900184
33/37
Statische sui rendimenti - 2.
Eventualmente, possibile anche usare le funzioni riassuntive summary() e
describe() per avere un quadro pi completo:
describe(rendimenti1); summary(rendimenti1)
##
vars
n mean
sd median trimmed mad
min max range
## [Link]
1 2328
0 0.03
0
0 0.02 -0.16 0.24
0.4
##
skew kurtosis se
## [Link] 0.22
4.27 0
##
##
##
##
##
##
##
Index
Min.
:2007-01-01
1st Qu.:2009-03-24
Median :2011-06-25
Mean
:2011-06-22
3rd Qu.:2013-09-18
Max.
:2015-12-11
[Link]
Min.
:-0.1572472
1st Qu.:-0.0153606
Median : 0.0000000
Mean
: 0.0003122
3rd Qu.: 0.0164662
Max.
: 0.2399476
34/37
describe(rendimenti2); summary(rendimenti2)
##
vars n mean
sd median trimmed mad
min max range skew
## [Link]
1 52
0 0.02
0
0 0.02 -0.05 0.04 0.09 -0.25
##
kurtosis se
## [Link]
-0.03 0
##
##
##
##
##
##
##
Index
Min.
:2015-10-01
1st Qu.:2015-10-19
Median :2015-11-05
Mean
:2015-11-06
3rd Qu.:2015-11-24
Max.
:2015-12-11
[Link]
Min.
:-0.0541844
1st Qu.:-0.0115163
Median : 0.0011200
Mean
: 0.0008024
3rd Qu.: 0.0143869
Max.
: 0.0402955
35/37
Grafico dei rendimenti.
plot(rendimenti1, main="Rendimenti dal 2007", [Link]="#4682B4", font=2)
36/37
plot(rendimenti2, main="Rendimenti da ottobre 2015", [Link]="#2E8B57", font=2)
37/37