Parameter({b0=0.5, b1=0.5}, b0*(1-Exp(-b1*X)))
若您使用公式编辑器,则公式中的 Parameter 部分是隐藏的。这说明了公式在列中的储存方式以及在“非线性”启动对话框中的显示方式。公式中给出了名为 b0 和 b1 的两个参数的初始值,在公式中供拟合使用。
“非线性”平台生成公式的单独副本,并对它进行编辑以提取表达式中的参数。然后它将对这些参数的引用映射到估计参数的位置。“非线性”平台对预测公式的参数计算分析导数。若您使用显示导数命令,则可以获得日志中所列的公式,它类似于以下内容:
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));