# PUNTO 1 ------------------------------------------------
HW 05 - Tabelle di frequenza, grafici e modelli di probabilità
Data di consegna: giovedì 29 ottobre 2026
Introduzione
Il compito è diviso in due blocchi:
- nel primo blocco (Parti 1-3) tornerai sui dati del sistema bibliotecario cittadino dell’esercitazione 1 per costruire tabelle di frequenza e grafici con le funzioni di R base, sperimentare grafici alternativi a quelli tradizionali e usare un assistente AI per costruire e rifinire i grafici
- nel secondo blocco (Parti 4-5) userai le funzioni di R per i modelli di probabilità (Binomiale, Poisson, Normale ed Esponenziale) per rispondere a domande formulate in termini di probabilità, e per simulare dati da questi modelli
In questo compito utilizzerai i comandi utili per:
- costruire tabelle di frequenza univariate e bivariate con
tablee contabyl, e completarle con le funzioniadorn_*() - rappresentare graficamente variabili qualitative e quantitative con le funzioni grafiche di R base
- scegliere grafici alternativi con l’aiuto di portali dedicati alla visualizzazione dei dati
- calcolare probabilità e quantili con le funzioni
d_,p_eq_ - generare numeri pseudo-casuali con le funzioni
r_e rendere riproducibili le simulazioni conset.seed
Obiettivi di apprendimento
Lo svolgimento di questo compito ti permetterà di:
- scegliere il tipo di percentuale adatto alla domanda (profili riga, profili colonna, percentuali sul totale) e interpretarlo correttamente
- scegliere il grafico adatto al tipo di variabile e valutare vantaggi e svantaggi di grafici diversi per gli stessi dati
- usare in modo critico un assistente AI per produrre e migliorare il codice di un grafico
- tradurre una domanda formulata in termini di probabilità nella funzione di R corretta
- confrontare le frequenze osservate in una simulazione con le probabilità teoriche
Istruzioni per l’uso
Crea un progetto RStudio di nome
hw05(in Positron: crea una cartellahw05e aprila con File → Open Folder) e lavora all’interno del progetto per tutto il compito.All’interno della cartella del progetto crea una sottocartella
datie salva al suo interno i file dei dati dell’esercitazione 1 (utenti.csv,prestiti.xlsxecatalogo.txt), che trovi anche su Teams, allegati al compito.Rispondi ai vari punti salvando le risposte in un file R con il nome “hw05_cognome_nome.R”: ad esempio nel mio caso il nome del file sarebbe “hw05_vistocco_domenico.R”. Salva lo script nella cartella del progetto.
Inizia lo script con un commento che riporti titolo del compito, nome, cognome e data.
Per rispondere ad ogni punto inserisci un’etichetta di sezione (che puoi inserire nello script usando la combinazione di tasti CTRL/CMD + SHIFT + R) utilizzando il punto cui stai rispondendo. Ad esempio, per rispondere al punto 1 del compito, usa un’etichetta di sezione:
Utilizza i commenti per rispondere alle domande in cui viene chiesta un’interpretazione da parte tua: nei commenti concentrati sul significato dei risultati e sul comportamento di R, con parole tue. Per le domande di probabilità riporta nel commento anche il risultato numerico.
Lo script deve essere funzionante quando si eseguono tutti i comandi con il pulsante Source. I comandi che restituiscono un errore vanno lasciati nello script ma commentati, riportando subito sotto, sempre come commento, il messaggio di errore ottenuto.
Rispetta le regole di stile viste in aula: nomi degli oggetti in snake case,
<-per l’assegnazione, spazi attorno agli operatori e dopo le virgole, una istruzione per riga, un a capo dopo ogni pipe.Lo script viene valutato sia in base alla correttezza del codice che in base alla qualità (stile utilizzato per rendere lo script leggibile ed ordinato).
Esercizi
Ricordati di utilizzare i commenti per le risposte aperte e di commentare i comandi che restituiscono un errore. Quando una domanda chiede “quanti”, “quale” o “qual è la probabilità”, rispondi con il codice che produce il risultato e riporta la risposta anche in un commento.
Blocco A: i dati del sistema bibliotecario
Le tabelle necessarie per le Parti 1-3 sono utenti, prestiti e prestiti_completo, costruite nella parte comune dell’esercitazione 1. Inizia lo script ricostruendole con il codice seguente.
library(tidyverse)
library(readxl)
library(janitor)
utenti <- read_delim("dati/utenti.csv", delim = ";") |>
clean_names() |>
mutate(
categoria = replace_values(categoria, "stu" ~ "STU"),
categoria = recode_values(categoria,
"STU" ~ "Studente",
"LAV" ~ "Lavoratore",
"PEN" ~ "Pensionato",
"DOC" ~ "Docente",
"ALT" ~ "Altro"),
genere = replace_values(genere, "f" ~ "F"),
genere = factor(genere, levels = c("F", "M"),
labels = c("Femmina", "Maschio")),
eta = 2025 - anno_di_nascita
)
prestiti <- read_excel("dati/prestiti.xlsx", sheet = "Prestiti 2025", skip = 3) |>
clean_names()
catalogo <- read_tsv("dati/catalogo.txt") |>
clean_names() |>
rename(genere_letterario = genere)
prestiti_completo <- prestiti |>
inner_join(utenti, by = join_by(cod_utente == id_utente)) |>
left_join(catalogo, by = "inventario")adorn_totals(where = ...)aggiunge i totali di riga ("row", il valore di default), di colonna ("col") o entrambi (c("row", "col"))adorn_percentages(denominator = ...)trasforma le frequenze in proporzioni sul totale di riga ("row"), di colonna ("col") o generale ("all")adorn_pct_formatting(digits = ...)mostra le proporzioni come percentuali, con il numero di decimali indicatoadorn_ns()affianca alle percentuali le frequenze assoluteadorn_title()aggiunge alla tabella i nomi delle due variabili
Parte 1: Tabelle di frequenza
- Costruisci la distribuzione di frequenza degli utenti per categoria con la funzione
table, sia in frequenze assolute sia in frequenze relative. Costruisci poi la stessa distribuzione contabyl. Confronta la classe dei due risultati e le informazioni che contengono
La funzione prop.table, applicata al risultato di table, trasforma le frequenze assolute in frequenze relative.
Completa la distribuzione ottenuta con
tabylcon la riga dei totali e con le percentuali espresse con una cifra decimale. Qual è la categoria più numerosa, e quale percentuale degli iscritti rappresenta?Ordina la distribuzione del punto 2 dalla categoria più frequente alla meno frequente, mantenendo la riga dei totali in fondo alla tabella. In quale punto della sequenza di istruzioni va inserito l’ordinamento? Cosa accade se lo inserisci dopo
adorn_totals()?
Il risultato di tabyl() è anche un data frame: puoi quindi ordinarlo con arrange().
- Costruisci la distribuzione di frequenza dei prestiti per genere letterario, prima con
tabyle poi contable. Perché il risultato ditabylcontiene due colonne di percentuali,percentevalid_percent? A cosa corrisponde la rigaNA? Come trattatablei valori mancanti? Ripeti i due calcoli in modo da escludere (contabyl) e da includere (contable) i valori mancanti
Consulta la pagina di help di table per l’argomento useNA e quella di tabyl per l’argomento show_na.
- Costruisci con la funzione
tablela tabella doppia degli utenti per categoria (in riga) e genere (in colonna). Aggiungi i totali di riga e di colonna e calcola i profili riga
La funzione addmargins aggiunge a una tabella i totali di riga e di colonna. In prop.table l’argomento margin indica il totale per cui dividere: margin = 1 per le righe, margin = 2 per le colonne.
Costruisci la stessa tabella doppia del punto 5 con
tabyl, con i totali di riga e di colonna. Quante sono le donne pensionate? Quanti sono in tutto gli utenti di genere maschile?Costruisci la tabella doppia dei prestiti per categoria dell’utente (in riga) e genere letterario (in colonna), escludendo i prestiti con genere letterario mancante. Calcola i profili riga, espressi in percentuale con una cifra decimale. Qual è il genere letterario più prestato agli studenti, dopo la narrativa? Verifica, aggiungendo il totale di riga, che ogni profilo sommi a 100%
Calcola sulla stessa tabella i profili colonna. Considera la colonna dei libri per ragazzi e la riga degli studenti: confronta il valore ottenuto con quello del punto 7 per la stessa cella e spiega a quale domanda risponde ciascuna delle due percentuali
Calcola sulla stessa tabella le frequenze relative sul totale generale dei prestiti. Quale combinazione di categoria e genere letterario è la più frequente, e quale quota dei prestiti rappresenta?
Costruisci una tabella dei profili riga del punto 7 che contenga anche la riga dei totali, mostri accanto a ciascuna percentuale la frequenza assoluta tra parentesi e riporti in intestazione i nomi delle due variabili. Come si interpreta la riga dei totali?
Esegui la seguente istruzione e osserva la riga e la colonna dei totali:
prestiti_completo |>
tabyl(categoria, genere_letterario, show_na = FALSE) |>
adorn_percentages("row") |>
adorn_totals(where = c("row", "col")) |>
adorn_pct_formatting(digits = 1)Quali valori assumono i totali? Quale di essi ha senso e quale no? Spiega perché l’ordine delle funzioni adorn_*() è rilevante e indica l’ordine corretto
- Costruisci con
tabyl()la tabella dei prestiti per categoria dell’utente, proroga (SI/NO) e biblioteca in cui è avvenuto il prestito. Che tipo di oggetto restituisce la funzione, e quanti elementi contiene? Estrai la tabella relativa alla bibliotecaB04e commentala. Calcola infine, con un’unica sequenza di istruzioni, i profili riga in percentuale per tutte le biblioteche e stampa quelli della bibliotecaB01
Le funzioni adorn_*() possono essere applicate direttamente al risultato di una tabella tripla: vengono applicate a ciascuna delle tabelle che lo compongono.
Parte 2: Grafici con le funzioni di R base
- Disegna un diagramma a barre della distribuzione degli utenti per categoria, con le barre ordinate dalla categoria più frequente alla meno frequente, un titolo, un’etichetta per l’asse verticale e un colore a tua scelta
La funzione barplot richiede le frequenze, cioè il risultato di table, che puoi ordinare con sort(..., decreasing = TRUE). Gli argomenti main, xlab, ylab e col definiscono titolo, etichette degli assi e colore.
- Disegna l’istogramma dell’età degli utenti, prima con le impostazioni di default e poi con classi di ampiezza 5 anni, aggiungendo titolo ed etichette degli assi. Descrivi la forma della distribuzione: come la spieghi, conoscendo la composizione degli utenti per categoria? Quanti utenti non sono rappresentati, e perché?
L’argomento breaks di hist accetta anche il vettore degli estremi delle classi, ad esempio seq(10, 90, by = 5).
- Disegna i diagrammi a scatola (boxplot) dell’età per ciascuna categoria di utenti, affiancati nello stesso grafico. Quale categoria presenta la maggiore variabilità? Ci sono valori anomali?
Con la sintassi a formula, boxplot(y ~ gruppo, data = tabella) disegna un boxplot della variabile y per ciascuna modalità di gruppo.
- Rappresenta con un diagramma a barre impilate i profili riga della tabella doppia del punto 7, costruita con
tableeprop.table: una barra per ciascuna categoria di utente, suddivisa secondo i generi letterari, con una legenda. Perché è necessario trasporre la tabella con la funzionet()?
Quando riceve una matrice, barplot disegna una barra per ciascuna colonna, impilando i valori delle righe. L’argomento legend.text = TRUE aggiunge la legenda.
- Calcola il numero di prestiti per mese (su tutti i prestiti della tabella
prestiti) e rappresentalo con un grafico a linee con i punti evidenziati. Come si spiega il valore di agosto?
La funzione month del package lubridate estrae il mese da una data; count(tabella, mese = month(data_prestito)) conta i prestiti per mese. Nella funzione plot, l’argomento type = "b" disegna sia le linee sia i punti.
Parte 3: Grafici alternativi, gallerie e assistenti AI
I grafici tradizionali (diagrammi a barre, istogrammi, boxplot) non sono l’unica scelta possibile. Per individuare rappresentazioni alternative, e per scoprirne pregi e limiti, puoi consultare tre portali presentati in aula:
- The R Graph Gallery: centinaia di grafici organizzati per tipo, ciascuno con il codice R che lo produce
- From Data to Viz: un albero decisionale che, a partire dal tipo di dati (ad esempio “una variabile numerica” o “una variabile qualitativa e una numerica”), suggerisce i grafici adatti, con una sezione dedicata agli errori più comuni
- DataViz Project: un catalogo di tipi di grafico organizzati per funzione e forma, illustrati con immagini (senza codice)
Per i punti 18 e 19 servono i package vioplot e beeswarm, che si basano sulla grafica di R base. Installali una sola volta con install.packages(c("vioplot", "beeswarm")) (senza lasciare l’istruzione nello script, o lasciandola commentata) e caricali con library().
- Il boxplot riassume una distribuzione con pochi valori di sintesi: minimo, quartili, massimo ed eventuali valori anomali. Disegna, affiancati nella stessa finestra grafica, il boxplot dell’età di tutti gli utenti e il violin plot della stessa variabile, ottenuto con la funzione
vioplot. Quale caratteristica della distribuzione dell’età mostra il violin plot e il boxplot nasconde? Ripeti poi il confronto per categoria, disegnando i violin plot dell’età per ciascuna categoria e confrontandoli con i boxplot del punto 15. Commenta vantaggi e svantaggi dei due grafici
- L’istruzione
par(mfrow = c(1, 2))divide la finestra grafica in una riga e due colonne, in modo che i due grafici successivi vengano disegnati affiancati;par(mfrow = c(1, 1))ripristina la finestra singola. - Il violin plot affianca al boxplot una stima della densità della distribuzione, disegnata in modo simmetrico ai due lati. La funzione
vioplotaccetta sia un vettore sia la sintassi a formula, comeboxplot:vioplot(eta ~ categoria, data = utenti).
- Disegna i boxplot dell’età per categoria senza i valori anomali e sovrapponi a ciascun boxplot i singoli valori dell’età con un grafico beeswarm (“sciame d’api”), ottenuto con la funzione
beeswarm. Quale informazione aggiunge il beeswarm al boxplot? Per quali categorie il boxplot è calcolato su pochissime osservazioni, e perché questo è importante per la sua lettura? In quali situazioni un grafico beeswarm diventa poco leggibile?
In boxplot l’argomento outline = FALSE evita di disegnare i valori anomali, che altrimenti comparirebbero due volte. La funzione beeswarm accetta la sintassi a formula; con l’argomento add = TRUE disegna i punti sopra il grafico già presente invece di aprirne uno nuovo. Gli argomenti pch e col definiscono il simbolo e il colore dei punti.
- Scegli una delle rappresentazioni costruite nella Parte 2 (punti 13, 15, 16 o 17). Usando il portale From Data to Viz, individua la famiglia di grafici adatta al tipo di dati rappresentati e scegli, tra quelli proposti, un grafico alternativo che non abbiamo visto in aula. Cerca il grafico in The R Graph Gallery e adatta il codice proposto per rappresentare i dati delle biblioteche. Nei commenti dello script riporta:
- il nome del grafico e il link alle pagine dei portali che hai consultato
- perché il grafico è adatto ai dati, e gli eventuali avvertimenti riportati da From Data to Viz
- vantaggi e svantaggi rispetto al grafico tradizionale della Parte 2
Molti esempi della galleria usano package che non abbiamo ancora visto in aula (ad esempio ggplot2): puoi usarli comunque, installandoli se necessario. Per adattare il codice, individua prima la tabella e le colonne usate nell’esempio e sostituiscile con quelle dei dati delle biblioteche. Se preferisci restare nella grafica di base, R offre ad esempio le funzioni mosaicplot, spineplot, dotchart e stripchart.
Il diagramma a barre impilate del punto 16 ha alcuni difetti: ad esempio la legenda si sovrappone alle barre e i colori di default sono poco leggibili. Usa un assistente AI a tua scelta (ad esempio Claude, ChatGPT, Copilot, Gemini) per rifinire il grafico: fornisci il codice che hai scritto e descrivi i miglioramenti desiderati (posizione della legenda, colori, etichette, asse verticale in percentuale, …). Riporta nello script, come commento, il nome dell’assistente e i prompt utilizzati, e inserisci il codice finale. Commenta: quali modifiche ha proposto l’assistente? Il codice ha funzionato al primo tentativo? Ha usato funzioni o argomenti che non conoscevi, e cosa fanno?
★ (facoltativo) Scegli un grafico che ti sembra interessante nel catalogo del DataViz Project (che mostra solo immagini, senza codice) o in una delle altre gallerie. Fornisci l’immagine del grafico (o una sua descrizione accurata) a un assistente AI e chiedigli il codice R per riprodurlo su dati artificiali. Esegui il codice e verifica che il grafico ottenuto corrisponda a quello di partenza; adattalo poi per rappresentare una variabile (o una relazione tra variabili) dei dati delle biblioteche. Riporta nello script il link al grafico, i prompt, il codice sui dati artificiali e quello adattato, e commenta le difficoltà incontrate nel passaggio dai dati artificiali ai dati reali
Il codice generato da un assistente AI può contenere errori, anche quando produce un grafico: controlla sempre che il grafico rappresenti davvero i dati che vuoi rappresentare (ad esempio confrontando le altezze delle barre con le frequenze calcolate nella Parte 1). Il passaggio intermedio sui dati artificiali serve proprio a capire il codice prima di applicarlo ai dati reali.
Blocco B: modelli di probabilità
In R a ogni modello di probabilità corrispondono quattro funzioni, il cui nome è composto da un prefisso e dal nome abbreviato del modello (binom, pois, norm, exp):
| Prefisso | Calcola | Esempio |
|---|---|---|
d |
la funzione di massa di probabilità \(P(X = x)\) (variabili discrete) o la funzione di densità \(f(x)\) (variabili continue) | dbinom(3, size = 20, prob = 0.18) |
p |
la funzione di ripartizione \(F(x) = P(X \le x)\) | pnorm(60, mean = 90, sd = 25) |
q |
il quantile di ordine \(p\), cioè il valore \(x\) tale che \(P(X \le x) = p\) | qnorm(0.9, mean = 90, sd = 25) |
r |
numeri pseudo-casuali estratti dal modello | rpois(1000, lambda = 2.5) |
- Per una variabile continua la probabilità di un singolo valore è nulla, \(P(X = x) = 0\): la funzione
drestituisce il valore della densità, che non è una probabilità. Le probabilità si calcolano come aree, cioè con la funzione di ripartizione: \(P(a < X \le b) = F(b) - F(a)\). - Per una variabile discreta il segno delle disuguaglianze conta: ad esempio \(P(X \ge 5) = 1 - P(X \le 4)\), mentre \(P(X > 5) = 1 - P(X \le 5)\).
- Le probabilità di coda destra si possono calcolare come complemento a 1 oppure con l’argomento
lower.tail = FALSEdelle funzionip, che restituisce \(P(X > x)\).
Parte 4: Calcolo di probabilità
Il modello Binomiale
Una variabile casuale Binomiale \(X \sim Bin(n, \pi)\) conta il numero di successi in \(n\) prove indipendenti, in ciascuna delle quali il successo ha probabilità \(\pi\). La sua funzione di massa di probabilità è
\[P(X = x) = \binom{n}{x} \pi^x (1 - \pi)^{n - x}, \qquad x = 0, 1, \ldots, n\]
con valore atteso \(E(X) = n\pi\) e varianza \(Var(X) = n\pi(1 - \pi)\). In R: dbinom(x, size = n, prob = pi) e analoghe.
Un prestito viene prorogato con una probabilità che stimerai dai dati delle biblioteche. Considera i 20 prestiti effettuati in una giornata in una biblioteca, e assumi che ciascuno venga prorogato indipendentemente dagli altri. Indica con \(X\) il numero di prestiti prorogati.
Calcola, con
tabyl, la quota di prestiti prorogati nel 2025 (tabellaprestiti). Nei punti successivi assumi che la probabilità che un prestito venga prorogato sia \(\pi = 0.18\). Quale modello descrive la variabile \(X\), e con quali parametri?Qual è la probabilità che esattamente 3 dei 20 prestiti vengano prorogati?
Qual è la probabilità che vengano prorogati al più 2 prestiti? E che ne vengano prorogati almeno 5?
Calcola il valore atteso e la varianza di \(X\) con le formule del modello. Qual è il più piccolo numero \(k\) di proroghe tale che la probabilità di avere al più \(k\) proroghe sia almeno 0.9? Verifica il risultato calcolando \(P(X \le k - 1)\) e \(P(X \le k)\)
Rappresenta graficamente la funzione di massa di probabilità di \(X\) per \(x = 0, 1, \ldots, 20\). Verifica che le probabilità sommino a 1
Costruisci prima una tibble con i valori x = 0:20 e le corrispondenti probabilità. La funzione plot(x, y, type = "h") disegna delle barre verticali sottili, adatte a rappresentare una funzione di massa di probabilità.
Il modello di Poisson
Una variabile casuale di Poisson \(X \sim Pois(\lambda)\) descrive il numero di eventi che si verificano in un intervallo di tempo (o di spazio), quando gli eventi avvengono in modo indipendente con un’intensità media costante \(\lambda > 0\). La sua funzione di massa di probabilità è
\[P(X = x) = \frac{e^{-\lambda} \lambda^x}{x!}, \qquad x = 0, 1, 2, \ldots\]
con \(E(X) = Var(X) = \lambda\). In R: dpois(x, lambda = lambda) e analoghe.
In una biblioteca il numero di nuove iscrizioni in un giorno segue un modello di Poisson con una media di 2.5 iscrizioni al giorno.
Qual è la probabilità che in un giorno non ci sia nessuna nuova iscrizione? E che ce ne siano esattamente 2?
Qual è la probabilità che in un giorno ci siano più di 4 nuove iscrizioni? E che ce ne siano almeno 2 e al più 5? Calcola quest’ultima probabilità in due modi: con la funzione di ripartizione e sommando le probabilità dei singoli valori
La biblioteca vuole preparare ogni mattina un numero di tessere sufficiente, nel 95% dei giorni, per tutte le nuove iscrizioni della giornata. Quante tessere deve preparare? Spiega perché, per una variabile discreta, \(P(X \le k)\) non è in generale esattamente uguale a 0.95
Il modello di Poisson approssima bene il modello Binomiale quando il numero di prove \(n\) è grande e la probabilità di successo \(\pi\) è piccola, con \(\lambda = n\pi\). Costruisci una tibble che confronti, per \(x = 0, 1, \ldots, 8\), le probabilità di una Binomiale con \(n = 1000\) e \(\pi = 0.0025\) con quelle di una Poisson con \(\lambda = 2.5\), aggiungendo una colonna con la differenza. Commenta il risultato
Il modello Normale
Una variabile casuale Normale \(X \sim N(\mu, \sigma^2)\) ha funzione di densità
\[f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left\{-\frac{(x - \mu)^2}{2\sigma^2}\right\}, \qquad x \in \mathbb{R}\]
con \(E(X) = \mu\) e \(Var(X) = \sigma^2\). La densità è simmetrica rispetto alla media. In R: dnorm(x, mean = mu, sd = sigma) e analoghe. Attenzione: le funzioni di R usano lo scarto quadratico medio \(\sigma\) (argomento sd), non la varianza \(\sigma^2\).
La durata (in minuti) di una visita alla Biblioteca Centrale segue un modello Normale con media 90 minuti e scarto quadratico medio 25 minuti.
Qual è la probabilità che una visita duri meno di un’ora? E più di due ore? E tra una e due ore? Commenta il legame tra le prime due probabilità
Qual è la durata superata solo dal 10% delle visite?
Calcola la probabilità che la durata di una visita si discosti dalla media per meno di uno, due e tre scarti quadratici medi, cioè \(P(\mu - k\sigma < X < \mu + k\sigma)\) per \(k = 1, 2, 3\). Ripeti il calcolo per una Normale standard (\(\mu = 0\), \(\sigma = 1\)) e commenta il risultato
Rappresenta graficamente la funzione di densità della durata delle visite tra 0 e 180 minuti
In R base la funzione curve(espressione in x, from = ..., to = ...) disegna il grafico di una funzione, ad esempio curve(dnorm(x, mean = 90, sd = 25), from = 0, to = 180).
Il modello Esponenziale
Una variabile casuale Esponenziale \(X \sim Exp(\lambda)\) descrive spesso il tempo di attesa tra due eventi successivi. La sua funzione di densità e la sua funzione di ripartizione sono
\[f(x) = \lambda e^{-\lambda x}, \qquad F(x) = P(X \le x) = 1 - e^{-\lambda x}, \qquad x \ge 0\]
con \(E(X) = 1/\lambda\) e \(Var(X) = 1/\lambda^2\). In R: dexp(x, rate = lambda) e analoghe. Attenzione: l’argomento rate è il parametro \(\lambda\), non la media.
Il tempo (in minuti) che intercorre tra l’arrivo di due utenti successivi al banco prestiti segue un modello Esponenziale con una media di 4 minuti.
Qual è il valore del parametro \(\lambda\)? Qual è la probabilità che tra due arrivi successivi passino più di 10 minuti? E che ne passino al più 2?
Calcola la mediana del tempo tra due arrivi, sia con la funzione di R sia con la formula \(\ln 2 / \lambda\), e confrontala con la media. Cosa indica il confronto sulla forma della distribuzione?
Sono già passati 6 minuti dall’ultimo arrivo. Qual è la probabilità di dover attendere più di 10 minuti in tutto, cioè \(P(X > 10 \mid X > 6)\)? Confronta il risultato con \(P(X > 4)\) e commenta: questa proprietà del modello Esponenziale si chiama assenza di memoria
Ricorda la definizione di probabilità condizionata: \(P(A \mid B) = P(A \cap B) / P(B)\). Qui l’evento \(\{X > 10\}\) implica l’evento \(\{X > 6\}\).
Parte 5: Simulazione
Fissa il seme con
set.seed(2026)e genera 1000 valori dal modello di Poisson del punto 28, che rappresentano il numero di nuove iscrizioni in 1000 giorni. Calcola media e varianza dei valori generati e confrontale con i valori teoriciCostruisci con
tabylla distribuzione di frequenza dei valori generati al punto 39 e affianca, per ciascun valore, la probabilità teorica del modello. Confronta le frequenze relative osservate con le probabilità teoriche
tabyl applicato a un vettore restituisce un data frame con i valori distinti, le frequenze assolute (n) e relative (percent). Puoi poi aggiungere la probabilità teorica con mutate e dpois.
Esegui in sequenza
set.seed(2026),rpois(5, lambda = 2.5), di nuovoset.seed(2026)erpois(5, lambda = 2.5), e infine ancorarpois(5, lambda = 2.5)senza fissare il seme. Confronta i tre risultati e spiega a cosa serveset.seede perché è importante per la riproducibilità di un’analisiFissa il seme con
set.seed(2026)e genera 1000 valori dal modello Esponenziale del punto 36. Calcola la media dei valori generati e confrontala con la media teorica. Disegna poi l’istogramma dei valori generati, sulla scala della densità, e sovrapponi la funzione di densità teorica
Per confrontare un istogramma con una densità, l’area delle barre deve rappresentare la frequenza relativa e l’altezza la densità, non il conteggio: in hist si usa l’argomento freq = FALSE. La curva teorica si aggiunge sullo stesso grafico con curve(dexp(x, rate = ...), add = TRUE).
- ★ (facoltativo) Fissa il seme con
set.seed(2026)e simula la quota di prestiti prorogati su un numero crescente di prestiti, \(n = 10, 100, 1000, 10000, 100000\), usando il modello Binomiale con \(\pi = 0.18\). Come cambia la quota simulata al crescere di \(n\)?
rbinom(length(n), size = n, prob = 0.18) genera un valore per ciascun elemento del vettore n: dividendo per n si ottiene la quota di prestiti prorogati.
Consegna
Per inviare la tua soluzione:
- Carica il file
hw05_cognome_nome.Rsu Teams, in risposta al compito assegnato
Valutazione
Totale punti disponibili: 110 punti
| Component | Punti |
|---|---|
| Es 1 - 21 e 23 - 42 | 100 |
| Es 22 e 43 (facoltativi) | - |
| Workflow & formattazione | 101 |
Footnotes
La valutazione al “Workflow & formattazione” tiene conto del rispetto delle regole di stile e del principio di riproducibilità del codice: lo script caricato deve funzionare senza errori su qualunque PC, eseguendolo con Source in una sessione con workspace vuoto e con i file dei dati nella sottocartella
datidel progetto, dando gli stessi risultati↩︎