Programm-Fehlermeldung

Regressionsmodelle aller Art mit Stata.

Programm-Fehlermeldung

Beitragvon Ninaneedshelp1234 » So 15. Jan 2023, 20:01

Hallo zusammen,

wir müssen ein Programm mit einer Simulation zu einer Regressions-Fragestellung schreiben. Ich nutze Stata 16 und habe folgendes Do-File geschrieben:

*Generieren der Daten
set seed 12345

*Daten-Programm
cap program drop data_gen
program define data_gen
syntax, N(integer) missing(real) corr(real) rclass
clear
set obs `N'

// id für jede Reihe
gen id = _n

// Alter generieren
gen age = round(rnormal(40,10))

// Bildungsniveau generieren
gen edu = rbinomial(1,.6)
replace edu = 1 if edu == 0
replace edu = 0 if edu == 1

// Arbeitslosigkeit generieren
gen unemployed = rbinomial(1,.2)
replace unemployed = 1 if unemployed == 0
replace unemployed = 0 if unemployed == 1

// Einkommen generieren
gen income = round(rnormal(50000,10000))

// Missings generieren
forvalues i = 1/`N' {
if (runiform() < `missing') {
replace unemployed = . if _n == `i'
}

// Fehlerkorrelation generieren
if `corr' != 0 {
reshape long income, i(edu) j(age)
gen error = rnormal()
gen correlated_error = error + `corr'*error[_n-1]
replace income = correlated_error + income
reshape wide income,
junk(error correlated_error)
}
end

*Ausführen des Programms
local N = 1000
local missing = .1
local corr = .05
data_gen, N(`N') missing(`missing') corr(`corr')

*Simulationsprogramm
set seed 6789
program define sim_reg

global reps = 250

// Erstellen der Daten
data_gen, N(`N') missing(`missing') corr(`corr')

// Regression durchführen
reg unemployed age edu

// Ergebnisse speichern
forvalues i = 1/`reps' {
data_gen, N(`N') missing(`missing') corr(`corr')
reg unemployed age edu, estimates store(results`i', replace)
}

// Ergebnisse zusammenfassen
matrix results = (1/`reps')*results1
forvalues i = 2/`reps' {
data_gen, N(`N') missing(`missing') corr(`corr')
reg unemployed age edu, estimates store(results`i', replace)
matrix results = results + (1/`reps')*results`i'
}

// Ergebnisse ausgeben
matrix list results
end

*Simulationen ausführen
sim_reg, N(1000) missing(.1) corr(.05)

Kann jemand mir sagen, warum ich nach

*Ausführen des Programms
local N = 1000
local missing = .1
local corr = .05
data_gen, N(`N') missing(`missing') corr(`corr')

immer die Fehlermeldung

option n() required
r(198);

erhalte? Ich habe wirklich schon alle ausprobiert und verstehe es einfach nicht :(

Danke für jede Hilfe!
Ninaneedshelp1234
 
Beiträge: 2
Registriert: So 15. Jan 2023, 19:57
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Programm-Fehlermeldung

Beitragvon Staxa » Mo 16. Jan 2023, 14:32

Also alles habe ich jetzt nicht angeschaut, aber es scheint einige Probleme mit deinen Schleifen bzw. Klammern zu geben. Teilweise fehlen Endklammern an Codeblöcken, etwa hier:

Code: Alles auswählen
   // Missings generieren
   forvalues i = 1/`n' {
   if (runiform() < `missing') {
   replace unemployed = . if _n == `i'
   }


Zwei Klammern gehen auf, nur eine wieder zu.

Code: Alles auswählen
   if `corr' != 0 {
   reshape long income, i(edu) j(age)
   gen error = rnormal()
   gen correlated_error = error + `corr'*error[_n-1]
   replace income = correlated_error + income
   reshape wide income,
   junk(error correlated_error)
   }

Hier ist mir unklar, was "junk" sein soll.

Ich denke, da sind viele Fehler drin und nur sorgfältiges Durcharbeiten wird helfen. Probier doch auch mal "set trace on" um Fehler zu finden, das kann oft viel bringen. Ich habe mal den ersten Teil lauffähig gemacht, bekomme aber dann inhaltliche Fehler. Wie genau hier deine Logik beim Reshapen ist, ist mir völlig unklar.

Code: Alles auswählen
clear all

*Generieren der Daten
set seed 12345

*Daten-Programm
cap program drop data_gen
program define data_gen, rclass
   syntax, n(integer) missing(real) corr(real)
   clear
   set obs `n'

   // id für jede Reihe
   gen id = _n

   // Alter generieren
   gen age = round(rnormal(40,10))

   // Bildungsniveau generieren
   gen edu = rbinomial(1,.6)
   replace edu = 1 if edu == 0
   replace edu = 0 if edu == 1

   // Arbeitslosigkeit generieren
   gen unemployed = rbinomial(1,.2)
   replace unemployed = 1 if unemployed == 0
   replace unemployed = 0 if unemployed == 1

   // Einkommen generieren
   gen income = round(rnormal(50000, 10000))

   // Missings generieren
   forvalues i = 1/`n' {
      if (runiform() < `missing') {
         replace unemployed = . if _n == `i'
      }
   }

   // Fehlerkorrelation generieren
   if `corr' != 0 {
      reshape long income, i(edu) j(age)
      gen error = rnormal()
      gen correlated_error = error + `corr'*error[_n-1]
      replace income = correlated_error + income
      reshape wide income,
      junk(error correlated_error)
   }
end

*Ausführen des Programms
local n = 50
local missing = .1
local corr = .05
data_gen, n(`n') missing(`missing') corr(`corr')

Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 680
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Programm-Fehlermeldung

Beitragvon Ninaneedshelp1234 » Mo 16. Jan 2023, 21:36

Danke für deine ausführliche Antwort und Hilfe!

Wir haben junk als ein optionales Argument im reshape-Befehl gelernt, mit dem eine oder mehrere Variablen aus dem reshape-Prozess ausgeschlossen werden können (in diesem Fall die Variablen "error" und "correlated_error").
Aber du hast auf jeden Fall recht, da scheinen noch einige Fehler drinnen zu stecken, wie zum Beispiel die fehlenden Klammern. Ich gehe noch mal alles Schritt für Schritt durch :)
Ninaneedshelp1234
 
Beiträge: 2
Registriert: So 15. Jan 2023, 19:57
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Regressionsmodelle

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron