You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ltm包中使用rasch函数将项目难度中心化至0?

问题:如何在ltm包中实现项目难度中心化至0而非被试能力中心化?

我正在使用ltm包从测试反应数据计算项目难度,具体代码如下:

model.1pl <- rasch(dfTestMatrix)

# proportion correct (PC)
dfPC <- data.frame(colnames(model.1pl$X), summary$perc) %>%
  dplyr::select(uiid = "colnames.model.1pl.X.", PC = "X1")

# item difficulties
dfItemParams <- data.frame(coef(model.1pl, prob = FALSE))
dfItemBank <- data.frame(colnames(model.1pl$X), dfItemParams$Dffclt, dfItemParams$Dscrmn) %>%
  rename(uiid="colnames.model.1pl.X.", b="dfItemParams.Dffclt", a="dfItemParams.Dscrmn")

# compare difficulties and proportions correct
dfItemDetails <- merge(dfItemBank, dfPC, by = "uiid", all = TRUE) 

我希望将项目难度中心化至0,而非默认的被试能力中心化,但不清楚如何通过ltm包实现,查阅文档也未找到方法。运行上述代码后,我发现当前结果是被试能力被中心化了,请问是否有可行的实现方式?

解决方案

ltm包的rasch()函数默认将被试能力(θ)的均值固定为0,没有直接参数支持切换为项目难度(b)中心化到0,但可以通过手动调整参数实现——Rasch模型的识别条件仅要求θ和b的均值其中一个为0,调整其中一方时对应反向调整另一方即可保持模型拟合。

具体步骤及代码修改如下:

# 拟合默认Rasch模型(被试能力中心化)
model.1pl <- rasch(dfTestMatrix)

# 获取原始项目参数
dfItemParams <- data.frame(coef(model.1pl, prob = FALSE))
original_b <- dfItemParams$Dffclt

# 计算原始难度参数的均值
b_mean <- mean(original_b)

# 将难度中心化至0,同时调整被试能力以保持模型一致性
centered_b <- original_b - b_mean
adjusted_theta <- model.1pl$scores[, 1] + b_mean  # 原被试能力均值为0,加回难度均值完成调整

# 更新项目参数数据框
dfItemBank <- data.frame(
  uiid = colnames(model.1pl$X),
  b = centered_b,
  a = dfItemParams$Dscrmn  # 1PL模型中区分度固定为1,无需调整
)

# 比例正确率计算及合并逻辑保持不变
dfPC <- data.frame(colnames(model.1pl$X), summary(model.1pl)$perc) %>%
  dplyr::select(uiid = "colnames.model.1pl.X.", PC = "X1")

dfItemDetails <- merge(dfItemBank, dfPC, by = "uiid", all = TRUE) 

关键说明

  • 调整后项目难度的均值为0,被试能力的均值变为原来的难度均值,模型的拟合效果和项目特征曲线与原模型完全一致,仅参数参照点发生变化。
  • 若需要后续使用调整后的被试能力,直接使用adjusted_theta即可。

内容的提问来源于stack exchange,提问作者James Page

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:00:11