Set up

librerie con comandi aggiuntivi utili

library(dplyr)
## 
## Caricamento pacchetto: 'dplyr'
## I seguenti oggetti sono mascherati da 'package:stats':
## 
##     filter, lag
## I seguenti oggetti sono mascherati da 'package:base':
## 
##     intersect, setdiff, setequal, union
library(psych)
library(mice)
## 
## Caricamento pacchetto: 'mice'
## Il seguente oggetto è mascherato da 'package:stats':
## 
##     filter
## I seguenti oggetti sono mascherati da 'package:base':
## 
##     cbind, rbind

settiamo la cartella in cui lavoriamo dicendo che è la stessa in cui è salvato il codice

setwd(dirname(rstudioapi::getActiveDocumentContext()$path))

Salviamo i dati raw nella variabile che chiamiamo raw

raw <- read.csv("data.csv")

Pulizia Iniziale Dati

diamo un’occhiata alla struttura del dataset e alle prime righe

raw %>% head
##   CASE SERIAL REF QUESTNNR      MODE             STARTED BF01_02 BF01_07
## 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       5       4
## 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_12 BF01_03 BF01_08 BF01_13 BF01_04 BF01_09 BF01_14 BF01_01 BF01_06
## 1      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 2      NA      NA      NA      NA       6       7      NA      NA      NA
## 3      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 4       3       3       4       2       3       4       4       4       5
## 5      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 6      NA      NA      NA      NA      NA      NA      NA      NA      NA
##   BF01_11 BF01_05 BF01_10 BF01_15 ID01_02             ID01_01 ID01_03 ID01_04
## 1      NA      NA      NA      NA               aaaaaaaaaaaaa                
## 2      NA      NA       6      NA         AAAAAAAAAAAAAAAAAAA                
## 3      NA      NA      NA      NA                         GHH                
## 4       5       5       6       2                         GGH                
## 5      NA      NA      NA      NA                         ibi                
## 6      NA      NA      NA      NA                      ygcygv                
##   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                 0        0        3
## 2       92       NA 2025-11-07 12:20:23                 1        0        5
## 3      254       NA 2025-11-24 11:16:20                 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                 0        0        3
## 6      100       NA 2025-11-24 12:18:52                 0        0        4
##   MAXPAGE MISSING MISSREL TIME_RSI
## 1       3       0       0     1.33
## 2       5      83      81     1.68
## 3       5      93      92     1.00
## 4       5       0       0     2.20
## 5       3       0       0     1.87
## 6       4      86      84     1.08

Teniamo solo i casi che hanno completato il questionario

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

teniamo solo le colonne che ci servono e salviamo in nuova variabile

raw_complete_selected <- raw %>% select(
  QUESTNNR, 
  BF01_02:SC01_12, #da colonna : a colonna
  FINISHED
)

ora è così

raw_complete_selected %>% head
##   QUESTNNR BF01_02 BF01_07 BF01_12 BF01_03 BF01_08 BF01_13 BF01_04 BF01_09
## 1      PRE      NA      NA      NA      NA      NA      NA      NA      NA
## 2      PRE      NA      NA      NA      NA      NA      NA       6       7
## 3      PRE      NA      NA      NA      NA      NA      NA      NA      NA
## 4      PRE       5       4       3       3       4       2       3       4
## 5      PRE      NA      NA      NA      NA      NA      NA      NA      NA
## 6      PRE      NA      NA      NA      NA      NA      NA      NA      NA
##   BF01_14 BF01_01 BF01_06 BF01_11 BF01_05 BF01_10 BF01_15 ID01_02
## 1      NA      NA      NA      NA      NA      NA      NA        
## 2      NA      NA      NA      NA      NA       6      NA        
## 3      NA      NA      NA      NA      NA      NA      NA        
## 4       4       4       5       5       5       6       2        
## 5      NA      NA      NA      NA      NA      NA      NA        
## 6      NA      NA      NA      NA      NA      NA      NA        
##               ID01_01 ID01_03 ID01_04 PR01 PR01_01 SC01_01 SC01_02 SC01_03
## 1       aaaaaaaaaaaaa                    1       2      NA      NA      NA
## 2 AAAAAAAAAAAAAAAAAAA                    1       2      NA      NA      NA
## 3                 GHH                    1       2      NA      NA      NA
## 4                 GGH                    1       2       3       1       5
## 5                 ibi                    1       2      NA      NA      NA
## 6              ygcygv                    1       2      NA      NA      NA
##   SC01_04 SC01_05 SC01_06 SC01_07 SC01_08 SC01_09 SC01_10 SC01_11 SC01_12
## 1      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 2      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 3      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 4       5       5       3       7       2       5       3       3       2
## 5      NA      NA      NA      NA      NA      NA      NA      NA      NA
## 6      NA      NA      NA      NA      NA      NA      NA      NA      NA
##   FINISHED
## 1        0
## 2        1
## 3        1
## 4        1
## 5        0
## 6        0

