8. ✏️ Esercizi#

source("../_common.R")
library("rio")
library("psych")

8.1. Introduzione allo Scaling di Thurstone#

Lo scaling di Thurstone, sviluppato da Louis Leon Thurstone nel 1931, è un approccio statistico che mira a modellare dati di ranking soggettivo. I dati di ranking soggettivo si producono quando le persone ordinano un insieme di elementi o stimoli secondo un criterio particolare. Questo tipo di dati è particolarmente utile quando è più semplice per i partecipanti esprimere una preferenza relativa piuttosto che stime quantitative precise.

8.1.1. Il Modello Thurstoniano#

Il modello Thurstoniano rappresenta un approccio statistico per analizzare e interpretare le preferenze o i ranking individuali rispetto a vari oggetti o stimoli. Questo modello si basa sull’idea che esista una scala latente, ovvero una dimensione non direttamente osservabile, attorno alla quale si distribuiscono i ranking individuali. In altre parole, ogni individuo assegna un punteggio ad ogni oggetto basandosi su criteri personali, ma queste valutazioni individuali sono influenzate da una percezione collettiva o aggregata che può essere descritta su una scala continua latente.

Il principale obiettivo del modello Thurstoniano è di trasformare queste medie di ranking latenti aggregati, che esistono su una scala continua, in un ranking discreto che possiamo interpretare più facilmente. Per farlo, il modello si avvale di alcune ipotesi chiave:

  1. Distribuzione Gaussiana: Si assume che il ranking latente per ciascun oggetto possa essere descritto da una distribuzione gaussiana.

  2. Media Differenziata, Varianza Costante: Il modello presuppone che le distribuzioni gaussiane dei ranking per ciascun oggetto differiscano tra loro solo per la media, mantenendo costante la varianza (scaling di Thurstone caso V). Questo implica che, sebbene gli oggetti possano avere livelli di preferenza medi diversi (alcuni potrebbero essere generalmente preferiti ad altri), la variabilità delle valutazioni (quanto le opinioni dei rispondenti differiscono tra loro) è la stessa per tutti gli oggetti.

Per posizionare gli oggetti sulla scala di Thurstone, si procede nel seguente modo:

  • Si calcola la proporzione di rispondenti che preferiscono un oggetto rispetto a ciascuno degli altri.

  • Si determinano i corrispondenti percentile (z-scores) della distribuzione cumulativa normale, che ci dicono quante deviazioni standard un valore è distante dalla media.

  • Si calcola la media di questi z-scores per ciascun oggetto.

Esempio Pratico:

Immaginiamo di avere tre oggetti: A, B e C. Dopo aver raccolto le preferenze, scopriamo che:

  • Il 70% dei rispondenti preferisce A rispetto a B e C.

  • Il 50% dei rispondenti preferisce B rispetto ad A, ma solo il 30% lo preferisce a C.

  • Il 80% dei rispondenti preferisce C rispetto a B, ma solo il 50% lo preferisce ad A.

Trasformando queste percentuali in z-scores, possiamo ottenere una misura della “distanza” di ciascun oggetto dalla media sulla scala latente. Mediando questi z-scores, possiamo creare un ranking discreto che riflette le preferenze medie aggregate, permettendoci di interpretare quali oggetti sono generalmente preferiti rispetto ad altri secondo il modello Thurstoniano.

8.2. Studio sulle preferenze riguardanti le caratteristiche dell’occupazione ideale#

I dati utilizzati in questo studio sono stati raccolti nell’ambito di una ricerca sulla motivazione lavorativa condotta da Ilke Inceoglu. Nel corso di questa indagine, 1079 partecipanti sono stati invitati a classificare nove aspetti lavorativi in base all’importanza che desideravano che fossero presenti nella loro occupazione ideale:

  1. Ambiente di Supporto (Supporto)

  2. Lavoro Stimolante (Sfida)

  3. Progressione di Carriera (Carriera)

  4. Lavoro Etico (Etica)

  5. Controllo sul Lavoro, Impatto Personale (Autonomia)

  6. Sviluppo (Sviluppo)

  7. Interazione Sociale (Interazione)

  8. Ambiente Competitivo (Competizione)

  9. Ambiente Piacevole e Sicuro (Sicurezza)

