若您打开 Negative Exponential.jmp 非线性样本数据示例,非线性列的实际公式类似于以下公式:
Parameter({b0=0.5, b1=0.5}, b0*(1-Exp(-b1*X)))
b0 * First(T#1=1-(T#2=Exp(-b1*X)), T#3=-(-1*T#2*X))
模型的对于参数的导数为:
{T#1, T#3*b0}
预测模型需要计算更多子表达式时,它使用 First 函数来返回第一个参数表达式的值,同时也会计算其他参数表达式的值。在这种情况下,需要更多赋值来计算导数。
导数表本身是表达式的列表,每个要拟合的参数对应于一个表达式。例如,模型的对于 b0 的导数为 T#1,它在预测模型中的线程为 1–(Exp(-b1*X))。模型的对于 b1 的导数为 T#3*b0,若您对上述赋值中进行了替换,则它的线程为 –(–1*Exp(-b1*X)*X)*b0。尽管进行了很多优化,它有时并不能以最优方式组合运算。您从 T#3 的表达式中可以看出,该表达式并未消除双否定运算。
若导数机制不知道如何求函数的分析导数,则使用 NumDeriv 函数求数值导数。若求数值导数,平台会显示 delta 的值,它用于计算当参数表达式变化 delta 的时候,函数的相对变化量。您可能需要试用不同的 delta 设置以获得好的数值导数。
If(Y==0, Log(1/(1+Exp(model))), Log(1 - 1/(1 + Exp(model))));
temp=1/(1+Exp(model));
If(Y==0, Log(temp), Log(1-temp));