我有大约200个虚拟对象,并希望运行约束OLS回归,其中我强制虚拟对象上的所有系数的总和等于1。
一种选择是键入:
constraint define 1 dummy_1+dummy_2 +...+dummy_200=1
cnsreg y x_1 x_2 dummy_1-dummy_200, c(1)
...but键入约束显然是非常痛苦的。
有没有办法快速定义这么大的约束?矩阵形式将是非常快速和直接的,但在网上和Stata指南中阅读了很多之后,我不清楚如何在矩阵形式中做约束,以及它们是否可能。
发布于 2014-05-22 18:08:17
这至少有两个方面,如何做到这一点,以及它是否会在任何统计意义上发挥作用。
如何做到这一点似乎比你担心的容易,因为困难的部分只是在变量名之间插入"+“符号,这就是字符串操作。就像这样
unab myvars : dummy_*
local myvars : subinstr local myvars " " "+", all
mac li
constraint 1 `myvars' = 1
应该可以帮你入门了。macro list
是这样的,你可以看到你做了什么,特别是如果它不是你想要的。
它在统计上是否对你有效超出了本论坛的范围,但如果这是唯一的限制,请注意它与各种负系数和正系数是一致的。也许你的问题有一些特殊的特点,这使它成为一个自然的约束,但我的直觉是,这样的模型将很难估计。
发布于 2014-05-23 07:24:18
我会采取一种完全不同的方法。这种约束通常发生在为一组指示符变量尝试不同的编码方案时。如果是这样的话,我会结合margins with the contrast operators使用Stata的factor variables。
https://stackoverflow.com/questions/23812805
复制