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
}
Stata Code Übersetzung
Stata Code Übersetzung
- Dateianhänge
-
- Datafortheweb.zip
- (1012.43 KiB) Noch nie heruntergeladen
Re: Stata Code Übersetzung
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.
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)
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)
Re: Stata Code Übersetzung
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
Und weil wir hier zwar kein Stata sprechen aber statistisch interessiert sind, hier gleich noch die Inhaltsebene erklärt:
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
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte