Seite 1 von 1

Schleife von regression und alle koeffizienten speichern

BeitragVerfasst: Mi 9. Okt 2013, 19:03
von Hans88
hallo,
ich bräuchte hilfe bei folgender aufgabe für die uni:

ich soll aus einem datensatz willkürlich 100 obseravtionen aussuchen,
mit diesen 100 observationen eine regression durchführen und
die koeffizienten speichern. diesen vorgang muss ich 5000 mal wiederholen und
ein histogram der koeffizienten zeichnen.


mein ansatz bisher lautet:

use ....data
generate k=0
while k<=5000 {
bsample 100
regress x y
replace k=k+1
}
ich weiß jedoch nicht, wie ich die koeffizienten so speichern kann, dass ich nachher alle 5000 koeffizienten habe und ein histogram
daraus zeichnen kann. wäre super, wenn mir jemand sagen kann wie das geht


vielen dank für eure hilfe!

Re: Schleife von regression und alle koeffizienten speichern

BeitragVerfasst: Do 10. Okt 2013, 13:14
von daniel
Arbeite nicht mit -while-, das ist (i) langsam, (ii) gefährlich, weil man "endlos Schleifen" bauen kann. -foreach-, oder -forvalues- sind hier deutlich besser geeignet.

Der Zähler (k) sollte keine Variable sein, hier genügt ein local.

-bsample- zerstört den Datensatz. Nach dem ersten Durchlauf der Schleife sind nur noch 100 Beobachtungen übrig.

Dein -regress- Befehl sieht komisch aus, weil hier x die endogene Variable, y der Prädikator ist. Die übliche Notation ist umgekehrt.

Da die Koeffizienten (da hier nur ein Prädikator steht, nehme ich an, Du willst pro regression nur einen Koeffizienten) geplottet werden sollen, wüde ich diese in einer Variable speichern.

Es könnte etwa so aussehen:

Code: Alles auswählen
// load the dataset
u <foo>, clear

// check sufficient observations to store coefficients
if (c(N) < 5000) se obs 5000

// create variable for coefficient
g b = .

// run the regressions
forv j = 1/5000 {
    preserve // <- very slow, but will do the job
    bsample
    qui reg y x if (runiform())
    restore
    qui replace b = _b[x] in `j'
}
// histogram
hist b