Wir haben das Schwerkraftmodell in der R- und Stata-Software berechnet.
Für Berechnungen haben wir das Standardpaket glmm
in R (mit Parameter family = quasipoisson
) und ppml
in Stata verwendet.
Rufen Sie das Berechnungsverfahren in R auf:
summary(glmm<-glm(formula=exports ~ ln_GDPimporter + ln_GDPexporter +
ln_GDPimppc + ln_GDPexppc + ln_Distance + ln_Tariff + ln_ExchangeRate +
Contig + Comlang + Colony_CIS + EAEU_CIS + EU_European_Union,
family=quasipoisson(link="log"),data=data_pua))
Die Ergebnisse in R waren:
Mit denselben Daten haben wir in Stata folgende Berechnungen ppml
durchgeführt:
ppml exports ln_gdpimporter ln_gdpexporter ln_gdpimppc ln_gdpexppc ln_distance ln_tariff ln_exchangerate contig comlang colony_cis eaeu_cis eu_european_union
Die Ergebnisse der Berechnungen in Stata waren wie folgt:
Wie Sie sehen können, sind die Modellkoeffizienten (zweite Spalte in der Ergebnistabelle) mindestens bis zur Dezimalstelle der 4. Markierung gleich.
Andere Ergebnisse (aus der dritten Spalte in der Ergebnistabelle) sind jedoch nicht dieselben.
Können Sie Unterschiede in den Ergebnissen erklären?
Warum sind die Koeffizienten insbesondere gleich (die ersten Spalten der Ergebnistabelle), Standardfehler jedoch nicht?
quelle
rstanarm
aber die erforderliche Funktionalität nicht vorhanden ist, könnte man den Sprung machen, nur das Modell in zu codierenrstan
.Um Waynes ausgezeichnete Antwort zu erweitern,
ppml
wird eine robuste (bis heteroskedastische) Varianz-Kovarianz-Matrix sowie eine endliche Stichprobenanpassung an diese Matrix verwendet, um die Verzerrung zu verringern.Diese sind sehr ähnlich zu dem, was
sandwich()
aus dem gleichnamigen Paket in R berechnet wird. Der einzige Unterschied besteht darin, wie die Anpassung der endlichen Stichprobe durchgeführt wird. In dersandwich(...)
Funktion wird standardmäßig überhaupt keine Anpassung der endlichen Stichprobe vorgenommen, dh das Sandwich wird durch 1 / n geteilt, wobei n die Anzahl der Beobachtungen ist. Alternativsandwich(..., adjust = TRUE)
kann verwendet werden, was durch 1 / (n - k) dividiert, wobei k die Anzahl der Regressoren ist. Stata teilt jedoch durch 1 / (n - 1).So können Sie R dazu bringen, mit Stata übereinzustimmen, indem Sie eine benutzerdefinierte Sandwich-Varianz mit einem Anpassungsfaktor von 1 / (n-1) verwenden:
Hier ist der Stata / R-Code, der die obige Ausgabe generiert. Ich verwende
rsource
, um R von Stata aus auszuführen (und Sie müssen dasrpath()
Folgende anpassen , um es an Ihr Setup anzupassen), aber das ist nicht wirklich notwendig: Sie können dasrsource
Teil einfach von R aus ausführen .quelle