domenica 10 marzo 2024

Regressione con una funzione monotòna (isotòna)

In assenza di un razionale che consenta la scelta di una funzione specifica (una retta o quant'altro) per approssimare una serie di dati, una possibile alternativa è rappresentata da una funzione con una forma determinata da condizioni poco restrittive.

Se partiamo dall'assunto minimo che essendo x₁ < x₂ < ... < x all'aumentare di x la y corrispondente aumenti o al più resti uguale, siamo di fronte per definizione a una funzione monotòna (in quanto non presenta nè minimi né massimi) che è anche isotòna (in quanto sempre crescente o sempre non decrescente) ovvero:
sempre crescente quando y < y < ... < y 
sempre non decrescente quando y ≤ y ≤ ... ≤ y


Vediamo ora come approssimare i dati con una regressione isotòna [1] impiegando le funzioni del pacchetto isotone [2] e del pacchetto monreg che dovete scaricare dal vostro CRAN preferito e dei quali è utile scaricare anche i rispettivi Reference manual [3].

Dovete inoltre accertarvi di avere installato – o dovete scaricare anche – il pacchetto DAAG [4] che contiene il set di dati ais impiegati nell'esempio e il pacchetto car che viene utilizzato per l'analisi preliminare dei dati.

Copiate e incollate nella Console di R questo script.

# ANALISI PRELIMINARE DEI DATI 
#
library(DAAG) # carica il pacchetto incluso il set di dati ais
library(car) # carica il pacchetto per lo scatterplot
windows() # apre e inizializza una nuova finestra grafica
#
scatterplotMatrix(~rcc+wcc+hc+hg+ferr, col="black", pch=20, regLine=list(method=lm, lty=1, lwd=2, col="chartreuse3"), smooth=FALSE, diagonal=list(method="histogram", breaks="FD"), main="Distribuzione dei dati e rette di regressione", data=ais) # mostra il grafico
#

Dopo avere caricato il pacchetto (DAAG) che contiene i dati da analizzare e il pacchetto (car), con windows() viene aperta e inizializzata una nuova finestra nella quale comparirà il grafico predisposto con la funzione scatterplotMatrix() nella quarta e ultima riga di codice [5].  


L'analisi preliminare dei dati ci dice che se in alcuni casi la regressione lineare sembra appropriata, in altri lo è molto meno. Qui ci focalizziamo su emoglobina (hg) e ferritina (ferr) [6] che mostrano distribuzioni dei dati non gaussiane, quindi in linea di principio inadatte all'impiego della regressione lineare ordinaria [7]. 

Ora copiate e incollate nella Console di R questo script.

# REGRESSIONE MONOTÒNA (ISOTÒNA) con il pacchetto isotone 
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(isotone) # carica il pacchetto per la regressione 
windows() # apre e inizializza una nuova finestra grafica
#
iso <- gpava(ais$ferr, ais$hg, solver=weighted.mean, ties="secondary") # calcola la regressione isotòna
#
plot(iso, main="Regressione monotòna (isotòna)", xlab="Ferritina in µg/L", ylab="Emoglobina in g/dL", col="red") # riporta il grafico con la distribuzione dei dati e sovrappone la regressione
#

Impieghiamo quindi il pacchetto isotone per calcolare la regressione isotòna con la funzione gpava che prevede come argomenti:
→ il valore in ascisse, nel nostro caso ais$ferr;
→ il valore in ordinate, nel nostro caso ais$hg;
→ l'argomento solver che consente di approssimare i dati impiegando la media (weighted.mean), la mediana (weighted.median), i frattili (weighted.fractile) pesati (qui i singoli pesi non sono specificati quindi per default sono uguali a 1);
→ l'argomento ties che consente di gestire l'ordinamento dei dati nel caso di valori identici, con "primary" l'ordinamento viene effettuato tra i blocchi di dati identici, non all'interno di questi, con "secondary" l'ordinamento viene effettuato tra i blocchi di dati identici, ma viene richiesta l'uguaglianza dei valori all'interno di questi, con "tertiary" viene effettuato solamente l'ordinamento delle medie dei blocchi di dati identici.

Nell'oggetto iso generato dalla funzione gpava sono contenute tutte le informazioni necessarie per riportare in un grafico con la funzione plot() dati e regressione, quindi è sufficiente aggiungere semplicemente titolo, legende e colore ("red") della regressione.


Nel caso di una regressione una cosa che interessa è impiegare la funzione calcolata per interpolare nuovi valori, per farlo copiate e incollate nella Console di R questo breve addendum allo script.

# interpolazione lineare sulla regressione isotòna calcolata in precedenza
#
ris <- as.data.frame(cbind(z=iso$z, y=iso$x)) # riporta in una tabella i dati della regressione
risord <- ris[order(ris$z),] # ordina la tabella
#
reg <- approx(risord$z, risord$y, xout=c(15, 20, 40, 60, 80, 100, 110, 120, 150, 170, 190, 220), ties="ordered") # interpola i valori specificati
#
round(cbind(reg$x, reg$y), digits=1) # mostra i risultati dell'interpolazione
#

Dopo avere riportato i dati della regressione in una tabella e avere ordinato i valori in ascisse in ordine crescente (prerequisito indispensabile per effettuare una interpolazione), i valori di emoglobina corrispondenti a 15, 20, 40, 60, 80, 100, 110, 120, 150, 170, 190, 220 µg/L di ferritina sono calcolati mediante interpolazione lineare sui dati della regressione isotòna con la funzione approx() (terza riga di codice) e sono quindi mostrati (quarta riga) arrotondandoli a un decimale.

> round(cbind(reg$x, reg$y), digits=1) # mostra i risultati dell'interpolazione
      [,1] [,2]
 [1,]   15 13.5
 [2,]   20 13.5
 [3,]   40 14.4
 [4,]   60 14.4
 [5,]   80 14.7
 [6,]  100 14.9
 [7,]  110 14.9
 [8,]  120 14.9
 [9,]  150 15.3
[10,]  170 15.3
[11,]  190 15.9
[12,]  220 15.9

valori da interpolare riportati nell'argomento xout=c() vanno ovviamente adattati al bisogno. In ogni caso se volete verificare la correttezza del calcolo potete farlo riportando sul grafico i risultati dell'interpolazione con questa semplice riga di codice.

# riporta sul grafico i punti interpolati
#
points(reg$x, reg$y, pch=16, col="blue") 
#

Per meglio sviluppare il tema vediamo ora la regressione calcolata con un metodo diverso, previsto nel pacchetto monregcopiate e incollate nella Console di R questo script.

# REGRESSIONE MONOTÒNA (ISOTÒNA) con il pacchetto monreg 
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(monreg) # carica il pacchetto per la regressione 
windows() # apre e inizializza una nuova finestra grafica
#
mon <- monreg(ais$ferr, ais$hg, hd=.5, hr=.5, monotonie="isoton") # calcola la regressione isotòna
#
plot(ais$ferr, ais$hg, main="Regressione monotòna (isotòna)", xlab="Ferritina in µg/L", ylab="Emoglobina in g/dL") # riporta il grafico con la distribuzione dei dati
lines(mon$t, mon$estimation, col="red") # sovrappone la regressione 
#

In questo caso il passo più interessante si trova nella funzione monreg() ed è l'argomento monotonie che consente di selezionare le due soluzioni possibili per una regressione monotòna:
→ con "isoton" si calcola la regressione isotòna (crescente o sempre non decrescente) come facciamo in questo caso;
→ con "antiton" si calcola la regressione antitòna (decrescente o sempre non crescente), che è trattata a parte in un altro post [8].

Per gli altri argomenti della funzione rimando alla guida specifica richiamabile digitando help(monreg) nella Console di R.

Infine con plot() si riporta il grafico xy dei dati e con lines() si sovrappone la regressione le cui ascisse (mon$t) e ordinate (mon$estimation) sono state in precedenza salvate nell'oggetto mon generato con la funzione monreg(). Digitate str(mon) nella Console di R per visualizzare tutte le variabili salvate da monreg() nell'oggetto mon.


Ora copiate e incollate nella Console di R questo breve addendum allo script che riporta nuovamente – in quanto lievemente diverso e più semplice del precedente poiché la funzione monreg() restituisce i dati con la x già ordinata in ordine crescente – il codice necessario per effettuare l'interpolazione sulla regressione calcolata.

# interpolazione lineare sulla regressione isotòna calcolata in precedenza
#
reg <- approx(mon$t, mon$estimation, xout=c(15 , 20, 40, 60, 80, 100, 110, 120, 150, 170, 190, 220), ties="ordered") # interpola i valori specificati
#
round(cbind(reg$x, reg$y), digits=1) # mostra i risultati dell'interpolazione
#

Anche in questo caso i valori di emoglobina corrispondenti a 15, 20, 40, 60, 80, 100, 110, 120, 150, 170, 190, 220 µg/L di ferritina sono calcolati mediante interpolazione lineare sui dati della regressione isotòna con la funzione approx() (prima riga di codice), quindi sono mostrati (seconda riga).

> round(cbind(reg$x, reg$y), digits=1) # mostra i risultati dell'interpolazione
      [,1] [,2]
 [1,]   15 13.8
 [2,]   20 13.9 
 [3,]   40 14.2
 [4,]   60 14.4
 [5,]   80 14.6
 [6,]  100 14.8
 [7,]  110 14.9
 [8,]  120 15.0
 [9,]  150 15.2
[10,]  170 15.3
[11,]  190 15.5
[12,]  220 15.8

Infine se volete verificare la correttezza del calcolo potete riportare sul grafico i risultati dell'interpolazione, per farlo copiate e incollate nella Console di R questa riga di codice, identica a quella già vista a conclusione dello script precedente.

# riporta sul grafico i punti interpolati
#
points(reg$x, reg$y, pch=16, col="blue") 
#


----------

[1] Nella letteratura statistica anglosassone trovate "isotonic" che talora viene erroneamente considerato sinonimo di "monotonic". Qui "monotòna" viene riportato con il significato matematico originario di "funzione che non ha massimi e non ha minimi" mentre "isotòna" e "antitòna" sono gli attributi aggiuntivi di una funzione monotòna quando è rispettivamente una "funzione crescente o sempre non decrescente" e quando è una "funzione decrescente o sempre non crescente".

[2] de Leeuw, J., Hornik, K., & Mair, P. (2009). Isotone Optimization in R: Pool-Adjacent-Violators Algorithm (PAVA) and Active Set Methods. Journal of Statistical Software, 32(5), 1–24. https://doi.org/10.18637/jss.v032.i05

[3] Vedere Reference manual: isotone.pdf al link:
https://cran.r-project.org/web/packages/isotone/index.html
e Reference manual: monoreg.pdf al link:
https://cran.r-project.org/web/packages/monoreg/index.html

[4] Vedere il post Il set di dati ais nel quale trovate anche come caricare i dati della tabella senza impiegare il pacchetto DAAG

[5] Per i dettagli della funzione potete digitare help(scatterplotMatrix) nella Console di R ma trovate anche una breve spiegazione nel post Grafici di dispersione (grafici xy).

[6] L'emoglobina è la proteina che trasporta l'ossigeno contenuta nei globuli rossi del sangue, la sua concentrazione è espressa in grammi per decilitro di sangue (g/dL), la ferritina è la proteina collegata ai depositi di ferro presenti nell'organismo che contribuiscono a garantire una adeguata produzione di emoglobina, la sua concentrazione è espressa in microgrammi per litro di siero (µg/L).


[8] Vedere il post Regressione con una funzione monotòna (antitòna) * in preparazione *


domenica 21 gennaio 2024

Grafici 3D con i dati etichettati

Nello studio della relazione di funzione che lega tra loro tre variabili può essere utile la loro rappresentazione in un grafico tridimensionale (grafico 3D). Qui vediamo come sia possibile riportare i dati associando a ciascuno di essi una etichetta che ne consenta la immediata identificazione all'interno del grafico.

Come dati impieghiamo i valori di BMI (indice di massa corporea) rilevati a livello europeo alcuni anni fa e pubblicati dall'Istat [1].

Per proseguire è necessario:
→ effettuare il download del file di dati bmi.csv
→ salvare il file nella cartella C:\Rdati\

Per il file di dati trovate link e modalità di download alla pagina Dati, ma potete anche semplicemente copiare i dati riportati qui sotto aggiungendo un ↵ Invio al termine dell'ultima riga e salvarli in C:\Rdati\ in un file di testo denominato bmi.csv (assicuratevi che il file sia effettivamente salvato con l'estensione .csv).

Nazione;sottopeso;normale;sovrappeso;obeso
Austria;2.4;49.6;33.3;14.7
Belgio;2.7;48.0;35.3;14.0
Bulgaria;2.2;43.8;39.2;14.8
Cipro;3.9;47.8;33.8;14.5
Croazia;1.9;40.7;38.7;18.7
Danimarca;2.2;50.0;32.9;14.9
Estonia;2.2;43.9;33.5;20.4
Finlandia;1.2;44.1;36.4;18.3
Francia;3.2;49.6;31.9;15.3
Germania;1.8;46.1;35.2;16.9
Grecia;1.9;41.3;39.4;17.3
Irlanda;1.9;42.3;37.0;18.7
Lettonia;1.7;41.8;35.2;21.3
Lituania;1.9;42.5;38.3;17.3
Lussemburgo;2.8;49.3;32.4;15.6
Malta;2.0;37.0;35.0;26.0
Olanda;1.6;49.0;36.0;13.3
Polonia;2.4;42.9;37.5;17.2
Portogallo;1.8;44.6;36.9;16.6
Regno Unito;2.1;42.2;35.6;20.1
Repubblica Ceca;1.1;42.1;37.6;19.3
Romania;1.3;42.9;46.4;9.4
Slovacchia;2.1;43.6;38.0;16.3
Slovenia;1.6;41.8;37.4;19.2
Spagna;2.2;45.4;35.7;16.7
Svezia;1.8;48.3;35.9;14.0
Ungheria;2.9;41.9;34.0;21.2

Inoltre dovete scaricare dal CRAN il pacchetto aggiuntivo rgl [2].  Copiate e incollate nella Console di R questo script, se necessario iconizzate la Console di R per visualizzare il grafico:

# GRAFICO 3D INTERATTIVO CHE PUO' ESSERE RUOTATO CON IL MOUSE
# accanto a ciascun punto viene riportata l'etichetta che lo identifica 
#
library(rgl) # carica il pacchetto per la rappresentazione grafica 3D
data <- read.table("c:/Rdati/bmi.csv", header=TRUE, sep=";") # importa i dati
#
with(data, plot3d(normale, sovrappeso, obeso, type="p", col="red", size=6)) # genera il grafico 3d
with(data, text3d(normale, sovrappeso, obeso, Nazione, cex=0.8)) # identifica ciascun punto con una etichetta
#

Nelle due prime righe con library() viene caricato il pacchetto rgl e con read.table() i dati sono importati nell'oggetto data.

Quindi viene impiegata due volte la funzione with() che specifica i dati da impiegare (data) e la funzione da applicare. La prima volta con la funzione plot3d() viene realizzato il grafico 3D, la seconda volta con la funzione text3d() accanto a ciascun dato viene riportata la scritta/etichetta contenuta nella variabile Nazione.

Se avete dubbi sui valori che possono assumere gli argomenti type, col, size e cex potete come sempre trovare aiuto digitando help(nomedellafunzione) nella Console di R.

