library(foreign)library(readxl)library(RISEkbmRasch) # devtools::install_github("pgmj/RISEkbmRasch")library(grateful) # devtools::install_github("Pakillo/grateful")library(ggrepel)library(car)library(kableExtra)library(readxl)library(tidyverse)library(eRm)library(mirt)library(psych)library(ggplot2)library(psychotree)library(matrixStats)library(reshape)library(knitr)library(cowplot)library(formattable) library(glue)library(hexbin)library(skimr)### some commands exist in multiple packages, here we define preferred ones that are frequently usedselect <- dplyr::selectcount <- dplyr::countrecode <- car::recoderename <- dplyr::rename# file paths will need to have "../" added at the beginning to be able to render document# get itemlabelsitemlabels <-read_excel("../data/Itemlabels.xlsx") %>%filter(str_detect(itemnr, pattern ="ku")) %>%select(!Dimension)spssDatafil <-"../data/2023-04-26 Prevent OSA-enkat.sav"# read SurveyMonkey datadf <-read.spss(spssDatafil, to.data.frame =TRUE) %>%select(starts_with("q0011"),q0001,q0002,q0003,q0004) %>%rename(Kön = q0002, Ålder = q0001,Bransch = q0003,Hemarbete = q0004)# SPSS format provides itemlabels too, we can save them in a dataframespssLabels <- df %>%attr('variable.labels') %>%as.data.frame()dif.kön <- df$Köndif.ålder <- df$Ålderdif.bransch <- df$Branschdif.hemarbete <- df$Hemarbetedf <- df %>%select(starts_with("q0011"))names(df) <- itemlabels$itemnr
8.1 Items
Code
itemlabels %>%kbl_rise(width =60)
itemnr
item
ku1
Mina kunskaper och färdigheter är till nytta i mitt arbete.
ku2
Jag har tillräckligt med kunskap/färdigheter för att kunna utföra mina arbetsuppgifter.
ku3
Jag har möjlighet att lära mig nya saker när arbetsuppgifterna kräver det.
ku4
Jag har möjlighet till långsiktig kompetensutveckling i mitt arbete.
RIdemographics(dif.ålder,"Ålder") # kanske även fixa en figur?
Ålder
n
Percent
18-29
22
3.8
30-39
103
17.8
40-49
175
30.2
50-59
215
37.1
60+
64
11.1
Code
RIdemographics(dif.bransch,"Bransch")
Bransch
n
Percent
Kontorsarbete (oavsett bransch)
284
49.1
Industri
26
4.5
Hotell, restaurang, service
8
1.4
Handel
16
2.8
Skola, utbildning
67
11.6
Vård, omsorg
99
17.1
Byggverksamhet
7
1.2
Annat
71
12.3
Code
RIdemographics(dif.hemarbete,"Antal dagar med arbete hemifrån")
Antal dagar med arbete hemifrån
n
Percent
En dag
136
23.5
Två dagar
105
18.1
Tre dagar
35
6.0
Fyra dagar
10
1.7
Fem dagar
2
0.3
Jag arbetar aldrig eller sällan hemifrån
291
50.3
8.2.1 Svarsbortfall items
Vi filtrerar bort respondenter som har färre än två svar på frågorna i delskalan.
Code
# If you want to include participants with missing data, input the minimum number of items responses that a participant should have to be included in the analysis:min.responses <-2scale.items <- itemlabels$itemnr# Select the variables we will work with, and filter out respondents with a lot of missing datadf.omit.na <- df %>%filter(length(scale.items)-rowSums(is.na(.[scale.items])) >= min.responses)RImissing(df.omit.na,"ku")
Vi har extremt få saknade svar, och tar därför bort respondenterna som inte har kompletta svar.
Tills flera svar samlats in slår vi ihop de två lägsta svarskategorierna med varandra för ku1 och ku2.
Code
#Temporärt slå ihop svarskategorier så att analyserna funkardf.omit.na$ku1<-recode(df.omit.na$ku1,"0=0;1=0;2=1;3=2;4=3;5=4",as.factor=FALSE)df.omit.na$ku2<-recode(df.omit.na$ku2,"0=0;1=0;2=1;3=2;4=3;5=4",as.factor=FALSE)#df.omit.na$ku3<-recode(df.omit.na$ku3,"0=0;1=0;2=1;3=2;4=3;5=4",as.factor=FALSE)# df.omit.na$ku1<-recode(df.omit.na$ku1,"0=0;1=0;2=1;3=2;4=3;5=4",as.factor=FALSE)# df.omit.na$ku2<-recode(df.omit.na$ku2,"0=0;1=0;2=1;3=2;4=3;5=4",as.factor=FALSE)
8.3 Rasch-analys 1
itemnr
item
ku1
Mina kunskaper och färdigheter är till nytta i mitt arbete.
ku2
Jag har tillräckligt med kunskap/färdigheter för att kunna utföra mina arbetsuppgifter.
ku3
Jag har möjlighet att lära mig nya saker när arbetsuppgifterna kräver det.
ku4
Jag har möjlighet till långsiktig kompetensutveckling i mitt arbete.
Relative cut-off value (highlighted in red) is -0.044, which is 0.2 above the average correlation.
Code
RIloadLoc(df.omit.na)
Code
RIitemCats(df.omit.na, items ="all")
Code
# increase fig-height above as needed, if you have many itemsRItargeting(df.omit.na, xlim =c(-5,5))
Code
RIitemHierarchy(df.omit.na)
Det ser ut som att frågorna täcker två olika områden, ett med nuvarande kunskaper och deras koppling till arbetet, och ett med lära mig nytt och kompetensutveckling. Det finns kraftiga residualkorrelationer mellan båda paren av items. Det finns också oordnade svarskategorier för flera items.
Eftersom vi bara har fyra items är det tveksamt att det går att hitta en sammansättning med items som fungerar adekvat med detta utgångsläge. Vi provar att ta bort ett item för att testa, och väljer ku1, samt slår samman de två lägsta svarskategorierna för ku2 och ku3.
Code
# create vector with eliminated itemsremoved_items <-c("ku1")# select all items except those removeddf2 <- df.omit.na %>%select(!all_of(removed_items)) %>%mutate(ku2 =recode(ku2, "1=0;2=1;3=2;4=3"),ku3 =recode(ku3, "1=0;2=1;3=2;4=3") )
8.4 Rasch-analys 2
itemnr
item
ku2
Jag har tillräckligt med kunskap/färdigheter för att kunna utföra mina arbetsuppgifter.
ku3
Jag har möjlighet att lära mig nya saker när arbetsuppgifterna kräver det.
ku4
Jag har möjlighet till långsiktig kompetensutveckling i mitt arbete.