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

# Re: st: plotting a regression function with time-dummies indicating structural breaks

 From Nick Cox To statalist@hsphsun2.harvard.edu Subject Re: st: plotting a regression function with time-dummies indicating structural breaks Date Tue, 3 May 2011 11:10:00 +0100

```For what you want, -twoway function- is not especially helpful. Do
something more like this.

clear
set obs 20
gen int TIME = _n + 1990

* create dummies
gen byte d1 = TIME > 1995
gen byte d2 = TIME > 2005

tsset TIME

* set coefficients
scalar b_0 = 100
scalar b_1 = 2
scalar b_2 = 10000
scalar b_3 = -5
scalar b_4 = 20

* generate the time series
set seed 1
gen u = rnormal(0,2)
gen y = b_0 + b_1*TIME + b_2*d1 + b_3*d1*TIME + b_4*d2 + u
gen y2 = b_0 + b_1*TIME + b_2*d1 + b_3*d1*TIME + b_4*d2
tw tsline y y2, legend(order(1 "tsline" 2 "function"))

On Tue, May 3, 2011 at 10:53 AM, Oliver Jones
<ojones@wiwi.uni-bielefeld.de> wrote:
> Hi Nick,
> here is some example I just made up, that shows what I mean by "range
> problem"
>
> ************* begin example ****************
> clear
> set obs 20
>
> gen int TIME = _n + 1990
>
> * create dummies
> gen byte d1 = 0
> replace d1 = 1 if TIME > 1995
> gen byte d2 = 0
> replace d2 = 1 if TIME > 2005
>
> tsset TIME
>
> * set coefficients
> scalar b_0 = 100
> scalar b_1 = 2
> scalar b_2 = 10000
> scalar b_3 = -5
> scalar b_4 = 20
>
> * generate the time series
> set seed 1
> gen u = rnormal(0,2)
> gen y = b_0 + b_1*TIME + b_2*d1 + b_3*d1*TIME + b_4*d2 + u
>
> tw ///
>        (tsline y) ///
>        (function y = b_0 + b_1*x + b_2*d1 + b_3*d1*x + b_4*d2, ///
>                range(1991 2010)), ///
>        legend(order(1 "tsline" 2 "function"))
>
> ************* end example ****************
>
> I hope the resulting plot shows what I mean.
>
> Best
> Oliver
>
>
> Am 03.05.2011 11:29, schrieb Nick Cox:
>>
>> This is presumably a family of four curves given by a range on TIME_t
>> and Dummy_1 = 0, 1 and Dummy_2 = 0,1.
>>
>> -twoway function- will take care of TIME_t = x but it is completely
>> dumb about the dummies. My guess is that it will use Dummy_1 and
>> Dummy_2 and give you just one of the four depending on values in
>> the first observation.
>>
>> You will need to call -function- four times, but you don't need to
>> type the code four times.
>>
>> Something like this:
>>
>> forval a = 0/1 {
>>     forval b = 0/1 {
>>           local fcall `fcall' (function y = b_0 + b_1*x + `a'*(b_2 +
>> b_3*x) + b_4*`b', ///
>>           range(TIME_t))
>>     }
>> }
>>
>> twoway (tsline y) `fcall' , legend(order(2 "0 0" 3 "0 1" 4 "1 0" 5 "1 1"))
>>
>> I am assuming that this is generic code or that you have scalars b_0 ..
>> b_4.
>>
>> By the way, the -generate- line is irrelevant. -twoway function- works
>> with a generic x.
>>
>> On Tue, May 3, 2011 at 10:10 AM, Oliver Jones
>> <ojones@wiwi.uni-bielefeld.de>  wrote:
>>
>>> I wonder if there is an easy way to plot a regression of the form:
>>>
>>> y_t = b_0 + b_1*TIME_t + Dummy_1*(b_2 + b_3*TIME_t) + b_4*Dummy_2
>>>
>>> So far I tried:
>>> gen x = TIME_t
>>> twoway ///
>>>        (tsline y) ///
>>>        (function y = b_0 + b_1*x + Dummy_1*(b_2 + b_3*x) + b_4*Dummy_2,
>>> ///
>>>                range(`first_year' `last_year'))
>>>
>>> I seem to have a problem with the range, because the resulting graph just
>>> covers one third of the graph. But the shape seems to look ok, just
>>> compressed.
>>>
>>> Hopefully there is a nice way of plotting such stuff without the
>>> -function-
>>> command or some one has a hint regarding the range problem.

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