Il grafico 3D è interattivo. Infatti se “afferrate” il grafico risultante facendo click su di esso e tenendo premuto il tasto sinistro del mouse senza rilasciarlo, potete ruotare il grafico a vostro piacimento muovendo il mouse. In questo modo è stata realizzata – dopo avere ingrandito la finestra grafica a tutto schermo – l'immagine seguente che fornisce una delle tante possibili viste [della distribuzione] dei dati. 


Se infine volete una animazione che presenti il grafico sotto le varie possibili angolazioni copiate e incollate nella Console di R quest'altra riga di codice, se necessario iconizzate la Console di R per visualizzare il grafico:

#
with(data, play3d(spin3d(axis=c(0,0,1), rpm=3), duration=60)) # fa ruotare il grafico per 60 secondi
#

Si impiega di nuovo la funzione with() che specifica i dati da impiegare (data) e la funzione da applicare, che questa volta è la funzione play3d(), all'interno della quale:
→ la funzione spin3d() fa ruotare il grafico attorno all'asse specificato da axis=c() alla velocità di 3 giri al minuto (rpm=3);
→ il successivo argomento stabilisce per l'animazione una durata di 60 secondi (duration=60). 


----------

[1] Vedere il post Indice di massa corporea (BMI).

[2] Per la documentazione completa delle funzioni e dei rispettivi argomenti vedere il manuale di riferimento del pacchetto rgl sul repository della documentazione: Available CRAN Packages By Name. URL consultato il 10/11/2021: https://bit.ly/3zLwHWH


domenica 7 gennaio 2024

Scale nominali, scale ordinali e scale numeriche

Le relazioni che intercorrono tra il tipo di variabile, il processo mediante il quale viene ottenuto il dato, la modalità di espressione del dato e il tipo di scala nella quale il dato viene espresso forniscono la definizione operativa delle scale di misura.

Questa definizione deriva dalla loro definizione metrologica prevista nel Sistema internazionale di unità (SI), che l'Italia nel 1982 ha adottato per legge, aggiornandolo successivamente con le modifiche via via apportate [1].


Le generalità del SI sono riportate nella brochure pubblicata dal Bureau international des poids et mesures (BIPM) [2] mentre il glossario del processo di misura è riportato nel VIM, il Vocabolario Internazionale di Metrologia [3], nel quale le scale di misura sono così definite:
scala di riferimento convenzionale – scala di valori definita mediante un accordo ufficiale [VIM 1.29]
scala ordinale – scala di valori per una grandezza ordinale [VIM 1.28]
scala di valori o scala di misura – insieme ordinato dei valori di grandezze di una data natura, utilizzato per classificare le grandezze di quella natura in ordine crescente o decrescente in base alle loro espressioni quantitative [VIM 1.27]

Quindi la definizione operativa delle scale di misura, a parte semplificare il concetto di "scala di riferimento convenzionale" riportandola al caso della generica e ampiamente impiegata "scala nominale", riprende tal quale la scala ordinale e semplicemente suddivide le scale numeriche, lasciandone immodificata la definizione metrologica riportata dal VIM, in base al processo mediante il quale è ottenuto il dato: conteggio o misura [4].

Ma a questo punto la domanda è inevitabile: se esistono definizioni ufficiali, addirittura normate, dalle quali è stata tratta una definizione operativa piuttosto chiara che le collega ai processi di misura impiegati nella pratica, perchè si trova riportato quasi dappertutto che le scale di misura sono classificate in: scale nominali, scale ordinali, scale a intervalli, scale a rapporti ?

La risposta è: per qualche ragione imperscrutabile, probabilmente potenziata dalla disponibilità del copia-e-incolla, un meme è riuscito a moltiplicarsi in modo virale fino ad occupare quasi completamente l'infosfera concernente questo argomento. E senza ragione, senza un razionale.

La proposta di suddivisione in scale nominali, scale ordinali, scale a intervalli, scale a rapporti è riportata in un lavoro del 1946 di S. S. Stevens [5], che proprio all'inizio del lavoro scrive: "PER SETTE ANNI UN COMITATO dell'Associazione britannica per l'avanzamento della scienza ha dibattuto il problema della misurazione. Nominato nel 1932 a rappresentare la Sezione A (Matematica e scienze fisiche) e Sezione J (Psicologia), il comitato è stato incaricato di considerare e riferire sulla possibilità di "stime quantitative di eventi sensoriali", che significano semplicemente: è possibile misurare le sensazioni umane? La riflessione ha portato solo al disaccordo, soprattutto su cosa si intende con il termine misurazione" [6].

La domanda che Stevens si pone sarà pure lecita, ma non si possono avere dubbi "su cosa si intende con il termine misurazione". 

Una misurazione o procedimento di misura consiste nell'esprimere una grandezza in modo quantitativo, mediante un "valore numerico" che è un numero puro uguale al rapporto tra il "(valore della) grandezza (in esame)" e il valore di una grandezza di riferimento ad essa omogenea definita come "unità di misura", ed è quindi 

(valore della) grandezza (in esame) / unità di misura = valore numerico

Corollario: il risultato di una misura ovvero il "(valore della) grandezza (in esame)" è dato dal prodotto di un "valore numerico" per la "unità di misura"

(valore della) grandezza (in esame) = valore numerico · unità di misura

Per indicare il prodotto, rendendo "valore numerico" e "unità di misura" un tutt'uno inscindibile, il simbolo del prodotto [ · ] per convenzione viene sostituito con lo spazio unificatore [7], come avviene ad esempio in 2.5 m, 12 s, 75 kg (unica eccezione sono le unità angolari, per le quali lo spazio tra il valore numerico e il simbolo dell'unità non è previsto, pertanto un angolo verrà riportato, ad esempio, come 41°54'39).

Il lavoro di Stevens è viziato da un errore concettuale di fondo: per dare dignità di "misura" ai risultati dei metodi di ricerca in psicologia ha cercato di adattare alla psicologia "... il termine misurazione..." – che ha e deve avere una definizione univoca – pensando di risolvere il problema con nuove definizioni delle scale di misura, mentre avrebbe dovuto ricercare la "... possibilità di "stime quantitative di eventi sensoriali"..." in una qualche grandezza [VIM 1.1] e nella sua unità di misura [VIM 1.9], perché senza il fondamento di grandezze [misurabili] e delle loro unità di misura, le scale di misura [VIM 1.27] sono una espressione vuota.

Quindi mentre per misura [VIM 2.1] e per tutti gli altri termini che devono essere impiegati per esprimersi correttamente in campo scientifico (ma anche nella vita di tutti i giorni) rimando al SI e alle definizioni del VIM, qui mi limito a rilevare che la forzatura impiegata da Stevens per accreditare le misure in campo psicologico ha determinato solamente confusione terminologica, anticamera della confusione concettuale [8].

Se proprio si vuole ricollegare la definizione di Stevens delle scale di misura (inutile dirlo, sconsigliata: da notare che il VIM semplicemente la ignora) alla definizione operativa delle scale di misura in campo scientifico, e con questa alla loro definizione metrologica, basta notare che:
- se i dati sono espressi in una scala numerica discreta possiamo avere [a] quella che Stevens denomina scala a intervalli quando, come accade ad esempio per le date, non sono possibili rapporti (non posso dividere il 28 febbraio per il 2 febbraio) ma posso solamente calcolare l'intervallo che le separa (26 giorni) e [b] quella che Stevens denomina scala a rapporti quando, come accade ad esempio per il numero di auto ferme al semaforo, se prima ne ho contate 5 e dopo ne ho contate 4, oltre a calcolare la differenza posso calcolare anche il rapporto prima-dopo che è 1.25;
- se i dati sono espressi in una scala numerica continua possiamo avere [a] quella che Stevens denomina scala a intervalli quando, come accade ad esempio per la temperatura in gradi Celsius (°C), posso dire che tra la temperatura di +20 °C e la temperatura di -10 °C c'è un intervallo di 30 °C, ma non posso dividere la prima per la seconda e [b] quella che Stevens denomina scala a rapporti quando, come accade ad esempio per la concentrazione del colesterolo nel siero, posso calcolare non solo l'intervallo tra due valori (la mia concentrazione di colesterolo è 220 mg/dL, la tua 110 mg dL, la differenza è di 110 mg/dL) ma anche il rapporto (la mia concentrazione del colesterolo è 2.0 volte la tua).

