Data Analytics
Da Grafici Continue
Data Analysis# Grafici per variabili continue ----
library(MASS)
data("Cars93")
# Diagramma a punti: stripchart() ----
par(mfrow = c(1, 2))
stripchart(Cars93$Price, pch = 19, main = "Price", xlab = "Price",
method = "stack", cex = 1.2)
stripchart(Cars93$Length, pch = 18, col = "red", main = "Length", xlab = "Length",
method = "stack", cex = 1.2)
par(mfrow = c(1, 1))
# Istogramma: hist() ----
## Istogramma di base ----
par(mfrow = c(1, 2))
hist(Cars93$Price,
main = "Distribuzione del Prezzo",
xlab = "Prezzo (migliaia di $)", ylab = "Frequenza assoluta",
col = "lightblue", border = "white")
hist(Cars93$Length,
main = "Distribuzione della Lunghezza",
xlab = "Lunghezza (in pollici)", ylab = "Frequenza assoluta",
col = "lightblue", border = "white")
par(mfrow = c(1, 1))
## Numero di classi: breaks ----
par(mfrow = c(1, 2))
hist(Cars93$Price, breaks = 5, main = "breaks = 5",
xlab = "Prezzo (migliaia di $)", ylab = "Frequenza assoluta",
col = "lightblue", border = "white")
hist(Cars93$Price, breaks = 50, main = "breaks = 50",
xlab = "Prezzo (migliaia di $)", ylab = "Frequenza assoluta",
col = "lightblue", border = "white")
par(mfrow = c(1, 1))
## Densità e curva sovrapposta ----
hist(Cars93$Price,
freq = FALSE, breaks = 20,
main = "Istogramma e densità",
xlab = "Prezzo (migliaia di $)", ylab = "Densità",
col = "lightblue", border = "white")
lines(density(Cars93$Price, na.rm = TRUE), col = "darkblue", lwd = 2)
## Trasformazione logaritmica ----
hist(log(Cars93$Price),
freq = FALSE,
main = "Distribuzione di log(Price)",
xlab = "log(Price)", col = "lightblue", border = "white")
lines(density(log(Cars93$Price)), col = "darkblue", lwd = 2)
## Classi di ampiezza diversa ----
breaks_custom <- c(0, 10, 30, max(Cars93$Price))
hist(Cars93$Price,
breaks = breaks_custom,
freq = FALSE,
main = "Istogramma con classi di ampiezza diversa",
xlab = "Price", col = "lightblue", border = "white")
######## Esercizi ########
# Preparazione AutoBi
library(insuranceData)
data("AutoBi")
AutoBi$ATTORNEY <- factor(AutoBi$ATTORNEY)
levels(AutoBi$ATTORNEY) <- c("yes", "no")
AutoBi$CLMSEX <- factor(AutoBi$CLMSEX)
levels(AutoBi$CLMSEX) <- c("M", "F")
# Esercizio 2 — istogrammi di LOSS
# Usando la variabile LOSS di AutoBi:
# 1. Traccia l’istogramma con il numero di classi di default.
# 2. Traccia l’istogramma con breaks = 20 e con breaks = 5 affiancati (par(mfrow = ...)).
# 3. Traccia l’istogramma di log(LOSS) con la curva di densità sovrapposta.
# 4. La distribuzione di LOSS è simmetrica? Come cambia dopo la trasformazione log?
# 1.
hist(AutoBi$LOSS,
col = "lightblue", border = "white")
# 2.
par(mfrow = c(1, 2))
hist(AutoBi$LOSS, breaks = 20, main = "breaks = 20",
col = "lightblue", border = "white")
hist(AutoBi$LOSS, breaks = 5, main = "breaks = 5",
col = "lightblue", border = "white")
par(mfrow = c(1, 1))
# 3.
hist(log(AutoBi$LOSS),
freq = FALSE,
col = "lightgreen", border = "white")
lines(density(log(AutoBi$LOSS), na.rm = TRUE), col = "darkgreen", lwd = 2)
# 4. LOSS è asimmetrica a destra (pochi danni elevati).
# La trasformazione log rende la distribuzione più simmetrica.
# Mediana, quartili e IQR ----
median(Cars93$Price, na.rm = TRUE)
median(Cars93$Length, na.rm = TRUE)
quantile(Cars93$Price, na.rm = TRUE)
quantile(Cars93$Price, probs = seq(0, 1, 0.1), na.rm = TRUE, digits = 2)
# Verifica: il quantile di ordine 0.5 è la mediana
median(Cars93$Price) == quantile(Cars93$Price, probs = 0.5)
IQR(Cars93$Price, na.rm = TRUE)
IQR(Cars93$Length, na.rm = TRUE)
# Boxplot: boxplot() ----
## Boxplot singolo ----
boxplot(Cars93$Price,
main = "Boxplot del Prezzo",
ylab = "Prezzo (migliaia di $)",
col = "lightblue")
## Boxplot per gruppi (notazione formula) ----
boxplot(Price ~ Type,
data = Cars93,
main = "Prezzi per tipo di auto",
xlab = "Tipo", ylab = "Prezzi (migliaia di $)",
las = 2)
## Boxplot con notch ----
boxplot(Price ~ Origin,
data = Cars93,
main = "Prezzi per origine",
xlab = "Origine", ylab = "Prezzi",
col = c("lightblue", "lightpink"),
notch = TRUE)
# Esercizio 3 — boxplot di AutoBi
# 1. Costruisci i boxplot di LOSS e log(LOSS)
# 2. Costruisci i boxplot di log(LOSS) separatamente per Ricorso all’avvocato (ATTORNEY). Ci sono differenze tra i danni nei due gruppi? Questo conferma quanto visto rendendo LOSS in factor
# 3. Costruisci i boxplot di CLMAGE per le combinazioni di sesso e avvocato usando interaction(CLMSEX, ATTORNEY).
# 1.
par(mfrow = c(1, 2))
boxplot(AutoBi$LOSS,
main = "Boxplot di Danno", ylab = "Danno")
boxplot(log(AutoBi$LOSS),
main = "Boxplot di log(Danno)", ylab = "log(Danno)")
par(mfrow = c(1, 1))
# 2.
boxplot(log(LOSS) ~ ATTORNEY,
data = AutoBi,
main = "(Log) Danno per Ricorso all'avvocato",
ylab = "log(Danno)",
col = c("darkred", "darkblue"),
las = 2)
# 3.
boxplot(log(LOSS) ~ interaction(CLMSEX, ATTORNEY),
data = AutoBi,
main = "(Log) Danno per sesso e avvocato",
ylab = "log(Danno)",
col = c("steelblue", "salmon", "lightblue", "lightsalmon"),
las = 2,
notch = TRUE)
# Funzione di ripartizione empirica: ecdf() ----
par(mfrow = c(1, 2))
xx <- c(148, 172, 155, 168, 162, 175, 178, 186, 174)
sort(xx)
plot(ecdf(xx))
yy <- c(xx, 168) # aggiunge un valore ripetuto
plot(ecdf(yy))
par(mfrow = c(1, 1))
# ECDF per la lunghezza delle auto
plot(ecdf(Cars93$Length),
main = "Funzione di ripartizione empirica per lunghezza",
xlab = "Lunghezza", ylab = "Proporzione di casi")
# ECDF con mediana evidenziata
plot(ecdf(Cars93$Length),
main = "Funzione di ripartizione empirica per lunghezza e mediana",
xlab = "Lunghezza", ylab = "Proporzione di casi")
segments(130, 0.5,
median(Cars93$Length), 0.5,
col = "red", lty = "dashed")
segments(median(Cars93$Length), 0,
median(Cars93$Length), 0.5,
col = "red", lty = "dashed")