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

R语言mirt包如何将多个独立线图合并至同一坐标系

mirt包合并theta标准误曲线的实现方法

mirt包输出的SingleGroupClass类对象自带的plot方法基于base绘图系统,默认每次调用会新建绘图画布,无法直接叠加图层,可通过以下两种方法实现多曲线同坐标系绘制:

方法1:直接叠加原生绘图(最快实现)

直接调用mirt自带绘图逻辑,绘制第一张图后,给第二张图添加add = TRUE参数,即可将曲线叠加到现有画布,注意两个绘图调用的theta_lim参数保持一致即可:

# 绘制第一条曲线,初始化画布
plot(fit.SKIDDETdisc, 
     type = "infoSE", 
     theta_lim = c(-4,4), 
     col = "#2c7fb8", 
     lwd = 2,
     main = "")

# 叠加第二条曲线
plot(fit.SKIDNAdisc, 
     type = "infoSE", 
     theta_lim = c(-4,4), 
     col = "#d95f02", 
     lwd = 2,
     add = TRUE)

# 添加图例
legend("topright", 
       legend = c("SKIDDetachmentdisc模型", "SKIDNAdisc模型"),
       col = c("#2c7fb8", "#d95f02"), 
       lwd = 2)

该方法完全复用mirt内置的计算逻辑,生成的曲线和单独绘制单图的效果完全一致,不需要额外做数据处理。

方法2:提取计算结果自定义绘图(自由度最高)

如果需要用ggplot2自定义绘图风格,或者做更复杂的图形调整,可以先提取两个模型的测试信息值,手动计算SE(标准误为测试信息平方根的倒数,即 $SE(\theta)=1/\sqrt{I(\theta)}$),整理成数据框后再绘图:

library(mirt)
library(ggplot2)

# 生成和绘图范围一致的theta序列
theta_seq <- matrix(seq(-4, 4, length.out = 200))

# 分别计算两个模型对应theta取值的SE
se_det <- 1/sqrt(testinfo(fit.SKIDDETdisc, Theta = theta_seq))
se_na <- 1/sqrt(testinfo(fit.SKIDNAdisc, Theta = theta_seq))

# 整理为数据框
plot_df <- data.frame(
  theta = as.numeric(theta_seq),
  SKIDDetachmentdisc = se_det,
  SKIDNAdisc = se_na
)

整理完数据后,既可以用base绘图,也可以直接用ggplot2绘制:

# ggplot2绘制示例
ggplot(plot_df, aes(x = theta)) +
  geom_line(aes(y = SKIDDetachmentdisc, color = "SKIDDetachmentdisc"), linewidth = 1) +
  geom_line(aes(y = SKIDNAdisc, color = "SKIDNAdisc"), linewidth = 1) +
  labs(x = expression(theta),
       y = expression(SE(theta)),
       color = "模型") +
  xlim(-4, 4) +
  theme_bw()

注意:如果需要绘制的是测验信息曲线而非SE曲线,只需要去掉计算SE的步骤,直接用testinfo()输出的信息值绘图即可。

内容的提问来源于stack exchange,提问作者C K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:39:09