Statalist


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

Re: st: Re: Randomly selecting variables in panel, collapsing, and simulating


From   John Antonakis <john.antonakis@unil.ch>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Re: Randomly selecting variables in panel, collapsing, and simulating
Date   Sat, 13 Jun 2009 18:54:50 +0200

Thanks mate. I am ordering Kit's book right now!

So, I put the code together with simulate, but it gives me an error right after the "simulate" command:


". simulate _b _se, reps(20) seed (123) : split,
variable i not found
an error occurred when simulate executed split"


This is the program I am running :


set seed 123456

capture program drop split
version 10.1
program define split, eclass
       drop _all

/*
get groups...
random so better
set seed to facilitate
discussion
*/

gen random=runiform()
sort i random
by i: gen byte group=/*
*/cond(_n<=_N/2,1,2)

drop random

collapse (mean) y x z, /*
*/by(i group)

/*
get replacement
as requested by John
*/

by i: replace y = y[1]
by i: drop if _n==1

reg y x z

 end

simulate _b _se, reps(20) seed (123) : split,

foreach v in tf il cr mba mbp {
 gen t_`v' = _b_`v'/_se_`v'
 gen p_`v' = 2*(1-normal(abs(t_`v')))
}

Thanks,
J.

____________________________________________________

Prof. John Antonakis
Associate Dean Faculty of Business and Economics
University of Lausanne
Internef #618
CH-1015 Lausanne-Dorigny
Switzerland

Tel ++41 (0)21 692-3438
Fax ++41 (0)21 692-3305

Faculty page:
http://www.hec.unil.ch/people/jantonakis&cl=en

Personal page:
http://www.hec.unil.ch/jantonakis
____________________________________________________



On 13.06.2009 18:38, Martin Weiss wrote:
<>

Thanks for the flowers of course!

For the programming issue- which I take to mean more than just programming, but the ability to judiciously combine different instruments in Stata to achieve certain data transformation goals- I recommend the whole range of Stata press publications to your attention (http://www.stata-press.com/books/), in particular Kit`s http://www.stata-press.com/books/isp.html


Here is the code up to 3), then...

**********
clear*

input i      y      x     z     n
1     5      8    3    1
1     9    10    5    2
1     8    12    6    3
1     6      9    4    4
2     5      7    2    1
2     9    13    4    2
2     8      8    7    3
2     6      8    6    4
2     8      8    7    5
2     8      8    7    6
3     5      7    2    1
3     9    11    7    2
3     8    11    5    3
end

compress
list, noobs

/*
get groups...
random so better
set seed to facilitate
discussion
*/

set seed 1001
gen random=runiform()
sort i random
by i: gen byte group=/*
*/cond(_n<=_N/2,1,2)

drop random

collapse (mean) y x z, /*
*/by(i group)

/*
get replacement
as requested by John
*/
by i: replace y = y[1]
by i: drop if _n==1

l, noo sepby(i)

**********



HTH
Martin
_______________________
----- Original Message ----- From: "John Antonakis" <john.antonakis@unil.ch>
To: <statalist@hsphsun2.harvard.edu>
Sent: Saturday, June 13, 2009 6:24 PM
Subject: Re: st: Re: Randomly selecting variables in panel, collapsing, and simulating


Hi  Martin:

Thanks for the reply and the code! You are so helpful with everyone and always seem to be able to find an elegant solution! As an aside, what is a nice resource to learn how to program nicely in Stata?

I made a mistake in the 3), which you noticed.

So, this was 2)--(I am only putting one space after each entry so that the formatting doesn't get too messed up):

i g y x z   1 1 6.5 10 4.5
1 2 7.5 9.5 4.5

2 1 7.3 9.3 4.3
2 2 7.3 8 6.7

3 1 5 7 2
3 2 8.5 11 6

Now for 3), I want to put the data in such as way as to be able to regress the y of the first observation in each cluster on the x and z of the second observation in each cluster

i y x z
1 6.5 9.5 4.5
2 7.3 8 6.7
3 5 11 6

Thank you very much for your help.

Best,
J.

____________________________________________________

Prof. John Antonakis
Associate Dean Faculty of Business and Economics
University of Lausanne
Internef #618
CH-1015 Lausanne-Dorigny
Switzerland

Tel ++41 (0)21 692-3438
Fax ++41 (0)21 692-3305

