Calcolare e tracciare una media stagionale
Nell’esercizio precedente hai usato endpoints() e period.apply() per calcolare rapidamente la media vittorie/sconfitte dei Boston Red Sox alla fine di ogni stagione. Ma cosa fare se ti serve conoscere la media cumulativa per tutta la durata di ciascuna stagione? Sia gli statistici sia gli appassionati di sport si affidano spesso a questa media per confrontare una squadra con le sue rivali.
Per calcolare una media cumulativa in ogni stagione, dovrai tornare alla formula split-lapply-rbind vista nel Capitolo Tre. Per prima cosa, suddividerai i dati per stagione, poi applicherai una funzione di media cumulativa alla colonna win_loss in ciascuna stagione e infine unirai di nuovo i valori in un oggetto xts.
Per te è stata preparata una funzione personalizzata cummean(), che genera una somma cumulativa e la divide per il numero di valori inclusi nella somma. I dati redsox_xts, inclusa la colonna win_loss, sono disponibili nel tuo workspace.
Questo esercizio fa parte del corso
Caso di studio: analisi di serie temporali cittadine in R
Istruzioni dell'esercizio
- Usa
split()per suddividere i datiredsox_xtsin stagioni (in questo caso,years). Assegna il risultato aredsox_seasons. - Usa
lapply()per calcolare la media cumulativa per ogni stagione. Per questo esercizio è stata predisposta una funzionecummean()che calcola la somma (concumsum()) e la divide per il numero di elementi nella somma (conseq_along()). Salva questi dati inredsox_ytd. - Usa
do.call()conrbindper convertire l’output della lista in un singolo oggetto xts (redsox_winloss) che contenga la media vittorie/sconfitte lungo ciascuna stagione. - Usa
plot.xts()per visualizzare la media cumulativa vittorie/sconfitte durante la stagione2013. Lascia l’argomentoylimcosì com’è nel codice precompilato.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Split redsox_xts win_loss data into years
redsox_seasons <- split(___$___, f = "___")
# Use lapply to calculate the cumulative mean for each season
redsox_ytd <- lapply(___, cummean)
# Use do.call to rbind the results
redsox_winloss <- do.call(___, ___)
# Plot the win_loss average for the 2013 season
plot.xts(___["___"], ylim = c(0, 1))