是否可以使用相同的问题但在每个版本中使用不同的顺序来分析不同考试的项目表现?
Is it possible to analyze items' performance from different exams using the same questions but with a different order in each version?
我们使用相同的项目组制作了五个 exams2nops
考试,顺序是随机的。所有这些都是选择项目。因此,获得了五个不同的 *.rds
文件,每个文件都将与相应的扫描检查一起使用。我注意到在 nops_eval
中使用的那些 *.rds
文件中有关于 *.rmd
的信息,这些信息用于产生该考试的问题。例如:
但是,在生成 nops_eval.csv
之后,该信息丢失了。
我想使用 *.rmd
信息合并所有五个 nops_eval.csv
文件以匹配每个问题。由于可以从不同的 *.rmd
文件生成相同的问题(例如练习 22)。所有考试都使用了相同的 22 *.rmd
个文件(都有相同的 22 个问题,但顺序不同。
我想获得一个包含合并 csv 的数据框,以便我进行项目反应理论和 Rasch 建模分析。
是的,您可以根据 RDS 文件中的 file/name 信息重新排序来合并 CSV 文件中的信息。下面我将说明如何使用 CSV 文件中的 check.*
列来执行此操作。这些通常最接近我进行 IRT 分析所需的内容。
首先,您阅读第一版考试的 CSV 和 RDS:
eval1 <- read.csv2("/path/to/first/nops_eval.csv", dec = ".")
metainfo1 <- readRDS("/path/to/first/exam.rds")
然后,您只提取 check.*
列并将练习文件名用作列名。
eval1 <- eval1[, paste0("check.", 1:length(metainfo1[[1]]))]
names(eval1) <- sapply(metainfo1[[1]], function(x) x$metainfo$file)
我在这里使用 $file
因为它在练习中总是唯一的。如果 $name
在您的情况下也是独一无二的并且具有更好的标签,您也可以改用它。
然后你对第二版考试做同样的事情:
eval2 <- read.csv2("/path/to/second/nops_eval.csv", dec = ".")
metainfo2 <- readRDS("/path/to/second/exam.rds")
eval2 <- eval2[, paste0("check.", 1:length(metainfo2[[1]]))]
names(eval2) <- sapply(metainfo2[[1]], function(x) x$metainfo$file)
如果在两个版本的构建中使用了相同的练习,eval1
和eval2
的列名相同,只是顺序不同。然后你可以简单地做
eval2 <- eval2[, names(eval1)]
重新排序 eval2
的列以匹配 eval1
的列。随后,您可以:
eval <- rbind(eval1, eval2)
如果你有两个以上的考试版本,你只需重复相同的代码,最后 rbind()
所有的东西都放在一起。
如果练习的版本之间只是部分重叠,也可以使用类似的代码。在那种情况下,我首先用合并的练习文件名构造一个足够大的 NA
矩阵,然后插入结果:
n1 <- nrow(eval1)
n2 <- nrow(eval2)
nam <- unique(c(names(eval1), names(eval2)))
eval <- matrix(NA, nrow = n1 + n2, ncol = length(nam))
colnames(eval) <- nam
eval[1:n1, names(eval1)] <- as.matrix(eval1)
eval[(n1 + 1):(n1 + n2), names(eval2)] <- as.matrix(eval2)
同样,您需要适当地迭代以合并两个以上的版本。
在任何一种情况下,生成的 eval
都可以进一步处理,成为用于后续分析的 IRT 矩阵。
我们使用相同的项目组制作了五个 exams2nops
考试,顺序是随机的。所有这些都是选择项目。因此,获得了五个不同的 *.rds
文件,每个文件都将与相应的扫描检查一起使用。我注意到在 nops_eval
中使用的那些 *.rds
文件中有关于 *.rmd
的信息,这些信息用于产生该考试的问题。例如:
但是,在生成 nops_eval.csv
之后,该信息丢失了。
我想使用 *.rmd
信息合并所有五个 nops_eval.csv
文件以匹配每个问题。由于可以从不同的 *.rmd
文件生成相同的问题(例如练习 22)。所有考试都使用了相同的 22 *.rmd
个文件(都有相同的 22 个问题,但顺序不同。
我想获得一个包含合并 csv 的数据框,以便我进行项目反应理论和 Rasch 建模分析。
是的,您可以根据 RDS 文件中的 file/name 信息重新排序来合并 CSV 文件中的信息。下面我将说明如何使用 CSV 文件中的 check.*
列来执行此操作。这些通常最接近我进行 IRT 分析所需的内容。
首先,您阅读第一版考试的 CSV 和 RDS:
eval1 <- read.csv2("/path/to/first/nops_eval.csv", dec = ".")
metainfo1 <- readRDS("/path/to/first/exam.rds")
然后,您只提取 check.*
列并将练习文件名用作列名。
eval1 <- eval1[, paste0("check.", 1:length(metainfo1[[1]]))]
names(eval1) <- sapply(metainfo1[[1]], function(x) x$metainfo$file)
我在这里使用 $file
因为它在练习中总是唯一的。如果 $name
在您的情况下也是独一无二的并且具有更好的标签,您也可以改用它。
然后你对第二版考试做同样的事情:
eval2 <- read.csv2("/path/to/second/nops_eval.csv", dec = ".")
metainfo2 <- readRDS("/path/to/second/exam.rds")
eval2 <- eval2[, paste0("check.", 1:length(metainfo2[[1]]))]
names(eval2) <- sapply(metainfo2[[1]], function(x) x$metainfo$file)
如果在两个版本的构建中使用了相同的练习,eval1
和eval2
的列名相同,只是顺序不同。然后你可以简单地做
eval2 <- eval2[, names(eval1)]
重新排序 eval2
的列以匹配 eval1
的列。随后,您可以:
eval <- rbind(eval1, eval2)
如果你有两个以上的考试版本,你只需重复相同的代码,最后 rbind()
所有的东西都放在一起。
如果练习的版本之间只是部分重叠,也可以使用类似的代码。在那种情况下,我首先用合并的练习文件名构造一个足够大的 NA
矩阵,然后插入结果:
n1 <- nrow(eval1)
n2 <- nrow(eval2)
nam <- unique(c(names(eval1), names(eval2)))
eval <- matrix(NA, nrow = n1 + n2, ncol = length(nam))
colnames(eval) <- nam
eval[1:n1, names(eval1)] <- as.matrix(eval1)
eval[(n1 + 1):(n1 + n2), names(eval2)] <- as.matrix(eval2)
同样,您需要适当地迭代以合并两个以上的版本。
在任何一种情况下,生成的 eval
都可以进一步处理,成为用于后续分析的 IRT 矩阵。