Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# Re: Rép. : Re: st: Inequality constraints in cnsreg

 From Steven Samuels To statalist@hsphsun2.harvard.edu Subject Re: Rép. : Re: st: Inequality constraints in cnsreg Date Sat, 6 Nov 2010 15:07:19 -0400

```/*

Hervé
```
I'm not really expert in this area. I can only suggest that you try the method I showed on the other constrained pairs. But, for the case of two coefficients where you want b1>=b2, I would *guess* the following: 1) If the OLS estimates from -reg y x1 x2- have b1_hat>= b2_hat, you are done; 2) if b1_hat<b2_hat, then the constrained LS model will have b1 = b2, estimated by -reg y z, where z = x1 + x2. This is what happened in the last example that I tried, which I repeat below.
```
```
However the only tested solution that I know of is the -pcls- command (Penalized Constrained Least Squares Fitting) of the -mgcv- package in R.
```
Best wishes

Steve

*/
***********CODE BEGINS******
sysuse auto, clear
keep if rep78 !=.
rename rep78 x1
rename  foreign x2
rename mpg y

gen z = x2 + x1
reg y x1 x2  //constraint not met

nl (y = {alpha} + exp({c})*x1 + {b2}*z)  //get constant & b2

nlcom b1: log(_b[c:_cons]) + _b[b2:_cons] // get b1
matrix b1x =r(b)

gen b1hat = el(b1x,1,1)

/* Get new prediction: no longer OLS */
gen yhatnew = _b[_cons] + b1hat* x1 + _b[b2:_cons]*x2

/* recompute Root MSE */

gen resid = y - yhatnew
gen resid2 = (y - yhatnew)^2
total resid2
local rmse = sqrt(r(b)/e(df_r))

di `rmse'   //compare to original Root MSE

*********CODE ENDS***********

On Nov 5, 2010, at 4:38 PM, Herve STOLOWY wrote:

Dear Steven:

I apologize because I have given first a simplified version of my model.
In other thread, I gave the full model.

Best regards

Hervé

```
```Steven Samuels  05/11/10 21:36 >>>
```
```---

--

Herve, I don't find the FAQ all that enlightening either.  Here is a
solution to a reduced problem:

y =  b0 + b1 x1 + b2 x2 =
= (b1 - b2) x1 +  + b2( x1 - x2)

If b1 - b2>0 then b1 - b2 = exp(c)  for some number c

Let z = x2 - x1

Then fit the *non-linear* equation

y = exp(c)*x1 + b2 Z
and solve for b2

***********CODE BEGINS******
sysuse auto, clear
keep if rep78 !=.
rename rep78 x1
rename  foreign x2
rename mpg y

gen z = x1 - x2
reg y x1 x2  //constraint not met

nl (y = {alpha} + exp({c})*x1 + {b2}*z)  //get constant & b2

nlcom b1: log(_b[c:_cons]) +_b[b2:_cons] // get b1
*********CODE ENDS***********

Steve

Steven J. Samuels
sjsamuels@gmail.com
18 Cantine's Island
Saugerties NY 12477
USA
Voice: 845-246-0774
Fax:    206-202-4783

On Nov 5, 2010, at 2:07 PM, Herve STOLOWY wrote:

Dear Statalisters:

I am using Stata 11.1

I would like to use cnsreg to create the following constaints:

Y X1 X2 X3 X4
constriant 1 X2 > X1
constraint 2 X4 > X3

I have read the threads which existed a few years ago and a recent one
on the topic of inequality constraints
(http://www.stata.com/statalist/archive/2010-04/msg01437.html).

I have also read the answer from Marteen Buis and his suggested solution
(http://www.stata.com/support/faqs/stat/intconst.html).

I do not understand very well the suggested solution and I am not
trained in programming.

Consequently, my question is the following: is there a "not too complex"
solution to get the constraints I need?

Best regards

Hervé Stolowy

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```