基于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
相关产品推荐
相关产品推荐

