4  Föräldrafrågor

Published

August 14, 2025

4.1 Omkodning

Code
### Tar bort observationer som inte är tjej eller kille
df <- df %>%
  filter(!grepl("annan könsidentitet|vill inte svara", tolower(q3)))

df <- df %>% 
  filter(!is.na(q3))

### Byter namn på demografiska variabler
count (df, q3)
# A tibble: 2 × 2
  q3        n
  <chr> <int>
1 Kille   671
2 Tjej    719
Code
count (df, q1)
# A tibble: 2 × 2
  q1                          n
  <chr>                   <int>
1 År 2 på gymnasiet         744
2 Årskurs 9 i grundskolan   646
Code
count (df, q6)
# A tibble: 5 × 2
  q6                      n
  <chr>               <int>
1 Annat boende           19
2 Bostadsrätt           333
3 Hyreslägenhet         266
4 Villa/parhus/radhus   767
5 <NA>                    5
Code
d <- df %>% 
  rename(Kön = q3) %>% 
  rename(Årskurs = q1) %>%
  rename(Bostad = q6) 

count (d, Kön)
# A tibble: 2 × 2
  Kön       n
  <chr> <int>
1 Kille   671
2 Tjej    719
Code
count (df, q7, q8, q9)
# A tibble: 53 × 4
   q7        q8                         q9                              n
   <chr>     <chr>                      <chr>                       <int>
 1 I Sverige I Sverige                  I Sverige                     863
 2 I Sverige I Sverige                  I ett land i övriga Europa     37
 3 I Sverige I Sverige                  I ett land i övriga Norden     16
 4 I Sverige I Sverige                  I ett land i övriga världen    77
 5 I Sverige I Sverige                  <NA>                            1
 6 I Sverige I ett land i övriga Europa I Sverige                      29
 7 I Sverige I ett land i övriga Europa I ett land i övriga Europa     28
 8 I Sverige I ett land i övriga Europa I ett land i övriga världen     6
 9 I Sverige I ett land i övriga Norden I Sverige                      13
10 I Sverige I ett land i övriga Norden I ett land i övriga Europa      3
# ℹ 43 more rows
Code
### Koda om kön till numerisk + rätt etiketter

# d$Kön<-recode(d$Kön,"'Tjej'=1;'Kille'=2",as.factor=FALSE)
# d$Kön <- labelled(d$Kön, labels = c("Tjej" = 1, "Kille" = 2))
# 
# d$Årskurs<-recode(d$Årskurs,"'Årskurs 9 i grundskolan'=1;'År 2 på gymnasiet'=2",as.factor=FALSE)
# d$Åsrkurs <- labelled(d$Årskurs, labels = c("årskurs 9" = 1, "år 2" = 2))
d$Kön <- factor(d$Kön)
d$Årskurs <- factor(d$Årskurs, labels = c("Åk 9","Gy 2"))
Code
RIdifTileplot <- function(data, dif_var) {

  if (is.factor(dif_var) == FALSE) {
    if (n_distinct(dif_var) > 12) {
      stop("More than 12 DIF levels are not allowed")
    } else {
      dif_var <- as.factor(dif_var)
    }
  }

  difplots <- data %>%
    add_column(dif = {{ dif_var }}) %>%
    split(.$dif) %>%
    map(~ RItileplot(.x %>% select(!dif)) + labs(title = .x$dif))

  plots <- patchwork::wrap_plots(difplots, axes = "collect", guides = NULL) +
    patchwork::plot_annotation(title = "Tileplots split by DIF variable")
  return(plots)
}

4.2 Välbefinnande

Code
count (df, q13, q20)
# A tibble: 29 × 3
   q13         q20               n
   <chr>       <chr>         <int>
 1 Aldrig      Lika bra          1
 2 Aldrig      Lite bättre       2
 3 Aldrig      Lite sämre        5
 4 Aldrig      Mycket bättre     5
 5 Aldrig      Mycket sämre      8
 6 Ganska ofta Lika bra        203
 7 Ganska ofta Lite bättre     161
 8 Ganska ofta Lite sämre       66
 9 Ganska ofta Mycket bättre   114
10 Ganska ofta Mycket sämre     12
# ℹ 19 more rows
Code
välbefinnande <- c("q13", "q14", "q15", "q16", "q17", "q18", "q19", "q20")


 # Koda om till numeriska + etiktter. Låga värden = låg risk
d <- d %>%
  mutate(across(q13:q17, ~ recode(.x,
                                  "'Mycket ofta'=0; 'Ganska ofta'=1; 'Ibland'=2; 'Sällan'=3; 'Aldrig'=4", 
                                  as.factor = FALSE))) %>%
  mutate(across(q13:q17, ~ labelled(.x,
                                    labels = c("Mycket ofta" = 0,
                                               "Ganska ofta" = 1,
                                               "Ibland" = 2,
                                               "Sällan" = 3,
                                               "Aldrig" = 4))))

d <- d %>%
  mutate(across(q18:q19, ~ recode(.x,
                                  "'Alltid'=0; 'Mycket ofta'=1; 'Ganska ofta'=2; 'Ibland'=3; 'Sällan'=4; 'Aldrig'=5", 
                                  as.factor = FALSE))) %>%
  mutate(across(q18:q19, ~ labelled(.x,
                                    labels = c("Alltid" = 0,
                                               "Mycket ofta" = 1,
                                               "Ganska ofta" = 2,
                                               "Ibland" = 3,
                                               "Sällan" = 4,
                                               "Aldrig" = 5))))

d$q20<-recode(d$q20,"'Mycket bättre'=0;'Lite bättre'=1; 'Lika bra'=2; 'Lite sämre'=3; 'Mycket sämre'=4",as.factor=FALSE)
d$q20 <- labelled(d$q20, labels = c("Mycket bättre" = 0, "Lite bättre" = 1, "Lika bra" = 2, "Lite sämre" = 3,"Mycket sämre" = 4))


count (d, q13)
# A tibble: 6 × 2
  q13                  n
  <dbl+lbl>        <int>
1  0 [Mycket ofta]   514
2  1 [Ganska ofta]   556
3  2 [Ibland]        237
4  3 [Sällan]         59
5  4 [Aldrig]         21
6 NA                   3
Code
count (d, q14)
# A tibble: 6 × 2
  q14                  n
  <dbl+lbl>        <int>
1  0 [Mycket ofta]   593
2  1 [Ganska ofta]   483
3  2 [Ibland]        211
4  3 [Sällan]         71
5  4 [Aldrig]         26
6 NA                   6
Code
count (d, q15)
# A tibble: 6 × 2
  q15                  n
  <dbl+lbl>        <int>
1  0 [Mycket ofta]   439
2  1 [Ganska ofta]   521
3  2 [Ibland]        298
4  3 [Sällan]         90
5  4 [Aldrig]         36
6 NA                   6
Code
count (d, q16)
# A tibble: 6 × 2
  q16                  n
  <dbl+lbl>        <int>
1  0 [Mycket ofta]   234
2  1 [Ganska ofta]   396
3  2 [Ibland]        429
4  3 [Sällan]        252
5  4 [Aldrig]         74
6 NA                   5
Code
count (d, q17)
# A tibble: 6 × 2
  q17                  n
  <dbl+lbl>        <int>
1  0 [Mycket ofta]   264
2  1 [Ganska ofta]   454
3  2 [Ibland]        419
4  3 [Sällan]        195
5  4 [Aldrig]         53
6 NA                   5
Code
count (d, q18)
# A tibble: 6 × 2
  q18                 n
  <dbl+lbl>       <int>
1 0 [Alltid]        157
2 1 [Mycket ofta]   528
3 2 [Ganska ofta]   446
4 3 [Ibland]        196
5 4 [Sällan]         49
6 5 [Aldrig]         14
Code
count (d, q19)
# A tibble: 7 × 2
  q19                  n
  <dbl+lbl>        <int>
1  0 [Alltid]        210
2  1 [Mycket ofta]   314
3  2 [Ganska ofta]   415
4  3 [Ibland]        271
5  4 [Sällan]        125
6  5 [Aldrig]         46
7 NA                   9
Code
count (d, q20)
# A tibble: 6 × 2
  q20                    n
  <dbl+lbl>          <int>
1  0 [Mycket bättre]   307
2  1 [Lite bättre]     420
3  2 [Lika bra]        465
4  3 [Lite sämre]      154
5  4 [Mycket sämre]     42
6 NA                     2

4.3 PSF

Code
count (df, q21, q28)
# A tibble: 25 × 3
   q21           q28                           n
   <chr>         <chr>                     <int>
 1 Aldrig/sällan En eller två dagar          262
 2 Aldrig/sällan Flera dagar                 112
 3 Aldrig/sällan Inte besvärats alls         470
 4 Aldrig/sällan Mer än hälften av dagarna    32
 5 Aldrig/sällan Nästan varje dag             25
 6 Aldrig/sällan <NA>                          2
 7 Ganska ofta   En eller två dagar           30
 8 Ganska ofta   Flera dagar                  29
 9 Ganska ofta   Inte besvärats alls           7
10 Ganska ofta   Mer än hälften av dagarna    10
# ℹ 15 more rows
Code
psf <- c("q21", "q22", "q23", "q24", "q25", "q26", "q27", "q28")


 # Koda om till numeriska + etiktter. Låga värden = låg risk
d <- d %>%
  mutate(across(q21:q24, ~ recode(.x,
                                  "'Aldrig/sällan'=0; 'Ibland'=1; 'Ganska ofta'=2; 'Mycket ofta'=3", 
                                  as.factor = FALSE))) %>%
  mutate(across(q21:q24, ~ labelled(.x,
                                    labels = c("Aldrig/sällan" = 0,
                                               "Ibland" = 1,
                                               "Ganska ofta" = 2,
                                               "Mycket ofta" = 3))))

d <- d %>%
  mutate(across(q25:q28, ~ recode(.x,
                                  "'Inte besvärats alls'=0; 'En eller två dagar'=1; 'Flera dagar'=2; 'Mer än hälften av dagarna'=3; 'Nästan varje dag'=4", 
                                  as.factor = FALSE))) %>%
  mutate(across(q25:q28, ~ labelled(.x,
                                    labels = c("Inte besvärats alls" = 0,
                                               "En eller två dagar" = 1,
                                               "Flera dagar" = 2,
                                               "Mer än hälften av dagarna" = 3, "Nästan varje dag" = 4))))

#d$q20<-recode(d$q20,"'Mycket bättre'=0;'Lite bättre'=1; 'Lika bra'=2; 'Lite sämre'=3; 'Mycket sämre'=4",as.factor=FALSE)
#d$q20 <- labelled(d$q20, labels = c("Mycket bättre" = 0, "Lite bättre" = 1, "Lika bra" = 2, "Lite sämre" = 3,"Mycket sämre" = 4))


count (d, q21)
# A tibble: 5 × 2
  q21                    n
  <dbl+lbl>          <int>
1  0 [Aldrig/sällan]   903
2  1 [Ibland]          361
3  2 [Ganska ofta]      86
4  3 [Mycket ofta]      34
5 NA                     6
Code
count (d, q28)
# A tibble: 6 × 2
  q28                                n
  <dbl+lbl>                      <int>
1  0 [Inte besvärats alls]         564
2  1 [En eller två dagar]          440
3  2 [Flera dagar]                 223
4  3 [Mer än hälften av dagarna]    80
5  4 [Nästan varje dag]             75
6 NA                                 8

4.4 Våld

Code
våld_utsatt <- c("q21", "q22", "q23", "q24", "q25", "q26", "q27", "q28")

våld_förövare <- c("q21", "q22", "q23", "q24", "q25", "q26", "q27", "q28")

#våld_följd

4.5 Föräldrar

Code
count (d, q29)
# A tibble: 6 × 2
  q29             n
  <chr>       <int>
1 Aldrig         18
2 Ganska ofta   358
3 Ibland        126
4 Mycket ofta   856
5 Sällan         25
6 <NA>            7
Code
föräldrar <- c("q29", "q30", "q31", "q32", "q33", "q34")


 # Koda om till numeriska + etiktter. Låga värden = dålig föräldrarelation
d <- d %>%
  mutate(across(q29:q34, ~ recode(.x,
                                  "'Mycket ofta'=4; 'Ganska ofta'=3; 'Ibland'=2; 'Sällan'=1; 'Aldrig'=0", 
                                  as.factor = FALSE))) %>%
  mutate(across(q29:q34, ~ labelled(.x,
                                    labels = c("Mycket ofta" = 4,
                                               "Ganska ofta" = 3,
                                               "Ibland" = 2,
                                               "Sällan" = 1,
                                               "Aldrig" = 0))))

d$q35<-recode(d$q35,"'Ja, alla'=5;'Ja, de flesta'=4; 'Ja, några'=3; 'Nej, ingen'=2; 'Vet inte'=1; 'Umgås inte med kompisar på internet/mobilen'=0",as.factor=FALSE)
d$q35 <- labelled(d$q35, labels = c("Ja, alla" = 5, "Ja, de flesta" = 4, "Ja, några" = 3, "Nej, ingen" = 2,"Vet inte" = 1, "Umgås inte med kompisar på internet/mobilen" = 0 ))

