Model RSM untuk data politomus
By harjito (titounnes)
Skala peringkat (Rating scale) adalah sekumpulan kategori yang dirancang untuk memperoleh informasi tentang atribut kuantitatif atau kualitatif. Dalam ilmu sosial, khususnya psikologi, contoh yang umum adalah skala likert dan skala penilaian 1-10 di mana seseorang memilih angka yang dianggap mencerminkan persepsi mengenai sesuatu.
Apa itu RSM
RSM: Rating Scale Model dikembangkan oleh Andrich (1978) untuk data politomus, yaitu data dengan kategori >= 2. RSM mengasumsikan bahwa struktur ambang ditetapkan di seluruh item. Jarak relatif antara ambang batas adalah sama untuk semua item, tetapi item masih memiliki kesulitan yang berbeda. Ambang batas hanya bergerak ke atas atau ke bawah skala logits
Syarat Yang harus dipenuhi untuk analisis model Rasch.
- Politomus: memiliki kategori minimal 2
- Jarak antar kategori adalah sama
Package yang dibutuhkan
Versi Minimum
Untuk menjalankan eRm dibutuhkan R-base minimal versi 3.5.19++. Untuk mendapatkan versi terbaru unduh versi
- windows unduh di sini
- Debian (linux) unduh di sini
- Fedora (linux) unduh di sini
- Redhat (linux) unduh di sini
- OpenSuse (linux) unduh di sini
- Ubuntu (linux) unduh di sini
- MacOs (Apple) unduh di sini
Potongan script untuk menjalankan analisis TAM
Memeriksa versi R-base
vs = as.numeric(R.version$major)+as.numeric(R.version$minor)
if(vs < 3.5){
cat(paste("Minimun version is 3.5. Your R version is", vs,"\n"))
quit()
}
Membaca data yang akan dianalisis (format CSV)
readData <- function(path) {
return(read.csv(file = path))
}
args = commandArgs(trailingOnly=TRUE)
if(length(args)==0){
raw <- readData('sample.csv')
dirW <- "sample"
}else{
if(file.exists(args[1])){
raw <- readData(args[1])
dirW <- strsplit(args[1], ".")[0]
}else{
raw <- FALSE
cat(paste("File", args[1], "tidak ditemukan.\n"))
quit()
}
}
Menyiapkan direktori kerja (format CSV)
if(!dir.exists(dirW)){
dir.create(dirW)
}
joinPath <- function(parent, child){
return(gsub(" ", "", paste(parent,"/",child), fixed = TRUE))
}
for(d in c('log','plot')){
dd <- joinPath(dirW,d)
if(!dir.exists(dd)){
dir.create(dd)
}else{
f <- list.files(dd, include.dirs = F, full.names = T, recursive = T)
file.remove(f)
}
}
Menyimpan data log
logger <- function(path, data, sum=FALSE) {
path <- joinPath(dirW,path)
path <- gsub(" ", "_", path, fixed = TRUE)
cat(paste("Writing:",path, "...\n"))
sink(path)
cat("Data\n")
print(data)
if(sum){
cat("Summary\n")
print(summary(data))
}
sink()
}
Menyimpan hasil plot (grafik)
plotter <- function(path, data, width=600, height=350, color="", absis = 0, ordinat=0.5){
path <- joinPath(dirW,path)
path <- gsub(" ", "_", path, fixed = TRUE)
cat(paste("Drawing:",path, "...\n"))
png(path, width=width, height=height)
data
if(color!=""){
abline(v = absis, col = color)
abline(h = ordinat, col = color)
}
dev.off()
}
Install package
cat("Load packages ...\n")
requiredPackages = c('TAM','WrightMap','plyr')
for(p in requiredPackages){
if(!require(p,character.only = TRUE)) install.packages(p)
library(p,character.only = TRUE)
}
Menyimpan data log
scores <- subset(raw, select = -c(Person))
logger('log/scores.txt', scores, TRUE)
politomi <- TAM::tam.mml(scores, irtmodel="RSM")
logger('log/analyze.txt', politomi, TRUE)
logger('log/rater_estimation.txt', politomi$xsi, TRUE)
logger('log/rater_fit.txt', tam.fit(politomi), TRUE)
logger('log/rater_treshold.txt', tam.threshold(politomi), TRUE)
person_ability <-tam.wle(politomi)
logger('log/person_ability.txt', person_ability, TRUE)
person_fit <-tam.personfit(politomi)
logger('log/person_fit.txt', person_fit, TRUE)
Menyimpan Hasil plot
plotter("plot/wright map.png", IRT.WrightMap(politomi, show.thr.lab=TRUE))
d = 'Plots'
if(dir.exists(d)){
f <- list.files(d, include.dirs = F, full.names = T, recursive = T)
file.remove(f)
}
plot(politomi,ask=TRUE)
for(i in 1:ncol(scores)){
if(i>1){
source <- gsub("#", (i-1), 'Rplots#.pdf', fixed = TRUE)
}else{
source <- "Rplots.pdf"
}
target <- gsub("#", i, 'expected_score_#.pdf', fixed = TRUE)
file.rename( from = file.path(getwd(), source) , to = file.path(gsub(" ","",paste(getwd(),paste('/',joinPath(dirW,'plot')))), target) )
}
if(dir.exists(d)){
f <- list.files(d, include.dirs = F, full.names = T, recursive = T)
file.remove(f)
}
plot(politomi, type="items")
for(i in 1:(ncol(scores)-1)){
if(i>1){
source <- gsub("#", (i-1), 'Rplots#.pdf', fixed = TRUE)
}else{
source <- "Rplots.pdf"
}
target <- gsub("#", (i+1), 'item_characteristic_#.pdf', fixed = TRUE)
file.rename( from = file.path(getwd(), source) , to = file.path(gsub(" ","",paste(getwd(),paste('/',joinPath(dirW,'plot')))), target) )
}
source <- gsub(" ","",paste(getwd(),'/Plots'))
target <- gsub(" ","",paste(getwd(),paste('/',joinPath(dirW,'plot'))))
file.rename( from = file.path(source, 'Item_Rater_1.png') , to = file.path(target, 'item_characteristic_1.png'))
unlink('Plots', recursive = TRUE)
Citation
Jika anda menggunakan package TAM untuk publikasi, anda dapat menyertakan sitasi berikut.
@Manual{
TAM_3.5-19,
title = {TAM: Test Analysis Modules},
author = {Alexander Robitzsch and Thomas Kiefer and Margaret Wu},
year = {2020},
note = {R package version 3.5-19},
url = {https://CRAN.R-project.org/package=TAM},
}
Video Tutorial
Tutorial lengkap sedang dalam produksi.
Tags:
Ikuti terus tutorial saya di e-Project dan channel
saya di