Questo significa che (tolte le scale nominali e le scale ordinali sulle quali tutti concordano) quelle di Stevens non sono scale di misura ma, nella migliore delle ipotesi, possono essere considerate un attributo aggiuntivo delle scale numeriche. Accontentiamoci quindi della nostra definizione operativa delle scale di misura, che trova un fondamento nel SI e nel VIM.

Il tipo più semplice di scala è rappresentato dalla scala nominale. Corrisponde ai dati della natura più elementare, quella di dati qualitativi per i quali è disponibile solamente una descrizione verbale. Ne sono un esempio la classificazione maschio / femmina, la classificazione dei gruppi sanguigni ABO (O, A, B, AB), dei motori (endotermici, esotermici, elettrici, eccetera), delle specie animali (ad esempio: cane domestico, sciacallo, coyote, lupo, dingo) e così via. La misura più intuitiva e più utilizzata, nel caso della scala nominale, è costituita dalla percentuale (o dalla proporzione o frazione). In questo caso le rappresentazioni che si possono impiegare sono il grafico a torta (pie-chart) e, quando le grandezze da rappresentare sono indipendenti e non costituiscono la parte di un tutto, il grafico a barre (barplot) con le barre staccate e disposte orizzontalmente.

Nel caso di dati qualitativi per i quali è disponibile una descrizione sotto forma di attributo ordinabile si ha a che fare con una scala ordinale. Questo avviene per esempio per la classificazione in neonati, bambini e adulti, nella quale è appropriato applicare un ordinamento crescente per classi di età (neonato < bambino < adulto), per il livello di scolarità (scuola elementare < scuola media < diploma < laurea), eccetera. Un altro esempio è la classificazione per ranghi, nella quale il valore osservato viene trasformato nel corrispondente rango, cioè nel numero della posizione che il dato occupa nella lista ordinata dei dati. Così la classificazione inadeguato / parzialmente adeguato / adeguato / più che adeguato / eccellente può essere trasformata nella classificazione 1 / 2 / 3 / 4 / 5. Per le scale ordinali è possibile utilizzare un grafico a torta (pie-chart) oppure, per valorizzare la possibilità di ordinamento delle classi, un grafico a barre (barplot) con le barre staccate per indicare la discontinuità.

Una scala numerica discreta è tipicamente quella relativa a dati numerici ottenuti mediante operazioni di conteggio e riportati sotto forma di interi o numeri naturali (1, 2, 3, ….). Si prenda ad esempio il conteggio degli eritrociti (globuli rossi) nel sangue. La differenza minima tra due conteggi teoricamente misurabile è rappresentata da un globulo rosso: i dati sono numerici, ma tra l'uno l'altro non esistono valori intermedi. Altri esempi di scala numerica discreta sono il numero di controlli medici effettuati da una donna durante la gravidanza, il numero di insegnanti di ruolo nel liceo vicino a casa, il numero di auto ferme al semaforo e così via. Per le scale numeriche discrete si possono utilizzare un grafico a barre (barplot) con le barre staccate per indicare la discontinuità o, nel caso in cui si debbano rappresentare contemporaneamente due variabili, un grafico di dispersione (grafico xy o grafico cartesiano o scatterplot) precisando che i valori compresi tra due interi non hanno un corrispettivo reale.

La scala numerica continua è tipicamente quella impiegata per rappresentare dati numerici ottenuti mediante procedimenti di misura come quelli chimici e quelli fisici e i cui dati sono riportati sotto forma di numeri razionali (1.435, 123.9, 84.327, ...). Esempi ne sono la misura della concentrazione del colesterolo nel sangue, la misura della distanza tra due luoghi, la misura della velocità di un'auto, la misura del peso di una persona e quant'altro. L'intervallo tra due valori può essere suddiviso a piacere, anche se non oltre i limiti del potere di risoluzione degli strumenti di misura, che impongono nella pratica un numero molto limitato di cifre significative. Per le scale numeriche continue è possibile impiegare di volta in volta un istogramma, un grafico a linee spezzate come un poligono di frequenza, o ancora un grafico di dispersione (grafico xy o grafico cartesiano o scatterplot) nel caso in cui si debbano rappresentare contemporaneamente due variabili.

Dal punto di vista della statistica, ai dati espressi in forma di scale nominali sono applicabili i test basati sulla enumerazione dei casi (come test chi-quadrato, test di Fisher, test di McNemar), ai dati espressi in forma di scale ordinali sono applicabili in aggiunta i test basati sui ranghi, mentre ai dati espressi in forma di scale numeriche sono applicabili, con la necessaria appropriatezza e le dovute attenzioni, i test non parametrici, i test basati sulle ipotesi di continuità e gaussianità delle distribuzioni (test parametrici) e i test basati su modelli bayesiani.

