9  Mobbning i skolan

Author
Affiliation
Magnus Johansson
Published

May 5, 2023

Items i f60 inleds med texten: Har du känt dig mobbad eller trakasserad i skolan det här läsåret? (Markera med ett eller flera kryss)

Item f60a har enbart kryssruta för “Nej” och har därför tagits bort. Övriga items i f60 har också kryssrutor, vilket innebär att de antingen är förkryssade eller inte. Dessa har blivit kodade som 1 när ett svar är förkryssat, och 0 när kryss saknas.

Item F61 efterfrågar frekvens på mobbning/trakassering i skolan under läsåret, och har därför fler svarskategorier.

Eftersom det är relativt få respondenter i varje års mätning lägger vi samman 2012-2018 och får 5228 respondenter totalt.

9.1 Deskriptiva data

9.1.1 Demografi

Code
RIdemographics(dif.gender, "Kön")
RIdemographics(dif.arskurs, "Årskurs")
Kön n Percent
Flicka 3291 62.9
Pojke 1937 37.1
Årskurs n Percent
Åk 9 3212 61.4
Gy 2 2016 38.6

9.1.2 Item-data

Code
RIlistItemsMargin(df.omit.na, "12")
itemnr item
f60b Jag har blivit hånad, förlöjligad, kallad öknamn eller blivit retad på ett obehagligt och sårande sätt
f60c Jag har blivit utfrusen av andra elever
f60d Jag har blivit slagen, sparkad, knuffad eller stängd inne
f60e Någon elev har spritt lögner eller falska rykten om mig och försökt få andra att tycka illa om mig
f60f Jag har blivit fråntagen pengar eller saker eller fått saker förstörda
f60g Jag har blivit hotad eller tvingad att göra saker som jag inte ville göra
f60h Lärare har psykat eller på annat sätt varit elaka mot mig
f60i Jag har mobbats på annat sätt.
F61 Hur ofta har du blivit mobbad eller trakasserad i skolan det här läsåret?
F63 Har du blivit mobbad eller trakasserad via internet eller SMS/MMS det här läsåret?
Code
RItileplot(df.omit.na)

Code
RIbarstack(df.omit.na)

Code
RIbarplot(df.omit.na)

9.2 Rasch-analys 1

Eftersom vi har en blandning av dikotoma och polytoma (fler än 2 svarskategorier) använder vi Partial Credit Model.

