- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前被分配了一项工作,需要将 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$ 被最小化,其中 f
和 ET
是未知参数。我不确定这是什么意思,但这就是正在发生的事情。
将其重写为 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/
有没有办法从 .sas 文件中打开 SAS 数据集进行查看(即在“ViewTable”窗口中)? 最佳答案 我认为这会做你想做的: dm log "vt sashelp.air"; 只需更改 "sas
如何在 SAS 程序中将 sas 数据表 (sas7bdat) 设置为只读? — 即使在 session 之间,该表也必须保持只读状态,尤其是当另一个用户注册该库并尝试写入数据集时。一旦创建了这些表,
如何将 mmddyy 变量转换为 date9 变量?例如,假设我们有以下内容: x = 05/10/2011 我希望 x 的形式为 10May2011。所以我做了以下事情: xnew =
我正在使用以下代码将文本文件导入 SAS: proc import datafile="C:\Users\Desktop\data.txt" out=Indivs dbms=dlm replace;
您好,我有兴趣为我在 SAS 中生成的数据制作一些稍微复杂的自定义格式。我需要它是数字类型。 格式 1 0="-" >0="%" %" 即 0 >>>>>>> - .74 >>>>> 74% -.65
我正在尝试弄清楚如何读取文本文件 (300mb) 中以逗号分隔但数据位于一行中的数据。 数据看起来像这样: a,b,c,d,e,f,g,h,i,j,k,l,m,false,false,true,1,3
我想将 SAS 数据集从 SAS 导出到 FTP。我可以使用以下命令导出 csv 文件(或 txt 文件): %macro export_to_ftp(dsn= ,outfile_name= ); F
这个问题在 SAS forum 上讨论过,与会者最终同意不同意。 问题很简单:SAS 在编译时为所有变量分配一个缺失值UNLESS一个变量出现在sum 语句中(在这种情况下,SAS 在编译时分配了一个
众所周知,SAS需要特别注意句子中的引号。 例如 %let quoted="I'd like to"; data temp; set temp; quoted=""ed"; r
我对 SAS 完全陌生,我很绝望。 所以,我的代码是: DATA abc; INPUT AA BB CC DD EE; CARDS; ; RUN; PROC PRINT DATA = abc; T
我在使用如下所示的数据集时遇到问题。它是不同位置/周的库存计数: data have; input itm location $ week inv; cards; 3 x 1 30 3 x 2
我们需要确定我们现在使用的是什么类型的 SAS(pc SAS 或服务器 SAS)。有什么方法可以找出我们使用的是什么 SAS,是指 PC SAS 还是 SAS Server? 最佳答案 使用“proc
假设我有一个包含 n 行和 p 列的数据集,这样数据集中的每个条目都包含一个实数。我正在寻找一种方法来对每行中的 p 列进行排名。这个排名的输出应该是一个长度 - p 的排名向量,它说明了关系。 所以
我正在尝试打印一个带分隔符的文件,而不必指定所有列。我可以接近,但数字列总是被引用: DATA _NULL_; SET SASHELP.CARS (obs = 5 keep = Make Mode
SAS 软件可以成功读取的最大文件大小是多少。(不考虑硬件限制) 提前致谢。 最佳答案 引用最近播放的电视广告,答案是“无限加 1”。 SAS 在读取操作期间对文件的大小没有任何限制,尽管您可能会遇到
我有一个包含变量 y、x1 和 x2 的数据集。我想找到适合模型的方程式: y = k1*x1c1 + k2 *x2c2 通过找到 k1、c1、k2 和 c2。我如何在 SAS 中执行此操作?具体来说
SAS中是否有用于定义数组中字母序列的简写? 许多语言都具有轻松执行此操作的机制,我想SAS也是如此,尽管我找不到它的引用。 例如,在R中,我可以做 > x x [1] "a" "b" "c" "d
我有两个 SAS 数据集。第一个相对较小,包含唯一的日期和相应的 ID: date dateID 1jan90 10 2jan90 15 3jan90 20 ... 第二个
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个主要是数值的变量,但是偶尔会有一个字符偷偷进入。因此,变量在 SAS 中存储为字符。我希望能够确定此字符变量中的各个值是否为数字。在知道哪些值是数字哪些是字符后,我想创建一个新的(数字)变量,
我是一名优秀的程序员,十分优秀!