脚本? 将非线性模型列公式应用于多列我在第 1 列中有一个带有 2 个参数的模型公式,我想将该模型拟合到 80 个不同的数据列(第 2 - 82 列),其中每个数据列都有这 2 个自定义参数。 是否有捷径可寻?
我必须写一个脚本吗?
回复:脚本? 将非线性模型列公式应用于多列最终将此作为解决方案收敛:
名称默认为 Here( 1 );
dlg = 列对话框(
标题(“非线性回归”),
yCol = Col List( "Y, 响应",
数据类型(数字),
敏科尔( 1 )
),
xCol = Col List( "X, 预测公式",
数据类型(数字),
最小科尔(1),
最大科尔( 1 )
)
);
如果(dlg[“按钮”]!= 1,
Throw("用户取消");
);
删除自(dlg);
评估列表(dlg);
dt = 当前数据表();
n 适合 = N 项( yCol );
公式 = xCol[1] << 获取公式;
n parms = N Items( Arg( 公式, 1 ) );
parm = J( n 适合, 2* n parms, .);
clmnm={};
parmnm = Arg(公式,1);
parclnm = As List(J(1,n parms));
对于 ( i = 1, i<= n parms, i++,
parmnm[i]=Char(parmnm[i]);
parclnm[i]=Left(parmnm[i],芒格(parmnm[i],1,"=")-1);
);
For( f = 1, f <= n 适合, f++,
尝试(
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, 仅限数值导数 (1), Finish, Go );
parm[f,[1,2]] = Transpose( Report( nl fit )["Solution"][NumberColBox(5)] << Get As Matrix );
parm[f,[3,4]] = Transpose( Report( nl fit )["Solution"][NumberColBox(6)] << Get As Matrix );
);
clmnm[f]=列(yCol[f])< );
dt = As Table(parm);
dt<列 = 列 (1);
For( f = 1, f <= n 适合, f++,
col[f]=clmnm[f];
);
对于 ( i = 1, i<= n parms, i++,
col = 列(i+1);
col << 设置名称(parclnm[i]||“估计”);
col = Column(i+1+n 参数);
col << 设置名称(parclnm[i]||“ApproxStdError”);
);
回复:脚本? 将非线性模型列公式应用于多列我想到了!
谢谢你!
回复:脚本? 将非线性模型列公式应用于多列它在这一步出错
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
回复:脚本? 将非线性模型列公式应用于多列谢谢你!
现在测试...
调试时收到以下错误
无法在访问或评估“下标”时下标显示框,报告(nl fit)[/*###*/“参数估计”]
@马克贝利写道:
这个解决方案有点棘手。 只有当您使用的模型不是 Fit Curve 库中的模型时,它才有效。 (如果是,则 Nonlinear 会启动 Fit Curve,它希望模型按名称指定,但此脚本未提供。)根据您声称实际模型更复杂,那么我抓住机会是不在拟合模型库中并编写了这个脚本:
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
首先打开 JMP 数据表,然后打开并运行此脚本。 选择所有响应列(示例中的第 2-82 列)并单击是,回应. 单击包含模型公式的列(示例中的第 1 列),然后单击十、预测公式,. 然后点击好的.
回复:脚本? 将非线性模型列公式应用于多列这个解决方案有点棘手。 只有当您使用的模型不是 Fit Curve 库中的模型时,它才有效。 (如果是,则 Nonlinear 会启动 Fit Curve,它希望模型按名称指定,但此脚本未提供。)根据您声称实际模型更复杂,那么我抓住机会是不在拟合模型库中并编写了这个脚本:
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
首先打开 JMP 数据表,然后打开并运行此脚本。 选择所有响应列(示例中的第 2-82 列)并单击是,回应. 单击包含模型公式的列(示例中的第 1 列),然后单击十、预测公式,. 然后点击好的.
回复:脚本? 将非线性模型列公式应用于多列您可以在没有脚本的情况下完成,但它需要大量的点击。 假设您已经将非线性模型设置为列公式,请执行以下步骤:
- 选择表格 > 堆叠。
- 选择所有响应列(在您的示例中为 2-82)并单击 Stack。
- 确保选择了复制公式的选项。
- 输入数据列的名称,例如 Response。
- 输入标签列的名称,例如曲线。
- 单击确定。
- 选择分析 > 专业模型 > 非线性。
- 选择预测变量列(在您的示例中为 83)并单击 X
- 选择模型列(在您的示例中为 1)并单击 Y。
- 选择曲线列并单击依据。
- 单击确定。
- 现在为每条曲线单击 Go。 (这是乏味的部分。)
- 右键单击任何“参数估计”报告并选择“制作组合数据表”。
此过程应为您提供一个包含所有参数估计值的新数据表。
回复:脚本? 将非线性模型列公式应用于多列标记,
谢谢。
您对所有验证问题的回答都是肯定的。
公式可以是任何东西,但为了简单起见,假设它是 y = h*exp(-b*x^(0.65)),h 和 b 作为参数,x>0。
实际公式要复杂得多,但这种额外的复杂性不应影响解决方案。
回复:脚本? 将非线性模型列公式应用于多列我再问:第1列公式中表达的非线性模型(f(X))是什么? 两个参数是什么?
验证:预测变量 (X) 是最后一列并且用于第 1 列的公式中?
验证:个人回答 (Y) 在第 2-82 列?
验证:您想分别将 Y = f(X) 拟合到每个 Y 并捕获每个 Y 的参数估计值?
回复:脚本? 将非线性模型列公式应用于多列是的,预测变量存在于另一列中。
如果您愿意,我们可以将其称为第 83 列。
我想我的目标输出将是一个表格,该表格显示每列两个参数的最佳拟合值以及相关的置信区间。
回复:脚本? 将非线性模型列公式应用于多列在第 1 列中存储为公式的非线性模型是什么? 该公式通常是预测变量的函数。 哪一列包含预测变量值?
如果这种情况很简单,我可以写一个脚本。