如题,
模型为:
y=b0+b1*x1+b2*x2+b3*x3+b4*x4+b5*x5+b6*x6
数据结构为:
stkcd date y x1 x2 x3 x4 x5 x6
1 1
1 2
……
1 100
2 1
2 2
……
2 100
希望能够进行窗口期为20天的滚动回归(在每一个stkcd内部分组回归),同时施加约束条件:b1+b2+b3+b4+b5+b6=1并且b1-b6均大于0(也就是说,b1-b6代表x1-x6在一个组合中的权重)。
我目前尝试了几种办法:
第一,
constraint def 1 b1+b2+b3+b4+b5+b6=1
rolling _b _se, window(20) stepsize(1): cnsreg y x1 x2 x3 x4 x5 x6, constraints(1 )
但是,不知道怎么约束b1-b6都为正值,而且这个回归的运行速度非常慢。
第二,
*设置约束条件
local ma6 (exp({t5})/(1+exp({t2})+exp({t3})+exp({t4})+exp({t5})+exp({t6})))
local ma5 (exp({t5})/(1+exp({t2})+exp({t3})+exp({t4})+exp({t5})+exp({t6})))
local ma4 (exp({t4})/(1+exp({t2})+exp({t3})+exp({t4})+exp({t5})+exp({t6})))
local ma3 (exp({t3})/(1+exp({t2})+exp({t3})+exp({t4})+exp({t5})+exp({t6})))
local ma2 (exp({t2})/(1+exp({t2})+exp({t3})+exp({t4})+exp({t5})+exp({t6})))
local ma1 (1/(1+exp({t2})+exp({t3})+exp({t4})+exp({t5})+exp({t6})))
nl (y= `ma1'*x1+ `ma2'*x2+ `ma3'*x3+ `ma4'*x4+ `ma5'*x5+ `ma6'*x6+ {a7}) if !missing, delta(1e-7) ///
initial( `ma1' 1/6 `ma2' 1/6 `ma3' 1/6 `ma4' 1/6 `ma5' 1/6 `ma6' 1/6 )
但是程序报错了:"invalid parameter 1/6 in initial()" ,尝试了多个初始值都不对,不知道应该如何修改。
而且在将系数还原的时候,
local na6 exp(_b[t6:_cons])/(1+exp(_b[t2:_cons])+exp(_b[t3:_cons])+exp(_b[t4:_cons])+exp(_b[t5:_cons])+exp(_b[t6:_cons]))
local na5 exp(_b[t5:_cons])/(1+exp(_b[t2:_cons])+exp(_b[t3:_cons])+exp(_b[t4:_cons])+exp(_b[t5:_cons])+exp(_b[t6:_cons]))
local na4 exp(_b[t4:_cons])/(1+exp(_b[t2:_cons])+exp(_b[t3:_cons])+exp(_b[t4:_cons])+exp(_b[t5:_cons])+exp(_b[t6:_cons]))
local na3 exp(_b[t3:_cons])/(1+exp(_b[t2:_cons])+exp(_b[t3:_cons])+exp(_b[t4:_cons])+exp(_b[t5:_cons])+exp(_b[t6:_cons]))
local na2 exp(_b[t2:_cons])/(1+exp(_b[t2:_cons])+exp(_b[t3:_cons])+exp(_b[t4:_cons])+exp(_b[t5:_cons])+exp(_b[t6:_cons]))
local na1 1/(1+exp(_b[t2:_cons])+exp(_b[t3:_cons])+exp(_b[t4:_cons])+exp(_b[t5:_cons])+exp(_b[t6:_cons]))
nlcom (a1: `na1') (a2: `na2') (a3: `na3')(a4: `na4')(a5: `na5')(a6: `na6')
系统会提示迭代次数超过限制,也无法继续。
第三,用asreg和rangestat进行滚动回归,但是不知道怎么施加约束条件。
向各位群友们求助 ! 如果解决,可赠送论坛币,谢谢!