最近我被分配了一项工作,需要将SAS代码翻译成R。到目前为止,我已经成功地完成了80%的工作,但卡在了使用PROC NLIN的部分。根据我的阅读,PROC NLIN用于拟合非线性模型,但我不确定该代码是否实际上正在这样做,因此不知道如何在R中处理它。以下是该代码:
proc nlin data=ds1 outest=estout;
parms ET= 0 f= 10.68;
E= f- R*(1-ET*M);
L = E*E;
model.like = sqrt(E*E);
by Name ;
run;
样例数据如下 -
Name M R
Anna 0.5456231 4.118197
Anna 0.5359164 4.240243
Anna 0.541881 3.943975
Anna 0.5436047 3.822222
Anna 0.5522962 3.58813
Anna 0.5561487 3.513195
Anna 0.5423374 3.666507
Anna 0.525836 3.715371
Anna 0.5209941 3.805572
Anna 0.5304675 3.750689
Anna 0.5232541 3.788292
当我查看 SAS 帮助中的 PROC NLIN 页面时,其中使用了参数“MODEL”来指定方程,但是这里的代码没有模型方程。Model.like 用于指定似然函数(第4316页-https://support.sas.com/documentation/cdl/en/statugnlin/61811/PDF/default/statugnlin.pdf)。那么这段代码是在做什么?我完全困惑了。起初我认为可以使用 R 中的 nls() 来完成这个任务,我尝试了以下代码——
fit = nls(E~ f - R*(1-eta*M),sample, start=list(eta=0,phi=10.86)
,trace=T)
但是我很快意识到这是错误的,因为即使进行了5000次迭代,模型仍然没有收敛。这是因为我的数据集中没有'E'列。那么,SAS是如何做到的呢?
非常感谢您的帮助!