Tommaso C. & Marco G.
23 - 25 Novembre 2016
Permette di generare facilmente grafici che:
Come avete visto durante le lezioni di teoria, la visualizzazione grafica permette di otterere subito una valutazione qualitativa dei vostri dati
Il comando che permette la generazione di un grafico ?? plot
. Il tipo di grafico generato dipende dal tipo di argomento passato e dai parametri inseriti
x = 10:110
plot(x)
se x ?? un vettore produce un grafico dei valori del vettore rispetto ad un vettore di indici y <- 1: length(x)
Il comando che permette la generazione di un grafico ?? plot
. Il tipo di grafico generato dipende dal tipo di argomento passato e dai parametri inseriti
x = 1:10
y = x^2
plot(x,y)
se x e y sono vettori produce un grafico delle coppie \((x_i, y_i)\)
Il comando che permette la generazione di un grafico ?? plot
. Il tipo di grafico generato dipende dal tipo di argomento passato e dai parametri inseriti
plot(m)
se m ?? una matrice produce un grafico delle coppie \((m_{i,1},m_{i,2})\)
Il comando che permette la generazione di un grafico ?? plot
. Il tipo di grafico generato dipende dal tipo di argomento passato e dai parametri inseriti
plot(df)
se df ?? un dataframe, produce i grafici delle distribuzioni delle variabili contenute nel data frame
N.B. Viene effettuato una prodotto cartesiano di tutte le colonne del dataframe \(\rightarrow\) che ad esempio con solo 6 colonne ottengo \(6^2 - 6 = 30\) grafici
Il grafico pu?? essere personalizzato in pi?? modi (per tutte le opzioni digitate ?plot.default).
I pi?? comuni riguadano il tipo di indicatore dei valori pch
e il loro colore col
plot(x, y, col = 2, pch = "+")
Il grafico pu?? essere personalizzato in pi?? modi (per tutte le opzioni digitate ?plot.default).
I pi?? comuni riguadano il tipo di indicatore dei valori pch
e il loro colore col
plot(x, y, col = "#000000", pch = 9) # con colori hex
All’interno del grafico ?? possibile impostare le etichette per gli assi (xlab, ylab
), il titolo (main
) e il tipo (type
, se linee o punti)
plot(x, y, xlab = "Sample", ylab = "Value", type = "l", main = "un plot casuale")
All’interno del grafico ?? possibile impostare le etichette per gli assi (xlab, ylab
), il titolo (main
) e il tipo (type
)
plot(x, y, xlab = "Sample", ylab = "Value", type = "b", col = "#FF00FF", main = "un plot casuale")
plot(sort(x),y, xlab = "Sample",ylab = "Value", type = "l")
abline(coef(line(x,y)), col = "#00FF00") # aggiunge una retta
points(mean(x), mean(y), col= "#FF00FF" ) # aggiunge un punto
R permette di aggiungere altri dati anche tramite il comando par
(tutorial per gli interessati)
par(mfrow=c(1,2))
plot(x, y, xlab = "Sample", ylab = "Value")
plot(x, y1, xlab = "Sample", ylab = "Value", col = "#00FF00")
Se volete che il secondo plot venga inserito all’interno del primo inserite la riga par(new = TRUE)
tra le due righe contenenti il primo e il secondo plot
plot()
jpeg("mioPlot.jpg")
plot(x, y, col = "#00FF00", xlab = "Sample", ylab = "Value")
dev.off()
## quartz_off_screen
## 2
Genera un grafico a barre partendo dai valori del vettore x
dati <- c(10, 3, 5, 8, 4, 6)
barplot(dati, main="Esempio di barplot")
Genera un grafico a barre partendo dai valori del vettore x
barplot(dati, main="Esempio di barplot", horiz = TRUE)
Ci sono parametri che permettono di modificare a piacere il grafico
Molto comodo per rappresentare le frequenze relative/assolute di un vettore. Si creano inserendo i punti nel grafico e successivamente aggiungendo le linee (lines()
)
reddito <- read.csv("soluzioni/dataset/reddito.csv")
attach(reddito)
plot(table(StatoCivile), type = "p")
lines(table(StatoCivile))
attach()
?Si creano inserendo i punti nel grafico e successivamente aggiungendo le linee (lines()
)
plot(table(StatoCivile), type = "p")
lines(table(StatoCivile))
attach()
serve per fissare il dataframe, in questo modo ?? possibile accedere alle componenti senza usare "$"
. Ricordatevi di usare detach()
quando finite di usare il dataframe
Usare un diagramma a bastoncini per rappresentare le frequenze assolute/relative di valori reali (come l’et??, il peso, l’altezza)
vettore <-sample (1:150, 10000,replace = TRUE)
plot(table(vettore), type = "p")
lines(table(vettore))
vettore <- c(0.1, 2.5, 3.7, 3.7, 0.7, 3.7, 1.5, 1.7, 0.4, 3.6, 0.2)
stem(vettore)
##
## The decimal point is at the |
##
## 0 | 1247
## 1 | 57
## 2 | 5
## 3 | 6777
Il comando hist()
genera istogrammi a partire da un vettore numerico
hist(x)
genera un’istogramma utilizzando il vettore numerico x
hist(Eta)
Il comando hist()
genera istogrammi a partire da un vettore numerico
hist(x, nclass = n)
genera un’istogramma con un numero n
di classihist(Eta, nclass = 2)
Il comando hist()
genera istogrammi a partire da un vettore numerico
hist(x, breaks = v)
genera un istogramma usando i valori del vettore v
come demilitatorihist(Eta, breaks = c(min(Eta),20,60,88, max(Eta)))
par(mfrow=c(1,2))
vettore <-sample (1:150, 10000, replace = TRUE)
plot(table(vettore), type = "p", main = "MAI!")
lines(table(vettore))
hist(vettore, main = "Versione corretta")
Nel caso di fattori non ?? possibile usare il comando hist()
, una soluzione ?? fare un barplot della tabella delle frequenze
par(mfrow=c(1,2))
plot(table(StatoCivile), type = "p")
lines(table(StatoCivile))
barplot(table(StatoCivile))
Mostra insieme frequenze relative e rispettivi valori cumulati.
statoCivileRel <- sort(prop.table(table(StatoCivile)), decreasing = TRUE)
statoCivileCum <- cumsum(statoCivileRel)
# ylim mi crea un asse y da 0 a 1.3 (per avere pi?? margine)
barplot(statoCivileRel, ylim = c(0,1.3), space = 0)
lines(statoCivileCum, type = "b")
Installare la libreria tramite install.packages("qcc")
, importare con library(qcc)
e lanciare il comando pareto.chart()
. Questo comando, oltre a visualizzare il grafico, scrive sulla consolle delle statistiche dei dati che state analizzando.
pareto.chart(table(StatoCivile))
##
## Pareto chart analysis for table(StatoCivile)
## Frequency Cum.Freq. Percentage Cum.Percent.
## Married-civ-spouse 17826 17826 39.41886692 39.41887
## Never-married 17826 35652 39.41886692 78.83773
## Divorced 6297 41949 13.92463845 92.76237
## Separated 1411 43360 3.12016275 95.88254
## Widowed 1278 44638 2.82605811 98.70859
## Married-spouse-absent 552 45190 1.22064482 99.92924
## Married-AF-spouse 32 45222 0.07076202 100.00000
Fornisce in maniera chiara una sintesi dei vostri dati numerici.
Gli outlier sono valori distanti dai valori osservati, nel caso di esperimenti reali possono ed esempio essere dovuti ad errori di misurazione.
Uno dei modi pi?? comuni per calcore gli outlier ?? usare lo scarto interquartile (IQR()
), ovvero la differenza tra il terzo \(Q_3\) e il primo quartile \(Q_1\)
Un outlier \(x\) ?? un valore tale per cui \[x < Q_1 - 1.5 \cdot IQR \quad \vee \quad x > Q_3 + 1.5 \cdot IQR \]
iqr <- IQR(vettore)
iqr #scarto interquantile
## [1] 17
q1 <- quantile(vettore,0.25)
q1 - (iqr * 1.5) #i valori minori di questo sono outlier
## [1] 163.25
q3 <- quantile(vettore,0.75)
q3 + (iqr * 1.5) #i valori maggiori di questo sono outlier
## [1] 231.25
I baffi \((x_{min}, x_{max})\) del nostro boxplot sono i valori del vettore \(v\) tali che:
per calcolarli ?? necessario filtrare i valori e poi prendere il massimo e il minimo
vettoreNoOutlier <- vettore[vettore < q3 + (iqr * 1.5) & vettore > q1 - (iqr * 1.5)]
# valore limite superiore
max(vettoreNoOutlier)
## [1] 227
# valore limite inferiore
min(vettoreNoOutlier)
## [1] 171
boxplot()
boxplot(vettore, vettore2, main = "due vettori", names = c("vett1","vett2") )
pie
# esempio usando le frequenze assolute calcolate da R
pie(table(StatoCivile), main = "Torta degli stati civili")
pie
# esempio usando due vettori, uno di dati e uno di etichette
dati <- c (4,30,15)
etichette <- c("promossi", "bocciati", "orale obbligatorio")
pie(dati, etichette, main = "Appello gennaio")
col=rainbow(length(dati))
# esempio usando due vettori, uno di dati e uno di etichette
dati <- c (4,30,15)
etichette <- c("promossi", "bocciati", "orale obbligatorio")
pie(dati, etichette, main = "Appello gennaio", col = c("green", "red", "yellow"))
Nel caso di variabili numeriche con molti valori (es. et??, peso, altezza) non usate i grafici a torta
pie(table(Eta))
Nel caso di variabili numeriche con molti valori (es. et??, peso, altezza) non usate i grafici a torta
pie(table(Eta))
Questo ?? una porcata!
Soluzione:
cut
# creiamo un vettore che divida i dati in 3 blocchi -> lunghezza 4
vettoreBreaks <- seq (from = min(Eta), to = max(Eta), length = 4)
table(cut(Eta, breaks = vettoreBreaks, include.lowest = TRUE))
##
## [17,41.3] (41.3,65.7] (65.7,90]
## 27725 16153 1344
frequenzeIntervalli <- table(cut(Eta, breaks = vettoreBreaks, include.lowest = TRUE))
pie(frequenzeIntervalli)
pie(table(Eta))
Impostate la lunghezza del vettore con i breaks in maniera ragionevole.
Fare un grafico a torta della probabilit?? di fidanzamento dividendo in 3 blocchi i dati in questo modo:
Per questo esercizio ?? necessario aver compreso molto bene la teoria.