Stata Code Übersetzung

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Fr3ddi
Beiträge: 1
Registriert: So Dez 21, 2025 8:52 pm

Stata Code Übersetzung

Beitrag von Fr3ddi »

Ich habe folgenden Stata Code und muss die Ergebnisse mit R nachbilden. Habe mir über GitHub das fwildclusterboot Paket installiert, aber ich komme auch damit nicht wirklich weiter.
Kann mir hier jemand helfen?

Der benötigte Datensatz liegt in der ZIP Datei (ADD_Mafia_municipality.dta).

Danke im voraus für jeden Tipp oder Hinweis.

----
Code:
use "ADD_Mafia_municipality.dta", clear
set more off
local det_Fasci "predr_peas_fasci ruralcentre1861 Rural_rent Urban_rent agricola_rel seminatoritot_rel"
local det_Mafia "Citrus_groves sulfurproduction1868_70 Vineyards Olives_groves Mafia1885"
local basics "lnpop1861 lnsurface centreheight maxheight slope2 pa_pdist1856 port2_pdist1856 roads1799 ave_temp var_sp3m_n30 sp3m_ave_n30"
local provinces "province2-province7"
local specification1 "`det_Fasci'"
local specification2 "`det_Fasci' `det_Mafia'"
local specification3 "`det_Fasci' `det_Mafia' `basics'"
foreach var of varlist army1875_pop eff_civ1{
g state_capacity=`var'
g state_capacity_rain=`var'*sp3m1893_n30
g peasants_state_capacity=peasants_fasci*`var'
foreach i of numlist 2/3 {
*Panel A
reg peasants_fasci sp3m1893_n30 state_capacity_rain state_capacity `specification`i'' `provinces' if Mafia1900!=. & sp3m1893_n30!=.
predict peasants_fasci_h
reg peasants_state_capacity sp3m1893_n30 state_capacity_rain state_capacity `specification`i'' `provinces' if Mafia1900!=. & sp3m1893_n30!=.
predict peasants_state_capacity_h
cluster2bootGDLF Mafia1900 peasants_fasci_h peasants_state_capacity_h state_capacity `specification`i'' `provinces' if Mafia1900!=. & sp3m1893_n30!=., fcluster(cl1_stn_sp1893_n30) tcluster(distretto1853) nboot(1000) seed(1111)
outreg2 using TAB8a.tex, keep(peasants_fasci_h state_capacity peasants_state_capacity_h) dec(2) noaster append
drop peasants_fasci_h
drop peasants_state_capacity_h
*Panel B
cluster2bootGDLF Mafia1900 sp3m1893_n30 state_capacity_rain state_capacity `specification`i'' `provinces' if Mafia1900!=. & sp3m1893_n30!=., fcluster(cl1_stn_sp1893_n30) tcluster(distretto1853) nboot(1000) seed(1111)
outreg2 using TAB8b.tex, keep(sp3m1893_n30 state_capacity state_capacity_rain) dec(2) noaster append
}
drop state_capacity state_capacity_rain peasants_state_capacity
}
Dateianhänge
Screenshot 2025-12-21 at 21.03.53.png
Datafortheweb.zip
(1012.43 KiB) Noch nie heruntergeladen
Benutzeravatar
student
Beiträge: 752
Registriert: Fr Okt 07, 2016 9:52 am

Re: Stata Code Übersetzung

Beitrag von student »

Hallo,

einen Report nachzustellen ist immer eine Herausforderung. Letztendlich, so meine Erfahrung, ist es einfacher auf Basis der Daten die statistische Auswertung durchzuführen und dann den Bericht zu designen.

Und noch einen Hinweis in eigener Sache: Dieses Forum wird in den "Ruhestand" ab dem 01.01.2026 versetzt. Die Nachfrage nach menschlicher Unterstützung ist durch die diversen KIs massiv eingebrochen und das Betreiben des Forums ist nicht mehr möglich.
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
bigben
Beiträge: 2899
Registriert: Mi Okt 12, 2016 9:09 am

Re: Stata Code Übersetzung

Beitrag von bigben »

Ein gravierendes Problem bei der Anfrage, mehr noch als das Timing: Wer in einem R Forum kann schon wirklich Stata?

Der Grund für die Schließung des Forums sind aber LLMs wie ChatGPT. ChatGPT traut sich auch eine kommentierte Übersetzung Deines Codes zu. Siehe unten.

Frohe Weihnacht,
Bernhard

ChatGPT/GPT5.2 hat geschrieben:Ja. Unten findest du eine saubere, kommentierte Übersetzung nach R, mit möglichst enger Entsprechung zur Stata-Logik.
Ich nutze tidyverse + fixest (für schnelle FE-Regressionen) und fwildclusterboot als praktikables Pendant zu cluster2bootGDLF.

> ⚠️ Wichtig vorab (Transparenz):
cluster2bootGDLF ist ein sehr spezieller Stata-Befehl. In R gibt es keine 1:1-Implementierung. Die nächstliegende, in der Literatur akzeptierte Entsprechung ist ein wild cluster bootstrap (Cameron–Gelbach–Miller). Das ist methodisch sauber, aber nicht bit-identisch.




---

1. Pakete

library(haven) # read_dta
library(dplyr)
library(fixest) # feols
library(fwildclusterboot) # wild cluster bootstrap
library(modelsummary) # Tabellen (Ersatz für outreg2)


---

2. Daten laden & Grundeinstellungen

df <- read_dta("ADD_Mafia_municipality.dta")

(Stata-Optionen wie clear, set more off entfallen in R.)


---

3. Variablenlisten (locals → character vectors)

det_Fasci <- c(
"predr_peas_fasci", "ruralcentre1861", "Rural_rent",
"Urban_rent", "agricola_rel", "seminatoritot_rel"
)

det_Mafia <- c(
"Citrus_groves", "sulfurproduction1868_70",
"Vineyards", "Olives_groves", "Mafia1885"
)

basics <- c(
"lnpop1861", "lnsurface", "centreheight", "maxheight",
"slope2", "pa_pdist1856", "port2_pdist1856",
"roads1799", "ave_temp", "var_sp3m_n30", "sp3m_ave_n30"
)

provinces <- paste0("province", 2:7)

specification <- list(
det_Fasci,
c(det_Fasci, det_Mafia),
c(det_Fasci, det_Mafia, basics)
)


---

4. Schleife über army1875_pop und eff_civ1

for (var in c("army1875_pop", "eff_civ1")) {

df <- df %>%
mutate(
state_capacity = .data[[var]],
state_capacity_rain = .data[[var]] * sp3m1893_n30,
peasants_state_capacity = peasants_fasci * .data[[var]]
)

for (i in 2:3) {

controls <- c(specification[], provinces)

# ------------------
# Panel A
# ------------------
fA <- as.formula(
paste(
"Mafia1900 ~ peasants_fasci + state_capacity + peasants_state_capacity +",
paste(controls, collapse = " + ")
)
)

mA <- feols(
fA,
data = df,
subset = !is.na(Mafia1900) & !is.na(sp3m1893_n30)
)

bootA <- boottest(
mA,
clustid = ~ cl1_stn_sp1893_n30 + distretto1853,
R = 1000,
seed = 1111
)

modelsummary(
list(mA),
coef_map = c(
"peasants_fasci" = "peasants_fasci_h",
"state_capacity" = "state_capacity",
"peasants_state_capacity" = "peasants_state_capacity_h"
),
output = "TAB8a.tex",
append = TRUE,
stars = FALSE,
fmt = 2
)

# ------------------
# Panel B
# ------------------
fB <- as.formula(
paste(
"Mafia1900 ~ sp3m1893_n30 + state_capacity + state_capacity_rain +",
paste(controls, collapse = " + ")
)
)

mB <- feols(
fB,
data = df,
subset = !is.na(Mafia1900) & !is.na(sp3m1893_n30)
)

bootB <- boottest(
mB,
clustid = ~ cl1_stn_sp1893_n30 + distretto1853,
R = 1000,
seed = 1111
)

modelsummary(
list(mB),
coef_map = c(
"sp3m1893_n30" = "sp3m1893_n30",
"state_capacity" = "state_capacity",
"state_capacity_rain" = "state_capacity_rain"
),
output = "TAB8b.tex",
append = TRUE,
stars = FALSE,
fmt = 2
)
}
}


---

5. Mapping Stata → R (Kurzüberblick)

Stata R

use read_dta()
local character vectors
foreach for()
areg feols()
predict implizit in Modell
cluster2bootGDLF boottest() (wild cluster)
outreg2 modelsummary()



---

6. Wenn du willst …

Ich kann:

die Bootstrap-SEs direkt in die Tabellen integrieren

auf Base R umstellen

prüfen, ob deine Original-Ergebnisse numerisch nahe reproduzierbar sind

oder den Code vereinfachen & beschleunigen (der obige ist sehr nah an Stata gedacht)


Sag mir einfach, wie strikt die Replikation sein muss.


Und weil wir hier zwar kein Stata sprechen aber statistisch interessiert sind, hier gleich noch die Inhaltsebene erklärt:

GPT 5.2 hat geschrieben:Ja — gerne. Ich beschreibe das statistische Problem, das Identifikationsdesign und die Schätzstrategie, so wie es in einem Methodenteil einer empirischen ökonomischen Publikation stehen würde. Ich abstrahiere bewusst von Programmiersyntax und Schleifenlogik.


---

1. Forschungsfrage (inhaltlicher Kern)

Der Code untersucht den kausalen Zusammenhang zwischen bäuerlicher politischer Mobilisierung (Fasci Siciliani), staatlicher Kapazität und historischen Niederschlägen auf die Persistenz der Mafia auf Gemeindeebene in Sizilien um 1900.

Konkret wird gefragt:

> Unter welchen Bedingungen führt bäuerliche Mobilisierung zu einer Abschwächung bzw. Verstärkung mafiöser Strukturen — und welche Rolle spielt dabei staatliche Durchsetzungskraft, insbesondere in Wechselwirkung mit exogenen Klimaschocks?




---

2. Zentrale abhängige Variable

Mafia1900
Ein Indikator (oder Index) für die Präsenz bzw. Stärke der Mafia um 1900 auf Gemeindeebene.

Diese Variable ist der Outcome in allen Spezifikationen.


---

3. Zentrale erklärende Variablen

3.1 Bäuerliche Mobilisierung

peasants_fasci
Maß für die Präsenz / Intensität der Fasci Siciliani (1891–1894), einer bäuerlich-sozialistischen Massenbewegung.

Diese Variable misst bottom-up politische Mobilisierung der Landbevölkerung.


---

3.2 Staatliche Kapazität

Zwei alternative Proxies:

army1875_pop (Militärpräsenz pro Kopf)

eff_civ1 (Effektivität ziviler Verwaltung)


Diese werden jeweils als:

state_capacity

Interaktionen mit Niederschlag

Interaktionen mit bäuerlicher Mobilisierung


verwendet.

Ziel: institutionelle Durchsetzungskraft des Staates auf lokaler Ebene.


---

3.3 Exogener Schock: Niederschlag

sp3m1893_n30
Dreimonatiger Niederschlag um 1893, normiert relativ zu einem Langfristmittel.

Diese Variable wird interpretiert als exogener Einkommens- bzw. Konfliktschock für die Agrarökonomie.


---

4. Identifikationsstrategie (kausal gedacht)

4.1 Grundidee

Der Code nutzt Interaktionseffekte, um zu testen, ob:

1. bäuerliche Mobilisierung allein Mafia-Präsenz reduziert oder erhöht


2. dieser Effekt von staatlicher Kapazität abhängt


3. und ob exogene klimatische Schocks diese Beziehungen verstärken oder abschwächen




---

4.2 Panel A: Politische Mobilisierung × Staat

Schätzgleichung (vereinfacht):

\text{Mafia}_{i} =
\beta_1 \,\text{Peasants}_{i}
+ \beta_2 \,\text{StateCap}_{i}
+ \beta_3 (\text{Peasants}_{i} \times \text{StateCap}_{i})
+ X_i'\gamma
+ \varepsilon_i

Interpretation:

: Effekt bäuerlicher Mobilisierung bei minimaler staatlicher Kapazität

: Ob staatliche Kapazität Mobilisierung kanalisiert (Schutz) oder reprimiert (Backlash)

Zentrale Hypothese:

> Mobilisierung ohne staatliche Durchsetzung fördert informelle Gewaltakteure (Mafia)





---

4.3 Panel B: Klima × Staat

Schätzgleichung:

\text{Mafia}_{i} =
\alpha_1 \,\text{RainShock}_{i}
+ \alpha_2 \,\text{StateCap}_{i}
+ \alpha_3 (\text{RainShock}_{i} \times \text{StateCap}_{i})
+ X_i'\delta
+ u_i

Interpretation:

Niederschläge als exogener Stressor

Test, ob staatliche Kapazität Konflikte während ökonomischer Schocks verhindert



---

5. Kontrollvariablen & Fixed Effects

5.1 Strukturkontrollen

Agrarstruktur (z. B. Zitrus, Oliven, Wein)

Historische Pachtverhältnisse

Bevölkerungsgröße

Topographie

Infrastruktur (Straßen, Häfen)

Klima-Normalwerte


Diese dienen der Konditionierung auf vorkoloniale und geografische Faktoren, die Mafia und Mobilisierung gleichzeitig beeinflussen könnten.


---

5.2 Provinz-Fixed-Effects

province2–province7

Diese absorbieren:

regionale Rechtstraditionen

unterschiedliche politische Eliten

makroökonomische Unterschiede


Identifikation erfolgt innerhalb von Provinzen.


---

6. Schätzverfahren & Inferenz

6.1 Lineare Regression (OLS / AREG)

Querschnitt auf Gemeindeebene

Province Fixed Effects

Keine Zeitdimension → historischer Cross-Section



---

6.2 Wild Cluster Bootstrap (zwei Dimensionen)

Standardfehler werden berechnet mittels:

räumlichem Cluster (Wetterstation / Niederschlag)

administrativem Cluster (historische Distrikte)


Das adressiert:

räumliche Korrelation von Wetter

administrative Abhängigkeiten

kleine Anzahl effektiver Cluster


Methodisch entspricht dies Cameron, Gelbach & Miller (2008).


---

7. Robustheitslogik

Der Code implementiert systematisch:

zwei Staatskapazitätsmaße

mehrere Kontrollsets (nested specifications)

alternative Interaktionsstrukturen

konsistente Stichprobe (keine Missingness in Schlüsselfaktoren)


→ Ziel ist theoretisch konsistente Robustheit, nicht rein statistische.


---

8. Gesamtinterpretation (Big Picture)

Der Code testet die These:

> Illegale Organisationen entstehen und persistieren nicht primär aus Armut, sondern aus politischer Mobilisierung ohne staatliche Durchsetzungskapazität — insbesondere unter ökonomischem Stress.



Die Mafia wird hier konzeptualisiert als:

Substitut für Staatlichkeit

Endogenes Ergebnis von Konflikten zwischen Eliten, Staat und Massenbewegungen



---

9. Einordnung (Paper-Stil)

Methodisch liegt die Arbeit an der Schnittstelle von:

politischer Ökonomie

historischer Institutionenanalyse

Klimaschock-Literatur

Gewalt & informelle Institutionen


Vom Design her vergleichbar mit:

Acemoglu et al. (state capacity)

Berman et al. (income shocks & conflict)

Dell (weather & institutions)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten