计算Sigmoidal曲线特定点梯度:导数公式正确性疑问
逻辑斯蒂曲线导数计算错误修正
首先明确你使用的SSlogis函数对应的模型形式:
$$Y = \frac{\text{Asym}}{1 + \exp\left(\frac{\text{xmid} - X}{\text{scal}}\right)}$$
你的导数公式存在关键错误,同时代码里还有未定义变量的问题,以下是具体拆解和修正方案:
错误点说明
- 遗漏Asym参数:模型的最大值由Asym决定,导数必须包含这个缩放因子,你当前的公式完全没用到该参数
- 指数项符号错误:
SSlogis的指数项是(xmid - X)而非(X - xmid),符号反转会直接导致导数计算结果错误 - 未定义变量
bbday:代码中使用了未定义的bbday变量计算梯度,应替换为目标值x_when_y_0.5
另外,当Y=0.5时,代入模型可推导出$\exp\left(\frac{\text{xmid} - X}{\text{scal}}\right)=1$,此时导数可以简化为更简洁且不易出错的形式:
$$\frac{dY}{dX}\bigg|_{Y=0.5} = \frac{\text{Asym}}{4 \cdot \text{scal}}$$
修正后的代码片段
将循环中的梯度计算部分替换为以下代码:
# 计算y=0.5时的x值(注:若Asym≈1,此值应接近xmid,可验证参数合理性) x_when_y_0.5 <- params["xmid"] + params["scal"] * log(0.5/(params["Asym"] - 0.5)) # 用简化公式计算y=0.5处的梯度 grad_when_y_0.5 <- params["Asym"] / (4 * params["scal"])
结果验证
如果目视梯度约为0.05,结合Y值范围0-1(Asym≈1),可推导出$\frac{1}{4 \cdot \text{scal}}=0.05$,即scal=5,这符合逻辑斯蒂曲线的参数意义:scal越大,曲线越平缓,梯度越小。
内容的提问来源于stack exchange,提问作者LucyBM
相关产品推荐
相关产品推荐