#d$q36<-recode(d$q36,"'Ja, alla'=0;'Ja, de flesta'=1; 'Ja, några'=2; 'Nej, ingen'=3; 'Vet inte'=4; 'Umgås inte med kompis/ kompisar utanför internet/mobilen'=5; 'Annat'=6",as.factor=FALSE)
#d$q36 <- labelled(d$q36, labels = c("Ja, alla" = 0, "Ja, de flesta" = 1, "Ja, några" = 2, "Nej, ingen" = 3,"Vet inte" = 4, "Umgås inte med kompis/ kompisar utanför internet/mobilen" = 5, "Annat" = 6 ))

count (df, q36)
# A tibble: 8 × 2
  q36                                                            n
  <chr>                                                      <int>
1 Ja, alla                                                     672
2 Ja, de flesta                                                577
3 Ja, några                                                     97
4 Nej, ingen                                                    18
5 Umgås inte med kompisar/ kompisar utanför internet/mobilen     5
6 Umgås inte med kompisar/kompisar utanför internet/mobilen      1
7 Vet inte                                                      15
8 <NA>                                                           5
Code
#d %>% 
  #select(q13:q20) %>% 
  #pivot_longer(everything()) %>% 
  #distinct(value)

Sektionen i PDF/pappers-enkäten inleds med meningen: “NÅGRA FRÅGOR OM HUR DU MÅR”.

4.6 DF för välbefinnande

Code
# Skapa dataframe för välbefinnande utan NA:s
d_v <- d %>% 
  select(Kön, Årskurs, Bostad, any_of(välbefinnande))%>% 
  na.omit()

# Skapa DIF df
d_dif_v <- d_v %>% 
  select(Kön, Årskurs, Bostad) %>% 
  mutate(across(everything(), ~ factor(.x)))

# remove non-items
d_v <- d_v %>% 
  select(!c(Kön,Årskurs,Bostad))

4.7 DF för PSF

Code
# Skapa dataframe för alla PSF utan NA:s
d_psf <- d %>% 
  select(Kön, Årskurs, Bostad, any_of(psf))%>% 
  na.omit()

# Skapa DIF df
d_dif__psf <- d_psf %>% 
  select(Kön, Årskurs, Bostad) %>% 
  mutate(across(everything(), ~ factor(.x)))

# remove non-items
d_psf <- d_psf %>% 
  select(!c(Kön,Årskurs,Bostad))


# Skapa dataframe för depressitionsitems utan NA:s
d_psf_d <- d %>% 
  select(Kön, Årskurs, Bostad, any_of(c("q22", "q23", "q24", "q27", "q28")))%>% 
  na.omit()

# Skapa DIF df
d_dif__psf_d <- d_psf_d %>% 
  select(Kön, Årskurs, Bostad) %>% 
  mutate(across(everything(), ~ factor(.x)))

# remove non-items
d_psf_d <- d_psf_d %>% 
  select(!c(Kön,Årskurs,Bostad))

# Skapa dataframe för ångestitems utan NA:s
d_psf_å <- d %>% 
  select(Kön, Årskurs, Bostad, any_of(c("q21", "q25", "q26")))%>% 
  na.omit()

# Skapa DIF df
d_dif__psf_å <- d_psf_å %>% 
  select(Kön, Årskurs, Bostad) %>% 
  mutate(across(everything(), ~ factor(.x)))

# remove non-items
d_psf_å <- d_psf_å %>% 
  select(!c(Kön,Årskurs,Bostad))

4.8 DF för Föräldrar

Code
# Skapa dataframe för välbefinnande utan NA:s
d_f <- d %>% 
  select(Kön, Årskurs, Bostad, any_of(föräldrar))%>% 
  na.omit()

# Skapa DIF df
d_dif_f <- d_f %>% 
  select(Kön, Årskurs, Bostad) %>% 
  mutate(across(everything(), ~ factor(.x)))

# remove non-items
d_f <- d_f %>% 
  select(!c(Kön,Årskurs,Bostad))

4.9 Färger

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

RISEpalette2 <- colorRampPalette(colors = c("#009ca6", "#482d55", "#e83c63", "#ffe500"))(8)

gender_colors <- c("Kille" = colorspace::lighten("#F5A127", amount = 0.2) , "Tjej" = colorspace::lighten("#009CA6", amount = 0.2))
scale_color_gender <- partial(scale_color_manual, values = gender_colors)
scale_fill_gender <- partial(scale_fill_manual, values = gender_colors)

##Välbefinnande
labels_v_13_17 <-c(
                                               "Mycket ofta" = 0,
                                               "Ganska ofta" = 1,
                                               "Ibland" = 2,
                                               "Sällan" = 3, "Aldrig" = 4)
names(labels_v_13_17)
[1] "Mycket ofta" "Ganska ofta" "Ibland"      "Sällan"      "Aldrig"     
Code
labels_v_18_19 <-c("Alltid" = 0,
                                               "Mycket ofta" = 1,
                                               "Ganska ofta" = 2,
                                               "Ibland" = 3,
                                               "Sällan" = 4, "Aldrig" = 5)
names(labels_v_18_19)
[1] "Alltid"      "Mycket ofta" "Ganska ofta" "Ibland"      "Sällan"     
[6] "Aldrig"     
Code
labels_v_20 <-c("Mycket bättre" = 0,
                                               "Lite bättre" = 1,
                                               "Lika bra" = 2,
                                               "Lite bättre" = 3,
                                               "Mycket bättre" = 3)
names(labels_v_20)
[1] "Mycket bättre" "Lite bättre"   "Lika bra"      "Lite bättre"  
[5] "Mycket bättre"
Code
##PSF
labels_p_21_24 <-c("Aldrig/sällan" = 0,
                                               "Ibland" = 1,
                                               "Ganska ofta" = 2,
                                               "Mycket ofta" = 3)
names(labels_p_21_24)
[1] "Aldrig/sällan" "Ibland"        "Ganska ofta"   "Mycket ofta"  
Code
labels_p_25_28 <-c("Inte besvärats alls" = 0,
                                               "En eller två dagar" = 1,
                                               "Flera dagar" = 2,
                                               "Mer än hälften av dagarna" = 3, "Nästan varje dag" = 4)
