XTSET mehrere Gruppen variablen

Statistische Auswertung von Longitudinal- und Panel-Daten mit Stata.

XTSET mehrere Gruppen variablen

Beitragvon filaglad » So 17. Jun 2012, 13:48

Hallo alle zusammen,
ich habe ein Datenset in dem ich verschiedene Firmen, in verschiedenen Länder über einen längeren Zeitraum untersuchen möchte. genauer gesagt habe
ich ein Datenset in dem den Effekt von länderspezifische Charakterisika (e.g. GDP) auf Firmen-Renditen prüfe möchte. Ich habe das Datenset in Long-Form und es hat das folgende Format:
Code: Alles auswählen

Firma(ID)    Land    Industrie    Zeitperiode    Firma_Rendite        Ländercharakteristik
      1        DE          4           1990          15                     55
      1        DE          4           1991          16                     53
      2        DE          6           1990          22                     55
      2        DE          6           1991          18                     53 
      3        CH          2           1990          31                     92
      3        CH          2           1991          32                     90
      4        CH          1           1990          40                     92
      4        CH          1           1991          38                     90         


Nun möchte ich also eine Regression (fixed/random/mixed) durchführen, mit der sich analysieren lässt, wie sich Ländercharakteristika (x-variable) auf Firmenrenditen (y-variable) in dem jeweiligen Land auswirken.
Muss ich dafür "Firma ID" als panel definiteren also
Code: Alles auswählen
.xtset id zeitperiode

und dann Dummy-Variablen verwenden um um die Firmen einem Land zuzuweisen?:
Code: Alles auswählen
.gen DE_dummy=(Land==DE)]
.gen DE_dummy_reg=De_dummy*Land


Oder gibt es eine bessere Möglichkeit dies zu tun? Ich habe sehr viele Firmen und Länder in meinem Datenset und daher wäre die ".gen dummy" Variante sehr zeitintensiv.

Ich bin euch für jede Hilfe sehr dankbar!
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon daniel » So 17. Jun 2012, 15:53

Leider verstehe ich nicht ganz, was hier genau erreicht werden soll.
Code: Alles auswählen
.gen DE_dummy=(Land==DE)]
.gen DE_dummy_reg=De_dummy*Land



Die erste Zeile impliziert, dass <Land> eine string Variable ist (die Syntax sollte dann [...] == "DE" nicht [...] ==DE lauten). <DE_dummy> ist 1 für die Fälle, für die <Land> "DE" ist, Null sonst. Im zweiten Schritt multiplizierst Du dann diese numerische Variable mit einer string Variablen. Das wird in einem "type mismatch r(109)" Fehler münden. Ich verstehe aber leider auch nicht, welcher Gedanke dahinter steckt.

Wenn der Effekt der Ländercharakteristika auf die Rendite in allen Ländern gleich ist, dann brauchst Du m.E. maximal für die Länder in zu Kontrollieren. Interaktionen sind dann nicht nötig. Vielleicht möchtest Du aber auch getrennte Analysen fpür jedes Land schätzen?

Allgemein zur Erstellung von dummy Variablen siehe

h tabulate oneway

Besser aber vermutlich

h fvvarlist

Mit der Faktorvariablenotation kannst Du sehr komfortabel Dummys und Interaktionen erstellen.

Vielleicht kannst Du Dein Problem nochmal anders formulieren, damit ich bessere Ratschläge geben kann.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon filaglad » So 17. Jun 2012, 16:52

Hallo Daniel,
tut mir leid wenn ich mich missverständlich ausgedrückt habe. Ich möchte herausfinden wie z.B. GDP von Land i, die Renditen der Firmen in Land i beeinflusst. Dazu habe ich in meinem Datenset c.a. 40 Länder und 6000 Firmen.
Die Intuition der Dummy-Variable war, dass ich meine "Firma_Rendite" variable in Untergruppen aufspalte (für jedes Land eine Gruppe) und somit dann den effekt aller Firmen in Land i für Land i separat untersuchen kann.

Da xtset [panelvar] [timevar] nur eine dimension als Panel-Variable zulässt, wollte ich daher wissen, ob es einen effizienteren weg gibt, Subpopulationen (in diesem fall Länder) zu untersuchen, als mehrere Dummy variablen für jedes Land zu kreieren und dann separate Regressionen laufen zu lassen.

Sozusagen möchte ich eine regression der Form: y(ijt) = a + b X1(it), wo y(ijt) die Firma i in Land j zum Zeitpunkt T ist, und X1(jt) ein Landcharakteristika (z.B. GDP) von Land j zum zeitpunkt t ist. Wenn ich eine normale xtreg, fe laufen lassen würde würde STATA nicht zwischen den verschiedenen Ländern untescheiden! Daher suche ich nach einer alternativen Möglichkeit.

Ich hoffe nun ist es etwas verständlicher. Vielen Dank für deine schnelle Antwort!
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon daniel » So 17. Jun 2012, 18:16

Nach Ländern getrennte Analysen kannst Du folgendermaßen umsetzen

