在R的ltm包中设置IRT模型难度值失效的技术问询
解决ltm包约束参数未生效的问题
看起来你在使用ltm包设置项目参数约束时,犯了两个关键错误:约束的符号参数(sign)使用不正确,以及可能对参数索引的对应关系理解有误。下面一步步帮你解决:
1. 纠正约束的符号参数(sign)
ltm函数的constr参数要求每行必须是c(parameter_index, sign, value)的格式,其中:
sign只能取三个合法值:0:表示等于约束(这是你需要的固定参数值的场景)1:表示>=约束-1:表示<=约束
- 你之前用的
1和2都是错误的:1代表的是“参数≥目标值”而非等于;2是完全不合法的取值,这也是为什么你看到Item1的难度没有被固定为1的核心原因。
2. 明确参数索引的对应关系
对于2PL模型(~z1),每个项目对应两个参数:难度(Dffclt)和区分度(Dscrmn),参数向量的顺序是:Item1 Dffclt, Item1 Dscrmn, Item2 Dffclt, Item2 Dscrmn, ..., Item6 Dffclt, Item6 Dscrmn
也就是说:
- Item1的难度对应索引
1 - Item6的区分度对应索引
12
正确的代码示例
如果你想把Item1的难度固定为1,同时把Item6的区分度固定为-0.5,代码应该写成:
ltm(WIRS ~ z1, constr = rbind(c(1, 0, 1), c(12, 0, -0.5)))
验证参数索引的小技巧
如果你不确定参数对应的索引,可以先运行无约束模型,查看参数向量的名称来确认:
unconstrained_model <- ltm(WIRS ~ z1) names(coef(unconstrained_model))
这会输出每个参数的具体名称(比如"Item 1.Dffclt"、"Item 1.Dscrmn"),帮你准确找到目标参数的索引。
运行修正后的代码后,你应该能看到Item1的难度被正确设置为1,Item6的区分度为-0.5。
内容的提问来源于stack exchange,提问作者dazerw
相关产品推荐
相关产品推荐

