Author
Affiliation
Magnus Johansson
Published

March 10, 2023

2.1 Frågor i enkäten

Item/frågor har etiketter f66a-f66u i datafilen, och motsvaras av fråga 67 i PDF-filen med frågor.

“Hur väl stämmer följande påståenden in på dig som person?” följs av de ingående frågorna, alla med samma fyra svarskategorier:

  • ‘Stämmer mycket dåligt’
  • ‘Stämmer ganska dåligt’
  • ‘Stämmer ganska bra’
  • ‘Stämmer mycket bra’

Svarskategorierna ersätts med siffror från 0 till 3, och för f66h, m, p och u är siffrorna omvända/reverserade, d.v.s. att “Stämmer mycket bra” kodas som “0” i stället för “3” till analysen. Det innebär att höga poäng genomgående innebär hög risk.

Code
#RIcolorlistitems(c(8,13,16,21), RISEprimGreenMid)
reverserade <- c(8,13,16,21)
itemlabels %>% 
  kbl(booktabs = T, escape = F) %>%
      # bootstrap options are for HTML output
      kable_styling(bootstrap_options = c("striped", "hover"), 
                    position = "left",
                    full_width = F,
                    font_size = 14,
                    fixed_thead = T) %>% # when there is a long list in the table
      row_spec(reverserade, bold = F, color = "white", background = RISEprimGreen) %>% 
      column_spec(1, bold = T) %>% 
      kable_classic(html_font = "Lato")
itemnr item
f66a Jag gör tvärt emot vad människor säger åt mig att göra, bara för att göra dem arga.
f66b Jag gillar att göra spännande och farliga saker, även om det är förbjudet.
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66e Om jag blir arg på någon drar jag mig inte för att skada honom/henne.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66p Det är fel att fuska i skolan.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
f66s Om jag ställs inför en svår uppgift så väljer jag att göra något annat.
f66t Den som gör mig arg ger jag mig på, även om han/hon inte slagit mig först.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.

2.2 Deskriptiva data

2.2.1 Demografi

Code
RIdemographics(dif.gender, "Kön")
RIdemographics(dif.arskurs, "Årskurs")
Kön n Percent
Flicka 4327 54.1
Pojke 3670 45.9
Årskurs n Percent
Åk 9 3506 43.8
Gy 2 4491 56.2

2.2.2 Item-data

Code
RItileplot(df.omit.na)

Code
RIbarstack(df.omit.na)

Code
RIbarplot(df.omit.na)

2.3 Rasch-analys samtliga items

