我之前见过类似的问题,但我从来没有找到满意的答案。
我正在使用名为ltm的项目响应理论包来分析我的数据。 我的数据(许多科目的25个测试题的二进制答案)如下所示:
q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 q21 q22 q23 q24
0 1 1 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 1 0 0
1 0 1 0 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0
1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1
1 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0
0 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 0 0 1 1 1 1 0 0
0 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 0
接下来我开始分析
library(ltm)
model <- ltm(questionsPretest ~ z1, IRT.param = na.action = NULL)
为了评估每个考生的能力,我运行因子分数:
scores <- factor.scores(model)
这使我能够为学生提供她的答案(24 1和0)的向量。 能力(称为z1)在分数中存储如下:
str(scores)
List of 6
$ score.dat:'data.frame': 3088 obs. of 28 variables:
..$ q1 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q2 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q3 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q4 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q5 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q6 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q7 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q8 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q9 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q10 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q11 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q12 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q13 : num [1:3088] 0 0 0 0 0 0 0 0 0 0 ...
..$ q14 : num [1:3088] 0 0 0 0 0 0 0 0 0 1 ...
..$ q15 : num [1:3088] 0 0 0 0 0 0 0 0 1 0 ...
..$ q16 : num [1:3088] 0 0 0 0 0 0 0 1 0 0 ...
..$ q17 : num [1:3088] 0 0 0 0 0 1 1 1 0 0 ...
..$ q18 : num [1:3088] 0 0 0 1 1 0 0 0 0 0 ...
..$ q19 : num [1:3088] 0 0 0 0 1 0 0 0 0 0 ...
..$ q20 : num [1:3088] 0 0 0 0 0 1 1 0 0 0 ...
..$ q21 : num [1:3088] 0 1 1 0 0 0 1 1 0 0 ...
..$ q22 : num [1:3088] 0 0 0 1 0 0 0 0 0 0 ...
..$ q23 : num [1:3088] 0 0 0 0 0 0 1 0 0 0 ...
..$ q24 : num [1:3088] 0 0 1 0 0 0 0 0 0 0 ...
..$ Obs : num [1:3088] 87 1 1 1 1 1 1 1 1 1 ...
..$ Exp : num [1:3088] 5.553 2.275 0.213 0.096 0.061 ...
..$ z1 : num [1:3088] -1.9 -1.87 -1.61 -1.55 -1.53 ...
..$ se.z1: num [1:3088] 0.573 0.583 0.535 0.523 0.524 ...
$ method : chr "EB"
$ B : num 5
$ call : language tpm(data = questionsPretest, type = "latent.trait", IRT.param = TRUE, na.action = NULL)
$ resp.pats: logi FALSE
$ coef : num [1:24, 1:3] 0.000017879 0.311805093 0.000045896 0.000000182 0.000004738 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:24] "q1" "q2" "q3" "q4" ...
.. ..$ : Named chr [1:3] "Gussng" "Dffclt" "Dscrmn"
.. .. ..- attr(*, "names")= chr [1:3] "Guessing" "Difficulty" "Discrimination"
- attr(*, "class")= chr "fscores"
我需要做的是根据答案将z1分配给我的数据集中的观察。查看分数的输出,我会将z1 = -1.9分配给所有对所有问题都回答为0的人。我会将z1 = -1.87分配给除问题q21之外的所有问题都回答0的人。
正如你所知,在我的数据集中有3088个观察到的答案排列,所以我真的想避免这样做:)
有人可以建议如何在R中做到吗?
谢谢!
答案 0 :(得分:0)
假设您有一个data.frame df,其中包含一个名为obsScores的变量,用于标记每个参与者的分数(观察)。
以下是两种分配机制:
蛮力,只需给每个参与者提供原始价值:df$factorScore <- scores$z1[df$obsScores]
无需担心尺寸的差异。 R很乐意重用价值观。
第二种方法,你可以使用因子变量
df$factorScore <- factor(df$obsScores, levels=1:length(scores$z1), labels=scores$z1)
第一个更适合分析。