names(labels_p_25_28)
[1] "Inte besvärats alls"       "En eller två dagar"       
[3] "Flera dagar"               "Mer än hälften av dagarna"
[5] "Nästan varje dag"         

4.10 Deskriptiva data Välbefinnande

4.11 Formatering figur

Code
plot_gender <- function(data, items, kolumner = 2, labelwrap = 24, text_ypos = 28, text_size = 3) {
  
  data %>% 
    pivot_longer(all_of(items),
                 names_to = "itemnr") %>% 
    group_by(itemnr,Kön) %>% 
    count(value) %>% 
    mutate(percent = n*100/sum(n)) %>% 
    ungroup() %>% 
    mutate(Kön = factor(Kön, labels = c("Tjej","Kille")),
           value = factor(value, ordered = T)) %>% 
    left_join(itemlabels, by = "itemnr") %>%
    
    ggplot(aes(x = value, y = n, fill = Kön)) +
    geom_col(position = "dodge") +
    geom_text(aes(label = paste0(round(percent,1),"%"), 
                  y = text_ypos),
              position = position_dodge(width = 0.9),
              angle = 0,
              color = "black",
              size = text_size,
              hjust = "left") +
    facet_wrap(~item, 
               ncol = kolumner,
               labeller = labeller(item = label_wrap_gen(labelwrap))) +
    scale_fill_gender() +
    theme_rise(fontfamily = "Avenir") +
    labs(x = "Svarskategori",
         y = "Antal svar",
         caption = "Andel svar anges i procent i figuren.") +
    coord_flip()
}

4.12 Deskriptiva figurer blivit välbefinnande

Code
## Utfryst, rykte, trakasserad, begränsad
d %>% 
  plot_gender(items = c("q13", "q14", "q15", "q16", "q17"), labelwrap = 32, text_ypos = 20) +
  scale_x_discrete(labels = str_wrap(names(labels_v_13_17), 14))

Code
d %>% 
  plot_gender(items = c("q18", "q19"), labelwrap = 32, text_ypos = 20) +
  scale_x_discrete(labels = str_wrap(names(labels_v_18_19), 14))

Code
d %>% 
  plot_gender(items = c("q20"), labelwrap = 32, text_ypos = 20) +
  scale_x_discrete(labels = str_wrap(names(labels_v_20), 14))

4.13 Deskriptiva figurer PSF

Code
## Utfryst, rykte, trakasserad, begränsad
d %>% 
  plot_gender(items = c("q21", "q22", "q23", "q24"), labelwrap = 32, text_ypos = 20) +
  scale_x_discrete(labels = str_wrap(names(labels_p_21_24), 14))

Code
d %>% 
  plot_gender(items = c("q25", "q26", "q27", "q28"), labelwrap = 32, text_ypos = 20) +
  scale_x_discrete(labels = str_wrap(names(labels_p_25_28), 14))

4.13.1 Demografi

4.13.2 Item-data

Code
RItileplot(d_f)

Code
RIbarstack(d_f)

Code
RIitemcols(d_f)

4.14 Analys 1 samtliga items Föräldrar

itemnr item
q29 någon av dem uppmuntrar och stöttar dig?
q30 någon av dem ägnar tillräckligt med tid åt dig?
q31 du kan prata med någon av dem om nästan allt?
q32 någon av dem tar sig tid att lyssna på dig?
q33 någon av dem hjälper dig med läxor och skolarbeten om du behöver?
q34 du kan lita på någon av dem om du verkligen behöver?
Code
aisp(d_f) %>% 
  as.data.frame() %>% 
  set_names("h > 0.3") %>% 
  arrange(`h > 0.3`) %>% 
  kbl_rise(tbl_width = 20)
h > 0.3
q29 1
q30 1
q31 1
q32 1
q33 1
q34 1
Code
d_f %>% 
  RIbootRestscore(iterations = 250, samplesize = 600, cpu = 8)
Item Item-restscore result % of iterations Conditional MSQ infit Relative average item location
q33 underfit 100.0 1.86 -1.24
q31 underfit 19.6 1.11 -1.71
q32 overfit 100.0 0.64 -2.57
q34 overfit 99.6 0.89 -2.69
q30 overfit 84.4 0.79 -2.78
q29 overfit 52.8 0.93 -2.86
Note:
Results based on 250 bootstrap iterations with n = 600 and 6 items. Conditional mean-square infit based on complete responders only (n = 1367).
Code
RIpcmPCA(d_f)

PCA of Rasch model residuals

Eigenvalues Proportion of variance
1.69 37.9%
1.46 24.6%
1.00 14.2%
0.93 12.5%
0.89 10.4%
Code
RIloadLoc(d_f)

Code
RIbootLRT(d_f, samplesize = 300, cpu = 8)
Result n Percent
Not statistically significant 1000 100
Code
RIpartgamLD(d_f)
Item 1 Item 2 Partial gamma SE Lower CI Upper CI Adjusted p-value (BH)
q30 q29 0.586 0.050 0.488 0.685 0.000
q29 q30 0.557 0.052 0.455 0.659 0.000
q34 q31 0.519 0.054 0.413 0.625 0.000
q32 q31 0.508 0.052 0.406 0.610 0.000
q31 q34 0.434 0.058 0.319 0.548 0.000
q32 q34 0.357 0.074 0.212 0.501 0.000
q32 q30 0.303 0.072 0.162 0.444 0.001
q31 q32 0.293 0.062 0.172 0.415 0.000
q34 q32 0.287 0.076 0.137 0.437 0.005
Code
rescor <- RIgetResidCor(d_f,iterations = 500, cpu = 8)
RIresidcorr(d_f, rescor$p999)
q29 q30 q31 q32 q33 q34
q29
q30 0.16
q31 -0.25 -0.25
q32 -0.04 0 -0.02
q33 -0.27 -0.24 -0.45 -0.36
q34 -0.17 -0.2 0.1 0 -0.36
Note:
Relative cut-off value is -0.009, which is 0.149 above the average correlation (-0.157).
Correlations above the cut-off are highlighted in red text.
Code
RItargeting(d_f)

Code
RIitemHierarchy(d_f)

Code
mirt(d_f, model=1, itemtype='Rasch', verbose = FALSE) %>% 
  plot(type="trace", as.table = TRUE, 
       theta_lim = c(-7,3))

Code
RIpfit(d_f)

Code
RIdifTileplot(d_f, d_dif_f$Kön)

