Sei sulla pagina 1di 37

Statistica con R

Jody Tubi. Email: jodytubi@outlook.it

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 install.packages()
install.packages(car)

I pacchetti devono essere richiamati all'avvio del programma. Per richiamare


car, usiamo il comando library():
library(car)

Sul sito http://www.inside-r.org 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 data.frame()


dat = data.frame(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)", cex.lab=1.2,
cex.main=1.8, main="Consumo e Potenza", font = 2,
font.lab = 2, col.lab="DodgerBlue",
col.main="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.
#install.packages("quantmod") # installo il pacchetto quantmod
library(quantmod) # richiamo il pacchetto quantmod
getSymbols("FCA.MI") # scarico i valori dell'azione
## [1] "FCA.MI"

L'oggetto ottenuto ha classe xts zoo.

25/37

Le serie storiche delle azioni - 2.


tail(FCA.MI, 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

FCA.MI.Open FCA.MI.High FCA.MI.Low FCA.MI.Close FCA.MI.Volume


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
FCA.MI.Adjusted
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():
FCA.MI.xts=FCA.MI['2015-10-01::2015-12-11']
chartSeries(FCA.MI.xts, 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 FCA.MI 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:
FCA.MI$FCA.MI.Open.

29/37

Ancora grafici - 2.
Per esempio, diciamo di voler rappresentare i valori di chiusura del titolo:
chartSeries(FCA.MI.xts$FCA.MI.Close, 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(FCA.MI,period='daily',type='log')
rendimenti2=periodReturn(FCA.MI.xts,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(FCA.MI,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
## daily.returns
1 2328
0 0.03
0
0 0.02 -0.16 0.24
0.4
##
skew kurtosis se
## daily.returns 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

daily.returns
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
## daily.returns
1 52
0 0.02
0
0 0.02 -0.05 0.04 0.09 -0.25
##
kurtosis se
## daily.returns
-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

daily.returns
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", col.main="#4682B4", font=2)

36/37

plot(rendimenti2, main="Rendimenti da ottobre 2015", col.main="#2E8B57", font=2)

37/37