Saturday 2 September 2017

Stata 11 Gleitender Durchschnitt


Stats: Datenanalyse und statistische Software Nicholas J. Cox, Durham University, Großbritannien Christopher Baum, Boston College egen, ma () und seine Einschränkungen Statarsquos offensichtlichste Befehl für die Berechnung der gleitenden Durchschnitte ist die ma () - Funktion von egen. Bei einem Ausdruck wird ein gleitender Durchschnitt für diesen Ausdruck erstellt. Standardmäßig wird als 3. genommen, muss ungerade sein. Allerdings kann, wie der manuelle Eintrag angibt, egen, ma () nicht mit varlist kombiniert werden:. Und aus diesem Grund ist es nicht auf Paneldaten anwendbar. In jedem Fall steht er außerhalb des Satzes von Befehlen, die speziell für Zeitreihen geschrieben werden, siehe Zeitreihen für Details. Alternative Ansätze Zur Berechnung von Bewegungsdurchschnitten für Paneldaten gibt es mindestens zwei Möglichkeiten. Beide hängen davon ab, dass der Dataset zuvor tsset wurde. Das ist sehr viel wert: nicht nur können Sie sich immer wieder spezifizieren Panel variabel und Zeit variabel, aber Stata verhält sich intelligent jede Lücken in den Daten. 1. Schreiben Sie Ihre eigene Definition unter Verwendung von Zeitreihenoperatoren wie L. und F. Geben Sie die Definition des gleitenden Durchschnitts als Argument für eine generierte Anweisung an. Wenn Sie dies tun, sind Sie natürlich nicht auf die gleich gewichteten (ungewichteten) zentrierten Bewegungsdurchschnitte beschränkt, die von egen, ma () berechnet wurden. Zum Beispiel würden gleich gewichtete Dreiphasenbewegungsdurchschnitte gegeben und einige Gewichte können leicht angegeben werden: Sie können natürlich einen Ausdruck wie log (myvar) anstelle eines Variablennamens wie myvar angeben. Ein großer Vorteil dieses Ansatzes ist, dass Stata automatisch das Richtige für Paneldaten macht: führende und nacheilende Werte werden in Panels ausgearbeitet, genauso wie Logik diktiert. Der bemerkenswerteste Nachteil ist, dass die Befehlszeile ziemlich lang werden kann, wenn der gleitende Durchschnitt mehrere Begriffe beinhaltet. Ein anderes Beispiel ist ein einseitiger gleitender Durchschnitt, der nur auf vorherigen Werten basiert. Dies könnte nützlich sein für die Erzeugung einer adaptiven Erwartung dessen, was eine Variable nur auf Informationen basieren wird: was könnte jemand prognostizieren für den aktuellen Zeitraum auf der Grundlage der letzten vier Werte, mit einem festen Gewichtungsschema (A 4-Periode Verzögerung sein könnte Besonders gebräuchlich mit vierteljährlichen Zeitreihen.) 2. Verwenden Sie egen, filter () von SSC Verwenden Sie den benutzerdefinierten egen function filter () aus dem egenmore package auf SSC. In Stata 7 (aktualisiert nach dem 14. November 2001) können Sie dieses Paket installieren, nachdem egenmore auf die Details zu filter () hingewiesen hat. Die beiden obigen Beispiele würden gerendert (In diesem Vergleich ist der generierte Ansatz vielleicht transparenter, aber wir sehen ein Beispiel des Gegenteils in einem Moment.) Die Lags sind eine Numliste. Führt zu negativen Verzögerungen: In diesem Fall erweitert sich -1/1 auf -1 0 1 oder Blei 1, lag 0, lag 1. Die Koeffizienten, eine weitere Numliste, multiplizieren die entsprechenden nacheilenden oder führenden Elemente: In diesem Fall sind diese Elemente F1.myvar Myvar und L1.myvar. Der Effekt der Normalisierungsoption besteht darin, jeden Koeffizienten durch die Summe der Koeffizienten zu skalieren, so daß coef (1 1 1) normalisiert ist, zu Koeffizienten von 1/3 1/3 1/3 äquivalent ist und coef (1 2 1) normalisiert Auf Koeffizienten von 1/4 1/2 1/4. Sie müssen nicht nur die Verzögerungen, sondern auch die Koeffizienten angeben. Da egen, ma () den gleich gewichteten Fall liefert, ist der Hauptgrund für egen, filter (), den ungleich gewichteten Fall zu unterstützen, für den Sie Koeffizienten angeben müssen. Es könnte auch gesagt werden, dass die verpflichtenden Benutzer, um Koeffizienten angeben ist ein wenig mehr Druck auf sie zu denken, welche Koeffizienten sie wollen. Die wichtigste Rechtfertigung für gleiche Gewichte ist, wir schätzen, Einfachheit, aber gleiche Gewichte haben miese Frequenzbereich Eigenschaften, um nur eine Erwägung zu erwähnen. Das dritte Beispiel oben könnte entweder von denen ist nur so kompliziert wie die Generierung Ansatz. Es gibt Fälle, in denen egen, filter () eine einfachere Formulierung ergibt als erzeugen. Wenn Sie einen neun-term-Binomialfilter suchen, der von den Klimatologen als nützlich empfunden wird, dann sieht es vielleicht weniger schrecklich aus und ist leichter zurecht zu kommen. Genau wie beim generierten Ansatz funktioniert egen, filter () ordnungsgemäß mit Panel-Daten. Tatsächlich hängt es, wie oben erwähnt, davon ab, daß der Dataset vorher tsset wurde. Eine grafische Spitze Nach der Berechnung Ihrer gleitenden Durchschnitte werden Sie wahrscheinlich einen Graphen betrachten wollen. Der benutzerdefinierte Befehl tsgraph ist schlau um Tsset-Datasets. Installieren Sie es in einem up-to-date Stata 7 von ssc inst tsgraph. Was ist mit der Teilmenge mit if Keine der obigen Beispiele verwenden, wenn Einschränkungen. In der Tat egen, ma () wird nicht zulassen, wenn angegeben werden. Gelegentlich Menschen wollen verwenden, wenn bei der Berechnung der gleitenden Durchschnitte, aber seine Verwendung ist ein wenig komplizierter als es normalerweise ist. Was würden Sie von einem gleitenden Durchschnitt erwarten? Lassen Sie uns zwei Möglichkeiten identifizieren: Schwache Interpretation: Ich möchte keine Ergebnisse für die ausgeschlossenen Beobachtungen sehen. Starke Interpretation: Ich möchte nicht, dass Sie die Werte für die ausgeschlossenen Beobachtungen verwenden. Hier ist ein konkretes Beispiel. Angenommen, infolge einer Bedingung sind die Beobachtungen 1-42 eingeschlossen, aber nicht die Beobachtungen 43 an. Aber der gleitende Durchschnitt für 42 wird unter anderem von dem Wert für die Beobachtung 43 abhängen, wenn der Mittelwert sich nach hinten und vorne erstreckt und eine Länge von mindestens 3 hat, und er wird in einigen Fällen von einigen der Beobachtungen 44 abhängen. Unsere Vermutung ist, dass die meisten Menschen für die schwache Interpretation gehen würde, aber ob das korrekt ist, egen, filter () nicht unterstützt, wenn entweder. Sie können immer ignorieren, was Sie donrsquot wollen oder sogar unerwünschte Werte auf fehlende danach mit replace setzen. Eine Notiz über fehlende Ergebnisse an den Enden der Serie Da gleitende Mittelwerte Funktionen von Lags und Leads sind, erzeugt eMe () fehlende Stellen, wo die Lags und Leads nicht existieren, am Anfang und Ende der Reihe. Eine Option nomiss zwingt die Berechnung der kürzeren, nicht beanspruchten gleitenden Mittelwerte für die Schwänze. Im Gegensatz dazu weder erzeugen noch egen, filter () macht oder erlaubt, etwas Besonderes, um fehlende Ergebnisse zu vermeiden. Wenn einer der für die Berechnung benötigten Werte fehlt, fehlt dieses Ergebnis. Es ist Aufgabe der Benutzer zu entscheiden, ob und welche Korrekturchirurgie für solche Beobachtungen erforderlich ist, vermutlich nach dem Betrachten des Datensatzes und unter Berücksichtigung aller zugrunde liegenden Wissenschaft, die gebracht werden kann. Stellen Sie sich vor, Sie haben Daten über die Preise für viele Produkte. Für jedes der Produkte, die Sie wöchentlich Preisinformationen aufzeichnen. Clear set obs 200 gen prodid n Jedes Produkt hat einen einzigartigen Durchschnittspreis Gen prodprice rpoisson (5) / 7 Sie haben Daten zu Wochenpreisen für 200 Wochen. Erweitern 200 bysort prodid: gen tn Label var t Woche Es gibt auch einige saisonale Variation gen saisonale .2sin (Grube / 50) Sowie eine allgemeine Zeit Trend Gen Trend t.005 Die erste Beobachtung ist nicht mit irgendetwas Gen Preis prodprice2 korreliert. 5 Trend Rpoisson (10) / 10 wenn t1 ersetzen Preis prodprice2 Trend saisonale .7pricen-1 .3rpoisson (10) / 10 wenn t2 ersetzen Preis prodprice Trend saisonale .5pricen-1 .2pricen-2 .3rpoisson (10) / 10 wenn t3 Ersetzen Preis prodprice Trend saisonale .3pricen-1 .2pricen-2 .2pricen-3 .3rpoisson (10) / 10 wenn t4 ersetzen Preis prodprice Trend saisonale .3pricen-1 .175pricen-2 .125pricen-3 .1pricen-4 .3rpoisson ( 10) / 10 if tgt4 Erstellen Sie ein globabl, um globalen twograph forv i 1/6 globalen twograph zu speichern (line Preis t, wenn prodid i) twoway twograph, Legende (off) title (Wahre Preisentwicklung für die ersten sechs Produkte) Nun können wir uns vorstellen, dass die Oben erzeugten Daten ist die wahre Preisinformation, die grundsätzlich nicht beobachtbar ist. Stattdessen haben Sie mehrere Sammlungen von Daten pro Woche zu Preisen, die jeweils von einigen zufälligen addative Fehler variieren. Erweitern Sie 3 bysort prodid t: gen prodobs n gen pricecollect Preis rnormal () 25 Allerdings haben die Preisinformationen, die Sie haben einige Einträge, die 10 falsch falsch eingegeben wurden. (1, .1) gen scalarerror rnormal () 1 gen Priceobs pricecols (1entryerrorscalarerror) Label var priceobs Aufgezeichneter Preis Darüber hinaus wurden 35 Ihrer Preisdaten nie gesammelt Gen fehlende rbinomial (1, .35) drop, wenn missing1 Erstellen Eine globale zu speichern globalen twograph forv i 1/6 globalen twograph (line priceobs t, wenn prodid i amp prodobs1) twoway twograph, legende (aus) titel (Beobachtete Preisentwicklung für die ersten sechs Produkte) halten t priceobs prodid entryerror Ich behalte Eingabefehler In dem Datensatz als Vergleichsmittel, obwohl es nicht direkt beobachtet werden würde. Die Frage ist: Können Sie jetzt mit diesem chaotisch Daten erholen Preis Daten, die ähnlich wie die ursprüngliche Die erste Sache, die wir ausnutzen sollten, ist die doppelten aufgezeichneten Daten. Scatter priceobs t, wenn prodid 1, title (es ist einfach, einzelne Abweichungen zu sehen) Es ist einfach, einzelne Abweichungen zu sehen, aber wir wollen nicht durch alle 200 Produkte gehen, um einzeln Preisausreißer zu identifizieren. Wir wollen ein System zur Identifizierung von Ausreißern entwickeln. Lets Erzeugung eines Mittels durch Produkt und Zeit bysort Prodid t: egen pricemean mean (priceobs) Lässt Flagge jede Beobachtung, die 120 größer ist als die mittlere oder 80 weniger als der Mittelwert. Gen flag (pricemean gt priceobs1.2 pricemean lt priceobs.8) Lets sehen, wie es funktioniert: zwei (scatter priceobs t, wenn prodid 1) /// (scatter priceobs t, wenn prodid 1 amp flag1.msymbol (lgx)) // Aufrechtzuerhalten. Title (Einige Ausreißer können nur mit dem Mittelwert identifiziert werden) Legende (aus) corr flag entryerror Unsere Flagge ist etwa 45 mit den Eintragsfehlern korreliert. Das ist gut, aber wir können es besser machen. Ich schlage vor, dass anstatt nur die Mittel, dass wir einen gleitenden Durchschnitt der Preise zu konstruieren und sehen, wie jeder Eintrag abweicht aus dem Durchschnitt. Das einzige Problem ist, dass der Moving Average-Befehl xtset benötigt und das nur einen Eintrag pro Zeitabschnitt erfordert. So, sage ich, dass wir die Zeitvariable neu skalieren und addieren, als ob aufgezeichnet zu einer anderen Zeit der Woche die Beobachtungszahl. Wir müssen Prodobs neu generieren, da wir nicht wissen, welche Beobachtung bei jedem Produkt fehlt. Bysort prodid t: gen prodobs n gen t2 t4 prodobs xtset setzt die Panel-Datenfeld-ID und Zeitreihenebene. Xtset prodid t2 Der Befehl, den wir verwenden wird, ist tssmooth. Es ist so kodiert, dass durch die Angabe ma bedeutet es gleitenden Durchschnitt und Fenster sagt Stata, wie viele Zeiträume zu zählen und wie viele hinter in der bewegten Luftfahrt. Dieser Befehl kann etwas dauern. Tssmooth ma mapriceobspriceobs, Fenster (23 0 23) 23 ist in der Tat 5 Wochen vor und 5 Wochen dahinter Die 0 sagt Stata nicht inself in diesem Durchschnitt einschließen Der gleitende Durchschnitt zwei (scatter priceobs t, wenn prodid 1) /// (line mapriceobs T, wenn prodid 1) /// (Zeile pricemean t, wenn prodid 1) ///. Titel (Der bewegliche Durchschnitt ist weniger anfällig für Ausreißer) Der gleitende Durchschnitt ist stabiler als nur der Zeitmittelwert. Lets try markieren mit dem gleitenden Durchschnitt cap drop flag2 gen flag2 (mapriceobs gt priceobs1.2 mapriceobs lt priceobs.8) zwei (scatter priceobs t, wenn prodid 1) /// (scatter priceobs t, wenn prodid 1 amp flag21.msymbol (lgx) ) ///. Title (Der Moving Average kann auch nützlich sein) Legende (aus) corr flag2 entryerror Drop unsere markierten Daten fallen, wenn flag21 Collapse auf die wöchentliche Ebene collapse priceobs, durch (prodid t) label var priceobs Durchschnittlicher Preis beobachtet forv i 1/6 globalen Twog (Scatter priceobs t if prodid i) twoway twograph, Legende (off) title (Beobachtete Preisentwicklung für die ersten sechs Produkte) Die Daten sehen viel besser aus, aber wir haben immer noch eindeutig einige unerwünschte Ausreißer. Wir konnten die Cross-Produkt-Trends nutzen, um Ausreißer bei Produktpreisen zu identifizieren. Bysort t: egen aveprice Mittelwert (priceobs) reg priceobs aveprice wenn prodid 1 vorhergesagt resid1, residual reg priceobs aveprice wenn prodid 2 vorhergesagt resid2, residual reg priceobs aveprice wenn prodid 3 prognose resid3, residual twoway (line resid1 t if prodid 1) // / (Zeilenabstand t, falls prodid 1) /// (Zeilenrückstand2 t bei Prodid 2) /// (Zeile priceobs t wenn prodid 2) /// (line resid3 t wenn prodid 3) /// (line priceobs t if Prodid 3). Title (Die Residuen sind eindeutige Indikatoren für Ausreißer) Legende (off) Schließlich lassen wir Beobachtungen mit Residuen fallen, die größer als 1,5 Standardabweichungen vom Mittelwert sind. Qui forv i1 / 200 reg priceobs aveprice if prodid ich prognostiziere residtemp, residual sum residtemp ersetzen flag ((residtemp-r (mittel) gtr (sd) 1.5 residtemp-r (mittel) drop residtemp Lets sehen, wie es funktioniert: zwei (scatter Priceobs t, wenn prodid 2) /// (scatter priceobs t, wenn prodid 2 amp flag1 msymbol (lgx)) /// title (Jetzt nur versuchen, einige endgültige Ausreißer entfernen) Legende (aus) Plotten Produkt 1 Preise relativ zu Ausreißern. Globaler Twograph forv i 1/6 globaler twograph (line priceobs t, wenn prodid i) Endlich fallen die outliers fallen, wenn flag Ein endgültiger Graph globaler twograph forv i 1/6 globaler twograph (scatter priceobs t wenn prodid i) twoway twograph, legend (off ) Titel (Beobachtete Preisentwicklung für die ersten sechs Produkte) Nicht so sauber wie unsere erste Grafik, aber definitiv viel verbessert.

No comments:

Post a Comment