Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: Constrained Regression in Stata


From   Austin Nichols <austinnichols@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Constrained Regression in Stata
Date   Fri, 3 Jun 2011 10:05:38 -0400

Meg22 <meadhbh2@gmail.com>:
The FAQ http://www.stata.com/support/faqs/stat/intconst.html
advises that "The examples in this tutorial are for illustration
purposes only. If you need to fit a linear regression with interval
constraints, use the Stata command nl. " but I don't see an example of
how to do constrained regression using -nl- linked from there.  Here
is a simple example:

sysuse auto, clear
reg price mpg turn, nohe
nl (price={b1}*mpg+{b2}*turn+{_cons}), nolog
* constrain coef on mpg to be positive:
nl (price=exp({b1})*mpg+{b2}*turn+{_cons}), nolog
nlcom exp(_b[/b1])

Note that when you constrain the coef on mpg to be nonnegative, the
estimated coef exp(b1) gets driven right to zero as b1 seeks negative
infinity and you wind up with a model essentially equivalent to:

reg price turn

If you want to impose all coefs are nonnegative and sum to one, try:

sysuse auto, clear
g gpm=1/mpg
g wt=weight/1000
g l=length/1000
g tn=turn/1000
reg gpm wt l tn, nohe
* constrained to be positive:
nl (gpm=exp({b1})*wt+exp({b2})*l+exp({b3})*tn+{_cons}), nolog
nlcom (exp(_b[/b1])) (exp(_b[/b2])) (exp(_b[/b3])), post
* constrained to be positive and sum to one:
nl (gpm=exp({b1})*wt+exp({b2})*l+(1-exp({b1})-exp({b2}))*tn+{_cons})
nlcom (exp(_b[/b1])) (exp(_b[/b2])) (1-exp(_b[/b1])-exp(_b[/b2])), post

But imposing such assumptions tends to result in very implausible
models, unless the unconstrained coefs are very close to satisfying
your constraints.  See also p.1188 of [R] nl.

On Fri, Jun 3, 2011 at 2:03 AM, Nick Cox <njcoxstata@gmail.com> wrote:
> This is an FAQ. See
>
> How do I fit a regression with interval constraints in Stata?
> Isabel Cañette, StataCorp
> October 2006; updated July 2008; minor revisions April 2011
> http://www.stata.com/support/faqs/stat/intconst.html
>
> Nick
>
> On Fri, Jun 3, 2011 at 12:24 AM, Meg22 <meadhbh2@gmail.com> wrote:
>
>> I need to do a constrained regression in stata-I need all the beta
>> coefficents to be positive and sum to 1.
>>
>> I have 11 independent variables so my regression is:
>> reg Rrf bills it lt cor lcvalue lcgrowth medcap smallcap noncanbonds us jap
>> if fundno ==`i'
>>
>> I need all the betas to be positive, sum to 1 and there to be a constant.
>>
>> I got the summing to 1 bit I think:
>> constraint define 1 bills + it + lt + cor + lcvalue + lcgrowth + medcap +
>> smallcap + noncanbonds + us + jap = 1
>> cnsreg  Rrf bills it lt cor lcvalue lcgrowth medcap smallcap noncanbonds us
>> jap, constraint(1)
>>

*
*   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/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index