Introduzione

L’obiettivo del lavoro è capire se un interveno è stato efficacie. In particolare ci interessa una cosa specifica: la chiarezza del concetto di sé, cioè quanto una persona ha le idee chiare su chi è, cosa le piace, cosa pensa di sé. È un costrutto psicologico noto, e nella letteratura si misura con un questionario che si chiama Self-Concept Clarity Scale (lo chiameremo “SCC” per non riscriverlo ogni volta).

Per vedere se l’intervento ha funzionato, abbiamo somministrato il questionario prima dell’intervento (PRE) e dopo (POST). In più, solo al PRE, abbiamo somministrato anche un breve questionario sui tratti di personalità (i Big Five), per due motivi: (1) avere una “fotografia” delle persone che hanno partecipato e (2) vedere se chi ha certe caratteristiche di personalità cambia di più o di meno con l’intervento.

Tutto il codice qui sotto fa essenzialmente quattro cose: 1. Pulisce i dati (toglie righe vuote, accoppia ogni PRE col suo POST) 2. Calcola i punteggi delle scale facendo la media degli item 3. Verifica che le scale “tengano” (affidabilità) 4. Risponde alla domanda: la SCC è cambiata dopo l’intervento? E i tratti di personalità c’entrano qualcosa?

Set up

Carichiamo le librerie con i comandi aggiuntivi che ci servono. dplyr serve per maneggiare i dati in modo comodo, psych ha tutte le funzioni psicometriche (alfa, descrittive, correlazioni, ecc.), mice lo usiamo solo per dare un’occhiata al pattern di dati mancanti, ggplot2 e tidyr per fare il grafico finale.

library(dplyr)
library(psych)
library(mice)
library(ggplot2)
library(tidyr)

Settiamo la cartella in cui lavoriamo dicendo che è la stessa in cui è salvato il codice (funziona solo se siamo dentro RStudio).

try(setwd(dirname(rstudioapi::getActiveDocumentContext()$path)), silent = TRUE)

Salviamo i dati raw nella variabile che chiamiamo raw. Due note importanti sul file nuovo: - è salvato in UTF-16 LE (un encoding un po’ particolare di Windows), quindi va detto a R esplicitamente con fileEncoding - i valori mancanti sono codificati come -9 (non come celle vuote), quindi diciamo a R di trattarli come NA

raw <- read.csv("Orientamento ravarino DATA finale.csv",
                fileEncoding = "UTF-16LE",
                na.strings   = c("", "-9"))

Pulizia iniziale dei dati

Diamo un’occhiata alle prime righe per vedere com’è fatto il dataset.

raw %>% head
##   CASE SERIAL REF QUESTNNR      MODE             STARTED BF01_12 BF01_13
## 1    2     NA  NA      PRE interview 2025-11-07 12:13:24      NA      NA
## 2    3     NA  NA      PRE interview 2025-11-07 12:18:51      NA      NA
## 3    6     NA  NA      PRE interview 2025-11-24 11:11:22      NA      NA
## 4    7     NA  NA      PRE interview 2025-11-24 11:17:09       3       2
## 5    8     NA  NA      PRE interview 2025-11-24 11:18:33      NA      NA
## 6    9     NA  NA      PRE interview 2025-11-24 11:56:22      NA      NA
##   BF01_05 BF01_15 BF01_01 BF01_09 BF01_04 BF01_02 BF01_14 BF01_07 BF01_11
## 1      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 2      NA      NA      NA       7       6      NA      NA      NA      NA
## 3      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 4       5       2       4       4       3       5       4       4       5
## 5      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 6      NA      NA      NA      NA      NA      NA      NA      NA      NA
##   BF01_08 BF01_06 BF01_10 BF01_03 ID01_02             ID01_01 ID01_03 ID01_04
## 1      NA      NA      NA      NA    <NA>       aaaaaaaaaaaaa    <NA>    <NA>
## 2      NA      NA       6      NA    <NA> AAAAAAAAAAAAAAAAAAA    <NA>    <NA>
## 3      NA      NA      NA      NA    <NA>                 GHH    <NA>    <NA>
## 4       4       5       6       3    <NA>                 GGH    <NA>    <NA>
## 5      NA      NA      NA      NA    <NA>                 ibi    <NA>    <NA>
## 6      NA      NA      NA      NA    <NA>              ygcygv    <NA>    <NA>
##   PR01 PR01_01 SC01_01 SC01_02 SC01_03 SC01_04 SC01_05 SC01_06 SC01_07 SC01_08
## 1    1       2      NA      NA      NA      NA      NA      NA      NA      NA
## 2    1       2      NA      NA      NA      NA      NA      NA      NA      NA
## 3    1       2      NA      NA      NA      NA      NA      NA      NA      NA
## 4    1       2       3       1       5       5       5       3       7       2
## 5    1       2      NA      NA      NA      NA      NA      NA      NA      NA
## 6    1       2      NA      NA      NA      NA      NA      NA      NA      NA
##   SC01_09 SC01_10 SC01_11 SC01_12 TIME001 TIME002 TIME003 TIME004 TIME005
## 1      NA      NA      NA      NA       3       3       6      NA      NA
## 2      NA      NA      NA      NA       2       3       8      10      69
## 3      NA      NA      NA      NA       3      48      10     206      31
## 4       5       3       3       2       4       3       3      13      19
## 5      NA      NA      NA      NA       2       2       5      NA      NA
## 6      NA      NA      NA      NA       2       6       5    1337      NA
##   TIME_SUM MAILSENT            LASTDATA   STATUS FINISHED Q_VIEWER LASTPAGE
## 1       12       NA 2025-11-07 12:13:36     <NA>        0        0        3
## 2       92       NA 2025-11-07 12:20:23     <NA>        1        0        5
## 3       76       NA 2025-11-24 11:16:20     <NA>        1        0        5
## 4       42       NA 2025-11-24 11:17:51 complete        1        0        5
## 5        9       NA 2025-11-24 11:18:42     <NA>        0        0        3
## 6       43       NA 2025-11-24 12:18:52     <NA>        0        0        4
##   MAXPAGE MISSING MISSREL TIME_RSI
## 1       3       0       0     1.47
## 2       5      83      82     1.62
## 3       5      93      93     0.81
## 4       5       0       0     1.74
## 5       3       0       0     2.00
## 6       4      86      85     1.34

Teniamo solo i casi che hanno completato il questionario. Quelli che hanno aperto il link e poi sono scappati via dopo due secondi non ci servono.

raw_complete <- raw %>% filter(FINISHED == 1)

Teniamo solo le colonne che ci servono e salviamo in una nuova variabile. Nota importante rispetto alla versione vecchia del codice: nel nuovo file le colonne BF01_* sono in ordine diverso, quindi non possiamo più selezionarle col range “BF01_02:BF01_12” come prima (peschiamo colonne sbagliate!). Le elenchiamo per nome esplicito, una a una.

raw_complete_selected <- raw_complete %>% select(
  QUESTNNR,
  BF01_01, BF01_02, BF01_03, BF01_04, BF01_05,
  BF01_06, BF01_07, BF01_08, BF01_09, BF01_10,
  BF01_11, BF01_12, BF01_13, BF01_14, BF01_15,
  ID01_01, ID01_02, ID01_03, ID01_04,
  SC01_01:SC01_12,
  FINISHED
)

Creiamo una colonna in cui incolliamo le 4 domande che compongono il codice personale. Serviva per identificare in modo anonimo le persone e poter abbinare il PRE col POST della stessa persona. Non so cosa sia successo con i codici ahahahahah, ma in generale tengono.

raw_complete_selected$personal_code <- paste0(
  raw_complete_selected$ID01_01,
  raw_complete_selected$ID01_02,
  raw_complete_selected$ID01_03,
  raw_complete_selected$ID01_04
)

Eliminiamo le colonne ID separate, ormai abbiamo il codice unico.

