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")
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)
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!