Creiamo una colonna in cui incolliamo le 4 domande che creano il codice personale Non so cosa sia successo con i codici ahahahahah

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 quelle colonne

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

Dividiamo in dataset PRE e dataset POST

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

Se i codici si ripetono a questo punto teniamo l’ultima compilazione

PRE_unique <- PRE[PRE$personal_code %>% {!duplicated(.,fromLast = T)},]
POST_unique <- POST[POST$personal_code %>% {!duplicated(.,fromLast = T)},]

Creiamo una matrice che ci dica quali sono gli indici delle coppie. Concediamo due caratteri sbagliati per eventuali errori.

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

Diamo un’occhiata alle coppie Sembrano ok.

cbind(PRE_unique$personal_code[coppie[,1]],
      POST_unique$personal_code[coppie[,2]])
##       [,1]             [,2]             
##  [1,] "Catymiao1302"   "Catymiao1302"   
##  [2,] "Rumi "          "Rumi"           
##  [3,] "'03'03'03'03"   "'03'03'03'03"   
##  [4,] "cetriologod"    "cetriologod"    
##  [5,] "sokaeali"       "sokaeali"       
##  [6,] "Fragolina00670" "Fragolina 00670"
##  [7,] "'01'01'01'01"   "'01'01'01'01"   
##  [8,] "aliesoka"       "aliesoka"       
##  [9,] "'07'07'07'07"   "'07'07'07'07"

Creiamo un unico dataset pulito

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

L’intero dataset è il seguente

data %>% print
##    QUESTNNR BF01_02 BF01_07 BF01_12 BF01_03 BF01_08 BF01_13 BF01_04 BF01_09
## 12      PRE       4       4       4       4       4       4       4       1
## 8       PRE       5       4       6       2       5       4       2       1
## 23      PRE       6       5       6       2       4       7       6       1
## 10      PRE       5       6       3       5       6       6       6       4
## 7       PRE       1       4       4       4       4       5       4       1
## 13      PRE       7       5       6       4       4       5       4       1
## 25      PRE       6       4       4       4       5       6       7       4
## 14      PRE      NA      NA      NA      NA      NA      NA      NA      NA
## 19      PRE       3       6       5       7       1       6       7       7
## 28     POST      NA      NA      NA      NA      NA      NA      NA      NA
## 29     POST      NA      NA      NA      NA      NA      NA      NA      NA
## 30     POST      NA      NA      NA      NA      NA      NA      NA      NA
## 31     POST      NA      NA      NA      NA      NA      NA      NA      NA
## 32     POST      NA      NA      NA      NA      NA      NA      NA      NA
## 33     POST      NA      NA      NA      NA      NA      NA      NA      NA
## 34     POST      NA      NA      NA      NA      NA      NA      NA      NA
## 35     POST      NA      NA      NA      NA      NA      NA      NA      NA
## 39     POST      NA      NA      NA      NA      NA      NA      NA      NA
##    BF01_14 BF01_01 BF01_06 BF01_11 BF01_05 BF01_10 BF01_15 PR01 PR01_01 SC01_01
## 12       4       6       4       4       4       4       5    1       2       4
## 8        4       3       4       5       6       4       5    1       2       3
## 23       3       4       5       6       6       2       6    1       2       2
## 10       3       3       5       5       5       5       5    1       2       4
## 7        4       5       2       5       5       4       4    1       2       3
## 13       5       1       4       7       1       4       2    1       2       5
## 25       4       7       4       3       1       4       6    1       2       4
## 14      NA      NA      NA      NA      NA      NA      NA    1       2       4
## 19       2       3       3       4       5       4       4    1       2       7
## 28      NA      NA      NA      NA      NA      NA      NA    1       2       4
## 29      NA      NA      NA      NA      NA      NA      NA    1       2       1
## 30      NA      NA      NA      NA      NA      NA      NA    1       2       4
## 31      NA      NA      NA      NA      NA      NA      NA    1       2       6
## 32      NA      NA      NA      NA      NA      NA      NA    1       2       4
## 33      NA      NA      NA      NA      NA      NA      NA    1       2       2
## 34      NA      NA      NA      NA      NA      NA      NA    1       2       5
## 35      NA      NA      NA      NA      NA      NA      NA    1       2       5
## 39      NA      NA      NA      NA      NA      NA      NA    1       2       7
##    SC01_02 SC01_03 SC01_04 SC01_05 SC01_06 SC01_07 SC01_08 SC01_09 SC01_10
## 12       5       5       4       4       4       5       5       5       4
## 8        7       2       6       6       3       4       1       2       4
## 23       7       5       4       5       1       3       2       7       6
## 10       7       5       5       5       3       6       5       6       4
## 7        6       1       4       1       4       4       4       4       4
## 13       6       7       5       6       5       5       6       4       5
## 25       6       4       4       3       6       4       3       4       5
## 14       7       5       4       6       4       6       5       7       7
## 19       7       6       7       3       1       6       7       7       7
## 28       5       4       4       4       4       5       5       5       4
## 29       3       2       4       3       2       2       1       1       3
## 30       6       3       7       4       5       3       4       7       5
## 31       5       3       5       5       3       6       5       6       5
## 32       7       4       6       1      NA       2       7       1       6
## 33       2       3       2       4       1       4       3       4       3
## 34       7       1       4       4       4       7       6       6       7
## 35       6       5       5       5       5       6       7       7       7
## 39       7       7       7       2       1       6       7       6       7
##    SC01_11 SC01_12 FINISHED   personal_code
## 12       4       4        1    Catymiao1302
## 8        7       4        1           Rumi 
## 23       3       6        1    '03'03'03'03
## 10       3       6        1     cetriologod
## 7       NA       5        1        sokaeali
## 13       4       7        1  Fragolina00670
## 25       2       6        1    '01'01'01'01
## 14       4       6        0        aliesoka
## 19       2       7        1    '07'07'07'07
## 28       4       5        1    Catymiao1302
## 29       6       3        1            Rumi
## 30       6       7        1    '03'03'03'03
## 31       3       6        1     cetriologod
## 32       1       1        1        sokaeali
## 33       4       4        1 Fragolina 00670
## 34       2       6        1    '01'01'01'01
## 35       5       4        1        aliesoka
## 39       1       6        1    '07'07'07'07