raw_complete_selected <- raw_complete_selected %>% select(-(ID01_01:ID01_04))

Dividiamo in dataset PRE e dataset POST: due metà, una per ogni momento di rilevazione.

PRE  <- raw_complete_selected[raw_complete_selected$QUESTNNR == "PRE", ]
POST <- raw_complete_selected[raw_complete_selected$QUESTNNR == "POST", ]

Se i codici si ripetono (qualcuno ha compilato due volte) a questo punto teniamo l’ultima compilazione, che dovrebbe essere la più “pensata”.

PRE_unique  <- PRE [!duplicated(PRE$personal_code,  fromLast = TRUE), ]
POST_unique <- POST[!duplicated(POST$personal_code, fromLast = TRUE), ]

Creiamo una matrice che ci dica quali sono gli indici delle coppie. La funzione adist calcola quanto sono “diversi” due codici (quanti caratteri bisognerebbe cambiare per trasformare uno nell’altro). Concediamo fino a due caratteri sbagliati: così se qualcuno al post ha scritto “Catymiao1302” invece di “catymiao1302” lo riconosciamo lo stesso.

coppie <- adist(PRE_unique$personal_code, POST_unique$personal_code) %>%
  {which(. <= 2, arr.ind = TRUE)}

Diamo un’occhiata alle coppie che ha trovato. A occhio sembrano ok: chi ha compilato il PRE è in effetti la stessa persona che ha compilato il POST, anche se ha scritto il codice in modo leggermente diverso.

cbind(PRE  = PRE_unique$personal_code [coppie[, 1]],
      POST = POST_unique$personal_code[coppie[, 2]])
##       PRE                    POST                   
##  [1,] "Catymiao1302NANANA"   "Catymiao1302NANANA"   
##  [2,] "Rumi NANANA"          "RumiNANANA"           
##  [3,] "'03'03'03'03"         "'03'03'03'03"         
##  [4,] "cetriologodNANANA"    "cetriologodNANANA"    
##  [5,] "sokaealiNANANA"       "sokaealiNANANA"       
##  [6,] "Fragolina00670NANANA" "Fragolina 00670NANANA"
##  [7,] "'01'01'01'01"         "'01'01'01'01"         
##  [8,] "'07'07'07'07"         "'07'07'07'07"         
##  [9,] "'000sina'04"          "'000cina'05"          
## [10,] "'000sina'04"          "'000mina'04"          
## [11,] "101iona'05"           "101iona'05"           
## [12,] "202rina'05"           "202rina'05"           
## [13,] "303lina19"            "303lina19"            
## [14,] "404kuna25"            "404kuna25"            
## [15,] "505ahna14"            "505ahna19"            
## [16,] "606peno12"            "606peno12"            
## [17,] "707zipi18"            "707zipi18"            
## [18,] "808dina11"            "808dina11"            
## [19,] "909nina'04"           "909nina'04"           
## [20,] "110acna12"            "110acna12"            
## [21,] "220nina'07"           "220nina'07"           
## [22,] "330lina'03"           "330lina'03"           
## [23,] "440sina'04"           "440sina'04"           
## [24,] "550tina19"            "550tina19"            
## [25,] "660rina17"            "660rina17"            
## [26,] "770afna27"            "770afna27"            
## [27,] "880iopi'08"           "880iopi'08"           
## [28,] "990aypi15"            "990aypi15"            
## [29,] "102iana16"            "102iana16"            
## [30,] "203nina11"            "203nina11"            
## [31,] "304rili28"            "304rili28"

Creiamo un unico dataset pulito tenendo solo i soggetti appaiati, cioè quelli per cui abbiamo sia il PRE che il POST. Senza il pre o senza il post non possiamo calcolare il cambiamento.

data <- rbind.data.frame(
  PRE_unique [coppie[, 1], ],
  POST_unique[coppie[, 2], ]
)

L’intero dataset pulito è il seguente:

