Verzögerung in Plm

8

Dies ist eine sehr einfache Frage, aber ich konnte keine definitive Antwort finden, also dachte ich, ich würde sie fragen. Ich verwende das Paket plm für den Umgang mit Panel-Daten. Ich versuche, die Funktion lag zu verwenden, um eine Variable FORWARD rechtzeitig zu verzögern (der Standardwert ist, den Wert aus der vorherigen Periode abzurufen, und ich möchte den Wert von NEXT). Ich fand eine Reihe alter Artikel / Fragen (ca. 2009), die nahelegen, dass dies möglich ist, indem k=-1 als Argument verwendet wird. Wenn ich dies jedoch versuche, bekomme ich einen Fehler.

Beispielcode:

%Vor%

Verzögerung:

%Vor%

Ich habe auch gelesen, dass plm.data pdata.frame für einige Anwendungen in plm ersetzt hat. % Co_de% scheint jedoch mit der Funktion plm.data überhaupt nicht zu funktionieren:

%Vor%

Ich würde jede Hilfe schätzen. Wenn irgendjemand einen anderen Vorschlag für ein Paket hat, das für die Verzögerung verwendet wird, bin ich ganz Ohr. Allerdings liebe ich lag , weil es sich automatisch mit dem Rückstand auf mehrere Individuen befasst und Lücken in der Zeitreihe überspringt.

    
Matt 23.10.2012, 19:03
quelle

2 Antworten

2

EDIT2 : Nacheilung (= Leitwerte) wird in plm CRAN releases & gt; = 1,6-4 implementiert. Funktionen sind entweder lead() oder lag() (letzteres mit einer negativen Ganzzahl für führende Werte).

Achten Sie auf alle anderen angehängten Pakete, die dieselben Funktionsnamen verwenden. Um sicher zu sein, können Sie auf die Funktion nach dem vollständigen Namespace verweisen, z. B. plm::lead .

Beispiele aus ?plm::lead :

%Vor%     
Helix123 18.08.2015, 22:44
quelle
0

Ich hatte das gleiche Problem und konnte keine gute Lösung in plm oder einem anderen Paket finden. ddply war verlockend (z. B. s5 = ddply(df, .(country,year), transform, lag=lag(df[, "value-to-lag"], lag=3)) ), aber ich konnte die NAs in meiner verzögerten Spalte nicht so ausrichten, dass sie für andere Verzögerungen als eins richtig ausgerichtet sind.

Ich habe eine Brute-Force-Lösung geschrieben, die Zeile für Zeile über den Datenrahmen iteriert und die verzögerte Spalte mit dem entsprechenden Wert füllt. Es ist schrecklich langsam (437,33s für meinen 13000x130 Datenrahmen vs. 0,012s für die Umwandlung in ein pdata.frame und die Verwendung von lag ), aber es hat den Job für mich erledigt. Ich dachte, ich würde es hier teilen, weil ich anderswo im Internet nicht viele Informationen finden konnte.

In der folgenden Funktion:

  • df ist Ihr Datenrahmen. Die Funktion gibt df mit einer neuen Spalte zurück, die die forward-Werte enthält.
  • group ist der Spaltenname der Gruppierungsvariablen für Ihre Panel-Daten. Zum Beispiel hatte ich longitudinale Daten über mehrere Länder, und ich verwendete hier "Country.Name".
  • x ist die Spalte, aus der verzögerte Werte generiert werden sollen, z. "BIP"
  • forwardx ist die (neue) Spalte, die die Vorwärtsverzögerungen enthält, z. "GDP.next.year".
  • lag ist die Anzahl der Perioden in die Zukunft. Wenn Ihre Daten beispielsweise in jährlichen Intervallen erstellt wurden, wurde mit lag=5 forwardx fünf Jahre später auf den Wert von x gesetzt.

.

%Vor%

Siehe Beispielausgabe mit dem integrierten DNase -Dataset. Dies ist im Kontext des Datasets nicht sinnvoll, aber Sie können sehen, was die Spalten tun.

%Vor%

Gegeben, wie lange dies dauert, möchten Sie vielleicht einen anderen Ansatz verwenden: Zurück-Lag all Ihre anderen Variablen.

    
Katrina 15.10.2013 19:16
quelle

Tags und Links