Ora facciamo il reverse degli items da reversare e risalviamo sulla stessa variabile per tenerla corta

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 (big five sono stati somministrati solo al primo, quindi trattiamo separatamente)

data[data$QUESTNNR=="PRE",] %>% md.pattern # sokaeali da eliminare

##   QUESTNNR PR01 PR01_01 SC01_01 SC01_02 SC01_03 SC01_04 SC01_05 SC01_06 SC01_07
## 7        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       1       1       1       1
##          0    0       0       0       0       0       0       0       0       0
##   SC01_08 SC01_09 SC01_10 SC01_12 FINISHED personal_code BF01_02 BF01_07
## 7       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       1       1
##   BF01_12 BF01_03 BF01_08 BF01_13 BF01_04 BF01_09 BF01_14 BF01_01 BF01_06
## 7       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       1       1       1       1       1       1       1       1
##   BF01_11 BF01_05 BF01_10 BF01_15 SC01_11   
## 7       1       1       1       1       1  0
## 1       1       1       1       1       0  1
## 1       0       0       0       0       1 15
##         1       1       1       1       1 16
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_10
## 8       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_11 SC01_12 SC01_06  
## 8       1       1       1 0
## 1       1       1       0 1
##         0       0       1 1

eliminiamo sokaeali e aliesoka da questionario, gli altri sono ok e non abbiamo mnar

data <- data %>% filter(personal_code!="sokaeali")
data <- data %>% filter(personal_code!="aliesoka")

Abbiamo 7 casi validi.

Scoring, selezioniamo le colonne rilevanti e facciamo media.

data$self_concept_clarity <- data %>%
  select(matches("^SC01")) %>%
  apply(1,mean)

data$agreeableness <- data %>%
  select(BF01_02:BF01_12) %>%
  apply(1,mean)

data$conscientiousness <- data %>%
  select(BF01_03:BF01_13) %>%
  apply(1,mean)

data$emotional_stability <- data %>%
  select(BF01_04:BF01_14) %>%
  apply(1,mean)

data$extraversion <- data %>%
  select(BF01_01:BF01_11) %>%
  apply(1,mean)

data$openness <- data %>%
  select(BF01_05:BF01_15) %>%
  apply(1,mean)

Data analysis

vediamo variazione pre-post con barre di errore

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

analisi di interazione a quando ci saranno più dati!