FAQ > 金融建模 > 建模问题 > 数学相关

Q:线性最小二乘回归中计算回归系数时如何设置约束条件?    

  • A:天软提供模型Regress_Constraint可以进行对回归系数约束的线性回归
    可以对回归系数进行以下约束:
    1.不等式约束:A*x <= B;
    2.等式约束:Aeq*x = Beq
    3.上下限约束:Lb < x <Ub
    其中,A、B、Aeq、Beq、Lb、Ub是模型Regress_Constraint的参数。
    特别说明:在对系数进行约束优化时,达到最大优化次数或没有可行解时返回不满足约束的值,请合理设置约束条件。
    实现范例
    范例一:对回归系数进行不等式约束的线性回归
    不等式约束:x1+2x2+3x3<=6,x1+x2+x3>=2
    y:=array(0.4253,1.3612,0.3304,0.6934,1.1214,0.9929,0.5996,1.0316,0.8177,0.6136);
    x:=array((0.0438,0.8659,0.6379),
         (0.9911,0.4025,0.83),
         (0.794,0.8664,0.3367),
         (0.7152,0.4165,0.5815),
         (0.0273,0.247,0.9836),
         (0.5299,0.2001,0.5964),
         (0.8134,0.3703,0.2393),
         (0.888,0.2939,0.6139),
         (0.3112,0.7528,0.3322),
         (0.3101,0.9795,0.3461));
    constant := 1;
    //加入不等式约束:x1+2x2+3x3<=6,x1+x2+x3>=2
    A := array((1,2,3),(-1,-1,-1));
    B := array(6,-2);
    aeq := array();
    beq := array();
    alpha := 0.05;
    option:=0;// 残差平方和最小
    lb:=array();
    ub:=array();
    return Regress_Constraint(y,x,constant,A,B,aeq,beq,alpha,option,lb,ub);

    执行结果:

    回归系数:满足不等式约束

    范例二:对回归系数进行等式约束的线性回归
    等式约束:3x1+2x2+x3=3,x1+x2+x3=2
    y:=array(0.4253,1.3612,0.3304,0.6934,1.1214,0.9929,0.5996,1.0316,0.8177,0.6136);
    x:=array((0.0438,0.8659,0.6379),
         (0.9911,0.4025,0.83),
         (0.794,0.8664,0.3367),
         (0.7152,0.4165,0.5815),
         (0.0273,0.247,0.9836),
         (0.5299,0.2001,0.5964),
         (0.8134,0.3703,0.2393),
         (0.888,0.2939,0.6139),
         (0.3112,0.7528,0.3322),
         (0.3101,0.9795,0.3461));
    constant := 1;
    A := array();
    B := array();
    //加入等式约束:3x1+2x2+x3=3,x1+x2+x3=2
    aeq := array((3,2,1),(1,1,1));
    beq := array(3,2);
    alpha := 0.05;
    option:=0;// 残差平方和最小
    lb:=array();
    ub:=array();
    return Regress_Constraint(y,x,constant,A,B,aeq,beq,alpha,option,lb,ub);

    执行结果:

    回归系数:满足等式约束

    范例三:对回归系数进行上下限约束的线性回归
    上下限约束:0.5<x1,x2,x3<4
    y:=array(0.4253,1.3612,0.3304,0.6934,1.1214,0.9929,0.5996,1.0316,0.8177,0.6136);
    x:=array((0.0438,0.8659,0.6379),
         (0.9911,0.4025,0.83),
         (0.794,0.8664,0.3367),
         (0.7152,0.4165,0.5815),
         (0.0273,0.247,0.9836),
         (0.5299,0.2001,0.5964),
         (0.8134,0.3703,0.2393),
         (0.888,0.2939,0.6139),
         (0.3112,0.7528,0.3322),
         (0.3101,0.9795,0.3461));
    constant := 1;
    A := array();
    B := array();
    aeq := array();
    beq := array();
    alpha := 0.05;
    option:=0;// 残差平方和最小
    //上下限约束:0.5<x1,x2,x3<4
    lb:=array(0.5,0.5,0.5);
    ub:=array(4,4,4);
    return Regress_Constraint(y,x,constant,A,B,aeq,beq,alpha,option,lb,ub);

    执行结果:

    回归系数:满足上下限约束

    范例四:对回归系数进行组合约束的线性回归
    组合约束:
     1.不等式约束:3x1+2x2+x3<=3
     2.等式约束:x1+x2+x3=2
     3.上下限约束:0<x1,x2,x3<4
    y:=array(0.4253,1.3612,0.3304,0.6934,1.1214,0.9929,0.5996,1.0316,0.8177,0.6136);
    x:=array((0.0438,0.8659,0.6379),
         (0.9911,0.4025,0.83),
         (0.794,0.8664,0.3367),
         (0.7152,0.4165,0.5815),
         (0.0273,0.247,0.9836),
         (0.5299,0.2001,0.5964),
         (0.8134,0.3703,0.2393),
         (0.888,0.2939,0.6139),
         (0.3112,0.7528,0.3322),
         (0.3101,0.9795,0.3461));
    constant := 1;
    //加入不等式约束:3x1+2x2+x3<=3
    A := array((3,2,1));
    B := array(3);
    //加入等式约束:x1+x2+x3=2
    aeq := array((1,1,1));
    beq := array(2);
    alpha := 0.05;
    option:=0;// 残差平方和最小
    //加入上下限约束:0<x1,x2,x3<4
    lb:=array(0,0,0);
    ub:=array(4,4,4);
    return Regress_Constraint(y,x,constant,A,B,aeq,beq,alpha,option,lb,ub);

    执行结果:

    回归系数:满足组合约束