Aggregare i dati

Capita spesso di avere a che fare con dati classificati secondo diversi criteri di raggruppamento, caso che tipicamente si presenta quando si lavora con disegni fattoriali. Persone che possono essere suddivise incrociando la provincia di residenza con il titolo di studio, pazienti da classificare tenendo in considerazione sia il sesso che il tipo di trattamento, piante di specie diverse coltivate in un tipo di terreno piuttosto che un altro, e così via.

In questi casi, è molto diffusa la necessità di calcolare rapidamente delle statistiche descrittive incrociando tutti i livelli dei fattori dello studio, dove per fattore si intende ogni criterio di raggruppamento dei dati e per livello si intendono le modalità che i dati possono assumere sotto un certo criterio di classificazione (per esempio, il fattore sesso – criterio di classificazione – potrà assumere due livelli, ovvero due possibili modalità: femmina e maschio). Vediamo come realizzare questa operazione con R.

Prendiamo come esempio il dataset ChickWeight, già contenuto nella distribuzione base di R. La tabella contiene i risultati di un esperimento volto a studiare l’effetto di diversi regimi dietetici su cinquanta pulcini.

data(ChickWeight)

Il dataset contiene quattro colonne:

weight: peso di ogni pulcino.
Time: numero di giorni trascorsi tra la nascita dei pulcini e la misurazione del peso.
Chick: fattore che fornisce il codice identificativo di ogni pulcino.
Diet: fattore a quattro livelli che indica il tipo di dieta seguita da ogni pulcino.

Il problema è questo: vogliamo costruire un nuovo dataset, più piccolo di quello originario, che contenga il peso medio dei pulcini in ogni momento di rilevazione (Time), suddividendo gli animali a seconda del tipo di dieta seguita (Diet). Un comando molto utile per giungere rapidamente al risultato è aggregate.

Ci sono due modi di utilizzare il comando aggregate. Il primo consiste nello specificare: 1) il vettore “x” di dati da sintetizzare, 2) una lista, “by”, di altri vettori che indicano le modalità di raggruppamento dei dati, 3) la funzione “FUN” da applicare per aggregare i dati.

Nel caso dei pulcini, il nostro intento è quello di calcolare, per la variabile weight, i valori medi per ogni incrocio delle due variabili Time e Diet. Il comando da utilizzare sarà:

aggregate(x=ChickWeight$weight, by=list(ChickWeight$Time,ChickWeight$Diet), FUN=mean)

Nel dataset risultante, le prime due colonne rappresentano i due fattori di raggruppamento (rispettivamente Time e Diet), mentre la terza colonna rappresenta le medie calcolate sulla variabile weight.

In realtà, il metodo che io preferisco è il secondo. Possiamo infatti utilizzare direttamente una formula, che specifica qual è la variabile su cui applicare la funzione e quali sono le variabili di raggruppamento, separando le due componenti con il carattere tilde (‘~’). La struttura della formula è analoga a quella di altri comandi R.

aggregate(weight ~ Time * Diet, data=ChickWeight, FUN=mean)

La comodità di questo secondo metodo sta principalmente nella possibilità di specificare l’argomento “data”, che indica il nome del data frame da cui andare a estrarre le singole colonne. Ciò consente di non dover dichiarare ogni volta il nome del dataset, e rende l’operazione più rapida.

Print Friendly

Lascia un Commento