itemnr item
f66a Jag gör tvärt emot vad människor säger åt mig att göra, bara för att göra dem arga.
f66b Jag gillar att göra spännande och farliga saker, även om det är förbjudet.
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66e Om jag blir arg på någon drar jag mig inte för att skada honom/henne.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66p Det är fel att fuska i skolan.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
f66s Om jag ställs inför en svår uppgift så väljer jag att göra något annat.
f66t Den som gör mig arg ger jag mig på, även om han/hon inte slagit mig först.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
RIitemfitPCM2(df.omit.na, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66a 0.759 0.791 -2.404 -2.581
f66b 0.696 0.709 -4.241 -4.282
f66c 0.852 0.855 -1.593 -1.843
f66d 0.784 0.805 -2.708 -2.717
f66e 1.515 1.17 3.84 1.725
f66f 0.972 0.966 -0.467 -0.497
f66g 0.695 0.722 -3.963 -3.779
f66h 1.47 1.367 5.443 4.541
f66i 1.011 1.004 0.353 0.163
f66j 0.947 0.95 -0.516 -0.764
f66k 1.036 1.013 0.492 0.189
f66l 1.24 1.214 2.99 2.674
f66m 1.299 1.213 3.309 2.905
f66n 0.723 0.737 -3.759 -3.792
f66o 0.743 0.783 -2.684 -2.789
f66p 1.231 1.098 2.032 1.054
f66q 0.821 0.882 -1.399 -1.129
f66r 0.929 0.933 -0.86 -0.938
f66s 0.97 0.971 -0.38 -0.353
f66t 0.774 0.838 -1.605 -1.497
f66u 1.262 1.203 2.632 2.524
Code
RIpcmPCA(df.omit.na)
PCA of Rasch model residuals
Eigenvalues
2.54
1.85
1.65
1.42
1.31
Code
RIloadLoc(df.omit.na)

Code
RIresidcorr(df.omit.na, cutoff = 0.2)
f66a f66b f66c f66d f66e f66f f66g f66h f66i f66j f66k f66l f66m f66n f66o f66p f66q f66r f66s f66t f66u
f66a
f66b 0.1
f66c 0.09 -0.02
f66d 0.06 -0.01 -0.02
f66e -0.08 -0.14 0.12 -0.1
f66f -0.09 0.18 -0.15 -0.1 -0.13
f66g 0.09 0.26 -0.05 0.07 -0.14 0.2
f66h -0.15 -0.25 -0.09 -0.13 -0.01 -0.11 -0.24
f66i -0.03 0.06 -0.02 -0.13 -0.06 0.05 -0.01 -0.26
f66j -0.07 0.17 -0.08 -0.09 -0.06 0.11 0.01 -0.22 0.2
f66k 0 -0.02 -0.03 0.1 -0.04 -0.06 -0.01 -0.25 0.04 0.11
f66l -0.1 -0.22 -0.09 -0.06 -0.02 -0.15 -0.19 0.14 -0.1 -0.07 -0.13
f66m -0.08 -0.15 -0.08 -0.12 -0.08 -0.09 -0.16 0.12 -0.02 -0.16 -0.16 -0.12
f66n -0.02 0.41 -0.03 -0.04 -0.13 0.15 0.2 -0.22 0.04 0.11 -0.02 -0.18 -0.18
f66o 0.23 0.01 0.07 0.04 -0.03 -0.12 0.03 -0.19 -0.03 -0.03 0.09 -0.09 -0.11 0.08
f66p -0.08 -0.09 -0.12 0.01 -0.11 -0.09 -0.07 0.13 -0.17 -0.16 -0.09 -0.1 0.06 -0.12 -0.12
f66q 0 -0.04 -0.02 0.05 -0.03 -0.08 0.07 -0.11 -0.11 -0.12 -0.02 -0.06 -0.1 -0.02 0.06 -0.01
f66r -0.05 -0.01 -0.06 -0.05 -0.14 -0.05 -0.04 -0.1 0.08 0.05 -0.1 0.01 0.07 0.08 -0.03 -0.18 -0.04
f66s -0.03 -0.17 -0.08 0.04 -0.09 -0.12 -0.1 0.19 -0.15 -0.14 -0.15 0.26 -0.07 -0.14 -0.07 -0.08 -0.01 0.05
f66t 0.05 -0.06 0.34 -0.06 0.14 -0.12 0 -0.11 -0.05 -0.11 -0.03 -0.09 -0.08 -0.03 0.12 -0.1 0.1 -0.09 -0.02
f66u -0.09 -0.11 -0.21 0.07 -0.18 -0.07 0 0.07 -0.16 -0.17 -0.08 -0.05 0.08 -0.13 -0.17 0.19 0 -0.13 -0.05 -0.19
Note:
Relative cut-off value (highlighted in red) is 0.161, which is 0.2 above the average correlation.
Code
RItargeting(df.omit.na)

Code
RIitemHierarchy(df.omit.na)

Code
plot(mirt.rasch, type="trace")

Vi ser att PCA av residualer indikerar multidimensionalitet eftersom största eigenvalue är över 2.0. Figuren med “Loadings 1st contrast” visar att våra reverserade items, h m p och u, håller ihop i ett kluster, och även items s och l ligger nära dem.

Som ett första steg provar vi att plocka bort ovan nämnda sex items och köra analysen igen.

2.4 Rasch-analys 1 negativa items

Utan items f66h m p u samt l och s.

Code
items.pos <- c("f66h","f66l","f66m","f66p","f66s","f66u")

df.neg <- df.omit.na %>% 
  select(!any_of(items.pos))
itemnr item
f66a Jag gör tvärt emot vad människor säger åt mig att göra, bara för att göra dem arga.
f66b Jag gillar att göra spännande och farliga saker, även om det är förbjudet.
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66e Om jag blir arg på någon drar jag mig inte för att skada honom/henne.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
f66t Den som gör mig arg ger jag mig på, även om han/hon inte slagit mig först.
Code
RIitemfitPCM2(df.neg, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66a 0.846 0.856 -1.107 -1.826
f66b 0.704 0.708 -4.022 -4.158
f66c 0.954 0.918 -0.187 -0.968
f66d 0.957 0.94 -0.453 -0.872
f66e 1.836 1.331 4.453 3.521
f66f 1.103 1.065 1.121 0.713
f66g 0.719 0.748 -3.129 -3.125
f66i 1.083 1.072 0.889 0.922
f66j 0.998 0.992 0.065 0.033
f66k 1.093 1.079 1.251 1.269
f66n 0.72 0.743 -3.642 -3.521
f66o 0.775 0.817 -2.207 -2.563
f66q 1.025 0.993 0.124 0.033
f66r 1.108 1.1 1.231 1.272
f66t 0.88 0.892 -0.688 -1.104
Code
RIpcmPCA(df.neg)
PCA of Rasch model residuals
Eigenvalues
2.02
1.54
1.36
1.20
1.15
Code
RIloadLoc(df.neg)

Code
RIresidcorr(df.neg, cutoff = 0.2)
f66a f66b f66c f66d f66e f66f f66g f66i f66j f66k f66n f66o f66q f66r f66t
f66a
f66b 0.01
f66c 0.03 -0.14
f66d 0.02 -0.08 -0.06
f66e -0.12 -0.23 0.08 -0.11
f66f -0.16 0.09 -0.22 -0.13 -0.17
f66g 0.01 0.16 -0.15 0.02 -0.21 0.13
f66i -0.1 -0.05 -0.1 -0.19 -0.12 -0.02 -0.11
f66j -0.14 0.07 -0.16 -0.15 -0.12 0.04 -0.08 0.12
f66k -0.07 -0.14 -0.11 0.05 -0.09 -0.14 -0.1 -0.05 0.01
f66n -0.12 0.32 -0.14 -0.12 -0.21 0.07 0.1 -0.07 0 -0.13
f66o 0.16 -0.12 -0.02 -0.01 -0.08 -0.21 -0.08 -0.12 -0.12 0.01 -0.04
f66q -0.04 -0.11 -0.07 0.04 -0.05 -0.12 0.01 -0.15 -0.17 -0.06 -0.08 0.01
f66r -0.09 -0.09 -0.1 -0.06 -0.16 -0.08 -0.09 0.02 -0.02 -0.16 0.02 -0.08 -0.05
f66t -0.02 -0.16 0.29 -0.1 0.11 -0.18 -0.09 -0.12 -0.18 -0.1 -0.13 0.05 0.06 -0.12
Note:
Relative cut-off value (highlighted in red) is 0.14, which is 0.2 above the average correlation.
Code
RItargeting(df.neg)

Code
RIitemHierarchy(df.neg)

Code
plot(mirt.rasch, type="trace")

Vi ser nu att f66e, som även tidigare hade hög MSQ, också sticker ut i loading-figuren. Det är också det enda item som har problem med svarskategorierna. Vi provar att slå samman svarskategorierna i mitten och tittar sedan på item fit igen.

2.4.1 Omkodning av svarskategorier för f66e

Code
#recoded.items <- c("f66e","f66p","f66q","f66t")
df.neg$f66e<-car::recode(df.neg$f66e,"2=1;3=2",as.factor=FALSE)

df.erm <- PCM(df.neg)
plotICC(df.erm, item.subset = "f66e")

itemnr item
f66a Jag gör tvärt emot vad människor säger åt mig att göra, bara för att göra dem arga.
f66b Jag gillar att göra spännande och farliga saker, även om det är förbjudet.
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66e Om jag blir arg på någon drar jag mig inte för att skada honom/henne.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
f66t Den som gör mig arg ger jag mig på, även om han/hon inte slagit mig först.

2.5 Rasch-analys 2 negativa items

Code
RIitemfitPCM2(df.neg, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66a 0.859 0.865 -0.976 -1.522
f66b 0.704 0.708 -3.53 -4.282
f66c 0.985 0.945 -0.432 -0.628
f66d 0.973 0.954 -0.341 -0.77
f66e 1.309 1.115 2.544 1.696
f66f 1.123 1.083 1.016 1.103
f66g 0.721 0.75 -2.978 -3.345
f66i 1.101 1.089 1.045 1.205
f66j 1.01 1.002 0.022 0.292
f66k 1.113 1.099 1.276 1.329
f66n 0.722 0.745 -3.444 -3.627
f66o 0.79 0.83 -1.854 -2.166
f66q 1.059 1.013 0.442 0.015
f66r 1.121 1.113 1.618 1.389
f66t 0.919 0.918 -0.22 -0.838
Code
RIpcmPCA(df.neg)
PCA of Rasch model residuals
Eigenvalues
2.03
1.52
1.37
1.18
1.16
Code
RIloadLoc(df.neg)

Code
RIresidcorr(df.neg, cutoff = 0.2)
f66a f66b f66c f66d f66e f66f f66g f66i f66j f66k f66n f66o f66q f66r f66t
f66a
f66b -0.01
f66c 0.02 -0.15
f66d 0.01 -0.1 -0.06
f66e -0.06 -0.16 0.14 -0.07
f66f -0.17 0.08 -0.22 -0.14 -0.15
f66g 0 0.14 -0.16 0 -0.15 0.12
f66i -0.11 -0.06 -0.1 -0.2 -0.1 -0.03 -0.12
f66j -0.15 0.06 -0.17 -0.16 -0.1 0.03 -0.09 0.11
f66k -0.07 -0.16 -0.11 0.05 -0.08 -0.14 -0.12 -0.05 0.01
f66n -0.14 0.3 -0.15 -0.13 -0.15 0.05 0.08 -0.09 -0.01 -0.15
f66o 0.15 -0.14 -0.02 -0.02 -0.03 -0.22 -0.09 -0.12 -0.13 0 -0.05
f66q -0.05 -0.12 -0.07 0.04 -0.02 -0.12 0 -0.16 -0.18 -0.06 -0.09 0
f66r -0.09 -0.1 -0.1 -0.07 -0.14 -0.09 -0.1 0.02 -0.03 -0.16 0.01 -0.09 -0.06
f66t -0.02 -0.17 0.3 -0.1 0.16 -0.18 -0.1 -0.12 -0.18 -0.1 -0.13 0.05 0.06 -0.13
Note:
Relative cut-off value (highlighted in red) is 0.138, which is 0.2 above the average correlation.
Code
RItargeting(df.neg)

Code
RIitemHierarchy(df.neg)

Items f66b och n, samt c och t, har störst residualkorrelationer och behöver åtgärdas genom att en i varje par tas bort.

  • b har två korrelationer, samt lägre fit
  • t har sämst targeting

2.6 Rasch-analys 3 negativa items

Utan items f66b och t.

Code
removed.items <- c("f66b","f66t")

df.neg <- df.neg %>% 
  select(!any_of(removed.items))
itemnr item
f66a Jag gör tvärt emot vad människor säger åt mig att göra, bara för att göra dem arga.
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66e Om jag blir arg på någon drar jag mig inte för att skada honom/henne.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
RIitemfitPCM2(df.neg, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66a 0.837 0.843 -1.564 -1.997
f66c 0.985 0.946 0.082 -0.6
f66d 0.925 0.909 -0.76 -1.166
f66e 1.264 1.098 2.052 1.114
f66f 1.084 1.051 0.94 0.743
f66g 0.71 0.738 -3.188 -3.695
f66i 1.054 1.044 0.816 0.628
f66j 0.975 0.97 -0.282 -0.246
f66k 1.05 1.042 0.946 0.64
f66n 0.731 0.752 -3.654 -3.707
f66o 0.751 0.799 -2.311 -2.478
f66q 1.009 0.984 0.052 -0.08
f66r 1.068 1.059 0.74 0.64
Code
RIpcmPCA(df.neg)
PCA of Rasch model residuals
Eigenvalues
1.76
1.45
1.26
1.18
1.14
Code
RIloadLoc(df.neg)

Code
RIresidcorr(df.neg, cutoff = 0.2)
f66a f66c f66d f66e f66f f66g f66i f66j f66k f66n f66o f66q f66r
f66a
f66c 0.04
f66d 0.01 -0.06
f66e -0.06 0.15 -0.07
f66f -0.17 -0.21 -0.15 -0.15
f66g 0.01 -0.13 0 -0.14 0.13
f66i -0.11 -0.1 -0.22 -0.1 -0.04 -0.12
f66j -0.15 -0.16 -0.17 -0.1 0.03 -0.09 0.1
f66k -0.08 -0.11 0.03 -0.09 -0.16 -0.12 -0.07 0
f66n -0.12 -0.11 -0.13 -0.14 0.07 0.1 -0.08 0.01 -0.14
f66o 0.15 -0.01 -0.03 -0.02 -0.23 -0.09 -0.14 -0.13 -0.01 -0.03
f66q -0.05 -0.06 0.03 -0.02 -0.12 0.01 -0.17 -0.18 -0.07 -0.08 0
f66r -0.1 -0.1 -0.09 -0.15 -0.1 -0.11 0 -0.04 -0.19 0.01 -0.1 -0.07
Note:
Relative cut-off value (highlighted in red) is 0.13, which is 0.2 above the average correlation.
Code
RItargeting(df.neg)

Code
RIitemHierarchy(df.neg)

Vi har några residualkorrelationer som är strax över gränsvärden, men i stort fungerar denna uppsättning items acceptabelt.

2.6.1 Reliabilitet

Code
RItif(df.neg)

Reliabiliteten är god och det finns utrymme att minska på antalet items för att åtgärda de smärre brister som kvarstår.

2.7 Rasch-analys 4 negativa items

Två par av items har residualkorrelationer som överstiger gränsvärdet:

  • f66a med o (provocerar)
  • f66c med e (våldsutövning vid affekt)

Tittar man på innehållet i frågorna är det inte förvånande att se dessa korrelationer eftersom de är såpass likartade. Det gör också att det är rimligt att eliminera frågor utan att tappa innehållsvaliditet.

Vi tar bort:

  • f66a (o har marginellt bättre targeting)
  • f66e (hade problem med svarskategorier)
Code
removed.items <- c("f66b","f66t","f66a","f66e")

df.neg <- df.neg %>% 
  select(!any_of(removed.items))
itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
RIitemfitPCM2(df.neg, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66c 1.047 0.992 0.253 -0.161
f66d 0.936 0.913 -0.626 -1.212
f66f 1.047 1.013 0.603 0.579
f66g 0.7 0.729 -3.441 -3.664
f66i 1.036 1.026 0.63 0.418
f66j 0.946 0.943 -0.691 -0.89
f66k 1.038 1.031 0.364 0.573
f66n 0.708 0.726 -3.951 -3.964
f66o 0.789 0.83 -1.747 -2.164
f66q 1.024 0.984 -0.089 -0.127
f66r 1.043 1.035 0.431 0.237
Code
RIpcmPCA(df.neg)
PCA of Rasch model residuals
Eigenvalues
1.64
1.45
1.25
1.11
1.06
Code
RIloadLoc(df.neg)

Code
RIresidcorr(df.neg, cutoff = 0.2)
f66c f66d f66f f66g f66i f66j f66k f66n f66o f66q f66r
f66c
f66d -0.04
f66f -0.21 -0.18
f66g -0.12 0 0.11
f66i -0.09 -0.23 -0.07 -0.14
f66j -0.16 -0.19 0 -0.11 0.08
f66k -0.1 0.02 -0.19 -0.13 -0.09 -0.02
f66n -0.11 -0.14 0.03 0.09 -0.11 -0.02 -0.17
f66o 0.02 -0.01 -0.23 -0.08 -0.13 -0.14 -0.01 -0.03
f66q -0.04 0.03 -0.14 0 -0.18 -0.19 -0.08 -0.09 0.01
f66r -0.1 -0.1 -0.14 -0.13 -0.02 -0.07 -0.22 -0.02 -0.1 -0.08
Note:
Relative cut-off value (highlighted in red) is 0.117, which is 0.2 above the average correlation.
Code
RItargeting(df.neg)

Code
RIitemHierarchy(df.neg)

Code
plot(mirt.rasch, type="trace")

Code
RIlistitems(df.neg)
itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.

Detta är en välfungerande uppsättning items utifrån analyserna så långt, även om f66g och n uppvisar något låg item fit ZSTD.

2.8 Invarians/DIF - negativa items

2.8.1 Kön

itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
#dif.gender<-recode(dif.gender,"'Pojke'=1;'Flicka'=2",as.factor=FALSE)
RIdifTable(df.neg, dif.gender)

Item 2 3 Mean location StDev MaxDiff
f66c 0.507 0.372 0.440 0.095 0.135
f66d 0.322 0.164 0.243 0.111 0.157
f66f -0.015 0.185 0.085 0.141 0.200
f66g 0.601 0.539 0.570 0.044 0.062
f66i -0.640 -0.286 -0.463 0.250 0.353
f66j -1.617 -1.400 -1.508 0.153 0.217
f66k -0.181 -0.387 -0.284 0.146 0.206
f66n 0.142 -0.005 0.069 0.104 0.148
f66o 0.661 0.403 0.532 0.182 0.258
f66q 1.149 0.962 1.055 0.132 0.187
f66r -0.929 -0.546 -0.738 0.271 0.383
Code
RIdifFigure(df.neg, dif.gender)

Inga större problem. Två item går över 0.3 - f66r och f66i, men ingen över 0.5.

2.8.2 Årskurs

itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
RIdifTable(df.neg, dif.arskurs)

Item 2 3 Mean location StDev MaxDiff
f66c 0.297 0.581 0.439 0.201 0.284
f66d 0.201 0.286 0.244 0.060 0.085
f66f 0.301 -0.089 0.106 0.275 0.389
f66g 0.595 0.550 0.573 0.032 0.045
f66i -0.309 -0.613 -0.461 0.215 0.304
f66j -1.481 -1.553 -1.517 0.050 0.071
f66k -0.289 -0.258 -0.274 0.022 0.032
f66n 0.052 0.094 0.073 0.029 0.041
f66o 0.487 0.564 0.526 0.055 0.077
f66q 0.922 1.172 1.047 0.177 0.250
f66r -0.776 -0.735 -0.755 0.029 0.041
Code
RIdifFigure(df.neg, dif.arskurs)

Inga problem. Item f66f är den som har högst nivå.

2.8.3 Årtal

itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
final.items.neg <- names(df.neg)
#write.csv(final.items, file = "2022-09-16 IFoptimalItems.csv")
df.dif.years.neg <- df.dif.years %>% 
  select(any_of(final.items.neg))

# recoded.items <- c("f66e","f66p","f66q","f66t")
# 
# for (i in recoded.items) {
#   df.omit.na[[i]]<-car::recode(df.omit.na[[i]],"2=1;3=2",as.factor=FALSE)
# }

RIdifTable(df.dif.years.neg, dif.year)

Item 4 5 7 8 11 13 14 15 Mean location StDev MaxDiff
f66c 0.441 0.522 0.520 0.478 0.448 0.446 0.403 0.443 0.462 0.041 0.119
f66d 0.444 0.390 0.377 0.357 0.248 0.275 0.249 0.247 0.323 0.078 0.197
f66f -0.041 -0.084 -0.057 -0.001 0.081 0.120 0.102 0.059 0.022 0.078 0.204
f66g 0.562 0.582 0.546 0.553 0.572 0.513 0.552 0.570 0.556 0.021 0.069
f66i -0.694 -0.662 -0.616 -0.543 -0.472 -0.440 -0.443 -0.409 -0.535 0.111 0.285
f66j -1.604 -1.558 -1.588 -1.602 -1.513 -1.456 -1.403 -1.443 -1.521 0.079 0.201
f66k -0.107 -0.135 -0.177 -0.211 -0.268 -0.359 -0.321 -0.215 -0.224 0.087 0.252
f66n 0.181 0.121 0.101 0.092 0.076 0.078 0.075 0.028 0.094 0.044 0.153
f66o 0.565 0.548 0.542 0.518 0.531 0.484 0.488 0.559 0.529 0.031 0.081
f66q 0.892 0.947 1.030 1.076 1.045 1.005 1.009 0.950 0.994 0.061 0.184
f66r -0.638 -0.670 -0.677 -0.716 -0.748 -0.666 -0.710 -0.788 -0.702 0.049 0.150
Code
RIdifFigure(df.dif.years.neg, dif.year)

Code
RIdifFigTime(df.dif.years.neg, dif.year)

Inget item är problematiskt.

2.8.4 Interaktion årskurs och kön

itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66i Jag ser mig själv som en ganska impulsiv person.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
dfin <- df.neg

df.tree <- data.frame(matrix(ncol = 0, nrow = nrow(dfin)))
df.tree$difdata <- as.matrix(dfin)
df.tree$dif.gender <- dif.gender
df.tree$dif.arskurs <- dif.arskurs

pctree.out <- pctree(difdata ~ dif.gender + dif.arskurs, data = df.tree)
plot(pctree.out)

Code
cutoff <- 0.5
diffig <- itempar(pctree.out) %>%
  as.data.frame() %>%
  t() %>%
  as.data.frame() %>%
  mutate(
    `Mean location` = rowMeans(.),
    StDev = rowSds(as.matrix(.))
  ) %>%
  rowwise() %>%
  mutate(MaxDiff = (max(c_across(c(1:(ncol(.) - 2))))) -
    min(c_across(c(1:(ncol(.) - 2))))) %>%
  ungroup() %>%
  mutate(across(where(is.numeric), round, 3)) %>%
  rownames_to_column(var = "Item") %>%
  mutate(Item = names(dfin)) %>%
  relocate(MaxDiff, .after = last_col())
nodecolsN <- ncol(diffig)-3

  formattable(diffig,
    list(MaxDiff = formatter("span",
      style = ~ style(color = ifelse(MaxDiff < -cutoff,
        "red", ifelse(MaxDiff > cutoff, "red", "black")
      ))
    ),
    formattable::area(col = 2:nodecolsN) ~ color_tile(RISEprimYellowLight, RISEprimGreen)
    ),
    table.attr = "class=\"table table-striped\" style=\"font-size: 15px; font-family: Lato\""
  )
Item 3 4 6 7 Mean location StDev MaxDiff
f66c 0.386 0.608 0.198 0.536 0.432 0.181 0.410
f66d 0.304 0.330 0.101 0.222 0.239 0.103 0.229
f66f 0.213 -0.183 0.393 0.015 0.109 0.249 0.577
f66g 0.612 0.588 0.581 0.500 0.570 0.049 0.113
f66i -0.463 -0.783 -0.152 -0.411 -0.452 0.259 0.631
f66j -1.578 -1.661 -1.386 -1.431 -1.514 0.128 0.275
f66k -0.248 -0.135 -0.349 -0.426 -0.290 0.126 0.291
f66n 0.116 0.164 -0.018 0.002 0.066 0.088 0.183
f66o 0.608 0.700 0.374 0.427 0.527 0.153 0.326
f66q 1.013 1.290 0.849 1.079 1.058 0.182 0.441
f66r -0.964 -0.919 -0.591 -0.513 -0.747 0.228 0.451

Här finns skillnader på två items, f66f och f66i, där flickor gy 2 och pojkar åk 9 skiljer sig åt över gränsvärdet 0.5. Ytterligare tre items går över 0.4.

Eftersom vi har relativt många items förefaller den enklaste åtgärden vara att ta bort de två items som når problematiska nivåer.

2.9 Rasch-analys 5 negativa items

Två items tas bort p.g.a. DIF, interaktion mellan kön och årskurs:

  • f66f
  • f66i
Code
removed.items <- c("f66b","f66t","f66a","f66e","f66f","f66i")

df.neg <- df.neg %>% 
  select(!any_of(removed.items))
itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
RIitemfitPCM2(df.neg, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66c 1.03 0.975 0.64 -0.139
f66d 0.877 0.872 -1.608 -1.866
f66g 0.732 0.766 -2.898 -3.195
f66j 1.021 1.012 0.166 0.019
f66k 1.024 1.02 0.172 0.248
f66n 0.738 0.757 -3.362 -3.602
f66o 0.753 0.79 -2.256 -2.523
f66q 0.968 0.957 -0.161 -0.186
f66r 1.062 1.053 0.895 0.756
Code
RIpcmPCA(df.neg)
PCA of Rasch model residuals
Eigenvalues
1.47
1.32
1.22
1.15
1.06
Code
RIloadLoc(df.neg)

Code
RIresidcorr(df.neg, cutoff = 0.2)
f66c f66d f66g f66j f66k f66n f66o f66q f66r
f66c
f66d -0.1
f66g -0.14 -0.03
f66j -0.16 -0.2 -0.09
f66k -0.15 -0.03 -0.15 -0.03
f66n -0.13 -0.18 0.1 0 -0.19
f66o -0.04 -0.09 -0.1 -0.15 -0.06 -0.07
f66q -0.09 -0.03 -0.02 -0.21 -0.13 -0.12 -0.05
f66r -0.13 -0.15 -0.13 -0.06 -0.25 -0.03 -0.14 -0.11
Note:
Relative cut-off value (highlighted in red) is 0.099, which is 0.2 above the average correlation.
Code
RItargeting(df.neg)

Figur 2.1: TIF-kurva negativa items

Code
RIitemHierarchy(df.neg)

Figur 2.2: TIF-kurva negativa items

Code
RIlistitems(df.neg)
itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.

2.10 Person fit negativa items

Code
RIpfit(df.neg)

2.10.1 Reliabilitet negativa items

Code
RItif(df.neg)

Figur 2.3: TIF-kurva negativa items

2.11 Item-parametrar negativa items

itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66j Jag vill gärna vara där det händer spännande saker.
f66k Jag kan få andra att tro på nästan vad som helst.
f66n Jag gör dumma saker även om de är lite farliga.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
df.dif.years.neg <- df.dif.years.neg %>% 
  select(any_of(names(df.neg)))

RIitemparams(df.dif.years.neg, "IFnegativaItems.csv")
Threshold 1 Threshold 2 Threshold 3 Item location
f66c -0.01 0.89 1.49 0.79
f66d -0.50 0.67 1.77 0.65
f66g -0.30 1.08 1.86 0.88
f66j -2.60 -1.61 0.43 -1.26
f66k -1.40 0.24 1.40 0.08
f66n -0.81 0.38 1.64 0.4
f66o 0.07 0.89 1.61 0.85
f66q 0.77 1.54 1.67 1.33
f66r -1.97 -0.50 1.21 -0.42
Code
itemlabels %>% 
  filter(itemnr %in% names(df.dif.years.neg)) %>% 
  write_csv("IFnegItemnr.csv")

2.12 Transformeringstabell

Code
RIscoreSE(df.dif.years.neg)
Ordinal sum score Logit score Logit std.error
0 -4.25 NA
1 -3.38 1.05
2 -2.58 0.78
3 -2.06 0.67
4 -1.66 0.60
5 -1.32 0.56
6 -1.03 0.52
7 -0.77 0.50
8 -0.53 0.47
9 -0.32 0.45
10 -0.12 0.44
11 0.07 0.43
12 0.25 0.42
13 0.42 0.41
14 0.58 0.40
15 0.74 0.40
16 0.91 0.40
17 1.07 0.40
18 1.23 0.41
19 1.40 0.42
20 1.58 0.43
21 1.78 0.45
22 2.00 0.48
23 2.25 0.53
24 2.57 0.60
25 2.99 0.72
26 3.70 1.01
27 4.48 NA

2.13 Rasch-analys 1 positiva items

Code
items.pos <- c("f66h","f66l","f66m","f66p","f66s","f66u")

df.pos <- df.omit.na %>% 
  select(any_of(items.pos))
Code
RIlistItemsMargin(df.pos, 13)
itemnr item
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66p Det är fel att fuska i skolan.
f66s Om jag ställs inför en svår uppgift så väljer jag att göra något annat.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
RIitemfitPCM2(df.pos, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66h 0.835 0.827 -2.367 -2.726
f66l 0.974 0.97 -0.354 -0.415
f66m 0.999 0.974 0.008 -0.243
f66p 0.821 0.819 -1.971 -2.405
f66s 0.774 0.784 -3.09 -3.063
f66u 0.919 0.891 -1.118 -1.542
Code
RIpcmPCA(df.pos)
PCA of Rasch model residuals
Eigenvalues
1.68
1.25
1.14
1.02
0.91
Code
RIloadLoc(df.pos)

Code
RIresidcorr(df.pos, cutoff = 0.2)
f66h f66l f66m f66p f66s f66u
f66h
f66l -0.07
f66m -0.09 -0.27
f66p -0.09 -0.24 -0.07
f66s 0.02 0.19 -0.17 -0.16
f66u -0.17 -0.2 -0.06 0.06 -0.15
Note:
Relative cut-off value (highlighted in red) is 0.101, which is 0.2 above the average correlation.
Code
RItargeting(df.pos)

Code
RIitemHierarchy(df.pos)

Code
plot(mirt.rasch, type="trace")

Item f66s behöver tas bort p.g.a. residualkorrelation med f66l och klart sämre item fit än l.

2.13.1 Omkodning av svarskategorier för f66p

Eftersom svarskategorierna är oordnade slår vi samman de två mittersta. Test visade att de två översta inte kunde slås samman.

Code
df.pos$f66p<-recode(df.pos$f66p,"2=1;3=2", as.factor = F)

df.erm <- PCM(df.pos)
plotICC(df.erm, item.subset = "f66p")

2.14 Rasch-analys 2 positiva items

(f66s borttagen, f66p omkodad)

Item f66s behöver tas bort p.g.a. residualkorrelation med f66l och klart sämre item fit än l.

Code
df.pos$f66s <- NULL
RIlistItemsMargin(df.pos, 13)
itemnr item
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66p Det är fel att fuska i skolan.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
RIitemfitPCM2(df.pos, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66h 0.78 0.776 -3.231 -3.426
f66l 1.005 0.984 -0.017 -0.375
f66m 0.894 0.881 -1.59 -1.646
f66p 0.811 0.813 -2.217 -2.629
f66u 0.825 0.807 -2.071 -2.527
Code
RIpcmPCA(df.pos)
PCA of Rasch model residuals
Eigenvalues
1.49
1.29
1.20
1.02
0.00
Code
RIloadLoc(df.pos)

Code
RIresidcorr(df.pos, cutoff = 0.2)
f66h f66l f66m f66p f66u
f66h
f66l -0.04
f66m -0.09 -0.26
f66p 0 -0.15 -0.02
f66u -0.15 -0.18 -0.07 0.11
Note:
Relative cut-off value (highlighted in red) is 0.114, which is 0.2 above the average correlation.
Code
RItargeting(df.pos)

Code
RIitemHierarchy(df.pos)

2.15 Invarians/DIF - positiva items

2.15.1 Kön

Code
RIlistItemsMargin(df.pos)
itemnr item
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66p Det är fel att fuska i skolan.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
#dif.gender<-recode(dif.gender,"'Pojke'=1;'Flicka'=2",as.factor=FALSE)
RIdifTable(df.pos, dif.gender)

Item 2 3 Mean location StDev MaxDiff
f66h -0.590 -0.341 -0.466 0.176 0.249
f66l -0.370 -0.042 -0.206 0.232 0.329
f66m 0.006 -0.085 -0.040 0.064 0.091
f66p 0.623 0.228 0.426 0.279 0.395
f66u 0.332 0.239 0.285 0.066 0.093
Code
RIdifFigure(df.pos, dif.gender)

Items f66l och p har något hög DIF, men ej över gränsvärde 0.5.

2.15.2 Årskurs

itemnr item
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66p Det är fel att fuska i skolan.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
RIdifTable(df.pos, dif.arskurs)

Item 2 3 Mean location StDev MaxDiff
f66h -0.504 -0.438 -0.471 0.047 0.066
f66l -0.135 -0.292 -0.214 0.111 0.156
f66m -0.054 -0.015 -0.034 0.027 0.039
f66p 0.395 0.454 0.425 0.042 0.059
f66u 0.297 0.290 0.294 0.005 0.007
Code
RIdifFigure(df.pos, dif.arskurs)

Inga problem.

2.15.3 Årtal

itemnr item
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66p Det är fel att fuska i skolan.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
final.items.pos <- names(df.pos)
#write.csv(final.items, file = "2022-09-16 IFoptimalItems.csv")
df.dif.years.pos <- df.dif.years %>% 
  select(any_of(final.items.pos))

df.dif.years.pos$f66p<-recode(df.dif.years.pos$f66p,"2=1;3=2", as.factor = F)

RIdifTable(df.dif.years.pos, dif.year)

Item 4 6 7 9 10 13 14 15 Mean location StDev MaxDiff
f66h -0.491 -0.408 -0.404 -0.419 -0.468 -0.430 -0.428 -0.337 -0.423 0.046 0.154
f66l -0.023 -0.059 -0.069 -0.176 -0.221 -0.257 -0.304 -0.317 -0.178 0.116 0.294
f66m -0.156 -0.145 -0.096 -0.064 -0.032 0.037 0.103 0.074 -0.035 0.098 0.259
f66p 0.373 0.390 0.360 0.361 0.428 0.390 0.360 0.334 0.375 0.028 0.094
f66u 0.296 0.222 0.208 0.297 0.293 0.260 0.268 0.245 0.261 0.034 0.089
Code
RIdifFigure(df.dif.years.pos, dif.year)

Code
RIdifFigTime(df.dif.years.pos, dif.year)

Inget item uppvisar problematisk nivå av DIF.

2.15.4 Interaktion årskurs och kön

itemnr item
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66p Det är fel att fuska i skolan.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
dfin <- df.pos

df.tree <- data.frame(matrix(ncol = 0, nrow = nrow(dfin)))
df.tree$difdata <- as.matrix(dfin)
df.tree$dif.gender <- dif.gender
df.tree$dif.arskurs <- dif.arskurs

pctree.out <- pctree(difdata ~ dif.gender + dif.arskurs, data = df.tree)
plot(pctree.out)

Code
cutoff <- 0.5
diffig <- itempar(pctree.out) %>%
  as.data.frame() %>%
  t() %>%
  as.data.frame() %>%
  mutate(
    `Mean location` = rowMeans(.),
    StDev = rowSds(as.matrix(.))
  ) %>%
  rowwise() %>%
  mutate(MaxDiff = (max(c_across(c(1:(ncol(.) - 2))))) -
    min(c_across(c(1:(ncol(.) - 2))))) %>%
  ungroup() %>%
  mutate(across(where(is.numeric), round, 3)) %>%
  rownames_to_column(var = "Item") %>%
  mutate(Item = names(dfin)) %>%
  relocate(MaxDiff, .after = last_col())

nodecolsN <- ncol(diffig)-3

  formattable(diffig,
    list(MaxDiff = formatter("span",
      style = ~ style(color = ifelse(MaxDiff < -cutoff,
        "red", ifelse(MaxDiff > cutoff, "red", "black")
      ))
    ),
    formattable::area(col = 2:nodecolsN) ~ color_tile(RISEprimYellowLight, RISEprimGreen)
    ),
    table.attr = "class=\"table table-striped\" style=\"font-size: 15px; font-family: Lato\""
  )
Item 3 4 6 7 Mean location StDev MaxDiff
f66h -0.582 -0.600 -0.434 -0.245 -0.465 0.165 0.356
f66l -0.293 -0.432 0.039 -0.116 -0.200 0.205 0.471
f66m 0.023 -0.011 -0.137 -0.039 -0.041 0.069 0.160
f66p 0.540 0.694 0.252 0.202 0.422 0.234 0.492
f66u 0.312 0.349 0.280 0.198 0.285 0.064 0.151

2.16 Person fit positiva items

Code
RIpfit(df.pos)

2.17 Reliabilitet positiva items

Code
RItif(df.pos)

2.18 Item-parametrar positiva items

Code
RIitemparams(df.dif.years.pos, "IFpositivaItems.csv")
Threshold 1 Threshold 2 Threshold 3 Item location
f66h -1.15 0.32 0.65 -0.06
f66l -1.11 0.28 1.39 0.19
f66m -0.87 0.71 1.11 0.32
f66p -0.06 1.52 NA 0.73
f66u -0.27 0.90 1.22 0.62
Code
itemlabels %>% 
  filter(itemnr %in% names(df.dif.years.pos)) %>% 
  write_csv("IFposItemnr.csv")
Code
RIscoreSE(df.dif.years.pos)
Ordinal sum score Logit score Logit std.error
0 -3.15 NA
1 -2.27 1.06
2 -1.46 0.79
3 -0.94 0.67
4 -0.53 0.60
5 -0.20 0.56
6 0.10 0.54
7 0.39 0.53
8 0.66 0.53
9 0.94 0.54
10 1.25 0.57
11 1.60 0.63
12 2.06 0.74
13 2.80 1.02
14 3.60 NA

Denna uppsättning av items bildar ett fungerande index, men det är oklart vad indexet representerar och därmed hur det skulle kunna användas. De fem frågorna kommer från tre olika tänkta delskalor (se nästa avsnitt).

2.19 Analys av delskalor

De 21 frågor som ingår under rubriken “Individfaktorer” har delats in i sju delskalor med tre items vardera.

  • Trotsighet (f66a,f66g,f66o)
  • Spänningssökande - (f66b,f66j,f66n)
  • Aggressivitet - (f66c,f66e,f66t)
  • Antisocialt beteende - (f66d,f66f,f66k)
  • Problemlösning - (f66h,f66l,f66s)
  • Impulsivitet - (f66i,f66m,f66r)
  • Moral - (f66p,f66q,f66u)
Code
# create vectors with items for each subscale
Trotsighet <- as.character(expression(f66a,f66g,f66o))
Spänningssökande <- as.character(expression(f66b,f66j,f66n))
Aggressivitet <- as.character(expression(f66c,f66e,f66t))
Antisocialt <- as.character(expression(f66d,f66f,f66k))
Problemlösning <- as.character(expression(f66h,f66l,f66s))
Impulsivitet <- as.character(expression(f66i,f66m,f66r))
Moral <- as.character(expression(f66p,f66q,f66u))

2.19.1 Trotsighet

Code
# subset items to dataframe
df.subskala <- df.omit.na %>% 
  select(all_of(Trotsighet))
Code
RIlistItemsMargin(df.subskala, 13)
itemnr item
f66a Jag gör tvärt emot vad människor säger åt mig att göra, bara för att göra dem arga.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
Code
RIitemfitPCM2(df.subskala, 350, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66a 0.716 0.687 -3.424 -4.025
f66g 0.826 0.825 -2.064 -2.132
f66o 0.696 0.686 -3.827 -4.077
Code
RIpcmPCA(df.subskala)
PCA of Rasch model residuals
Eigenvalues
1.6
1.4
0.0
Code
RIloadLoc(df.subskala)

Code
RIresidcorr(df.subskala, cutoff = 0.2)
f66a f66g f66o
f66a
f66g -0.34
f66o -0.26 -0.44
Note:
Relative cut-off value (highlighted in red) is -0.143, which is 0.2 above the average correlation.
Code
RItargeting(df.subskala)

Code
RIitemHierarchy(df.subskala)

Code
plot(mirt.rasch, type="trace")

Code
RIlistitems(df.subskala)
itemnr item
f66a Jag gör tvärt emot vad människor säger åt mig att göra, bara för att göra dem arga.
f66g Jag struntar i regler som hindrar mig från att göra det jag vill göra.
f66o Jag vill gärna se hur långt jag kan gå innan folk får nog.
Code
RItif(df.subskala)

Code
RIpfit(df.subskala)

2.19.2 Spänningssökande

Code
# subset items to dataframe
df.subskala <- df.omit.na %>% 
  select(all_of(Spänningssökande))
Code
RIlistItemsMargin(df.subskala, 13)
itemnr item
f66b Jag gillar att göra spännande och farliga saker, även om det är förbjudet.
f66j Jag vill gärna vara där det händer spännande saker.
f66n Jag gör dumma saker även om de är lite farliga.
Code
RIitemfitPCM2(df.subskala, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66b 0.558 0.552 -5.908 -6.541
f66j 0.929 0.885 -0.848 -1.483
f66n 0.624 0.612 -4.682 -5.41
Code
RIpcmPCA(df.subskala)
PCA of Rasch model residuals
Eigenvalues
1.67
1.30
0.03
Code
RIloadLoc(df.subskala)

Code
RIresidcorr(df.subskala, cutoff = 0.2)
f66b f66j f66n
f66b
f66j -0.42
f66n -0.16 -0.5
Note:
Relative cut-off value (highlighted in red) is -0.159, which is 0.2 above the average correlation.
Code
RItargeting(df.subskala)

Code
RIitemHierarchy(df.subskala)

Code
plot(mirt.rasch, type="trace")

Code
RIlistitems(df.subskala)
itemnr item
f66b Jag gillar att göra spännande och farliga saker, även om det är förbjudet.
f66j Jag vill gärna vara där det händer spännande saker.
f66n Jag gör dumma saker även om de är lite farliga.
Code
RItif(df.subskala)

Code
RIpfit(df.subskala)

2.19.3 Aggressivitet

Code
# subset items to dataframe
df.subskala <- df.omit.na %>% 
  select(all_of(Aggressivitet))
Code
RIlistItemsMargin(df.subskala, 13)
itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66e Om jag blir arg på någon drar jag mig inte för att skada honom/henne.
f66t Den som gör mig arg ger jag mig på, även om han/hon inte slagit mig först.
Code
RIitemfitPCM2(df.subskala, 400, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66c 0.764 0.772 -3.281 -2.942
f66e 0.78 0.823 -2.545 -2.447
f66t 0.597 0.602 -3.387 -4.628
Code
RIpcmPCA(df.subskala)
PCA of Rasch model residuals
Eigenvalues
1.80
1.18
0.02
Code
RIloadLoc(df.subskala)

Code
RIresidcorr(df.subskala, cutoff = 0.2)
f66c f66e f66t
f66c
f66e -0.55
f66t -0.02 -0.41
Note:
Relative cut-off value (highlighted in red) is -0.125, which is 0.2 above the average correlation.
Code
RItargeting(df.subskala)

Code
RIitemHierarchy(df.subskala)

Code
plot(mirt.rasch, type="trace")

Code
RIlistitems(df.subskala)
itemnr item
f66c Jag tål inte att bli provocerad, då kan jag slå till någon.
f66e Om jag blir arg på någon drar jag mig inte för att skada honom/henne.
f66t Den som gör mig arg ger jag mig på, även om han/hon inte slagit mig först.
Code
RItif(df.subskala)

Code
RIpfit(df.subskala)

2.19.4 Antisocialt beteende

Code
# subset items to dataframe
df.subskala <- df.omit.na %>% 
  select(all_of(Antisocialt))
Code
RIlistItemsMargin(df.subskala, 13)
itemnr item
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66k Jag kan få andra att tro på nästan vad som helst.
Code
RIitemfitPCM2(df.subskala, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66d 0.686 0.684 -4.026 -4.543
f66f 0.823 0.821 -2.145 -2.44
f66k 0.746 0.752 -3.51 -3.364
Code
RIpcmPCA(df.subskala)
PCA of Rasch model residuals
Eigenvalues
1.63
1.37
0.00
Code
RIloadLoc(df.subskala)

Code
RIresidcorr(df.subskala, cutoff = 0.2)
f66d f66f f66k
f66d
f66f -0.28
f66k -0.09 -0.34
Note:
Relative cut-off value (highlighted in red) is -0.037, which is 0.2 above the average correlation.
Code
RItargeting(df.subskala)

Code
RIitemHierarchy(df.subskala)

Code
plot(mirt.rasch, type="trace")

Code
RIlistitems(df.subskala)
itemnr item
f66d Jag ljuger för att få fördelar eller slippa göra jobbiga saker.
f66f Jag är ofta ute på natten tillsammans med kamrater.
f66k Jag kan få andra att tro på nästan vad som helst.
Code
RItif(df.subskala)

Code
RIpfit(df.subskala)

2.19.5 Problemlösning

Code
# subset items to dataframe
df.subskala <- df.omit.na %>% 
  select(all_of(Problemlösning))
Code
RIlistItemsMargin(df.subskala, 13)
itemnr item
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66s Om jag ställs inför en svår uppgift så väljer jag att göra något annat.
Code
RIitemfitPCM2(df.subskala, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66h 0.812 0.804 -2.433 -2.865
f66l 0.76 0.758 -3.348 -3.34
f66s 0.636 0.628 -5.386 -5.474
Code
RIpcmPCA(df.subskala)
PCA of Rasch model residuals
Eigenvalues
1.66
1.34
0.00
Code
RIloadLoc(df.subskala)

Code
RIresidcorr(df.subskala, cutoff = 0.2)
f66h f66l f66s
f66h
f66l -0.38
f66s -0.24 -0.08
Note:
Relative cut-off value (highlighted in red) is -0.031, which is 0.2 above the average correlation.
Code
RItargeting(df.subskala)

Code
RIitemHierarchy(df.subskala)

Code
plot(mirt.rasch, type="trace")

Code
RIlistitems(df.subskala)
itemnr item
f66h Jag tycker det är roligt att lösa svåra problem och uppgifter.
f66l Jag blir ofta osäker när jag ställs inför nya uppgifter.
f66s Om jag ställs inför en svår uppgift så väljer jag att göra något annat.
Code
RItif(df.subskala)

Code
RIpfit(df.subskala)

2.19.6 Impulsivitet

Code
# subset items to dataframe
df.subskala <- df.omit.na %>% 
  select(all_of(Impulsivitet))
Code
RIlistItemsMargin(df.subskala, 13)
itemnr item
f66i Jag ser mig själv som en ganska impulsiv person.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
RIitemfitPCM2(df.subskala, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66i 0.755 0.747 -3.49 -3.864
f66m 0.817 0.803 -2.499 -2.756
f66r 0.644 0.641 -5.372 -5.414
Code
RIpcmPCA(df.subskala)
PCA of Rasch model residuals
Eigenvalues
1.57
1.42
0.01
Code
RIloadLoc(df.subskala)

Code
RIresidcorr(df.subskala, cutoff = 0.2)
f66i f66m f66r
f66i
f66m -0.3
f66r -0.1 -0.18
Note:
Relative cut-off value (highlighted in red) is 0.006, which is 0.2 above the average correlation.
Code
RItargeting(df.subskala)

Code
RIitemHierarchy(df.subskala)

Code
plot(mirt.rasch, type="trace")

Code
RIlistitems(df.subskala)
itemnr item
f66i Jag ser mig själv som en ganska impulsiv person.
f66m Jag tänker oftast efter innan jag talar eller gör saker.
f66r Det händer att jag gör saker utan att tänka mig för.
Code
RItif(df.subskala)

Code
RIpfit(df.subskala)

2.19.7 Moral

Code
# subset items to dataframe
df.subskala <- df.omit.na %>% 
  select(all_of(Moral))
Code
RIlistItemsMargin(df.subskala, 13)
itemnr item
f66p Det är fel att fuska i skolan.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
RIitemfitPCM2(df.subskala, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f66p 0.628 0.654 -4.105 -4.87
f66q 0.755 0.8 -1.879 -1.95
f66u 0.757 0.776 -3.097 -2.83
Code
RIpcmPCA(df.subskala)
PCA of Rasch model residuals
Eigenvalues
1.59
1.39
0.01
Code
RIloadLoc(df.subskala)

Code
RIresidcorr(df.subskala, cutoff = 0.2)
f66p f66q f66u
f66p
f66q -0.2
f66u -0.19 -0.21
Note:
Relative cut-off value (highlighted in red) is -0.002, which is 0.2 above the average correlation.
Code
RItargeting(df.subskala)

Code
RIitemHierarchy(df.subskala)

Code
plot(mirt.rasch, type="trace")

Code
RIlistitems(df.subskala)
itemnr item
f66p Det är fel att fuska i skolan.
f66q Jag tycker att det är OK att ta något utan att fråga, om man inte blir upptäckt.
f66u Det är viktigt att vara ärlig mot föräldrarna, även om de blir arga.
Code
RItif(df.subskala)

Code
RIpfit(df.subskala)

2.20 Delskalor - sammanfattande kommentar

Alla delskalor har flera items som uppvisar låg item fit, vilket innebär att svaren är för förutsägbara tillsammans med övriga frågor. Det vill säga att de tillför relativt lite information.

All delskalor uppvisar också låg reliabilitet.

2.21 Programvara som använts

Code
pkgs <- cite_packages(cite.tidyverse = TRUE, 
                      output = "table",
                      bib.file = "grateful-refs.bib",
                      include.RStudio = TRUE)
formattable(pkgs, 
            table.attr = 'class=\"table table-striped\" style="font-size: 15px; font-family: Lato; width: 80%"')
Package Version Citation
arrow 10.0.0 Richardson et al. (2022)
base 4.2.2 R Core Team (2022)
car 3.1.1 Fox and Weisberg (2019)
cowplot 1.1.1 Wilke (2020)
eRm 1.0.2 Mair and Hatzinger (2007b); Mair and Hatzinger (2007a); Hatzinger and Rusch (2009); Rusch, Maier, and Hatzinger (2013); Koller, Maier, and Hatzinger (2015); Debelak and Koller (2019); Mair, Hatzinger, and Maier (2021)
foreach 1.5.2 Microsoft and Weston (2022)
formattable 0.2.1 Ren and Russell (2021)
ggrepel 0.9.3 Slowikowski (2023)
glue 1.6.2 Hester and Bryan (2022)
grateful 0.1.11 Rodríguez-Sánchez, Jackson, and Hutchins (2022)
kableExtra 1.3.4 Zhu (2021)
knitr 1.42 Xie (2014); Xie (2015); Xie (2023)
matrixStats 0.63.0 Bengtsson (2022)
mirt 1.37.1 Chalmers (2012)
psych 2.2.9 Revelle (2022)
psychotree 0.16.0 Trepte and Verbeet (2010); Strobl, Wickelmaier, and Zeileis (2011); Strobl, Kopf, and Zeileis (2015); Komboz, Zeileis, and Strobl (2018); Wickelmaier and Zeileis (2018)
reshape 0.8.9 Wickham (2007)
RISEkbmRasch 0.1.9 Johansson (2023)
rmarkdown 2.20 Xie, Allaire, and Grolemund (2018); Xie, Dervieux, and Riederer (2020); Allaire et al. (2023)
tidyverse 1.3.2 Wickham et al. (2019)

2.22 Referenser

Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, Winston Chang, and Richard Iannone. 2023. Rmarkdown: Dynamic Documents for r. https://github.com/rstudio/rmarkdown.
Bengtsson, Henrik. 2022. matrixStats: Functions That Apply to Rows and Columns of Matrices (and to Vectors). https://CRAN.R-project.org/package=matrixStats.
Chalmers, R. Philip. 2012. mirt: A Multidimensional Item Response Theory Package for the R Environment.” Journal of Statistical Software 48 (6): 1–29. https://doi.org/10.18637/jss.v048.i06.
Debelak, Rudolf, and Ingrid Koller. 2019. Testing the Local Independence Assumption of the Rasch Model With Q3-Based Nonparametric Model Tests.” Applied Psychological Measurement. https://doi.org/10.1177/0146621619835501.
Fox, John, and Sanford Weisberg. 2019. An R Companion to Applied Regression. Third. Thousand Oaks CA: Sage. https://socialsciences.mcmaster.ca/jfox/Books/Companion/.
Hatzinger, Reinhold, and Thomas Rusch. 2009. IRT models with relaxed assumptions in eRm: A manual-like instruction.” Psychology Science Quarterly 51.
Hester, Jim, and Jennifer Bryan. 2022. Glue: Interpreted String Literals. https://CRAN.R-project.org/package=glue.
Johansson, Magnus. 2023. RISEkbmRasch: Psychometric Analysis in r with Rasch Measurement Theory. https://github.com/pgmj/RISEkbmRasch.
Koller, Ingrid, Marco Johannes Maier, and Reinhold Hatzinger. 2015. An Empirical Power Analysis of Quasi-Exact Tests for the Rasch Model: Measurement Invariance in Small Samples.” Methodology 11. https://doi.org/10.1027/1614-2241/a000090.
Komboz, Basil, Achim Zeileis, and Carolin Strobl. 2018. “Tree-Based Global Model Tests for Polytomous Rasch Models.” Educational and Psychological Measurement 78 (1): 128–66. https://doi.org/10.1177/0013164416664394.
Mair, Patrick, and Reinhold Hatzinger. 2007a. CML based estimation of extended Rasch models with the eRm package in R.” Psychology Science 49.
———. 2007b. Extended Rasch modeling: The eRm package for the application of IRT models in R.” Journal of Statistical Software 20. https://www.jstatsoft.org/v20/i09.
Mair, Patrick, Reinhold Hatzinger, and Marco Johannes Maier. 2021. eRm: Extended Rasch Modeling. https://cran.r-project.org/package=eRm.
Microsoft, and Steve Weston. 2022. Foreach: Provides Foreach Looping Construct. https://CRAN.R-project.org/package=foreach.
R Core Team. 2022. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Ren, Kun, and Kenton Russell. 2021. Formattable: Create ’Formattable’ Data Structures. https://CRAN.R-project.org/package=formattable.
Revelle, William. 2022. Psych: Procedures for Psychological, Psychometric, and Personality Research. Evanston, Illinois: Northwestern University. https://CRAN.R-project.org/package=psych.
Richardson, Neal, Ian Cook, Nic Crane, Dewey Dunnington, Romain François, Jonathan Keane, Dragoș Moldovan-Grünfeld, Jeroen Ooms, and Apache Arrow. 2022. Arrow: Integration to ’Apache’ ’Arrow’. https://CRAN.R-project.org/package=arrow.
Rodríguez-Sánchez, Francisco, Connor P. Jackson, and Shaurita D. Hutchins. 2022. Grateful: Facilitate Citation of r Packages. https://github.com/Pakillo/grateful.
Rusch, Thomas, Marco Johannes Maier, and Reinhold Hatzinger. 2013. Linear logistic models with relaxed assumptions in R.” In Algorithms from and for Nature and Life, edited by Berthold Lausen, Dirk van den Poel, and Alfred Ultsch. Studies in Classification, Data Analysis, and Knowledge Organization. New York: Springer. https://doi.org/10.1007/978-3-319-00035-0_34.
Slowikowski, Kamil. 2023. Ggrepel: Automatically Position Non-Overlapping Text Labels with ’Ggplot2’. https://CRAN.R-project.org/package=ggrepel.
Strobl, Carolin, Julia Kopf, and Achim Zeileis. 2015. “Rasch Trees: A New Method for Detecting Differential Item Functioning in the Rasch Model.” Psychometrika 80 (2): 289–316. https://doi.org/10.1007/s11336-013-9388-3.
Strobl, Carolin, Florian Wickelmaier, and Achim Zeileis. 2011. “Accounting for Individual Differences in Bradley-Terry Models by Means of Recursive Partitioning.” Journal of Educational and Behavioral Statistics 36 (2): 135–53. https://doi.org/10.3102/1076998609359791.
Trepte, Sabine, and Markus Verbeet, eds. 2010. Allgemeinbildung in Deutschland – Erkenntnisse Aus Dem SPIEGEL Studentenpisa-Test. Wiesbaden: VS Verlag.
Wickelmaier, Florian, and Achim Zeileis. 2018. “Using Recursive Partitioning to Account for Parameter Heterogeneity in Multinomial Processing Tree Models.” Behavior Research Methods 50 (3): 1217–33. https://doi.org/10.3758/s13428-017-0937-z.
Wickham, Hadley. 2007. “Reshaping Data with the Reshape Package.” Journal of Statistical Software 21 (12). https://www.jstatsoft.org/v21/i12/.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019. “Welcome to the tidyverse.” Journal of Open Source Software 4 (43): 1686. https://doi.org/10.21105/joss.01686.
Wilke, Claus O. 2020. Cowplot: Streamlined Plot Theme and Plot Annotations for ’Ggplot2’. https://CRAN.R-project.org/package=cowplot.
Xie, Yihui. 2014. “Knitr: A Comprehensive Tool for Reproducible Research in R.” In Implementing Reproducible Computational Research, edited by Victoria Stodden, Friedrich Leisch, and Roger D. Peng. Chapman; Hall/CRC.
———. 2015. Dynamic Documents with R and Knitr. 2nd ed. Boca Raton, Florida: Chapman; Hall/CRC. https://yihui.org/knitr/.
———. 2023. Knitr: A General-Purpose Package for Dynamic Report Generation in r. https://yihui.org/knitr/.
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown.
Xie, Yihui, Christophe Dervieux, and Emily Riederer. 2020. R Markdown Cookbook. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown-cookbook.
Zhu, Hao. 2021. kableExtra: Construct Complex Table with ’Kable’ and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.