data %>% print
##      QUESTNNR BF01_01 BF01_02 BF01_03 BF01_04 BF01_05 BF01_06 BF01_07 BF01_08
## 9         PRE       6       4       4       4       4       4       4       4
## 5         PRE       3       5       2       2       6       4       4       5
## 16        PRE       4       6       2       6       6       5       5       4
## 7         PRE       3       5       5       6       5       5       6       6
## 4         PRE       5       1       4       4       5       2       4       4
## 10        PRE       1       7       4       4       1       4       5       4
## 18        PRE       7       6       4       7       1       4       4       5
## 12        PRE       3       3       7       7       5       3       6       1
## 34        PRE       3       6       7       7       7       1       3       7
## 34.1      PRE       3       6       7       7       7       1       3       7
## 42        PRE       7       7       7       7       7       7       1       5
## 43        PRE       7       7       1       7       7       1       1       1
## 46        PRE       1       6       7       2       2       1       5       3
## 47        PRE       1       6       3       7       6       4       3       4
## 48        PRE       2       6       4       1       1       7       3       7
## 52        PRE       2       5       3       3       1       5       6       5
## 53        PRE       3       5       6       6       3       4       4       4
## 54        PRE       5       6       2       5       1       4       5       3
## 55        PRE       2       6       6       5       4       5       3       5
## 68        PRE       4       5       3       7       6       3       4       2
## 69        PRE       6       6       6       7       7       4       5       4
## 70        PRE       4       6       5       5       6       4       4       5
## 76        PRE       7       7       7       7       7       7       5       7
## 74        PRE       4       6       6       6       6       6       2       7
## 75        PRE       1       7       7       2       7       6       4       5
## 80        PRE       5       6       7       4       5       6       4       7
## 81        PRE       2       6       6       7       7       4       6       6
## 82        PRE       1       7       1       7       5       1       7       2
## 86        PRE       4       7       2       6       7       4       4       3
## 87        PRE       1       7       4       7       1       5       6       7
## 88        PRE       2       6       7       7       1       5       3       6
## 20       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 21       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 22       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 23       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 24       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 25       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 26       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 31       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 40       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 41       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 44       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 45       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 49       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 50       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 51       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 56       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 57       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 58       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 59       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 71       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 72       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 73       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 77       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 78       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 79       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 83       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 84       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 85       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 89       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 90       POST      NA      NA      NA      NA      NA      NA      NA      NA
## 91       POST      NA      NA      NA      NA      NA      NA      NA      NA
##      BF01_09 BF01_10 BF01_11 BF01_12 BF01_13 BF01_14 BF01_15 SC01_01 SC01_02
## 9          1       4       4       4       4       4       5       4       5
## 5          1       4       5       6       4       4       5       3       7
## 16         1       2       6       6       7       3       6       2       7
## 7          4       5       5       3       6       3       5       4       7
## 4          1       4       5       4       5       4       4       3       6
## 10         1       4       7       6       5       5       2       5       6
## 18         4       4       3       4       6       4       6       4       6
## 12         7       4       4       5       6       2       4       7       7
## 34         5       1       7       7       6       1       5       5       7
## 34.1       5       1       7       7       6       1       5       5       7
## 42         4       1       6       7       7       7       7       4       7
## 43         4       1       7       4       7       6       7       6       7
## 46         1       4       6       5       5       3       4       4       4
## 47         4       7       6       7       6       1       7       3       5
## 48         4       4       6       2       4       1       1       6       1
## 52         1       5       7       4       5       3       5       3       5
## 53         4       5       3       5       4       6       4       4       5
## 54         2       6       7       5       7       7       7       4       7
## 55         4       4       6       6       6       4       5       4       6
## 68         4       3       5       7       5       1       5       5       7
## 69         2       2       4       6       7       1       6       5       7
## 70         4       4       5       5       4       6       5       6       6
## 76         7       3       5       5       3       6       6       5       7
## 74         2       2       5       6       5       3       4       5       7
## 75         3       2       7       4       7       7       7       5       4
## 80         4       5       7       5       7       5       7       4       7
## 81         6       4       6       7       7       3       6       4       6
## 82         7       6       5       6       7       1       3       6       6
## 86         3       6       6       6       7       5       6       5       4
## 87         1       1       7       6       7       4       7       5       7
## 88         1       5       7       6       5       1       1       4       1
## 20        NA      NA      NA      NA      NA      NA      NA       4       5
## 21        NA      NA      NA      NA      NA      NA      NA       1       3
## 22        NA      NA      NA      NA      NA      NA      NA       4       6
## 23        NA      NA      NA      NA      NA      NA      NA       6       5
## 24        NA      NA      NA      NA      NA      NA      NA       4       7
## 25        NA      NA      NA      NA      NA      NA      NA       2       2
## 26        NA      NA      NA      NA      NA      NA      NA       5       7
## 31        NA      NA      NA      NA      NA      NA      NA       7       7
## 40        NA      NA      NA      NA      NA      NA      NA       7       7
## 41        NA      NA      NA      NA      NA      NA      NA       4       7
## 44        NA      NA      NA      NA      NA      NA      NA       4       6
## 45        NA      NA      NA      NA      NA      NA      NA       4       7
## 49        NA      NA      NA      NA      NA      NA      NA       5       5
## 50        NA      NA      NA      NA      NA      NA      NA       5       6
## 51        NA      NA      NA      NA      NA      NA      NA       2       4
## 56        NA      NA      NA      NA      NA      NA      NA       4       5
## 57        NA      NA      NA      NA      NA      NA      NA       5       5
## 58        NA      NA      NA      NA      NA      NA      NA       1       4
## 59        NA      NA      NA      NA      NA      NA      NA       5       6
## 71        NA      NA      NA      NA      NA      NA      NA       3       5
## 72        NA      NA      NA      NA      NA      NA      NA       6       7
## 73        NA      NA      NA      NA      NA      NA      NA       4       5
## 77        NA      NA      NA      NA      NA      NA      NA       5       7
## 78        NA      NA      NA      NA      NA      NA      NA       3       5
## 79        NA      NA      NA      NA      NA      NA      NA       3       3
## 83        NA      NA      NA      NA      NA      NA      NA       4       6
## 84        NA      NA      NA      NA      NA      NA      NA       4       2
## 85        NA      NA      NA      NA      NA      NA      NA       5       7
## 89        NA      NA      NA      NA      NA      NA      NA       6       2
## 90        NA      NA      NA      NA      NA      NA      NA       4       7
## 91        NA      NA      NA      NA      NA      NA      NA       4       3
##      SC01_03 SC01_04 SC01_05 SC01_06 SC01_07 SC01_08 SC01_09 SC01_10 SC01_11
## 9          5       4       4       4       5       5       5       4       4
## 5          2       6       6       3       4       1       2       4       7
## 16         5       4       5       1       3       2       7       6       3
## 7          5       5       5       3       6       5       6       4       3
## 4          1       4       1       4       4       4       4       4      NA
## 10         7       5       6       5       5       6       4       5       4
## 18         4       4       3       6       4       3       4       5       2
## 12         6       7       3       1       6       7       7       7       2
## 34         7       7       1       1       6       5       7       6       5
## 34.1       7       7       1       1       6       5       7       6       5
## 42         7       7       7       2       7       5       5       7       6
## 43         7       6       6       6       6       5       7       4       4
## 46         3       5       3       4       5       4       4       7       6
## 47         4       5       6       3       6       6       7       7       4
## 48         1       1       1       4       1       4       6       4       7
## 52         7       6       6       4       5       4       3       6       5
## 53         5       6       4       3       5       6       4       4       3
## 54         7       6       6       3       2       4       5       7       6
## 55         2       3       4       5       6       4       5       6       6
## 68         7       7       4       6       5       4       3       2       4
## 69         7       6       7       5       7       4       7       2       2
## 70         4       6       7       3       5       6       6       5       4
## 76         6       7       5       3       6       5       6       1       2
## 74         5       6       5       3       6       6       5       2       4
## 75         1       4       7       1       7       1       2       1       7
## 80         3       6       7       4       4       5       3       2       5
## 81         7       6       5       5       7       7       7       7       4
## 82         6       6       7       1       7       7       7       7       7
## 86         4       5       5       4       4       3       3       6       7
## 87         4       1       4       1       6       5       1       7       4
## 88         1       2       6       3       3       1       6       2       4
## 20         4       4       4       4       5       5       5       4       4
## 21         2       4       3       2       2       1       1       3       6
## 22         3       7       4       5       3       4       7       5       6
## 23         3       5       5       3       6       5       6       5       3
## 24         4       6       1      NA       2       7       1       6       1
## 25         3       2       4       1       4       3       4       3       4
## 26         1       4       4       4       7       6       6       7       2
## 31         7       7       2       1       6       7       6       7       1
## 40         4       5       5       5       6       7       7       7       1
## 41         5       5       4       4       5       7       7      NA      NA
## 44         6       5       4       3       7       6       7       7       7
## 45         7       6       6       1       4       6       7       4       5
## 49         4       7       6       6       5       5       5       5       4
## 50         5       5       4       3       7       6       7       7       3
## 51         4       5       6       6       5       5       6       4       5
## 56         3       6       5       3       3       5       6       2       5
## 57         6       4       5       2       5       6       4       5       4
## 58         5       6       6       5       5       4       5       6       5
## 59         3       5       5       4       6       5       6       4       6
## 71         6       7       6       4       6       5       5       5       4
## 72         6       6       5       4       6       6       5       2       3
## 73         2       4       7       4       5       5       6       4       4
## 77         7       4       5       5       1       5       5       7       6
## 78         6       5       1       3       3       4       5       1       4
## 79         2       4       3       3       7       3       3       2       5
## 83         4       5       6       5       6       5       7       4       5
## 84         2       6       6       3       7       4       1       6       2
## 85         7       7       7       1       7       7       7       7       1
## 89         4       3       2       5       2       1       2       3       6
## 90         5       6       1       5       6       2       5       1       2
## 91         5       2       5       2       7       3       6       2       4
##      SC01_12 FINISHED         personal_code
## 9          4        1    Catymiao1302NANANA
## 5          4        1           Rumi NANANA
## 16         6        1          '03'03'03'03
## 7          6        1     cetriologodNANANA
## 4          5        1        sokaealiNANANA
## 10         7        1  Fragolina00670NANANA
## 18         6        1          '01'01'01'01
## 12         7        1          '07'07'07'07
## 34         5        1           '000sina'04
## 34.1       5        1           '000sina'04
## 42         7        1            101iona'05
## 43         7        1            202rina'05
## 46         6        1             303lina19
## 47         6        1             404kuna25
## 48         6        1             505ahna14
## 52         5        1             606peno12
## 53         5        1             707zipi18
## 54         5        1             808dina11
## 55         5        1            909nina'04
## 68         7        1             110acna12
## 69         2        1            220nina'07
## 70         5        1            330lina'03
## 76         4        1            440sina'04
## 74         3        1             550tina19
## 75         5        1             660rina17
## 80         7        1             770afna27
## 81         3        1            880iopi'08
## 82         7        1             990aypi15
## 86         6        1             102iana16
## 87         2        1             203nina11
## 88         3        1             304rili28
## 20         5        1    Catymiao1302NANANA
## 21         3        1            RumiNANANA
## 22         7        1          '03'03'03'03
## 23         6        1     cetriologodNANANA
## 24         1        1        sokaealiNANANA
## 25         4        1 Fragolina 00670NANANA
## 26         6        1          '01'01'01'01
## 31         6        1          '07'07'07'07
## 40         7        1           '000cina'05
## 41        NA        1           '000mina'04
## 44         7        1            101iona'05
## 45         4        1            202rina'05
## 49         4        1             303lina19
## 50         7        1             404kuna25
## 51         7        1             505ahna19
## 56         1        1             606peno12
## 57         5        1             707zipi18
## 58         6        1             808dina11
## 59         4        1            909nina'04
## 71         5        1             110acna12
## 72         6        1            220nina'07
## 73         3        1            330lina'03
## 77         7        1            440sina'04
## 78         3        1             550tina19
## 79         4        1             660rina17
## 83         5        1             770afna27
## 84         7        1            880iopi'08
## 85         7        1             990aypi15
## 89         4        1             102iana16
## 90         1        1             203nina11
## 91         3        1             304rili28

Ora facciamo il “reverse” degli item da reversare e risalviamo sulla stessa variabile per tenerla corta.

Cosa vuol dire reversare? In molti questionari ci sono frasi formulate “al contrario” per evitare che la gente risponda in automatico. Per esempio se la scala va da 1 a 7 e tutti gli item dicono “Ho le idee chiare su chi sono”, “So cosa voglio”, ecc., uno potrebbe dire “Spesso cambio idea su me stesso”. Per quest’ultimo, un punteggio alto vuol dire bassa chiarezza, quindi prima di fare la media va girato (8 - punteggio se la scala è 1-7). Senza questo passaggio le medie sarebbero spazzatura.

data <- data %>% mutate(
  BF01_07 = 8 - BF01_07,
  BF01_03 = 8 - BF01_03,
  BF01_08 = 8 - BF01_08,
  BF01_04 = 8 - BF01_04,
  BF01_09 = 8 - BF01_09,
  BF01_01 = 8 - BF01_01,
  BF01_10 = 8 - BF01_10,
  SC01_01 = 8 - SC01_01,
  SC01_02 = 8 - SC01_02,
  SC01_03 = 8 - SC01_03,
  SC01_04 = 8 - SC01_04,
  SC01_05 = 8 - SC01_05,
  SC01_07 = 8 - SC01_07,
  SC01_08 = 8 - SC01_08,
  SC01_09 = 8 - SC01_09,
  SC01_10 = 8 - SC01_10,
  SC01_12 = 8 - SC01_12
)

Diamo un’occhiata al pattern di missing (i dati mancanti). I Big Five sono stati somministrati solo al PRE, quindi è normale che al POST siano tutti vuoti: li trattiamo a parte. Per la SCC ci aspettiamo che siano quasi tutti pieni.

data[data$QUESTNNR == "PRE", ]  %>% md.pattern

##    QUESTNNR BF01_01 BF01_02 BF01_03 BF01_04 BF01_05 BF01_06 BF01_07 BF01_08
## 30        1       1       1       1       1       1       1       1       1
## 1         1       1       1       1       1       1       1       1       1
##           0       0       0       0       0       0       0       0       0
##    BF01_09 BF01_10 BF01_11 BF01_12 BF01_13 BF01_14 BF01_15 SC01_01 SC01_02
## 30       1       1       1       1       1       1       1       1       1
## 1        1       1       1       1       1       1       1       1       1
##          0       0       0       0       0       0       0       0       0
##    SC01_03 SC01_04 SC01_05 SC01_06 SC01_07 SC01_08 SC01_09 SC01_10 SC01_12
## 30       1       1       1       1       1       1       1       1       1
## 1        1       1       1       1       1       1       1       1       1
##          0       0       0       0       0       0       0       0       0
##    FINISHED personal_code SC01_11  
## 30        1             1       1 0
## 1         1             1       0 1
##           0             0       1 1
data[data$QUESTNNR == "POST", ] %>% select(matches("^SC01_")) %>% md.pattern

##    SC01_01 SC01_02 SC01_03 SC01_04 SC01_05 SC01_07 SC01_08 SC01_09 SC01_06
## 29       1       1       1       1       1       1       1       1       1
## 1        1       1       1       1       1       1       1       1       1
## 1        1       1       1       1       1       1       1       1       0
##          0       0       0       0       0       0       0       0       1
##    SC01_10 SC01_11 SC01_12  
## 29       1       1       1 0
## 1        0       0       0 3
## 1        1       1       1 1
##          1       1       1 4

Quanti soggetti abbiamo alla fine? Una “coppia” = una persona di cui abbiamo sia il PRE sia il POST.

Abbiamo 31 coppie PRE-POST valide.

Numero di soggetti: 31. È un campione piccolo, e questa è la prima cosa importante da tenere a mente: con così poche persone vedremo solo gli effetti grossi; quelli sottili rischiano di passare inosservati anche se ci sono davvero. Questo non è un difetto del codice, è una caratteristica fisiologica della statistica con piccoli numeri.

Scoring (calcolo dei punteggi)

Per ogni persona, il punteggio della scala è semplicemente la media dei suoi item (dopo aver reversato quelli da reversare). È il modo standard di calcolare un punteggio composito per questo tipo di scale.

Usiamo na.rm = TRUE così se qualcuno ha lasciato in bianco un item, invece di buttare via tutto il suo punteggio facciamo la media degli item che ha compilato. Soluzione pragmatica e standard. Self-Concept Clarity (12 item)

data$self_concept_clarity <- data %>%
  select(matches("^SC01")) %>%
  apply(1, function(x) mean(x, na.rm = TRUE))

Big Five: 3 item per ciascuno dei 5 tratti.

data$extraversion <- data %>%
  select(BF01_01, BF01_06, BF01_11) %>%
  apply(1, function(x) mean(x, na.rm = TRUE))

data$agreeableness <- data %>%
  select(BF01_02, BF01_07, BF01_12) %>%
  apply(1, function(x) mean(x, na.rm = TRUE))

data$conscientiousness <- data %>%
  select(BF01_03, BF01_08, BF01_13) %>%
  apply(1, function(x) mean(x, na.rm = TRUE))

data$emotional_stability <- data %>%
  select(BF01_04, BF01_09, BF01_14) %>%
  apply(1, function(x) mean(x, na.rm = TRUE))

data$openness <- data %>%
  select(BF01_05, BF01_10, BF01_15) %>%
  apply(1, function(x) mean(x, na.rm = TRUE))

Affidabilità delle scale

Prima di fare qualunque analisi seria sulle medie, dobbiamo chiederci una cosa: gli item della scala stanno misurando davvero la stessa cosa? Se una persona risponde “molto d’accordo” a una domanda della SCC, è ragionevole aspettarsi che risponda in modo simile alle altre. Se invece le risposte sono scollegate fra loro, vuol dire che la scala è rotta e fare la media non ha senso.

Lo strumento standard per misurarlo è l’alfa di Cronbach. Va da 0 a 1, e la regola generale (un po’ grezza ma utile) è: - sopra 0.70 = la scala “tiene”, possiamo fidarci - sotto 0.70 = qualcosa non torna Alfa di Cronbach per la Self-Concept Clarity Scale

data %>% select(matches("^SC01")) %>% psych::alpha(check.keys = FALSE)
## 
## Reliability analysis   
## Call: psych::alpha(x = ., check.keys = FALSE)
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.76      0.76     0.8      0.21 3.1 0.045  3.3 0.88     0.21
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.66  0.76  0.84
## Duhachek  0.67  0.76  0.84
## 
##  Reliability if an item is dropped:
##         raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SC01_01      0.74      0.74    0.78      0.21 2.9    0.047 0.028  0.20
## SC01_02      0.72      0.72    0.76      0.19 2.6    0.052 0.023  0.20
## SC01_03      0.72      0.72    0.77      0.19 2.6    0.051 0.025  0.20
## SC01_04      0.73      0.73    0.77      0.20 2.7    0.050 0.025  0.20
## SC01_05      0.77      0.77    0.80      0.23 3.3    0.042 0.025  0.23
## SC01_06      0.77      0.78    0.81      0.24 3.5    0.042 0.023  0.23
## SC01_07      0.73      0.73    0.77      0.20 2.8    0.048 0.030  0.20
## SC01_08      0.70      0.70    0.74      0.18 2.4    0.055 0.022  0.19
## SC01_09      0.73      0.73    0.78      0.20 2.8    0.049 0.029  0.20
## SC01_10      0.74      0.74    0.77      0.21 2.9    0.047 0.027  0.21
## SC01_11      0.76      0.76    0.79      0.22 3.1    0.045 0.025  0.21
## SC01_12      0.75      0.75    0.78      0.21 3.0    0.046 0.026  0.20
## 
##  Item statistics 
##          n raw.r std.r r.cor r.drop mean  sd
## SC01_01 62  0.47  0.50 0.430   0.37  3.7 1.3
## SC01_02 62  0.67  0.67 0.655   0.56  2.5 1.7
## SC01_03 62  0.65  0.64 0.615   0.53  3.5 1.9
## SC01_04 62  0.61  0.61 0.585   0.50  2.9 1.5
## SC01_05 62  0.31  0.30 0.190   0.15  3.4 1.8
## SC01_06 61  0.20  0.21 0.079   0.06  3.4 1.5
## SC01_07 62  0.56  0.57 0.512   0.44  2.9 1.6
## SC01_08 62  0.78  0.78 0.799   0.70  3.3 1.6
## SC01_09 62  0.59  0.57 0.512   0.45  2.9 1.8
## SC01_10 61  0.54  0.52 0.481   0.39  3.4 2.0
## SC01_11 60  0.40  0.41 0.325   0.25  4.2 1.7
## SC01_12 61  0.47  0.46 0.404   0.33  3.0 1.7
## 
## Non missing response frequency for each item
##            1    2    3    4    5    6    7 miss
## SC01_01 0.05 0.11 0.27 0.37 0.11 0.05 0.03 0.00
## SC01_02 0.40 0.19 0.19 0.08 0.05 0.05 0.03 0.00
## SC01_03 0.23 0.13 0.16 0.19 0.11 0.10 0.08 0.00
## SC01_04 0.18 0.29 0.23 0.19 0.03 0.05 0.03 0.00
## SC01_05 0.13 0.23 0.23 0.19 0.08 0.03 0.11 0.00
## SC01_06 0.18 0.07 0.26 0.23 0.18 0.08 0.00 0.02
## SC01_07 0.19 0.29 0.23 0.11 0.08 0.06 0.03 0.00
## SC01_08 0.13 0.18 0.31 0.19 0.08 0.03 0.08 0.00
## SC01_09 0.27 0.21 0.21 0.11 0.08 0.05 0.06 0.00
## SC01_10 0.25 0.15 0.13 0.21 0.05 0.15 0.07 0.02
## SC01_11 0.07 0.12 0.10 0.30 0.17 0.15 0.10 0.03
## SC01_12 0.25 0.20 0.21 0.15 0.11 0.03 0.05 0.02

Risultato: alfa = 0.76. Buono. Possiamo procedere a fare la media degli item con la coscienza tranquilla. Alfa per le sottoscale Big Five (calcolata sui soli PRE, dove sono state somministrate). Attenzione: ogni sottoscala ha solo 3 item, ed è ben noto che con così pochi item l’alfa tende a venire bassa anche quando la scala è ok. Quindi prendiamo questi numeri con le pinze: servono più per un controllo qualità “che le risposte non siano completamente a caso” che per affermare la validità della scala.

big5_pre <- data[data$QUESTNNR == "PRE", ]

cat("\n--- Estroversione ---\n")
## 
## --- Estroversione ---
big5_pre %>% select(BF01_01, BF01_06, BF01_11) %>% psych::alpha(check.keys = FALSE)
## Some items ( BF01_06 ) were negatively correlated with the first principal component and 
## probably should be reversed.  
## To do this, run the function again with the 'check.keys=TRUE' option
## 
## Reliability analysis   
## Call: psych::alpha(x = ., check.keys = FALSE)
## 
##   raw_alpha std.alpha G6(smc) average_r  S/N  ase mean sd median_r
##       0.14      0.21    0.22     0.081 0.26 0.27  4.7  1   0.0098
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt    -0.56  0.14  0.56
## Duhachek -0.39  0.14  0.67
## 
##  Reliability if an item is dropped:
##         raw_alpha std.alpha G6(smc) average_r   S/N alpha se var.r   med.r
## BF01_01     0.018      0.02  0.0098    0.0098  0.02     0.33    NA  0.0098
## BF01_06     0.478      0.52  0.3529    0.3529  1.09     0.16    NA  0.3529
## BF01_11    -0.273     -0.28 -0.1210   -0.1210 -0.22     0.45    NA -0.1210
## 
##  Item statistics 
##          n raw.r std.r r.cor r.drop mean  sd
## BF01_01 31  0.71  0.66  0.42  0.099  4.5 2.0
## BF01_06 31  0.50  0.48 -0.11 -0.086  4.1 1.8
## BF01_11 31  0.63  0.73  0.56  0.287  5.7 1.2
## 
## Non missing response frequency for each item
##            1    2    3    4    5    6    7 miss
## BF01_01 0.13 0.06 0.10 0.16 0.19 0.16 0.19    0
## BF01_06 0.16 0.03 0.06 0.35 0.19 0.10 0.10    0
## BF01_11 0.00 0.00 0.06 0.10 0.26 0.26 0.32    0
cat("\n--- Amicalità ---\n")
## 
## --- Amicalità ---
big5_pre %>% select(BF01_02, BF01_07, BF01_12) %>% psych::alpha(check.keys = FALSE)
## 
## Reliability analysis   
## Call: psych::alpha(x = ., check.keys = FALSE)
## 
##   raw_alpha std.alpha G6(smc) average_r  S/N  ase mean   sd median_r
##       0.38      0.39    0.31      0.17 0.63 0.19    5 0.89     0.14
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt    -0.13  0.38  0.68
## Duhachek  0.00  0.38  0.76
## 
##  Reliability if an item is dropped:
##         raw_alpha std.alpha G6(smc) average_r  S/N alpha se var.r med.r
## BF01_02      0.19      0.19    0.10      0.10 0.23     0.29    NA  0.10
## BF01_07      0.43      0.43    0.27      0.27 0.75     0.20    NA  0.27
## BF01_12      0.25      0.25    0.14      0.14 0.33     0.27    NA  0.14
## 
##  Item statistics 
##          n raw.r std.r r.cor r.drop mean  sd
## BF01_02 31  0.69  0.70  0.45   0.27  5.8 1.3
## BF01_07 31  0.66  0.62  0.24   0.15  3.8 1.4
## BF01_12 31  0.67  0.69  0.41   0.24  5.4 1.3
## 
## Non missing response frequency for each item
##            1    2    3    4    5    6    7 miss
## BF01_02 0.03 0.00 0.03 0.03 0.16 0.48 0.26    0
## BF01_07 0.03 0.16 0.19 0.32 0.19 0.03 0.06    0
## BF01_12 0.00 0.03 0.03 0.19 0.23 0.32 0.19    0
cat("\n--- Coscienziosità ---\n")
## 
## --- Coscienziosità ---
big5_pre %>% select(BF01_03, BF01_08, BF01_13) %>% psych::alpha(check.keys = FALSE)
## 
## Reliability analysis   
## Call: psych::alpha(x = ., check.keys = FALSE)
## 
##   raw_alpha std.alpha G6(smc) average_r S/N  ase mean  sd median_r
##       0.55      0.53    0.47      0.27 1.1 0.13  4.1 1.2      0.2
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.18  0.55  0.77
## Duhachek  0.30  0.55  0.80
## 
##  Reliability if an item is dropped:
##         raw_alpha std.alpha G6(smc) average_r  S/N alpha se var.r med.r
## BF01_03      0.31      0.33    0.20      0.20 0.49     0.23    NA  0.20
## BF01_08      0.20      0.23    0.13      0.13 0.30     0.25    NA  0.13
## BF01_13      0.66      0.66    0.49      0.49 1.95     0.12    NA  0.49
## 
##  Item statistics 
##          n raw.r std.r r.cor r.drop mean  sd
## BF01_03 31  0.82  0.75  0.59   0.44  3.3 2.0
## BF01_08 31  0.81  0.78  0.64   0.50  3.3 1.8
## BF01_13 31  0.49  0.62  0.25   0.19  5.7 1.2
## 
## Non missing response frequency for each item
##            1    2    3    4    5    6    7 miss
## BF01_03 0.29 0.16 0.06 0.19 0.10 0.13 0.06    0
## BF01_08 0.23 0.10 0.23 0.23 0.10 0.06 0.06    0
## BF01_13 0.00 0.00 0.03 0.16 0.23 0.23 0.35    0
cat("\n--- Stabilità Emotiva ---\n")
## 
## --- Stabilità Emotiva ---
big5_pre %>% select(BF01_04, BF01_09, BF01_14) %>% psych::alpha(check.keys = FALSE)
## 
## Reliability analysis   
## Call: psych::alpha(x = ., check.keys = FALSE)
## 
##   raw_alpha std.alpha G6(smc) average_r S/N  ase mean  sd median_r
##        0.5      0.51    0.44      0.25   1 0.16  3.6 1.4      0.2
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.09   0.5  0.74
## Duhachek  0.19   0.5  0.81
## 
##  Reliability if an item is dropped:
##         raw_alpha std.alpha G6(smc) average_r  S/N alpha se var.r med.r
## BF01_04      0.19      0.19    0.11      0.11 0.24     0.29    NA  0.11
## BF01_09      0.33      0.33    0.20      0.20 0.49     0.24    NA  0.20
## BF01_14      0.63      0.63    0.46      0.46 1.69     0.13    NA  0.46
## 
##  Item statistics 
##          n raw.r std.r r.cor r.drop mean  sd
## BF01_04 31  0.77  0.78  0.63   0.44  2.5 1.9
## BF01_09 31  0.73  0.74  0.55   0.36  4.7 1.9
## BF01_14 31  0.63  0.61  0.24   0.18  3.6 2.0
## 
## Non missing response frequency for each item
##            1    2    3    4    5    6    7 miss
## BF01_04 0.45 0.16 0.10 0.13 0.03 0.10 0.03    0
## BF01_09 0.10 0.03 0.06 0.35 0.06 0.10 0.29    0
## BF01_14 0.26 0.03 0.19 0.19 0.10 0.13 0.10    0
cat("\n--- Apertura ---\n")
## 
## --- Apertura ---
big5_pre %>% select(BF01_05, BF01_10, BF01_15) %>% psych::alpha(check.keys = FALSE)
## 
## Reliability analysis   
## Call: psych::alpha(x = ., check.keys = FALSE)
## 
##   raw_alpha std.alpha G6(smc) average_r S/N  ase mean  sd median_r
##        0.6      0.61    0.52      0.34 1.5 0.12  4.7 1.4     0.35
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.28   0.6  0.80
## Duhachek  0.38   0.6  0.83
## 
##  Reliability if an item is dropped:
##         raw_alpha std.alpha G6(smc) average_r  S/N alpha se var.r med.r
## BF01_05      0.37      0.37    0.23      0.23 0.59     0.23    NA  0.23
## BF01_10      0.59      0.61    0.44      0.44 1.57     0.14    NA  0.44
## BF01_15      0.50      0.52    0.35      0.35 1.09     0.17    NA  0.35
## 
##  Item statistics 
##          n raw.r std.r r.cor r.drop mean  sd
## BF01_05 31  0.85  0.80  0.65   0.51  4.6 2.3
## BF01_10 31  0.67  0.70  0.44   0.35  4.4 1.7
## BF01_15 31  0.71  0.74  0.53   0.42  5.1 1.7
## 
## Non missing response frequency for each item
##            1    2    3    4    5    6    7 miss
## BF01_05 0.23 0.03 0.03 0.06 0.16 0.19 0.29    0
## BF01_10 0.03 0.10 0.16 0.35 0.06 0.13 0.16    0
## BF01_15 0.06 0.03 0.03 0.16 0.29 0.19 0.23    0

I Big Five funzionicchiano: con 3 item a sottoscala è quel che ci si poteva aspettare. Li useremo a scopo descrittivo / esplorativo, non per fare affermazioni forti.

Statistiche descrittive

Prima di tirare fuori i test fancy, guardiamo i numeri “nudi”: media, deviazione standard, min, max. Servono per farci un’idea di base di com’è distribuita la variabile e se ci sono cose strane. Descrittive del Self-Concept Clarity, separate per momento (PRE vs POST).

data %>%
  group_by(QUESTNNR) %>%
  summarise(
    n      = n(),
    media  = mean(self_concept_clarity, na.rm = TRUE),
    sd     = sd  (self_concept_clarity, na.rm = TRUE),
    min    = min (self_concept_clarity, na.rm = TRUE),
    max    = max (self_concept_clarity, na.rm = TRUE),
    median = median(self_concept_clarity, na.rm = TRUE)
  )
## # A tibble: 2 × 7
##   QUESTNNR     n media    sd   min   max median
##   <chr>    <int> <dbl> <dbl> <dbl> <dbl>  <dbl>
## 1 POST        31  3.31 0.937  1.17  5.42   3.33
## 2 PRE         31  3.19 0.828  1.58  5      3.08

Cosa leggiamo: la media della SCC al PRE è 3.19 (su una scala 1-7), al POST è 3.31. Quindi sì, la media è salita un pochino, ma di pochissimo (12 centesimi su 7 punti). La domanda è: questo aumento è un “vero” effetto dell’intervento, o è semplicemente la fluttuazione casuale che ci si aspetterebbe anche senza fare niente? Risponderemo qui sotto col t-test. Descrittive Big Five (al PRE).

big5_pre %>%
  select(extraversion, agreeableness, conscientiousness,
         emotional_stability, openness) %>%
  describe()
##                     vars  n mean   sd median trimmed  mad  min  max range  skew
## extraversion           1 31 4.74 1.03   4.67    4.75 0.99 2.67 6.67  4.00 -0.03
## agreeableness          2 31 4.99 0.89   5.00    5.04 0.49 3.00 7.00  4.00 -0.29
## conscientiousness      3 31 4.11 1.25   4.00    4.03 0.99 1.67 7.00  5.33  0.51
## emotional_stability    4 31 3.62 1.38   4.00    3.65 1.48 1.00 6.00  5.00 -0.18
## openness               5 31 4.69 1.44   5.00    4.75 1.48 1.67 7.00  5.33 -0.26
##                     kurtosis   se
## extraversion           -0.83 0.19
## agreeableness          -0.09 0.16
## conscientiousness      -0.26 0.22
## emotional_stability    -1.08 0.25
## openness               -0.82 0.26

Analisi principale: la SCC è cambiata dopo l’intervento?

Visualizziamo la variazione PRE→POST con barre di errore. Le barre rappresentano l’incertezza intorno alla media: se le barre del PRE e del POST si sovrappongono ampiamente, vuol dire che le due medie sono “dentro il rumore” e probabilmente non sono davvero diverse.

error.bars(cbind(
  pre  = data$self_concept_clarity[data$QUESTNNR == "PRE"],
  post = data$self_concept_clarity[data$QUESTNNR == "POST"]
),
eyes = FALSE,
bars = TRUE,
main = "Variazione della chiarezza del concetto di sé"
)

t-test appaiato

Il t-test appaiato è il test giusto qui perché abbiamo le stesse persone misurate due volte. In sostanza calcola, per ogni persona, la differenza POST - PRE, e poi chiede: “queste differenze sono in media diverse da zero, oppure no?”.

Il numero importante è il p-value: - p < 0.05 = la differenza è “statisticamente significativa”, cioè è improbabile che sia frutto del caso - p ≥ 0.05 = non possiamo escludere che la differenza sia solo rumore