Faculty page:
http://www.hec.unil.ch/people/jantonakis&cl=en

Personal page:
http://www.hec.unil.ch/jantonakis
____________________________________________________



On 13.06.2009 18:06, Martin Weiss wrote:
<>

Here is the code for 1) and 2). I do not understand the intent in number 3: If you really do want the first obs on y in each cluster, why does your example say "7.5" then? Should it not be 6.5?

**********
clear*

input i      y      x     z     n
1     5      8    3    1
1     9    10    5    2
1     8    12    6    3
1     6      9    4    4
2     5      7    2    1
2     9    13    4    2
2     8      8    7    3
2     6      8    6    4
2     8      8    7    5
2     8      8    7    6
3     5      7    2    1
3     9    11    7    2
3     8    11    5    3
end

compress
list, noobs

/*
get groups
*/
gen random=runiform()
sort i random
by i: gen byte group=/*
*/cond(_n<=_N/2,1,2)

l, noo sepby(i)
drop random


collapse (mean) y x z, /*
*/by(i group)

l, noo sepby(i)

**********


HTH
Martin
_______________________
----- Original Message ----- From: "John Antonakis" <john.antonakis@unil.ch>
To: <statalist@hsphsun2.harvard.edu>
Sent: Saturday, June 13, 2009 3:19 PM
Subject: st: Randomly selecting variables in panel, collapsing, and simulating


Hi:

I want to do something that is quite straightforward, but don't yet have the programming skills to do this, so I would appreciate some help. Basically, I want to select randomly within clusters, then collapse, then estimate a regression model that I would like to simulate. I would like to define it as an e-class program so that I can easily incorporate a simulation in there.

I have the following data structure (I have added a line in-between clusters to facilitate viewing):

i      y      x     z     n
1     5      8    3    1
1     9    10    5    2
1     8    12    6    3
1     6      9    4    4

2     5      7    2    1
2     9    13    4    2
2     8      8    7    3
2     6      8    6    4
2     8      8    7    5
2     8      8    7    6

3     5      7    2    1
3     9    11    7    2
3     8    11    5    3


Where y is the dependent variable, and x and z are covariates (note, I have more covariates, so I would like to use something general that works even with more covariates), "i" is the panel identifier and "n" is number of observations in each cluster. Note that each cluster does not have the same number of observations

I would like to do the following:

1) by cluster (i.e., within in each cluster), randomly split the observations into two groups, with an equal amount of observations (if number of observations are even); if the number of observations are odd, then one of the group will have 1 more observation than the other. Thus, I would now have this:

i      y      x     z     n   g
1     8    12    6    3   1
1     5      8    3    1   1
1     6      9    4    4   2
1     9    10    5    2   2

2     9    13    4    2   1
2     5      7    2    1   1
2     8      8    7    3   1
2     8      8    7    5   2
2     6      8    6    4   2
2     8      8    7    6   2

3     5      7    2    1   1
3     8    11    5    3   2
3     9    11    7    2   2

2) collapse observations at the group level for each cluster to get:

i      g     y        x      z    1    1    6.5    10    4.5
1    2    7.5    9.5    4.5

2    1    7.3    9.3    4.3
2    2    7.3    8      6.7

3    1    5       7         2
3    2    8.5    11       6

3) then I want to the data as below, so that I can regress the y of the first observation in each cluster to the x and z of the second observation in each cluster

i       y        x       z 1    7.5    9.5     4.5
2    7.3    8        6.7
3    8.5    11         2

4) once I have this I want to simulate it, using something like this:

capture program drop sim
version 10.1
program define sim, eclass

[here is the code I would like to insert to make points 1-4 above run]

simulate _b _se, reps(20) seed (123) : sim,

foreach v in x z {
 gen t_`v' = _b_`v'/_se_`v'
 gen p_`v' = 2*(1-normal(abs(t_`v')))

Thank you.
John.
--

____________________________________________________

Prof. John Antonakis
Associate Dean Faculty of Business and Economics
University of Lausanne
Internef #618
CH-1015 Lausanne-Dorigny
Switzerland

Tel ++41 (0)21 692-3438
Fax ++41 (0)21 692-3305

Faculty page:
http://www.hec.unil.ch/people/jantonakis&cl=en

Personal page:
http://www.hec.unil.ch/jantonakis
____________________________________________________

*
*   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/
*
*   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   |   What's new   |   Site index