La conclusione? Molto semplice. Siglata per la prima volta a Parigi il 20 maggio 1875 da 17 Stati [9] la Convenzione del metro, che originariamente prevedeva l'impiego del Sistema metrico decimale che si è poi evoluto nel Sistema internazionale di unità, secondo i dati ufficiali forniti dal BIPM all'inizio del 2024 contava 64 Stati Membri [10] e 36 Stati ed economie associati [11].


Considerato che tutte le nazioni più popolose, incluse Cina e India, vi aderiscono, il SI con le sue grandezze e unità di misura è diventato un comune denominatore e un riferimento per miliardi di persone, nella scienza ma anche nella vita quotidiana [12]. 

Tra i documenti che il SI mette a disposizione perché ci si possa avvicinare in modo adeguato al mondo delle misure, il Vocabolario Internazionale di Metrologia riveste un ruolo cruciale: e questo post vuole essere un invito a consultarlo per formare, per informare, per adeguare i nostri modi di riportare i dati ed esprimerci con la necessaria appropriatezza quando parliamo di misure.


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 nel testo dei post.


----------

[1] Il Sistema Internazionale di unità (SI) diviene legale in Italia nel 1982, le successive modifiche sono recepite nel 2001, nel 2009 e nel 2020, questa è la normativa aggiornata a inizio 2024, che include la correzione riportata a livello comunitario nel 1984:
- DECRETO DEL PRESIDENTE DELLA REPUBBLICA 12 agosto 1982, n. 802. Attuazione della direttiva (CEE) n. 80/181 relativa alle unita' di misura. GU Serie Generale n.302 del 03-11-1982 - Suppl. Ordinario.
https://www.gazzettaufficiale.it/eli/id/1982/11/03/082U0802/sg
- DIRETTIVA DEL CONSIGLIO del 18 dicembre 1984 che modifica la direttiva 80/181/CEE per il ravvicinamento delle legislazioni degli Stati membri relative alle unità di misura.
https://eur-lex.europa.eu/legal-content/IT/TXT/PDF/?uri=CELEX:31985L0001
- DECRETO 29 gennaio 2001. Attuazione della direttiva 1999/103/CE che modifica la direttiva 80/181/CEE sul riavvicinamento delle legislazioni degli Stati membri relative alle unita' di misura. GU Serie Generale n.27 del 02-02-2001 
https://www.gazzettaufficiale.it/eli/id/2001/02/02/001A1152/sg
- DECRETO 29 ottobre 2009. Attuazione della direttiva 2009/3/CE del Parlamento europeo e del Consiglio dell'11 marzo 2009 che modifica la direttiva 80/181/CEE del Consiglio sul riavvicinamento delle legislazioni degli Stati membri riguardo alle unita' di misura. (09A13580). GU Serie Generale n.273 del 23-11-2009 
https://www.gazzettaufficiale.it/eli/id/2009/11/23/09A13580/sg
- DECRETO 7 aprile 2020. Attuazione della direttiva (UE) 2019/1258 della Commissione del 23 luglio 2019 che modifica, ai fini dell'adattamento al progresso tecnico, l'allegato della direttiva 80/181/CEE del Consiglio per quanto riguarda le definizioni delle unita' SI di base.
https://www.gazzettaufficiale.it/eli/id/2020/05/09/20A02529/sg

[2] Tutti i documenti del SI sono in versione bilingue, in francese e in inglese.
Brochure sur le SI: Le Système international d'unités.
https://www.bipm.org/fr/publications/si-brochure
SI Brochure: The International System of Units (SI).
https://www.bipm.org/en/publications/si-brochure

[3] VIM: International Vocabulary of Metrology. Alla pagina: CGM Publications: Guides in Metrology.
https://www.bipm.org/en/committees/jc/jcgm/publications

[4] Nel caso delle scale numeriche la definizione metrologica parla solo di scala di misura e non distingue tra scala numerica continua e scala numerica discreta in quanto quest'ultima viene considerata come caso limite nel quale l'unità di misura è una "grandezza di dimensione uno" [VIM 1.8].

[5] S. S. Stevens. On the Theory of Scales of Measurement. Science, New Series, Vol. 103, No. 2684 (Jun. 7, 1946), pp. 677-680. American Association for the Advancement of Science. 
http://www.jstor.org/stable/1671815

[6] "FOR SEVEN YEARS A COMMITTEE of the British Association for the Advancement of Science debated the problem of measurement. Appointed in 1932 to represent Section A (Mathematical and Physical Sciences) and Section J (Psychology), the committee was instructed to consider and report upon the possibility of "quantitative estimates of sensory events"-meaning simply: Is it possible to measure human sensation? Deliberation led only to disagreement, mainly about what is meant by the term measurement".