scc_pre  <- data$self_concept_clarity[data$QUESTNNR == "PRE"]
scc_post <- data$self_concept_clarity[data$QUESTNNR == "POST"]

t_test_scc <- t.test(scc_post, scc_pre, paired = TRUE)
t_test_scc
## 
##  Paired t-test
## 
## data:  scc_post and scc_pre
## t = 0.90133, df = 30, p-value = 0.3746
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  -0.1512700  0.3902729
## sample estimates:
## mean difference 
##       0.1195015

Risultato: t = 0.90, p = 0.375. La differenza media POST-PRE è di circa +0.12 punti, ma il p-value è ben sopra 0.05. Quindi, in parole povere: non possiamo dire che l’intervento abbia prodotto un cambiamento. La piccola variazione che vediamo è perfettamente compatibile con la fluttuazione casuale.

Importante: “non significativo” NON vuol dire “non funziona” in senso assoluto. Vuol dire “con questi dati non riusciamo a dimostrare che funziona”. Le ragioni possono essere tante: pochi soggetti, intervento troppo breve, l’effetto c’è ma è piccolo, ecc.

Effect size (Cohen’s d per misure ripetute)

Il p-value ci dice “quanto siamo sicuri che ci sia un effetto”, ma non “quanto è grande l’effetto”. Per quello c’è il Cohen’s d, che esprime la dimensione del cambiamento in unità di deviazione standard. Linee guida classiche: - d ≈ 0.20 → effetto piccolo - d ≈ 0.50 → effetto medio - d ≈ 0.80 → effetto grande

diff_scc <- scc_post - scc_pre
cohens_d <- mean(diff_scc, na.rm = TRUE) / sd(diff_scc, na.rm = TRUE)
cat("Cohen's d (paired) =", round(cohens_d, 3), "\n")
## Cohen's d (paired) = 0.162

Risultato: d = 0.16. Effetto piccolo, anzi “piccolissimo”. Coerente con quello che ci diceva il t-test: se anche l’intervento ha avuto un effetto, è stato modesto.

IMPORTANTE Questi risultati potrebbero essere pubblicabili se venissero osservati con circa 300 partecipanti. Quindi ad ora le cose sono due: o l’effetto c’è ma è troppo piccolo per essere osservato con così pochi dati oppure l’effetto non c’è e quello che abbiamo osservato è solo rumore. Con così pochi dati non possiamo saperlo.

Visualizzazione individuale dei cambiamenti

Le medie nascondono un sacco di cose. Qui sotto ogni linea blu è una persona: vediamo se è migliorata, peggiorata o rimasta uguale. La linea rossa al centro è la media generale. Spesso si scopre che “in media non cambia niente” perché metà delle persone migliora e l’altra metà peggiora — informazione preziosa che il solo t-test non ci dà.

wide <- data.frame(
  id   = data$personal_code[data$QUESTNNR == "PRE"],
  pre  = scc_pre,
  post = scc_post
)

wide_long <- wide %>%
  pivot_longer(cols = c("pre", "post"),
               names_to = "tempo", values_to = "scc") %>%
  mutate(tempo = factor(tempo, levels = c("pre", "post")))

ggplot(wide_long, aes(x = tempo, y = scc, group = id)) +
  geom_line(alpha = 0.4, colour = "steelblue") +
  geom_point(alpha = 0.6, colour = "steelblue") +
  stat_summary(aes(group = 1), fun = mean, geom = "line",
               size = 1.2, colour = "darkred") +
  stat_summary(aes(group = 1), fun = mean, geom = "point",
               size = 3, colour = "darkred") +
  labs(title = "Variazione individuale della Self-Concept Clarity",
       x = "Momento", y = "Self-Concept Clarity") +
  theme_minimal()

Cosa vediamo: il grafico conferma quello che diceva il t-test. Alcune persone migliorano, altre peggiorano, la maggior parte sta più o meno ferma. Non c’è un movimento collettivo verso l’alto. La linea rossa (la media) è quasi orizzontale.

Analisi aggiuntive

Correlazione SCC PRE - SCC POST

Una cosa interessante: chi aveva alta SCC al PRE ce l’ha alta anche al POST? Se sì vuol dire che la SCC è una caratteristica abbastanza stabile della persona, che non oscilla troppo nel tempo. Questo è di per sé un’informazione utile (è anche un controllo di qualità della misura: se due settimane dopo le persone ottenessero punteggi completamente diversi sarebbe sospetto).

cor.test(scc_pre, scc_post)
## 
##  Pearson's product-moment correlation
## 
## data:  scc_pre and scc_post
## t = 4.6874, df = 29, p-value = 6.043e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3938346 0.8201015
## sample estimates:
##       cor 
## 0.6565519

Risultato: r = 0.66, p < 0.001. Correlazione forte e molto significativa. Tradotto: la SCC è in gran parte una caratteristica stabile della persona, e le persone tendono a mantenere il loro livello relativo (chi era “alto” rimane alto, chi era “basso” rimane basso). Questo rafforza anche l’idea che l’intervento, da solo, fatica a smuovere qualcosa che è di natura piuttosto stabile.

Correlazioni tra SCC (PRE) e Big Five

Domanda: la chiarezza del concetto di sé è legata al tipo di personalità? Per esempio, ci si aspetta (dalla letteratura) che le persone più stabili emotivamente abbiano anche una SCC più alta — quando uno non è in costante turbamento emotivo è anche più facile capire chi è.

big5_pre %>%
  select(self_concept_clarity, extraversion, agreeableness,
         conscientiousness, emotional_stability, openness) %>%
  corr.test()
## Call:corr.test(x = .)
## Correlation matrix 
##                      self_concept_clarity extraversion agreeableness
## self_concept_clarity                 1.00         0.31         -0.16
## extraversion                         0.31         1.00          0.13
## agreeableness                       -0.16         0.13          1.00
## conscientiousness                   -0.22        -0.26         -0.07
## emotional_stability                  0.55         0.24         -0.17
## openness                            -0.40        -0.27          0.43
##                      conscientiousness emotional_stability openness
## self_concept_clarity             -0.22                0.55    -0.40
## extraversion                     -0.26                0.24    -0.27
## agreeableness                    -0.07               -0.17     0.43
## conscientiousness                 1.00                0.00     0.01
## emotional_stability               0.00                1.00    -0.18
## openness                          0.01               -0.18     1.00
## Sample Size 
## [1] 31
## Probability values (Entries above the diagonal are adjusted for multiple tests.) 
##                      self_concept_clarity extraversion agreeableness
## self_concept_clarity                 0.00         1.00          1.00
## extraversion                         0.09         0.00          1.00
## agreeableness                        0.38         0.50          0.00
## conscientiousness                    0.23         0.15          0.73
## emotional_stability                  0.00         0.18          0.35
## openness                             0.03         0.15          0.02
##                      conscientiousness emotional_stability openness
## self_concept_clarity              1.00                0.02     0.34
## extraversion                      1.00                1.00     1.00
## agreeableness                     1.00                1.00     0.21
## conscientiousness                 0.00                1.00     1.00
## emotional_stability               0.99                0.00     1.00
## openness                          0.95                0.33     0.00
## 
##  To see confidence intervals of the correlations, print with the short=FALSE option

Cosa leggiamo (tabella delle correlazioni r e dei p-value): - Stabilità emotiva: r = 0.55, p = 0.001 → correlazione forte e significativa. Esattamente quello che ci aspettavamo: chi è emotivamente più stabile ha le idee più chiare su sé stesso. Questo è il risultato più solido di tutto il lavoro. - Apertura: r = -0.40, p = 0.026 → correlazione moderata negativa e significativa. Più curioso: chi è più aperto a nuove esperienze tende ad avere SCC più bassa. Una possibile lettura è che le persone molto aperte si mettono spesso in discussione e quindi si sentono “meno definite”. Da prendere però con cautela: con 31 persone una correlazione del genere può anche essere un colpo di fortuna, e va replicata su campioni più grandi. - Estroversione, amicalità e coscienziosità non mostrano legami significativi con la SCC in questo campione. Visualizziamo la matrice di correlazione in un grafico unico, dove sopra la diagonale ci sono i valori di r (con asterischi se significativi), sotto la diagonale ci sono gli scatter plot, e sulla diagonale gli istogrammi delle distribuzioni.

