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

基于ggplot2与purrr的多条逻辑曲线导数通用绘制方法技术问询

Hey,我来给你一个完全通用的解决方案——不管你的参数数据框pars有多少行,都能自动生成并绘制对应的ICC导数曲线,全程用purrr和Deriv搞定:

通用化绘制可变数量ICC导数曲线的实现

步骤1:加载依赖包并准备参数数据

先把需要的包和参数数据框准备好:

library(ggplot2)
library(purrr)
library(Deriv)

pars <- data.frame(
  diff = c(-1.5, 2.5),
  disc = c(1.2, 2.5)
)

步骤2:写一个「ICC函数工厂」

我们先定义一个能根据输入参数生成对应ICC函数的函数,这样就可以动态适配任意组参数:

icc_factory <- function(diff, disc) {
  # 返回针对当前参数组的ICC函数
  function(x) {
    exp(disc * (x - diff)) / (1 + exp(disc * (x - diff)))
  }
}

步骤3:用pmap批量生成导数函数

借助pmap()遍历参数数据框的每一行,为每组参数生成ICC函数并求导:

# 遍历pars的每一行,生成对应导数函数
deriv_funs <- pmap(pars, function(diff, disc) {
  icc_fun <- icc_factory(diff, disc)
  Deriv(icc_fun, "x")
})

步骤4:批量转换为stat_function并绘图

把生成的导数函数列表转换成ggplot能识别的stat_function对象,然后一次性添加到绘图中:

# 将导数函数转为stat_function列表
stat_deriv_list <- map(deriv_funs, ~ stat_function(fun = .x))

# 绘制所有导数曲线(这里用seq生成更平滑的x轴数据)
ggplot(data.frame(x = seq(-5, 5, by = 0.1))) + 
  aes(x) + 
  stat_deriv_list +
  labs(title = "可变参数的ICC导数曲线", x = "能力值", y = "信息量") +
  theme_minimal()

关键逻辑解释

  • icc_factory是核心:它是一个「函数生成器」,传入一组diff和disc就能得到对应参数的ICC函数,完美解决动态参数的需求。
  • pmap()适配数据框行遍历:它会自动把pars的每一列作为参数传递给匿名函数,不管你是2组还是100组参数,都能一键处理。
  • 批量生成stat_function:用map()把每个导数函数包装成ggplot的图层对象,再也不用手动逐个添加stat_function了!

这样你的代码就完全通用了——不管pars有多少行,都能自动处理并绘制所有导数曲线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:58:13