Un punteggio di 1 attribuito a qualsiasi aspetto lavorativo indica che tale aspetto era il più importante per quel partecipante, mentre un punteggio di 9 indica che era il meno importante.

JobFeatures <- rio::import("../data/JobFeatures.txt")
glimpse(JobFeatures)
Rows: 1,079
Columns: 9
$ Support     <int> 8, 7, 5, 7, 1, 6, 5, 1, 1, 7, 6, 8, 5, 9, 8, 1, 6, 7, 4, 2…
$ Challenge   <int> 3, 5, 8, 6, 4, 1, 4, 9, 3, 4, 2, 1, 4, 8, 6, 7, 4, 4, 1, 3…
$ Career      <int> 4, 1, 1, 8, 8, 3, 7, 2, 7, 6, 3, 4, 6, 1, 3, 5, 8, 3, 5, 4…
$ Ethics      <int> 5, 6, 9, 9, 3, 7, 2, 8, 4, 1, 9, 3, 7, 5, 9, 6, 7, 5, 9, 8…
$ Autonomy    <int> 2, 2, 6, 3, 9, 8, 3, 7, 9, 8, 4, 6, 3, 7, 5, 2, 3, 8, 2, 1…
$ Development <int> 6, 8, 2, 4, 2, 5, 6, 5, 2, 5, 1, 2, 2, 6, 1, 3, 1, 2, 6, 5…
$ Interaction <int> 1, 3, 3, 2, 6, 2, 1, 4, 6, 9, 5, 5, 1, 4, 2, 8, 2, 6, 3, 6…
$ Competition <int> 7, 9, 4, 5, 7, 4, 9, 6, 8, 3, 7, 7, 9, 2, 7, 9, 9, 1, 7, 9…
$ Safety      <int> 9, 4, 7, 1, 5, 9, 8, 3, 5, 2, 8, 9, 8, 3, 4, 4, 5, 9, 8, 7…

Consideriamo i dati del primo rispondente:

JobFeatures[1, ]
A data.frame: 1 × 9
SupportChallengeCareerEthicsAutonomyDevelopmentInteractionCompetitionSafety
<int><int><int><int><int><int><int><int><int>
1834526179

Questo rispondente ha risposto assegnando la caratteristica più importante dell’impego a “Interaction”, seguita da “Autonomy”. L’ultima preferenza è “Safety”.

Eseguiamo lo scaling di Thurstone usando la funzione thurstone del pacchetto psych:

scaling <- psych::thurstone(JobFeatures, ranks = TRUE)

Gli attributi dell’oggetto scaling prodotto da thurstone() possono essere elencati nel modo seguente.

attributes(scaling)
$names
  1. 'scale'
  2. 'GF'
  3. 'choice'
  4. 'residual'
  5. 'Call'
$class
  1. 'psych'
  2. 'thurstone'

I risultati dello scaling si ottengono nel modo seguente. Sono elencati nell’ordine fornito sopra, ovvero Support, Challenge, Career, Ethics, Autonomy, Development, Interaction, Competition e Safety.

Una media alta indica che i partecipanti attribuiscono un alto valore a questo aspetto lavorativo rispetto agli altri. Tuttavia, poiché le preferenze sono sempre relative, è impossibile identificare in maniera univoca tutte le medie. Pertanto, una delle medie deve essere fissata a un valore arbitrario. È consuetudine fissare la media dell’aspetto meno preferito a 0. Quindi, tutte le altre medie sono positive.

scaling$scale |> print()
[1] 0.97 0.93 0.91 0.92 0.60 1.04 0.63 0.00 0.23