Code
RIlistItemsMargin(df.omit.na, fontsize = 13)
itemnr item
f60b Jag har blivit hånad, förlöjligad, kallad öknamn eller blivit retad på ett obehagligt och sårande sätt
f60c Jag har blivit utfrusen av andra elever
f60d Jag har blivit slagen, sparkad, knuffad eller stängd inne
f60e Någon elev har spritt lögner eller falska rykten om mig och försökt få andra att tycka illa om mig
f60f Jag har blivit fråntagen pengar eller saker eller fått saker förstörda
f60g Jag har blivit hotad eller tvingad att göra saker som jag inte ville göra
f60h Lärare har psykat eller på annat sätt varit elaka mot mig
f60i Jag har mobbats på annat sätt.
F61 Hur ofta har du blivit mobbad eller trakasserad i skolan det här läsåret?
F63 Har du blivit mobbad eller trakasserad via internet eller SMS/MMS det här läsåret?
Code
RIitemfitPCM2(df.omit.na, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f60b 1.067 1.059 1.116 1.354
f60c 1.141 1.07 1.759 1.242
f60d 0.922 0.88 -0.279 -0.757
f60e 1.095 1.037 1.063 0.575
f60f 1.222 0.902 0.778 -0.378
f60g 0.777 0.851 -0.546 -0.752
f60h 1.301 1.081 1.903 0.87
f60i 1.392 1.061 1.523 0.444
F61 0.515 0.498 -5.897 -6.921
F63 0.819 0.924 -1.84 -1.056
Code
RIpcmPCA(df.omit.na)
PCA of Rasch model residuals
Eigenvalues
1.58
1.30
1.18
1.12
1.05
Code
RIloadLoc(df.omit.na)

Code
RIresidcorr(df.omit.na, cutoff = 0.2)
f60b f60c f60d f60e f60f f60g f60h f60i F61 F63
f60b
f60c -0.28
f60d 0.01 -0.04
f60e -0.18 -0.03 0.02
f60f -0.03 -0.03 0.18 0.03
f60g -0.02 -0.02 0.2 0.05 0.19
f60h -0.18 -0.11 0.01 -0.06 0.05 0.03
f60i -0.18 -0.13 -0.02 -0.1 0.02 0.03 -0.03
F61 0.06 -0.02 -0.02 -0.15 -0.1 -0.03 -0.13 -0.03
F63 0 -0.02 0.02 0.14 0.01 0.07 -0.02 -0.01 -0.07
Note:
Relative cut-off value (highlighted in red) is 0.179, which is 0.2 above the average correlation.
Code
RItargeting(df.omit.na)

Code
RIitemHierarchy(df.omit.na)

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

F61 har alldeles för låg item fit, och svarskategorierna fungerar dåligt.

  • Jag har inte blivit mobbad = 0
  • Det har hänt någon enstaka gång = 1
  • 2 eller 3 gånger i månaden = 2
  • Ungefär en gång i veckan = 3
  • Flera gånger i veckan = 4

Vi kodar om F61 så att 3 och 4 = 2 och tittar sedan på item fit igen. Det är inte oväntat att en allmän fråga får låg item fit när den används tillsammans med mera specifika frågor inom samma område.

Code
df.omit.na$F61 <- recode(df.omit.na$F61,"4=2;3=2")
RIitemCats(df.omit.na, items = "F61")

Code
RIitemfitPCM2(df.omit.na, 300, 32, 8)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f60b 1.071 1.061 1.051 1.308
f60c 1.14 1.064 2.051 1.363
f60d 0.897 0.829 -0.226 -1.103
f60e 1.058 0.989 0.481 0.097
f60f 1.218 0.842 0.602 -0.851
f60g 0.739 0.788 -0.807 -0.983
f60h 1.298 1.06 1.826 0.563
f60i 1.43 1.055 1.567 0.47
F61 0.656 0.58 -4.873 -7.744
F63 0.773 0.866 -2.396 -1.952

Vi tar bort F61 pga låg item fit, men kan prova att använda den bland skolfrågor och “Vantrivsel i skolan”.

9.3 Rasch-parametrar 2 (utan F61)

Eftersom vi inte längre har en blandning av dikotoma och polytoma items, utan bara dikotoma använder vi den vanliga Rasch-modellen.

Code
df.omit.na$F61 <- NULL

RIitemfitRM(df.omit.na, 300, 32)
OutfitMSQ InfitMSQ OutfitZSTD InfitZSTD
f60b 1.12 1.11 2.097 2.377
f60c 1.076 1.061 1.207 1.209
f60d 0.785 0.826 -1.052 -1.108
f60e 0.905 0.92 -1.238 -1.286
f60f 0.835 0.828 -0.752 -1.004
f60g 0.647 0.781 -1.227 -1.035
f60h 1.097 1.036 0.6 0.28
f60i 1.315 1.075 1.288 0.578
F63 0.673 0.805 -3.841 -2.737
Code
RIrmPCA(df.omit.na)
PCA of Rasch model residuals
Eigenvalues
1.36
1.24
1.19
1.13
1.08
Code
RIresidcorr(df.omit.na, cutoff = 0.2)
f60b f60c f60d f60e f60f f60g f60h f60i F63
f60b
f60c -0.25
f60d 0.03 -0.02
f60e -0.16 -0.01 0.03
f60f -0.02 -0.02 0.19 0.03
f60g -0.01 0 0.21 0.07 0.2
f60h -0.16 -0.1 0.02 -0.06 0.05 0.04
f60i -0.17 -0.12 0 -0.09 0.02 0.04 -0.02
F63 0.03 0 0.04 0.15 0.02 0.09 -0.01 0
Note:
Relative cut-off value (highlighted in red) is 0.202, which is 0.2 above the average correlation.
Code
RItargeting(df.omit.na, dich = T)

Code
df.erm <- RM(df.omit.na)
plotPImap(df.erm, sorted = T)

Code
RIloadLoc(df.omit.na)

Code
RIlistitems(df.omit.na)
itemnr item
f60b Jag har blivit hånad, förlöjligad, kallad öknamn eller blivit retad på ett obehagligt och sårande sätt
f60c Jag har blivit utfrusen av andra elever
f60d Jag har blivit slagen, sparkad, knuffad eller stängd inne
f60e Någon elev har spritt lögner eller falska rykten om mig och försökt få andra att tycka illa om mig
f60f Jag har blivit fråntagen pengar eller saker eller fått saker förstörda
f60g Jag har blivit hotad eller tvingad att göra saker som jag inte ville göra
f60h Lärare har psykat eller på annat sätt varit elaka mot mig
f60i Jag har mobbats på annat sätt.
F63 Har du blivit mobbad eller trakasserad via internet eller SMS/MMS det här läsåret?

Inga problem med dimensionalitet.

9.4 Reliabilitet

Code
RItif(df.omit.na)

Den låga reliabiliteten gör att det inte är meningsfullt att estimera indexvärden utifrån mobbningsfrågorna.

9.5 Visualisering

Med data från 2006 till 2020.

Code
df.plot <- df %>% 
  select(!F61)

9.5.1 Missing data

Code
df.plot %>% 
  filter(ar == 2020) %>% 
  select(starts_with("f")) %>% 
  RImissing()

Code
df.plot %>% 
  filter(ar == 2018) %>% 
  select(starts_with("f")) %>% 
  RImissing()

Code
df.plot %>% 
  filter(ar == 2016) %>% 
  select(starts_with("f")) %>% 
  RImissing()

Code
df.plot %>% 
  filter(ar == 2014) %>% 
  select(starts_with("f")) %>% 
  RImissing()

Det verkar bara vara item F63 som har missing data. Vi tar en närmare titt på de som har missing data på F63 för att se om det finns ett mönster.

Code
df.plot %>% 
  filter(is.na(F63)) %>%
  group_by(ar) %>% 
  count(Kön) %>% 
  mutate(Andel = 100 * n / sum(n)) %>% 
  ggplot(aes(x = ar, y = n, color = Kön)) +
  geom_point(size = 2) +
  geom_line() +
  scale_color_viridis_d(begin = 0.2, end = 0.8) +
  scale_x_continuous("Årtal", breaks = c(2006,2008,2010,2012,2014,2016,2018,2020)) +
  ylab("Antal svar") +
  theme_minimal() +
  theme_rise()

Code
df.plot %>% 
  filter(is.na(F63)) %>%
  filter(!is.na(Kön)) %>%
  group_by(ar) %>% 
  count(Kön) %>% 
  mutate(Andel = 100 * n / sum(n)) %>% 
  ggplot(aes(x = ar, y = Andel, color = Kön)) +
  geom_point(size = 2) +
  geom_line() +
  scale_color_viridis_d(begin = 0.2, end = 0.8) +
  scale_x_continuous("Årtal", breaks = c(2006,2008,2010,2012,2014,2016,2018,2020)) +
  scale_y_continuous(limits = c(0,100)) +
  ylab("Andel svar") +  theme_minimal() +
  theme_rise()

Code
df.plot %>% 
  filter(is.na(F63)) %>%
  filter(!is.na(SkolSDO)) %>%
  group_by(ar) %>% 
  count(SkolSDO) %>% 
  mutate(Andel = 100 * n / sum(n)) %>% 
  ggplot(aes(x = ar, y = n, color = SkolSDO)) +
  geom_point(size = 2) +
  geom_line() +
  scale_color_viridis_d() +
  scale_x_continuous("Årtal", breaks = c(2006,2008,2010,2012,2014,2016,2018,2020)) +
  ylab("Antal svar") +
  theme_minimal() +
  theme_rise()

Code
df.plot %>% 
  filter(is.na(F63)) %>%
  group_by(ar) %>% 
  count(SkolSDO) %>% 
  mutate(Andel = 100 * n / sum(n)) %>% 
  ggplot(aes(x = ar, y = Andel, color = SkolSDO)) +
  geom_point(size = 2) +
  geom_line() +
  scale_color_viridis_d(begin = 0.2, end = 0.8) +
  scale_x_continuous("Årtal", breaks = c(2006,2008,2010,2012,2014,2016,2018,2020)) +
  ylab("Andel svar") +  
  theme_minimal() +
  theme_rise()

Inget tydligt mönster framgår.

9.5.2 Stapeldiagram

Motsvarar det som Länsstyrelsen får från Origo.

Code
# df.plot <- df %>% 
#   filter(DIDkommun == "Vallentuna") %>% 
#   select(starts_with("f60"),F63,ar,Kön,ARSKURS)

RISEpalette1 <- colorRampPalette(colors = c("#009ca6", "#e83c63", "#ffe500"))(6)

df.mobbad <- df.plot %>% 
  mutate(mobbad = case_when(f60b == 1 ~ "Jag har blivit hånad, förlöjligad, kallad öknamn eller blivit retad på ett obehagligt och sårande sätt",
                            f60c == 1 ~ "Jag har blivit utfrusen av andra elever",
                            f60d == 1 ~ "Jag har blivit slagen, sparkad, knuffad eller stängd inne",
                            f60e == 1 ~ "Någon elev har spritt lögner eller falska rykten om mig och försökt få andra att tycka illa om mig",
                            f60f == 1 ~ "Jag har blivit fråntagen pengar eller saker eller fått saker förstörda
",
                            f60g == 1 ~ "Jag har blivit hotad eller tvingad att göra saker som jag inte ville göra
",
                            f60h == 1 ~ "Lärare har psykat eller på annat sätt varit elaka mot mig
",
                            f60i == 1 ~ "Jag har mobbats på annat sätt.
",
                            F63 == 1 ~ "Har du blivit mobbad eller trakasserad via internet eller SMS/MMS det här läsåret?",
                            f60a == 1 ~ "Nej",
                            TRUE ~ NA
  )) %>% 
  mutate(mobbad = factor(mobbad))

df.mobbadG <- df.mobbad %>% 
  filter(ar == 2022,
         !is.na(Kön)) %>%
  group_by(Kön) %>% 
  count(mobbad, .drop = F) %>% 
  mutate(Andel = 100*n/sum(n)) %>% 
  mutate(mobbad = fct_reorder(mobbad, desc(n)))

df.mobbadAlla <- df.mobbad %>% 
  filter(ar == 2022) %>% 
  count(mobbad, .drop = F) %>% 
  mutate(Andel = 100*n/sum(n)) %>% 
  mutate(mobbad = fct_reorder(mobbad, desc(n)))

nejMedel <- df.mobbadAlla %>% 
  filter(mobbad == 'Nej') %>% 
  pull(Andel) %>% 
  round(1)

nejMedelÅk9 <- df.mobbad %>% 
  filter(ar == 2022,
         !is.na(Kön),
         ARSKURS == "Åk 9") %>%
  count(mobbad, .drop = F) %>% 
  mutate(Andel = 100*n/sum(n)) %>% 
  filter(mobbad == 'Nej') %>% 
  pull(Andel) %>% 
  round(1)

nejMedelGy2 <- df.mobbad %>% 
  filter(ar == 2022,
         !is.na(Kön),
         ARSKURS == "Gy 2") %>%
  count(mobbad, .drop = F) %>% 
  mutate(Andel = 100*n/sum(n)) %>% 
  filter(mobbad == 'Nej') %>% 
  pull(Andel) %>% 
  round(1)
Code
df.mobbadG %>% 
  drop_na(mobbad) %>% 
ggplot(data = .,
       aes(x = mobbad, y = Andel, fill = Kön)) +
  # geom_col(data = df.mobbadAlla, 
  #          aes(x = mobbad, y = Andel),
  #          fill = "grey",
  #          width = 1) +
  geom_bar(position=position_dodge(), 
           stat = 'identity') +
  scale_y_continuous(limits = c(0,100)) +
  scale_x_discrete(labels = ~ stringr::str_wrap(.x, width = 8)) +
  scale_color_manual(values = RISEpalette1[c(1,5)],
                     aesthetics = c("fill","color")) +
  theme_minimal() +
  theme_rise() +
  labs(title = "Har du känt dig mobbad eller trakasserad i skolan det här läsåret?",
       subtitle = "2020, både åk 9 och gy 2.") +
  ylab("Andel i %") +
  xlab("") +
  geom_text(aes(label = round(Andel,1)),
            position = position_dodge(width = 0.9),
            hjust = -0.22, vjust = 0.5, angle = 90, size = 2.7,
            color = "darkgrey") +
  annotate("text", y = 95, x = 3,
           label = paste0("Medelvärde ",nejMedel,"%"),
           color = "black") +
  geom_curve(x = 3, y = 91,
           xend = 1, yend = nejMedel,
           color = "black",
           curvature = -0.4,
           arrow = arrow()) +
  update_geom_defaults("text", list(family = "Lato"))

Code
df.mobbad %>% 
  filter(ar == 2020,
         !is.na(Kön),
         !is.na(ARSKURS)) %>%
  drop_na(mobbad) %>% 
  group_by(ARSKURS,Kön) %>% 
  count(mobbad, .drop = F) %>% 
  mutate(Andel = 100*n/sum(n)) %>% 
  mutate(mobbad = fct_reorder(mobbad, desc(n))) %>% 
  filter(ARSKURS == "Åk 9") %>% 
  ggplot(aes(x = mobbad, y = Andel, fill = Kön)) +
  # geom_col(data = df.mobbadAlla, 
  #          aes(x = mobbad, y = Andel),
  #          fill = "grey",
  #          width = 1) +
  geom_bar(position=position_dodge(), 
           stat = 'identity') +
  scale_y_continuous(limits = c(0,100)) +
  scale_x_discrete(labels = ~ stringr::str_wrap(.x, width = 8)) +
  scale_color_manual(values = RISEpalette1[c(1,5)],
                     aesthetics = c("fill","color")) +
  theme_minimal() +
  theme_rise() +
  labs(title = "Har du känt dig mobbad eller trakasserad i skolan det här läsåret?",
       subtitle = "2020, åk 9") +
  ylab("Andel i %") +
  xlab("") +
  geom_text(aes(label = round(Andel,1)),
            position = position_dodge(width = 0.9),
            hjust = -0.22, vjust = 0.5, angle = 90, size = 2.7,
            color = "darkgrey") +
  annotate("text", y = 95, x = 3,
           label = paste0("Medelvärde ",nejMedelÅk9,"%"),
           color = "black") +
  geom_curve(x = 3, y = 91,
           xend = 1, yend = nejMedelÅk9,
           color = "black",
           curvature = -0.4,
           arrow = arrow())

Code
df.mobbad %>% 
  filter(ar == 2020,
         !is.na(Kön),
         !is.na(ARSKURS)) %>%
  drop_na(mobbad) %>% 
  group_by(ARSKURS,Kön) %>% 
  count(mobbad, .drop = F) %>% 
  mutate(Andel = 100*n/sum(n)) %>% 
  mutate(mobbad = fct_reorder(mobbad, desc(n))) %>% 
  filter(ARSKURS == "Gy 2") %>% 
  ggplot(aes(x = mobbad, y = Andel, fill = Kön)) +
  # geom_col(data = df.mobbadAlla, 
  #          aes(x = mobbad, y = Andel),
  #          fill = "grey",
  #          width = 1) +
  geom_bar(position=position_dodge(), 
           stat = 'identity') +
  scale_y_continuous(limits = c(0,100)) +
  scale_x_discrete(labels = ~ stringr::str_wrap(.x, width = 8)) +
  scale_color_manual(values = RISEpalette1[c(2,6)],
                     aesthetics = c("fill","color")) +
  theme_minimal() +
  theme_rise() +
  labs(title = "Har du känt dig mobbad eller trakasserad i skolan det här läsåret?",
       subtitle = "2020, gy 2") +
  ylab("Andel i %") +
  xlab("") +
  geom_text(aes(label = round(Andel,1)),
            position = position_dodge(width = 0.9),
            hjust = -0.22, vjust = 0.5, angle = 90, size = 2.7,
            color = "darkgrey") +
  annotate("text", y = 95, x = 3,
           label = paste0("Medelvärde ",nejMedelGy2,"%"),
           color = "black") +
  geom_curve(x = 3, y = 91,
           xend = 1, yend = nejMedelGy2,
           color = "black",
           curvature = -0.4,
           arrow = arrow())

Code
df.mobbad %>% 
  filter(!is.na(Kön)) %>%
  drop_na(mobbad) %>% 
  group_by(ar,Kön) %>% 
  count(mobbad, .drop = F) %>% 
  mutate(Andel = 100*n/sum(n)) %>% 
  filter(mobbad == "Nej") %>% 
  ggplot(aes(x = ar, y = Andel, color = Kön, group = Kön)) +
  geom_point(size = 3) +
  geom_line(linewidth = 1.3) +
  scale_color_manual(values = RISEpalette1[c(1,5)],
                     aesthetics = c("fill","color")) +
  scale_x_continuous("Årtal", breaks = c(2006,2008,2010,2012,2014,2016,2018,2020)) +
  scale_y_continuous(limits = c(0,100)) +
  theme_minimal() +
  theme_rise() +
  labs(title = "Har du känt dig mobbad eller trakasserad i skolan det här läsåret?",
       subtitle = "Andel elever som svarat ''Nej', åk 9 och gy 2") +
  ylab("Andel i %") +
  xlab("")

Code
df.mobbad %>% 
  filter(!is.na(Kön),
         !is.na(ARSKURS)
         ) %>%
  drop_na(mobbad) %>% 
  group_by(ar,ARSKURS,Kön) %>% 
  count(mobbad, .drop = F) %>% 
  mutate(Andel = 100*n/sum(n)) %>% 
  filter(mobbad == "Nej") %>% 
  ggplot(aes(x = ar, y = Andel, color = Kön, group = Kön)) +
  geom_point(size = 3) +
  geom_line(linewidth = 1.3) +
  scale_color_manual(values = RISEpalette1[c(1,5)],
                     aesthetics = c("fill","color")) +
  scale_x_continuous("Årtal", breaks = c(2006,2008,2010,2012,2014,2016,2018,2020)) +
  scale_y_continuous(limits = c(0,100)) +
  theme_minimal() +
  theme_rise() +
  labs(title = "Har du känt dig mobbad eller trakasserad i skolan det här läsåret?",
       subtitle = "Andel elever som svarat ''Nej'") +
  ylab("Andel i %") +
  xlab("") +
  facet_wrap(~ARSKURS)

9.6 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: 14px; font-family: Lato; width: 80%"')
Package Version Citation
arrow 11.0.0.3 Richardson et al. (2023)
base 4.2.3 R Core Team (2023)
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.3.3 William Revelle (2023)
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.14.3 Johansson (2023)
rmarkdown 2.21 Xie, Allaire, and Grolemund (2018); Xie, Dervieux, and Riederer (2020); Allaire et al. (2023)
tidyverse 2.0.0 Wickham et al. (2019)

9.7 Referenser

Allaire, JJ, Yihui Xie, Christophe Dervieux, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, et al. 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. 2023. 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.
Richardson, Neal, Ian Cook, Nic Crane, Dewey Dunnington, Romain François, Jonathan Keane, Dragoș Moldovan-Grünfeld, Jeroen Ooms, and Apache Arrow. 2023. 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.
William Revelle. 2023. Psych: Procedures for Psychological, Psychometric, and Personality Research. Evanston, Illinois: Northwestern University. https://CRAN.R-project.org/package=psych.
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.