Code
RIpartgamDIF(d_f, d_dif_f$Kön)
[1] "No statistically significant DIF found."
Code
RIdifTableLR(d_f, d_dif_f$Kön)
Item locations
Standard errors
Item Kille Tjej MaxDiff All SE_Kille SE_Tjej SE_All
q29 0.225 -0.316 0.541 -0.063 0.373 0.327 0.231
q30 -0.204 0.154 0.358 0.024 0.438 0.278 0.221
q31 0.864 1.27 0.406 1.088 0.235 0.198 0.148
q32 0.062 0.39 0.328 0.230 0.376 0.247 0.196
q33 1.317 1.772 0.455 1.562 0.219 0.186 0.139
q34 -0.104 0.282 0.386 0.110 0.386 0.260 0.208
Note:
Values highlighted in red are above the chosen cutoff 0.5 logits. Background color brown and blue indicate the lowest and highest values among the DIF groups.
Code
RIdifThreshFigLR(d_f, d_dif_f$Kön)

Code
RIciccPlot(d_f, dif = "yes", dif_var = d_dif_f$Kön, class_intervals = 4)

Code
RIdifTileplot(d_f, d_dif_f$Årskurs)

Code
RIpartgamDIF(d_f, d_dif_f$Årskurs)
Item Partial gamma SE Lower CI Upper CI Adjusted p-value (BH)
q33 0.347 0.056 0.237 0.457 0.000
q31 -0.232 0.064 -0.357 -0.108 0.002
q30 -0.225 0.074 -0.370 -0.080 0.014
Code
RIdifTableLR(d_f, d_dif_f$Årskurs)
Item locations
Standard errors
Item Åk 9 Gy 2 MaxDiff All SE_Åk 9 SE_Gy 2 SE_All
q29 -0.151 0.059 0.21 -0.063 0.317 0.338 0.231
q30 0.037 0.059 0.022 0.024 0.293 0.353 0.221
q31 1.192 1.043 0.149 1.088 0.207 0.217 0.148
q32 0.231 0.24 0.009 0.230 0.273 0.289 0.196
q33 2.01 1.071 0.939 1.562 0.190 0.215 0.139
q34 0.103 0.12 0.017 0.110 0.291 0.304 0.208
Note:
Values highlighted in red are above the chosen cutoff 0.5 logits. Background color brown and blue indicate the lowest and highest values among the DIF groups.
Code
RIdifThreshFigLR(d_f, d_dif_f$Årskurs)

Code
RIciccPlot(d_f, dif = "yes", dif_var = d_dif_f$Årskurs, class_intervals = 4)

Code
RIdifTileplot(d_f, d_dif_f$Bostad)

Code
#RIpartgamDIF(d_f, d_dif_f$Bostad)
  • Alla frågor 1 i Mokken
  • q33 100% underfit
  • PCA 1.69
  • q33 sticker ut på x-axeln på load loc
  • Residualkorrelation främst mellan q30 “ägnar tid” och q29 “uppmuntrar och stöttar”, men även q31 “kan prata med” och q34 “kan lita på” (övriga ligger mycket nära gränsvärdet).
  • Targeting visar stark takeffekt = svårt att mäta högre nivåer av föräldrarelation
  • Ordnade svarskategorier på q34 och q33
  • DIF kön q32 och q33 och till viss del q30 (oordnade trösklar)
  • DIF årskurs q33

Tar bort q33 som helt klart tillhör en annan dimension. De högsta svarskategorierna kodas ihop i q34

Även q29 (oordnade svarströsklar) eller q30 bör ev. tas bort pga residualkorrelation, men vi börjar med q33.

Code
removed_items <- c("q33")
Code
d_backup_f <- d_f

d_f <- d_f %>% 
  select(!any_of(removed_items))

4.15 Analys 2 - Föräldrar

Med q33 borttagen, “någon av dem hjälper dig med läxor och skolarbeten om du behöver?”.

itemnr item
q29 någon av dem uppmuntrar och stöttar dig?
q30 någon av dem ägnar tillräckligt med tid åt dig?
q31 du kan prata med någon av dem om nästan allt?
q32 någon av dem tar sig tid att lyssna på dig?
q34 du kan lita på någon av dem om du verkligen behöver?
Code
d_f %>% 
  RIbootRestscore(iterations = 250, samplesize = 600, cpu = 8)
Item Item-restscore result % of iterations Conditional MSQ infit Relative average item location
q31 underfit 58.4 1.24 -2.00
q32 overfit 94.8 0.73 -3.04
q34 overfit 32.0 0.99 -3.24
Note:
Results based on 250 bootstrap iterations with n = 600 and 5 items. Conditional mean-square infit based on complete responders only (n = 1367).
Code
RIpcmPCA(d_f)

PCA of Rasch model residuals

Eigenvalues Proportion of variance
1.77 40.1%
1.17 22.6%
1.08 19.7%
0.97 17.4%
0.01 0.2%
Code
RIloadLoc(d_f)

Code
RIbootLRT(d_f, cpu = 8, samplesize = 300)
Result n Percent
Not statistically significant 872 87.2
Statistically significant 128 12.8
Code
rescor2 <- RIgetResidCor(d_f,iterations = 500, cpu = 8)
RIresidcorr(d_f, rescor2$p999)
q29 q30 q31 q32 q34
q29
q30 0.09
q31 -0.44 -0.43
q32 -0.16 -0.1 -0.22
q34 -0.31 -0.32 -0.06 -0.16
Note:
Relative cut-off value is -0.074, which is 0.136 above the average correlation (-0.21).
Correlations above the cut-off are highlighted in red text.
Code
RIpartgamLD(d_f)
Item 1 Item 2 Partial gamma SE Lower CI Upper CI Adjusted p-value (BH)
q30 q29 0.526 0.059 0.410 0.642 0.000
q29 q30 0.487 0.060 0.370 0.605 0.000
q34 q31 0.404 0.065 0.277 0.532 0.000
q32 q31 0.341 0.065 0.214 0.468 0.000
q32 q30 0.282 0.076 0.132 0.431 0.004
q31 q34 0.26 0.071 0.120 0.399 0.005
Code
RItargeting(d_f)

Code
RIitemHierarchy(d_f)

Code
mirt(d_f, model=1, itemtype='Rasch', verbose = FALSE) %>% 
  plot(type="trace", as.table = TRUE, 
       theta_lim = c(-8,3))

Code
RIpfit(d_f)

Code
RIpartgamDIF(d_f, d_dif_f$Kön)
[1] "No statistically significant DIF found."
Code
RIdifTableLR(d_f, d_dif_f$Kön)
Item locations
Standard errors
Item Kille Tjej MaxDiff All SE_Kille SE_Tjej SE_All
q29 0.588 0.09 0.498 0.316 0.394 0.342 0.242
q30 0.195 0.626 0.431 0.461 0.456 0.295 0.233
q31 1.443 1.858 0.415 1.663 0.265 0.223 0.167
q32 0.41 0.821 0.411 0.623 0.396 0.265 0.209
q34 0.174 0.624 0.45 0.422 0.404 0.276 0.220
Note:
Values highlighted in red are above the chosen cutoff 0.5 logits. Background color brown and blue indicate the lowest and highest values among the DIF groups.
Code
RIdifThreshFigLR(d_f, d_dif_f$Kön)

Code
RIciccPlot(d_f, dif = "yes", dif_var = d_dif_f$Kön,class_intervals = 4) + guide_area()

Code
RIpartgamDIF(d_f, d_dif_f$Årskurs)
[1] "No statistically significant DIF found."
Code
RIdifTableLR(d_f, d_dif_f$Årskurs)
Item locations
Standard errors
Item Åk 9 Gy 2 MaxDiff All SE_Åk 9 SE_Gy 2 SE_All
q29 0.343 0.295 0.048 0.316 0.336 0.351 0.242
q30 0.583 0.347 0.236 0.461 0.314 0.366 0.233
q31 1.893 1.438 0.455 1.663 0.237 0.238 0.167
q32 0.73 0.5 0.23 0.623 0.294 0.303 0.209
q34 0.507 0.326 0.181 0.422 0.310 0.318 0.220
Note:
Values highlighted in red are above the chosen cutoff 0.5 logits. Background color brown and blue indicate the lowest and highest values among the DIF groups.
Code
RIdifThreshFigLR(d_f, d_dif_f$Årskurs)

Code
RIciccPlot(d_f, dif = "yes", dif_var = d_dif_f$Kön,class_intervals = 4) + guide_area()

Code
d_f %>% 
  #select(!any_of(removed_items)) %>% 
  RItif(samplePSI = T)

  • q31 svagt underfit och avviker på loadloc
  • q32 overfit
  • PCA 1.76
  • Beroende mellan q30 och q29

Vad händer med residualkorrelationen mellan 29 och 30 om vi tar bort 31 eller 32?

Code
simcor31 <- RIgetResidCor(d_f[,-3], iterations = 500, cpu = 8)
simcor32 <- RIgetResidCor(d_f[,-4], iterations = 500, cpu = 8)

RIresidcorr(d_f[,-3], simcor31$p999)
q29 q30 q32 q34
q29
q30 -0.09
q32 -0.31 -0.23
q34 -0.4 -0.4 -0.15
Note:
Relative cut-off value is -0.15, which is 0.112 above the average correlation (-0.262).
Correlations above the cut-off are highlighted in red text.
Code
RIresidcorr(d_f[,-4], simcor32$p999)
q29 q30 q31 q34
q29
q30 0.08
q31 -0.5 -0.47
q34 -0.34 -0.33 -0.1
Note:
Relative cut-off value is -0.135, which is 0.141 above the average correlation (-0.276).
Correlations above the cut-off are highlighted in red text.

Residualkorrelationen mellan 29 och 30 förändras inte märkbart.

Code
# d_f <- d_f %>%
#   mutate(across(any_of(c("q29", "q34")), ~ car::recode(.x, "0=0; 1=1; 2=2; 3=3; 4=3")))

4.16 Analys 3 - Föräldrar

Utan item q29 “någon av dem uppmuntrar och stöttar dig?”, borttagen pga residualkorrelation och oordnade svarströsklar.

itemnr item
q30 någon av dem ägnar tillräckligt med tid åt dig?
q31 du kan prata med någon av dem om nästan allt?
q32 någon av dem tar sig tid att lyssna på dig?
q34 du kan lita på någon av dem om du verkligen behöver?
Code
RIbootRestscore(d_f[,-1], iterations = 250, samplesize = 600, cpu = 8)
Item Item-restscore result % of iterations Conditional MSQ infit Relative average item location
q30 underfit 16.8 1.16 -3.35
q31 underfit 10.0 1.14 -1.98
q32 overfit 95.2 0.78 -3.10
q34 overfit 38.4 0.95 -3.28
Note:
Results based on 250 bootstrap iterations with n = 600 and 4 items. Conditional mean-square infit based on complete responders only (n = 1367).
Code
simpca <- RIbootPCA(d_f[,-1], cpu = 8)
RIpcmPCA(d_f[,-1]) # 1.67

PCA of Rasch model residuals

Eigenvalues Proportion of variance
1.67 48.4%
1.19 27.2%
1.13 24%
0.01 0.3%
Code
simpca$max # 1.53
[1] 1.54
Code
RIloadLoc(d_f[,-1])

Code
RIbootLRT(d_f[,-1], cpu = 8, samplesize = 300)
Result n Percent
Not statistically significant 1000 100
Code
rescor3 <- RIgetResidCor(d_f[,-1], iterations = 500, cpu = 8)
RIresidcorr(d_f[,-1], rescor3$p999)
q30 q31 q32 q34
q30
q31 -0.48
q32 -0.05 -0.34
q34 -0.32 -0.2 -0.23
Note:
Relative cut-off value is -0.124, which is 0.146 above the average correlation (-0.27).
Correlations above the cut-off are highlighted in red text.
Code
RIpartgamLD(d_f[,-1])
Item 1 Item 2 Partial gamma SE Lower CI Upper CI Adjusted p-value (BH)
q32 q30 0.489 0.063 0.365 0.612 0.000
q34 q31 0.284 0.077 0.134 0.435 0.003
q32 q31 0.223 0.075 0.075 0.371 0.037
Code
RItargeting(d_f[,-1])

Code
RIitemHierarchy(d_f[,-1])

Code
mirt(d_f[,-1], model=1, itemtype='Rasch', verbose = FALSE) %>% 
  plot(type="trace", as.table = TRUE, 
       theta_lim = c(-8,3))

Code
RIpfit(d_f[,-1])

Code
RItif(d_f[,-1], samplePSI = T)

  • Residualkorrelation mellan 30 och 32 (32 har bättre targeting)
  • PCA 1.67
  • q32 93% overfit
  • q34 fortfarande oordnade lägsta trösklar

Vi behöver ta bort q30. Men kanske hade det fungerat bättre att ta bort item 29 om den inte sedan korrelerar på samma vis med 32?

4.17 Analys 3b

itemnr item
q29 någon av dem uppmuntrar och stöttar dig?
q31 du kan prata med någon av dem om nästan allt?
q32 någon av dem tar sig tid att lyssna på dig?
q34 du kan lita på någon av dem om du verkligen behöver?
Code
RIbootRestscore(d_f[,-2], iterations = 250, samplesize = 600, cpu = 8)
Item Item-restscore result % of iterations Conditional MSQ infit Relative average item location
q29 underfit 22.4 1.25 -3.22
q32 overfit 80.4 0.77 -2.93
q34 overfit 52.4 0.89 -3.13
Note:
Results based on 250 bootstrap iterations with n = 600 and 4 items. Conditional mean-square infit based on complete responders only (n = 1367).
Code
simpca <- RIbootPCA(d_f[,-2], cpu = 8)
RIpcmPCA(d_f[,-2]) 

PCA of Rasch model residuals

Eigenvalues Proportion of variance
1.63 48%
1.19 27.6%
1.16 24%
0.01 0.3%
Code
simpca$max 
[1] 1.537
Code
RIloadLoc(d_f[,-2])

Code
RIbootLRT(d_f[,-2], cpu = 8, samplesize = 300)
Result n Percent
Not statistically significant 1000 100
Code
rescor3b <- RIgetResidCor(d_f[,-2], iterations = 1000, cpu = 8)
RIresidcorr(d_f[,-2], rescor3b$p999)
q29 q31 q32 q34
q29
q31 -0.48
q32 -0.1 -0.32
q34 -0.32 -0.19 -0.22
Note:
Relative cut-off value is -0.13, which is 0.142 above the average correlation (-0.272).
Correlations above the cut-off are highlighted in red text.
Code
RIpartgamLD(d_f[,-2])
Item 1 Item 2 Partial gamma SE Lower CI Upper CI Adjusted p-value (BH)
q32 q29 0.402 0.069 0.267 0.537 0
q34 q31 0.301 0.073 0.158 0.443 0
Code
RItargeting(d_f[,-2])

Code
RIitemHierarchy(d_f[,-2])

Code
mirt(d_f[,-2], model=1, itemtype='Rasch', verbose = FALSE) %>% 
  plot(type="trace", as.table = TRUE, 
       theta_lim = c(-8,3))

Code
RIpfit(d_f[,-2])

Code
RItif(d_f[,-2], samplePSI = T)

Det blir också en residualkorrelation mellan 29 och 32 (på samma vis som mellan 30 och 32), även om den är något mindre.

4.18 Analys 4 - Föräldrar

Utan item q30 “någon av dem ägnar tillräckligt med tid åt dig?”, borttagen pga residualkorrelation och sämre targeting än q32.

Svarskategorierna för q34 behöver ev. också modifieras.

Code
# d_f %>% 
#   mutate(q34 = car::recode(q34,"1=0;2=1;3=2;4=3")) %>% 
#   RItileplot()
# 
# d_f <- d_f %>% 
#   mutate(q34 = car::recode(q34,"1=0;2=1;3=2;4=3"))
itemnr item
q31 du kan prata med någon av dem om nästan allt?
q32 någon av dem tar sig tid att lyssna på dig?
q34 du kan lita på någon av dem om du verkligen behöver?
Code
RIbootRestscore(d_f[,-c(1,2)], iterations = 250, samplesize = 600, cpu = 8)
Item Item-restscore result % of iterations Conditional MSQ infit Relative average item location
q34 overfit 7.6 0.95 -3.47
Note:
Results based on 250 bootstrap iterations with n = 600 and 3 items. Conditional mean-square infit based on complete responders only (n = 1367).
Code
simpca <- RIbootPCA(d_f[,-c(1,2)], cpu = 8)
RIpcmPCA(d_f[,-c(1,2)]) 

PCA of Rasch model residuals

Eigenvalues Proportion of variance
1.68 57.3%
1.30 42.1%
0.02 0.6%
Code
simpca$max #1.7
[1] 1.696
Code
RIloadLoc(d_f[,-c(1,2)])

Code
RIbootLRT(d_f[,-c(1,2)], cpu = 8, samplesize = 300) -> test
Code
rescor4 <- RIgetResidCor(d_f[,-c(1,2)], iterations = 500, cpu = 8)
RIresidcorr(d_f[,-c(1,2)], rescor4$p999)
q31 q32 q34
q31
q32 -0.45
q34 -0.41 -0.26
Note:
Relative cut-off value is -0.238, which is 0.137 above the average correlation (-0.374).
Correlations above the cut-off are highlighted in red text.
Code
RIpartgamLD(d_f[,-c(1,2)])
[1] "No statistically significant local dependency found."
Code
RItargeting(d_f[,-c(1,2)])

Code
RIitemHierarchy(d_f[,-c(1,2)])

Code
mirt(d_f[,-c(1,2)], model=1, itemtype='Rasch', verbose = FALSE) %>% 
  plot(type="trace", as.table = TRUE, 
       theta_lim = c(-8,3))

Code
RIitemCats(d_f[,-c(1,2)],items = "q34")

Code
RIpfit(d_f[,-c(1,2)])

Code
RItif(d_f[,-c(1,2)], samplePSI = T)

Ingen item misfit. PCA är 1.68, under simuleringsgränsvärdet 1.7. CLRT ser också bra ut. Inga residualkorrelationer. Svarskategorierna för item 34 ser ok ut när eRm estimerar tröskelvärden, men ser oordnade ut längst ner när mirt estimerar. Eftersom vi generellt använder eRm och conditional maximum likelihood som primär metod, går vi på det resultatet.

4.19 Prel. riskgruppsanalys

Code
RIscoreSE(d_f[,-c(1,2)])
Ordinal sum score Logit score Logit std.error
0 -3.908 0.679
1 -2.679 0.826
2 -2.034 0.788
3 -1.533 0.732
4 -1.075 0.695
5 -0.623 0.682
6 -0.169 0.689
7 0.297 0.713
8 0.795 0.755
9 1.368 0.822
10 2.093 0.925
11 3.098 1.029
12 4.717 0.833
Code
RIscoreSE(d_f[,-c(1,2)], output = "figure")

Code
RItargeting(d_f[,-c(1,2)])

Vi skulle kunna dra en gräns vid ordinal sum score = 6 (theta -0.169) eller 7 (.0297).

Code
thetas <- RIestThetas(d_f[,-c(1,2)])
count(thetas, WLE) %>% 
  mutate(percent = n*100/sum(n))%>% 
  kbl_rise()
WLE n percent
-3.9084740 17 1.2435991
-2.6786949 6 0.4389173
-2.0335729 7 0.5120702
-1.5332150 9 0.6583760
-1.0749892 26 1.9019751
-0.6232799 20 1.4630578
-0.1688341 62 4.5354792
0.2966695 50 3.6576445
0.7948525 69 5.0475494
1.3677364 120 8.7783467
2.0928082 147 10.7534748
3.0982416 204 14.9231895
4.7165120 630 46.0863204
Code
hist(thetas$WLE, breaks = 12)

Takeffekten är som tidigare konstaterat mycket kraftig, med 46% av respondenterna som har max score.

Code
mean(thetas$WLE < -0.169)
[1] 0.06217996
Code
thetas %>% 
  mutate(risk = ifelse(WLE < -0.169, 1, 0)) %>% 
  count(risk) %>% 
  mutate(percent = n * 100 /sum(n)) %>% 
  kbl_rise()
risk n percent
0 1282 93.782004
1 85 6.217996
Code
thetas %>% 
  mutate(risk = ifelse(WLE < -0.029, 1, 0)) %>% 
  count(risk) %>% 
  mutate(percent = n * 100 /sum(n)) %>% 
  kbl_rise()
risk n percent
0 1220 89.24653
1 147 10.75347

Ca 6.2% har en score under 6, och 10.7% är under 7.

Ett tänkbart scenario är att klassificera 6 som gräns för riskgrupp, och 7 som möjlig risk, med en röd respektive gul färgsättning motsvarande det som använts i Data i Dialog hittills.

4.20 Programvara som använts för analyserna

Code
# pkgs <- cite_packages(cite.tidyverse = TRUE, 
#                       output = "table",
#                       bib.file = "grateful-refs.bib",
#                       include.RStudio = TRUE,
#                       out.dir = getwd())
# formattable(pkgs, 
#             table.attr = 'class=\"table table-striped\" style="font-size: 15px; font-family: Lato; width: 80%"')
Code
R version 4.4.3 (2025-02-28)
Platform: aarch64-apple-darwin20
Running under: macOS Sequoia 15.6

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Europe/Stockholm
tzcode source: internal

attached base packages:
 [1] parallel  grid      stats4    stats     graphics  grDevices utils    
 [8] datasets  methods   base     

other attached packages:
 [1] gtsummary_2.3.0      labelled_2.13.0      haven_2.5.4         
 [4] foreign_0.8-88       easyRasch_0.3.6.3    doParallel_1.0.17   
 [7] iterators_1.0.14     furrr_0.3.1          future_1.67.0       
[10] foreach_1.5.2        ggdist_3.3.3         janitor_2.2.1       
[13] hexbin_1.28.4        catR_3.17            glue_1.8.0          
[16] formattable_0.2.1    patchwork_1.3.0      knitr_1.48          
[19] reshape_0.8.9        matrixStats_1.4.1    psychotree_0.16-2   
[22] psychotools_0.7-4    partykit_1.2-24      mvtnorm_1.3-1       
[25] libcoin_1.0-10       psych_2.5.6          iarm_0.4.3          
[28] mirt_1.44.0          lattice_0.22-6       eRm_1.0-10          
[31] lubridate_1.9.4      forcats_1.0.0        stringr_1.5.1       
[34] dplyr_1.1.4          purrr_1.1.0          readr_2.1.5         
[37] tidyr_1.3.1          tibble_3.3.0         tidyverse_2.0.0     
[40] readxl_1.4.5         kableExtra_1.4.0     grateful_0.2.4      
[43] car_3.1-2            carData_3.0-5        ggrepel_0.9.6       
[46] ggplot2_3.5.2        arrow_16.1.0         mokken_3.1.2        
[49] poLCA_1.6.0.1        MASS_7.3-64          scatterplot3d_0.3-44

loaded via a namespace (and not attached):
 [1] RColorBrewer_1.1-3   vcd_1.4-12           rstudioapi_0.17.1   
 [4] audio_0.1-11         jsonlite_1.8.9       magrittr_2.0.3      
 [7] farver_2.1.2         rmarkdown_2.28       vctrs_0.6.5         
[10] base64enc_0.1-3      htmltools_0.5.8.1    distributional_0.4.0
[13] curl_6.2.2           cellranger_1.1.0     Formula_1.2-5       
[16] dcurver_0.9.2        parallelly_1.45.0    htmlwidgets_1.6.4   
[19] plyr_1.8.9           testthat_3.2.1.1     zoo_1.8-12          
[22] lifecycle_1.0.4      pkgconfig_2.0.3      Matrix_1.7-2        
[25] R6_2.5.1             fastmap_1.2.0        snakecase_0.11.1    
[28] digest_0.6.37        colorspace_2.1-1     rprojroot_2.0.4     
[31] Hmisc_5.2-3          vegan_2.6-8          labeling_0.4.3      
[34] progressr_0.14.0     timechange_0.3.0     abind_1.4-5         
[37] mgcv_1.9-1           compiler_4.4.3       here_1.0.1          
[40] vcdExtra_0.8-5       bit64_4.0.5          withr_3.0.2         
[43] htmlTable_2.4.3      backports_1.5.0      relimp_1.0-5        
[46] R.utils_2.12.3       sessioninfo_1.2.3    GPArotation_2024.3-1
[49] permute_0.9-7        tools_4.4.3          lmtest_0.9-40       
[52] future.apply_1.20.0  nnet_7.3-20          R.oo_1.26.0         
[55] nlme_3.1-167         inum_1.0-5           checkmate_2.3.2     
[58] cluster_2.1.8        generics_0.1.3       snow_0.4-4          
[61] gtable_0.3.5         RPushbullet_0.3.4    tzdb_0.4.0          
[64] R.methodsS3_1.8.2    ca_0.71.1            data.table_1.17.8   
[67] hms_1.1.3            xml2_1.3.6           Deriv_4.1.3         
[70] pillar_1.10.1        splines_4.4.3        survival_3.8-3      
[73] bit_4.0.5            tidyselect_1.2.1     pbapply_1.7-2       
[76] gridExtra_2.3        svglite_2.1.3        xfun_0.46           
[79] gnm_1.1-5            brio_1.1.5           stringi_1.8.4       
[82] yaml_2.3.10          evaluate_1.0.1       codetools_0.2-20    
[85] beepr_2.0            cli_3.6.3            rpart_4.1.24        
[88] qvcalc_1.0.3         systemfonts_1.1.0    Rcpp_1.0.14         
[91] globals_0.18.0       assertthat_0.2.1     listenv_0.9.1       
[94] viridisLite_0.4.2    SimDesign_2.17.1     scales_1.4.0        
[97] rlang_1.1.6          mnormt_2.1.1        

4.21 Referenser