sabato 25 novembre 2023

Come arrotondare i numeri

L'operazione di arrotondamento – che si rende necessaria a causa del fatto che i risultati di una elaborazione statistica sono generalmente ottenuti con un numero di cifre in eccesso rispetto a quelle significative – prevede quanto segue:
→ se il numero termina per 1, 2, 3 o 4 si arrotonda per difetto, così ad esempio 143.274 arrotondato a due decimali diventa 143.27 [1];
→ se il numero termina per 6, 7, 8 o 9 si arrotonda per eccesso, così ad esempio 87.136 arrotondato a due decimali diventa 87.14;
→ se il numero termina per 5 si arrotonda in modo che l'ultima cifra del numero dopo l'arrotondamento risulti pari, così ad esempio 8.25 arrotondato a un decimale diventa 8.2 e 12.75 diventa 12.8 (notare come in questo modo la media dei due numeri risulti immodificata e uguale a 10.5 sia prima sia dopo l'arrotondamento). La regola è riportata nella norma ISO/IEC 60559 (IEEE Std 754) come si trova documentato anche in R digitando help(round) che tra le altre informazioni sulla funzione restituisce:
"...  Si noti che per arrotondare un 5, dovrebbe essere utilizzato lo standard IEC 60559 (vedi anche "IEEE 754"), "vai alla cifra pari". Pertanto round(0.5) è 0 e round(-1.5) è -2. Tuttavia, ciò dipende dai servizi del sistema operativo e dall'errore di rappresentazione (poiché ad esempio 0.15 non è rappresentato esattamente, la regola di arrotondamento si applica al numero rappresentato e non al numero stampato, quindi round(0.15, 1) potrebbe essere 0.1 oppure 0.2)" [2].

Copiate lo script quindi incollatelo nella Console di R e premete ↵ Invio:

# ARROTONDAMENTO a un dato numero di cifre decimali
#
mydata <- cbind(c(1.8246e-02, 6.91635e-01, 3.2385e-02), c(8.37544e-01, 5.2175e-02, 2.4565e-02)) # tabella con i dati di esempio
#
myroun <- round(mydata, digits=5) # arrotonda i dati a 5 cifre decimali
#
mydata # mostra i dati originali
myroun # mostra i dati arrotondati a 5 cifre decimali
#

> mydata # mostra i dati originali
         [,1]     [,2]
[1,] 0.018246 0.837544
[2,] 0.691635 0.052175
[3,] 0.032385 0.024565
> myroun # mostra i dati arrotondati a 5 cifre decimali
        [,1]    [,2]
[1,] 0.01825 0.83754
[2,] 0.69164 0.05218
[3,] 0.03238 0.02456

Come si vede è possibile arrotondare a un dato numero di cifre decimali impiegando la funzione round() con l'argomento digits=n ove n specifica il numero di cifre decimali. Da notare che qui sopra nei numeri che terminano con 5 dopo l'arrotondamento l'ultima cifra è sempre pari.

Se volete invece arrotondare a un dato numero di cifre significative dovete impiegare la funzione signif() con l'argomento digits=n ove n specifica il numero di cifre significative.

Copiate questo script quindi incollatelo nella Console di R e premete ↵ Invio:

# ARROTONDAMENTO a un dato numero di cifre significative
#
mydata <- cbind(c(1.8246e-02, 6.91635e-01, 3.2385e-02), c(8.37544e-01, 5.2175e-02, 2.4565e-02)) # tabella con i dati di esempio
#
mysign <- signif(mydata, digits=3) # arrotonda i dati a 3 cifre significative
#
mydata # mostra i dati originali
mysign # mostra i dati arrotondati a 3 cifre significative
#

> mydata # mostra i dati originali
         [,1]     [,2]
[1,] 0.018246 0.837544
[2,] 0.691635 0.052175
[3,] 0.032385 0.024565
> mysign # mostra i dati arrotondati a 3 cifre significative
       [,1]   [,2]
[1,] 0.0182 0.8380
[2,] 0.6920 0.0522
[3,] 0.0324 0.0246

Il razionale per decidere quale deve essere il numero di cifre significative da impiegare nella rappresentazione di un numero è riportato nel post Come stabilire il giusto numero di cifre significative.

Infine, se i numeri sono espressi in formato esponenziale, potete anche aggiungere all'arrotondamento dei numeri la loro espressione in formato fisso impiegando la funzione options() con l'argomento scipen, seguendo le indicazioni del post Come riportare i numeri in formato fisso.


----------

[1] Nota bene: in R il separatore delle cifre decimali è il punto (.) e come già riportato altrove questa convenzione per ragioni di omogeneità viene adottata negli script, nei file di dati e in tutto il testo di questo sito.

[2] Round {base} R Documentation. Rounding of Numbers. "Note that for rounding off a 5, the IEC 60559 standard (see also ‘IEEE 754’) is expected to be used, ‘go to the even digit’. Therefore round(0.5) is 0 and round(-1.5) is -2. However, this is dependent on OS services and on representation error (since e.g. 0.15 is not represented exactly, the rounding rule applies to the represented number and not to the printed number, and so round(0.15, 1) could be either 0.1 or 0.2)".

Nessun commento:

Posta un commento