big5_pre %>%
  select(self_concept_clarity, extraversion, agreeableness,
         conscientiousness, emotional_stability, openness) %>%
  pairs.panels(stars = TRUE, lm = TRUE, ellipses = FALSE)

Il cambiamento nella SCC è predetto dai tratti di personalità?

Qui ci chiediamo: ok, in media non c’è cambiamento, ma magari alcune persone cambiano più di altre, e magari sono quelle con un certo profilo di personalità. Per scoprirlo calcoliamo il delta SCC (POST - PRE) e lo correliamo con i Big Five.

delta_df <- data.frame(
  delta_scc           = diff_scc,
  scc_pre             = scc_pre,
  extraversion        = big5_pre$extraversion,
  agreeableness       = big5_pre$agreeableness,
  conscientiousness   = big5_pre$conscientiousness,
  emotional_stability = big5_pre$emotional_stability,
  openness            = big5_pre$openness
)

corr.test(delta_df)
## Call:corr.test(x = delta_df)
## Correlation matrix 
##                     delta_scc scc_pre extraversion agreeableness
## delta_scc                1.00   -0.29         0.15          0.17
## scc_pre                 -0.29    1.00         0.31         -0.16
## extraversion             0.15    0.31         1.00          0.13
## agreeableness            0.17   -0.16         0.13          1.00
## conscientiousness        0.09   -0.22        -0.26         -0.07
## emotional_stability      0.33    0.55         0.24         -0.17
## openness                 0.27   -0.40        -0.27          0.43
##                     conscientiousness emotional_stability openness
## delta_scc                        0.09                0.33     0.27
## scc_pre                         -0.22                0.55    -0.40
## extraversion                    -0.26                0.24    -0.27
## agreeableness                   -0.07               -0.17     0.43
## conscientiousness                1.00                0.00     0.01
## emotional_stability              0.00                1.00    -0.18
## openness                         0.01               -0.18     1.00
## Sample Size 
## [1] 31
## Probability values (Entries above the diagonal are adjusted for multiple tests.) 
##                     delta_scc scc_pre extraversion agreeableness
## delta_scc                0.00    1.00         1.00          1.00
## scc_pre                  0.12    0.00         1.00          1.00
## extraversion             0.41    0.09         0.00          1.00
## agreeableness            0.35    0.38         0.50          0.00
## conscientiousness        0.62    0.23         0.15          0.73
## emotional_stability      0.07    0.00         0.18          0.35
## openness                 0.14    0.03         0.15          0.02
##                     conscientiousness emotional_stability openness
## delta_scc                        1.00                1.00      1.0
## scc_pre                          1.00                0.03      0.5
## extraversion                     1.00                1.00      1.0
## agreeableness                    1.00                1.00      0.3
## conscientiousness                0.00                1.00      1.0
## emotional_stability              0.99                0.00      1.0
## openness                         0.95                0.33      0.0
## 
##  To see confidence intervals of the correlations, print with the short=FALSE option

Risultato: nessuna correlazione tra il “cambiamento” e i tratti di personalità raggiunge la soglia di significatività. C’è solo una debole tendenza per la stabilità emotiva (r = 0.33, p = 0.066) a essere associata con un cambiamento maggiore, ma siamo proprio sopra la soglia canonica. Niente di solido.

Modello lineare: chi predice meglio la SCC al POST?

Mettiamo tutto insieme in un modello unico. La domanda è: data una persona, conoscendo la sua SCC iniziale e i suoi tratti di personalità, quanto bene riusciamo a prevedere la sua SCC al POST? Il risultato si legge guardando: (a) (quanto varianza spiega il modello in totale, va da 0 a 1) e (b) i singoli p-value dei predittori.

mod <- lm(scc_post ~ scc_pre + extraversion + agreeableness +
            conscientiousness + emotional_stability + openness,
          data = data.frame(scc_post = scc_post, delta_df))
summary(mod)
## 
## Call:
## lm(formula = scc_post ~ scc_pre + extraversion + agreeableness + 
##     conscientiousness + emotional_stability + openness, data = data.frame(scc_post = scc_post, 
##     delta_df))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.76792 -0.42702 -0.06606  0.21494  1.37281 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         -0.885491   1.114541  -0.794 0.434697    
## scc_pre              0.422479   0.171274   2.467 0.021163 *  
## extraversion         0.161004   0.118866   1.354 0.188194    
## agreeableness        0.070920   0.139117   0.510 0.614856    
## conscientiousness    0.006987   0.091311   0.077 0.939641    
## emotional_stability  0.363020   0.095261   3.811 0.000849 ***
## openness             0.082522   0.092625   0.891 0.381812    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5794 on 24 degrees of freedom
## Multiple R-squared:  0.6942, Adjusted R-squared:  0.6177 
## F-statistic: 9.079 on 6 and 24 DF,  p-value: 3.142e-05

Risultati del modello: - R² = 0.69, R² adjusted = 0.62, F(6,24) = 9.08, p < 0.001 → il modello complessivo spiega circa il 62-69% della varianza della SCC POST. Tantissimo, considerando che il campione è piccolo. - SCC PRE è significativa (β = 0.42, p = 0.021): la cosa che predice meglio la SCC dopo è la SCC prima. Ovvio ma importante. - Stabilità emotiva è il predittore più forte (β = 0.36, p < 0.001): anche tenendo conto della SCC iniziale, le persone più stabili emotivamente “atterrano” su una SCC POST più alta. Questo è coerente con la correlazione vista prima ed è il risultato più importante delle analisi esplorative. - Gli altri tratti (estroversione, amicalità, coscienziosità, apertura) non danno contributi significativi una volta tenuto conto degli altri.

Conclusioni

In sintesi:

  1. L’intervento, da solo, non ha cambiato in modo misurabile la chiarezza che le persone hanno di sé stesse. La media è salita poco (da 3.19 a 3.31 su una scala 1-7) e questa differenza è spiegabile in due modi: o è semplicemente un caso, oppure non abbiamo abbastanza dati per osservare una differenza così piccola, che però c’è stata.

  2. Questo non vuol dire “l’intervento è inutile”. Vuol dire “con questi 31 ragazzi e questo strumento, non riusciamo a vedere un effetto”. Per dire qualcosa di più forte servirebbero più persone, una misurazione a più riprese (non solo subito dopo), e magari un gruppo di confronto che NON ha fatto l’intervento.

  3. La chiarezza del concetto di sé è una caratteristica abbastanza stabile. Le persone tendono a mantenere il loro livello nel tempo (la correlazione PRE-POST è 0.66, alta). Questo è un risultato importante in sé: spostare la SCC è difficile, perché non è un “umore del giorno” ma qualcosa di più radicato. Si può valutare in edizioni future di usare un costrutto più volatile nel tempo e che eventualmente possa catturare cambiamenti più grandi.

  4. La stabilità emotiva è il fattore più legato alla chiarezza di sé. Chi è più stabile emotivamente ha le idee più chiare su chi è — sia al PRE che al POST. Questo è perfettamente coerente con la letteratura psicologica: quando uno non è in costante tempesta emotiva è anche più facile riflettere su sé stesso e arrivare a una visione coerente.

  5. Curiosità: chi è più aperto a nuove esperienze ha SCC un po’ più bassa. Possibile interpretazione: le persone curiose si mettono spesso in discussione, e questo “tenersi in discussione” è il prezzo della crescita. Ma è un singolo dato su un piccolo campione, va preso come spunto, non come verità.