全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1704 0
2012-04-08
Many SAS statistical procedures cannot do regression with constrains. For example, a spline regression with unknown location of a knot.

The regression lines(two lines) will be

y=b0+b1*x    for x<=xz;
y=bb0+bb1*x   for x>=xz;

suject to:   b0+b1*xz=bb0+bb1*xz

Here b0 b1 xz bb0 bb1 are all unknown parameters.

In proc optmodel, the constrain can be easily incorporated. See example below.



%let n=200;

data t1;
   do i=1 to &n;
      x=ranuni(1230)*4;
      x=sign(x)*x;
      y=1+1*x*x+rannor(123);
      x0=1;
      output;
    end;
    keep y x x0;
run;

proc reg data=t1;
model y=x;
run;
quit;

proc optmodel;
   set I = 1 .. &n;
   number y{I};
   number x{I};
   number x0{I};
   read data t1 into [_n_] y x x0;
   var b0, b1;
   min f =
      sum{k in I}
         ( y[k] - (b0*x0[k] + b1*x[k]))**2;

reset printlevel=2;
   solve with nlp;
         
   solve with qp;
   print f b0 b1;
quit;


proc optmodel;
   set I = 1 .. &n;
   number y{I};
   number x{I};
   number x0{I};
   read data t1 into [_n_] y x x0;
   var b0, b1 , xz, bb0, bb1;
   
         
   min f =sum{k in I} ( ( x[k]< xz )* ( y[k] - (b0*x0[k] + b1*x[k]))**2                              
                       + ( x[k]>= xz )* ( y[k] - (bb0*x0[k] + bb1*x[k]))**2 );

   con coef: b0+b1*xz=bb0+bb1*xz;
reset printlevel=2;
   solve with nlp;      
   print f b0 b1 xz bb0 bb1;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群