[7] Lo spazio unificatore non cambia ampiezza e non consente di andare a capo, lasciando quindi l'espressione sempre correttamente impaginata. In ambiente Windows può essere inserito tenendo premuti contemporaneamente i tasti <ctrl> e <shift> e premendo la barra spaziatrice, oppure tenendo premuto il tasto <alt> e digitando 255 sul tastierino numerico, su Mac tenendo premuto il tasto <alt> e premendo la barra spaziatrice.

[8] Non è questa la sede per trattare un tema così complesso e delicato, ma un esempio di come la confusione terminologica possa sfociare in confusione concettuale lo si trova in: Paul C. Price, Rajiv S. Jhangiani, I-Chant A. Chiang, Dana C. Leighton, and Carrie Cuttler. Research Methods in Psychology3rd American Edition
https://opentext.wsu.edu/carriecuttler/
laddove gli autori si chiedono al punto 4.1 "Cosa è la misura?" rispondendo che in psicologia "La misura è l'assegnazioni di punteggi agli individui..." – secondo loro analogamente a come in fisica il risultato di una procedura per il calcolo dell'energia potenziale di un oggetto "... è un punteggio che rappresenta l'energia potenziale dell'oggetto...". Ma si tratta di una affermazione errata e oltretutto fuorviante in quanto ignora il fatto che per "rappresentare" l'energia potenziale è necessario che il "punteggio" (ma forse sarebbe meglio chiamarlo "valore numerico" [VIM 1.20]) sia associato indissolubilmente alle sue dimensioni fisiche [VIM 1.7] attraverso una grandezza [VIM 1.4 e 1.5] e le relative unità di misura [VIM 1.9]. Mentre quella che un loro punteggio (score) in psicologia "misura se sono loro stessi ad affermare che "... il punto importante qui è che la misurazione non richiede strumenti o procedure particolari. Non è necessario posizionare individui o oggetti sulla bilancia, porre davanti a loro dei regoli graduati o inserire termometri al loro interno. Ciò che richiede è una procedura sistematica per assegnare punteggi a individui o oggetti in modo che tali punteggi rappresentino la caratteristica di interesse può essere al più una quantità ordinale ovvero un "quantità definita mediante un procedimento di misurazione convenzionale, per la quale può essere stabilita una relazione di ordinamento totale, secondo la grandezza, con altre quantità dello stesso tipo, ma per la quale non esistono operazioni algebriche tra tali quantità" [VIM 1.26].

[9] Argentina, Austria-Ungheria, Belgio, Brasile, Danimarca, Francia, Germania, Italia, Perù, Portogallo, Russia, Spagna, Svezia e Norvegia, Svizzera, Turchia, Stati Uniti, Venezuela. 
https://www.bipm.org/en/metre-convention

[10] Arabia Saudita, Argentina, Australia, Austria, Belgio, Bielorussia, Brasile, Bulgaria, Canada, Cile, Cina, Colombia, Costa Rica, Corea (Repubblica), Croazia, Danimarca, Ecuador, Egitto, Emirati Arabi Uniti, Estonia, Finlandia, Francia, Germania, Giappone, Grecia, India, Indonesia, Iran (Repubblica Islamica), Iraq, Irlanda, Israele, Italia, Kazakistan, Kenya, Lituania, Malaysia, Marocco, Messico, Montenegro, Norvegia, Nuova Zelanda, Olanda, Pakistan, Polonia, Portogallo, Regno Unito, Repubblica Ceca, Romania, Russia (Federazione), Serbia, Singapore, Slovacchia, Slovenia, Sudafrica, Spagna, Stati Uniti, Svezia, Svizzera, Thailandia, Tunisia, Turchia, Ucraina, Ungheria, Uruguay.
https://www.bipm.org/en/member-states

[11] Albania, Azerbaijan, Bangladesh, Bolivia, Bosnia-Erzegovina, Botswana, Cambogia, CARICOM (la Comunità caraibica), Etiopia, Georgia, Ghana, Hong Kong (Cina), Giamaica, Kuwait, Latvia, Lussemburgo, Malta, Mauritius, Moldavia (Repubblica), Mongolia, Namibia, Macedonia del Nord, Oman, Panama, Paraguay, Perù, Filippine, Qatar, Siria, Sri Lanka, Taiwan, Tanzania, Uzbekistan, Vietnam, Zambia, Zimbabwe. 
https://www.bipm.org/en/associates

[12] Residui di storiche unità non-SI (miglia, acri, galloni, libbre, gradi Fahrenheitpermangono ancora nelle United States Customary Units e nel Sistema Imperiale Britannico, il cui uso è ammesso rispettivamente da USA e Regno Unito accanto al SI ufficialmente adottato.