La media più bassa (0.0) corrisponde all’8° aspetto, Competizione, mentre la media più alta (1.04) corrisponde al 6° aspetto, Sviluppo. Ciò significa che l’ambiente competitivo era il meno desiderato, mentre le opportunità di sviluppo personale erano le più desiderate dalle persone nel loro lavoro ideale. Gli altri aspetti sono stati valutati come aventi un’importanza relativa intermedia a queste due, con Sicurezza che ha una media bassa (0.23) - appena superiore a 0 per la Competizione, mentre Supporto, Sfida, Carriera ed Etica hanno medie simili (intorno a 0.9). Autonomia e Interazione hanno medie moderate simili intorno a 0.6.

L’istruzione seguente produce una matrice 9x9 contenente le proporzioni dei partecipanti nel campione che hanno preferito l’aspetto nella colonna rispetto all’aspetto nella riga. Nella matrice risultante, le righe e le colonne seguono l’ordine delle variabili nel file originale.

scaling$choice |> round(2)
A matrix: 9 × 9 of type dbl
0.500.470.470.470.360.510.360.200.23
0.530.500.470.490.380.530.360.170.28
0.530.530.500.500.380.520.390.190.26
0.530.510.500.500.360.520.380.190.26
0.640.620.620.640.500.670.510.290.34
0.490.470.480.480.330.500.290.150.20
0.640.640.610.620.490.710.500.220.30
0.800.830.810.810.710.850.780.500.61
0.770.720.740.740.660.800.700.390.50

Il valore maggiore è

max(scaling$choice)
0.852641334569045

Questo valore, 0.8526, rappresenta la proporzione di partecipanti che hanno preferito l’8° aspetto, Competizione, al 6° aspetto, Sviluppo, ed è il valore più grande nella matrice precedente: questa coppia di caratteristiche ha la preferenza più decisa per un aspetto rispetto all’altro.

La preferenza più decisa in termini di proporzioni di persone che scelgono un aspetto rispetto all’altro deve avere la maggiore distanza/differenza sulla scala delle preferenze soggettive (il 6° aspetto, Sviluppo, deve avere una preferenza percepita media molto più alta dell’8° aspetto, Competizione). Questo risultato è effettivamente in linea con i risultati per le medie di utilità, dove la media dello Sviluppo è la più alta con un valore di 1.04 e la Competizione è la più bassa con un valore di 0.

Consideriamo i residui del modello:

scaling$residual
A matrix: 9 × 9 of type dbl
0.000000000 0.0133479521 0.001732662 0.0077151838-0.005872352 0.020341170 0.008084655-0.036657121 0.007039854
-0.013347952 0.0000000000 0.022201895 0.0003878924-0.005625238 0.011115950 0.018649360 0.009672656-0.040301391
-0.001732662-0.0222018946 0.000000000 0.0073806440 0.004543318 0.028230409 0.001106985-0.004628757-0.008671076
-0.007715184-0.0003878924-0.007380644 0.0000000000 0.010887738 0.027845520 0.007400479-0.012284446-0.010646760
0.005872352 0.0056252384-0.004543318-0.0108877381 0.000000000-0.005140288 0.006785811-0.012984302 0.017008932
-0.020341170-0.0111159497-0.028230409-0.0278455199 0.005140288 0.000000000 0.049380030 0.002756144 0.015651117
-0.008084655-0.0186493603-0.001106985-0.0074004791-0.006785811-0.049380030 0.000000000 0.042051948 0.041174300
0.036657121-0.0096726558 0.004628757 0.0122844463 0.012984302-0.002756144-0.042051948 0.000000000-0.021145626
-0.007039854 0.0403013911 0.008671076 0.0106467596-0.017008932-0.015651117-0.041174300 0.021145626 0.000000000

L’istruzione precedente produce una matrice 9x9 contenente le differenze tra le proporzioni osservate (la matrice delle scelte) e le proporzioni attese (proporzioni che preferiscono l’aspetto nella riga rispetto all’aspetto nella colonna, che sarebbe atteso in base alle distribuzioni normali standard delle preferenze soggettive intorno alle medie scalate come sopra). Gli scarti tra i valori attesi e quelli osservati sono il modo più diretto di misurare se un modello (in questo caso, il modello proposto da Thurstone) “si adatta” ai dati osservati. Gli scarti piccoli (vicini allo zero) indicano che ci sono piccole discrepanze tra le scelte osservate e le scelte previste dal modello; il che significa che il modello che abbiamo adottato è piuttosto buono.

Infine, esaminiamo un indice di bontà di adattamento:

scaling$GF
0.998754828963899

Il valore GF (Goodness of Fit) viene calcolato come 1 meno la somma dei residui al quadrato divisi per i valori osservati al quadrato. Quando i residui sono quasi zero, i loro rapporti al quadrato rispetto alle proporzioni osservate dovrebbero anch’essi avvicinarsi a zero. Di conseguenza, l’indice di bontà di adattamento di un modello ben adattato dovrebbe essere vicino a 1.

Nella nostra analisi, tutti i residui sono notevolmente piccoli, indicando una stretta corrispondenza tra le scelte osservate (proporzioni di preferenze per una caratteristica rispetto a un’altra). Questo allineamento preciso si riflette nell’indice GF, che è quasi 1, suggerendo che il modello di Thurstone cattura adeguatamente le proprietà dei dati relativi alle caratteristiche dell’occupazione ideale.

8.3. Considerazioni conclusive#

Questa metodologia, introdotta da Louis Leon Thurstone negli anni ‘20, rappresenta una delle forme più semplici e intuitive di scaling, dove per “scaling” si intende il processo di costruzione di un ordinamento di valori lungo un continuum psicologico. Lo scaling thurstoniano si basa sulla premessa che sia possibile ordinare stimoli o concetti secondo il grado in cui incarnano una certa proprietà psicologica, creando così una scala di misura che riflette le percezioni, le attitudini o i giudizi degli individui.

Uno degli aspetti centrali dello scaling di Thurstone, in particolare il caso V della sua legge del giudizio comparativo, è l’assunzione che le distribuzioni di ranking degli stimoli abbiano varianze uguali. Questa ipotesi, pur facilitando la modellizzazione matematica e l’interpretazione dei dati, è stata oggetto di critiche poiché difficilmente riscontrabile nella pratica. Le varianze possono variare significativamente tra gli stimoli a seconda della coerenza dei giudizi degli individui e della natura degli stimoli stessi. Questa limitazione ha stimolato lo sviluppo e l’adozione di metodi alternativi più flessibili per affrontare la complessità dello scaling psicologico.

Nel panorama contemporaneo, l’approccio più diffuso e metodologicamente avanzato per lo scaling psicologico deriva dalla Teoria della Risposta all’Item (IRT). L’IRT supera alcune delle limitazioni intrinseche allo scaling thurstoniano offrendo un quadro teorico e metodologico che considera la probabilità di una certa risposta a un item in funzione delle caratteristiche dell’item stesso e del livello dell’attributo psicologico del rispondente. Questo approccio permette di gestire in modo più efficace la varianza tra gli stimoli e di fornire stime più accurate delle proprietà psicometriche degli items e delle caratteristiche degli individui.

In conclusione, mentre lo scaling thurstoniano ha rappresentato un passo fondamentale nello sviluppo degli strumenti di misurazione in psicologia, l’evoluzione metodologica e teorica ha portato a preferire approcci basati sull’IRT. Questo non diminuisce il valore storico e didattico dello scaling di Thurstone, che continua a essere un esempio introduttivo prezioso per comprendere i concetti fondamentali dello scaling psicologico. Tuttavia, è nell’ambito della IRT che attualmente si trovano le soluzioni più robuste e sofisticate per affrontare le sfide della misurazione psicologica, guidando la ricerca e l’applicazione pratica nel campo della psicometria contemporanea.

8.4. Sesssion Info#

sessionInfo()
R version 4.3.3 (2024-02-29)
Platform: x86_64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.3.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Europe/Rome
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] rio_1.0.1          ggokabeito_0.1.0   viridis_0.6.5      viridisLite_0.4.2 
 [5] ggpubr_0.6.0       ggExtra_0.10.1     bayesplot_1.11.1   gridExtra_2.3     
 [9] patchwork_1.2.0    semTools_0.5-6.920 semPlot_1.1.6      lavaan_0.6-17     
[13] psych_2.4.1        scales_1.3.0       markdown_1.12      knitr_1.45        
[17] lubridate_1.9.3    forcats_1.0.0      stringr_1.5.1      dplyr_1.1.4       
[21] purrr_1.0.2        readr_2.1.5        tidyr_1.3.1        tibble_3.2.1      
[25] ggplot2_3.5.0      tidyverse_2.0.0    here_1.0.1        

loaded via a namespace (and not attached):
  [1] rstudioapi_0.15.0  jsonlite_1.8.8     magrittr_2.0.3    
  [4] TH.data_1.1-2      estimability_1.5   nloptr_2.0.3      
  [7] rmarkdown_2.26     vctrs_0.6.5        minqa_1.2.6       
 [10] base64enc_0.1-3    rstatix_0.7.2      htmltools_0.5.7   
 [13] broom_1.0.5        Formula_1.2-5      htmlwidgets_1.6.4 
 [16] plyr_1.8.9         sandwich_3.1-0     emmeans_1.10.0    
 [19] zoo_1.8-12         uuid_1.2-0         igraph_2.0.2      
 [22] mime_0.12          lifecycle_1.0.4    pkgconfig_2.0.3   
 [25] Matrix_1.6-5       R6_2.5.1           fastmap_1.1.1     
 [28] shiny_1.8.0        digest_0.6.34      OpenMx_2.21.11    
 [31] fdrtool_1.2.17     colorspace_2.1-0   rprojroot_2.0.4   
 [34] Hmisc_5.1-1        fansi_1.0.6        timechange_0.3.0  
 [37] abind_1.4-5        compiler_4.3.3     withr_3.0.0       
 [40] glasso_1.11        htmlTable_2.4.2    backports_1.4.1   
 [43] carData_3.0-5      R.utils_2.12.3     ggsignif_0.6.4    
 [46] MASS_7.3-60.0.1    corpcor_1.6.10     gtools_3.9.5      
 [49] tools_4.3.3        pbivnorm_0.6.0     foreign_0.8-86    
 [52] zip_2.3.1          httpuv_1.6.14      nnet_7.3-19       
 [55] R.oo_1.26.0        glue_1.7.0         quadprog_1.5-8    
 [58] nlme_3.1-164       promises_1.2.1     lisrelToR_0.3     
 [61] grid_4.3.3         pbdZMQ_0.3-11      checkmate_2.3.1   
 [64] cluster_2.1.6      reshape2_1.4.4     generics_0.1.3    
 [67] gtable_0.3.4       tzdb_0.4.0         R.methodsS3_1.8.2 
 [70] data.table_1.15.2  hms_1.1.3          car_3.1-2         
 [73] utf8_1.2.4         sem_3.1-15         pillar_1.9.0      
 [76] IRdisplay_1.1      rockchalk_1.8.157  later_1.3.2       
 [79] splines_4.3.3      lattice_0.22-5     survival_3.5-8    
 [82] kutils_1.73        tidyselect_1.2.0   miniUI_0.1.1.1    
 [85] pbapply_1.7-2      stats4_4.3.3       xfun_0.42         
 [88] qgraph_1.9.8       arm_1.13-1         stringi_1.8.3     
 [91] boot_1.3-29        evaluate_0.23      codetools_0.2-19  
 [94] mi_1.1             cli_3.6.2          RcppParallel_5.1.7
 [97] IRkernel_1.3.2     rpart_4.1.23       xtable_1.8-4      
[100] repr_1.1.6         munsell_0.5.0      Rcpp_1.0.12       
[103] coda_0.19-4.1      png_0.1-8          XML_3.99-0.16.1   
[106] parallel_4.3.3     ellipsis_0.3.2     jpeg_0.1-10       
[109] lme4_1.1-35.1      mvtnorm_1.2-4      openxlsx_4.2.5.2  
[112] crayon_1.5.2       rlang_1.1.3        multcomp_1.4-25   
[115] mnormt_2.1.1