Code: Alles auswählen
qui levelsof <land> ,l(lvls)
foreach l of loc lvls {
    xtreg y x if <land> == "`l'" ,fe
}
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon filaglad » Mo 18. Jun 2012, 18:11

daniel hat geschrieben:qui levelsof <land> ,l(lvls)
foreach l of loc lvls {
    xtreg y x if <land> == "`l'" ,fe
}

Der Code funktioniert einwandfrei, danke! Ist es evtl. auch möglich, jeden xtreg output unter dem jeweiligen "level-namen" zu speichern (z.B. für Land A <estimate store A>)? Dann könnte ich im Nachhinein alle Outputs miteinander vergleichen mittels <estimates table>. Folgendes habe ich bereits versucht, aber es funktioniert leider nicht (error "l" not found)
Code: Alles auswählen
qui levelsof crd ,l(lvls)
foreach l of loc lvls {
    display l
    xtreg rb icrg300 icrg200 icrg100 if crd == "`l'" ,fe
    estimates store "´l"
}

wenn es nicht möglich ist den jeweiligen output abzuspeichern, kann man sich dann evtl über jedem Output angeben lassen, für welche untergruppe die Regression gelaufen ist? Ich habe es mit "display <land>" in der "foreach" schleife versucht, allerdings gibt STATA mir dann immer das gleiche Land an.
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon daniel » Mo 18. Jun 2012, 18:43

Dein code sieht schon ganz gut aus, aber Du musst die korrekten Zeichen verwenden, um auf das local <l> zuzugreifen. Die Zeichen sind

`
und

'
Du verwendest statdessen



Ändere die Zeile

Code: Alles auswählen
estimates store "´l"


in

Code: Alles auswählen
estimates store "`l'"


dann sollte es hinhauen. Falls Du nicht den ganzen output angezeigt haben möchtest, stell Deinem -xtreg- ein -noi- vor (help noisily).

-display- <land> zeigt den Wert von <land> in der ersten Zeile Deines Datensatzes an.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon filaglad » Mo 18. Jun 2012, 19:17

daniel hat geschrieben:estimates store "`l'"

ich habe den Code umgeändert (danke für den Hinweis mit dem Zeichen!) allerdings bekomme ich nach dem ersten Output jetzt einen error -"AT invalid name - angegeben (AT ist der Wert der ersten Zeile in meiner <land> variable). Die <land> variable sieht wie folgt aus:
Code: Alles auswählen
Firma(ID)    Land    Industrie 
     1        AT         4 
     1        AT         4
     2        DE         6     
     2        DE         6           
     3        CH         2           
     3        CH         2 


ich habe versucht den Namen durch eine String-Kombination abzuändern, allerdings ebenfalls erfolglos:
Code: Alles auswählen
qui levelsof crd ,l(lvls)
foreach l of loc lvls {
    xtreg rb icrg300 icrg200 icrg100 if crd == "`l'" ,fe
    estimates store Output & "`l'"
}
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon daniel » Mo 18. Jun 2012, 23:12

Mein Fehler. Stata mag die quotes nicht als Name.

Statt

Code: Alles auswählen
estimates store "`l'"


setze

Code: Alles auswählen
estimates store `l'
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon filaglad » Mo 18. Jun 2012, 23:27

daniel hat geschrieben:estimates store "`l'"

super jetzt klappt alles! Nochmal vielen Dank, du hast mir echt sehr weitergeholfen!
Und noch eine kurze Anmerkung für alle die es interessiert, wenn man die <estimates store> Variablennamen noch erweitern möchte, dann kann man auch den jeweiligen string (z.B. ABC) direkt vor `l' schreiben:

Code: Alles auswählen
estimates store ABC`l'
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: XTSET mehrere Gruppen variablen

Beitragvon filaglad » Di 19. Jun 2012, 14:13

Hallo nochmal,

so wie ich die Schleife momentan implementiere erlaubt sie mir, nach einer Gruppen-Variable (<land>) sortiert die Regressionen laufen zu lassen. Jetzt möchte ich noch gerne für jedes <land> noch die Gruppenvariable <company_size> dazunehmen, d.h. separat für jedes Land, möchte ich eine separate Regression für alle Firmen einer bestimmten Größe durchführen (und den output abspeichern). Also eine doppelte "foreach" Schleife?! Folgendes habe ich versucht, jedoch noch nicht ganz erfolgreich:

Code: Alles auswählen
quietly levelsof <land> ,l(lvls)
foreach l of loc lvls {
quietly levelsof <size> ,l(abc)
foreach l of loc abc {
    xtreg y x1 x2 x3 <size> == "`l'" ,fe
    estimates store `l'
}
}

Ich bekomme den error "r198 == invalid name" angegeben. Liegt das problem darin dass ich die Schleife flasch verknüpfe oder dass ich in beiden Schleifen "l" als variable definiere? (Die "levelsof" funktion lässt nur "l" als variable zu.). Außerdem müsste ich den output unter <estimates store "size_name"&"land_name"> abspeichern.

Ich bin wie immer für jede Hilfe sehr dankbar!
filaglad
 
Beiträge: 42
Registriert: So 17. Jun 2012, 13:18
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Nächste

Zurück zu Longitudianal und Panel-Analyse

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron