gpt4 book ai didi

r - PROC NLIN 从 SAS 到 R

转载 作者:行者123 更新时间:2023-12-01 07:15:27 25 4
gpt4 key购买 nike

我目前被分配了一项工作,需要将 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.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 是如何做到的呢?任何帮助表示赞赏!

最佳答案

首先让我们弄清楚 SAS 代码在做什么。 PROC NLIN 可以被诱骗去做各种最小化问题,但设置有时是违反直觉的。您需要定义一个因变量 ($y$) 和一个基于其他变量和一些参数的预测值 ($f(x,\beta$),它将最小化 $\sum_i [y_i - f(x_i,\测试版)]^2$。

定义$y$ 和$f$ 的关键行是

model.like = sqrt(E*E)

相当于

model like = sqrt(E*E)

所以这意味着 $\sum [like -\sqrt{E\cdotE}]^2$ 将被最小化。根据您链接的示例,我假设变量 like 是较早定义的,并且已设置为常量 0。这意味着 $\sum [0-\sqrt{E\cdotE}] ^2 =\sum E^2$ 正在被最小化。

E 被定义为 f- R*(1-ET*M),所以实际上 $\sum [f- R*(1-ET*M) )]^2$ 被最小化,其中 fET 是未知参数。我不确定这是什么意思,但这就是正在发生的事情。

将其重写为 R 确实可以使用 nls,我们可以使用相同的技巧:预测零。

sample <- read.table(textConnection(
"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"), header=TRUE)

nls(0 ~ f - R*(1-eta*M), data=sample, start=list(eta=0,f=10.86), trace=T)

有输出

546.5988 :   0.00 10.86
0.06273518 : 1.7259120 0.2731282
Nonlinear regression model
model: 0 ~ f - R * (1 - eta * M)
data: sample
eta f
1.7259 0.2731
residual sum-of-squares: 0.06274

Number of iterations to convergence: 1
Achieved convergence tolerance: 4.345e-07

请注意,SAS 代码是按名称 运行的,因此您必须确保 R 代码也适合每个名称的不同模型。

关于r - PROC NLIN 从 SAS 到 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25763070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com