楼主: lipeng0809
7417 24

求非线性曲线回归拟合优度值的输出 [推广有奖]

21
lipeng0809 发表于 2016-6-19 16:15:01
高老师,您好,帮我在看看,为什么提示“WARNING: PROC NLIN failed to converge”模拟2次就没有,10次就有。

%macro sim (e,k,f,name);
/*模拟100次*/
%do j=1 %to 100;
/*计算d1~~~dn模拟效应值,存放在临时数据集simu,计算simu的拟合优度*/
DATA SIMU ;
DO n=1 to &e ;
%do i= 0 %to &k ;
d&i=0.1+&i*0.8/&k;
R=1.002+9.023/(1+exp(10.47*(0.5-d&i)));
v&i=R+&f*R*rannor(&j);
%end ;
output ;
end;

%do n=0 %to &k;
data first&n;
set simu; keep d&n v&n;
data second&n;
set first&n;rename d&n=d v&n=v;
proc append data=second&n  base=new; %end;
run;quit;

ods output anova=one;
proc nlin data=new;
model v=a + b/(1 + exp((0.5-d)*c))  ;
parms a=1 b=9 c=10.5 ;
run;
ods output close;

proc transpose data=one out=two;
run;
data three;
set two;
where _NAME_='SS';
run;
DATA four;
SET three;
COL4=COL1/COL3;
RUN;
proc append base=aa data=four  ;
proc delete data=new;run;quit;
%end ;
proc export data=work.aa outfile="f:\sasdata\&name" dbms=excel2000 replace;
run;
%mend sim ;
%sim (25,7,1,aa38);


data a;
set aa;
proc means mean;var col4;
run;quit;

22
高贵林 发表于 2016-6-21 10:09:31
lipeng0809 发表于 2016-6-19 16:15
高老师,您好,帮我在看看,为什么提示“WARNING: PROC NLIN failed to converge”模拟2次就没有,10次就有 ...
你的模拟数据引入的随机误差太大了,造成有时候没法把数据拟合到你的模型上去。把随机误差减一半试试, 就是把 v&i=R+&f*R*rannor(&j);   换成  v&i=R+&f*R*rannor(&j)*0.5;
还不行就把 0.5 换成 0.4, 0.3 等等。

23
lipeng0809 发表于 2016-6-21 10:54:08 来自手机
高老师,我希望随机误差能为效应值的一半,比如:效应值是是10,模拟数据围绕在10+-5左右,这样误差也会太大吗?那这个rannonr是不是可以v=r+rannor*r*0.5?还是这个rannor本身就不对?

24
高贵林 发表于 2016-6-23 10:40:38
lipeng0809 发表于 2016-6-21 10:54
高老师,我希望随机误差能为效应值的一半,比如:效应值是是10,模拟数据围绕在10+-5左右,这样误差也会太大 ...
“随机误差能为效应值的一半”,是指随机误差的平均值,标准差还是最大值?我估计你要的是标准差。v=r+rannor*r*0.5 就是把你的随机误差的标准差控制在 r*0.5, 如果这是你想要的, 用这个公式计算就可以了。

25
lipeng0809 发表于 2016-6-28 12:19:52 来自手机
谢谢,高老师,问题已解决,感谢您的耐心帮助

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 09:54