Saturday, 4 November 2017

Stata 11 glidande medelvärde


Stata: Dataanalys och statistisk programvara Nicholas J. Cox, Durham University, Storbritannien Christopher Baum, Boston College egen, ma () och dess begränsningar Statarsquos mest uppenbara kommando för att beräkna glidande medelvärden är ma () - funktionen hos egen. Med tanke på ett uttryck skapar det ett periodiskt rörligt medelvärde av det uttrycket. Som standard tas det som 3. måste vara udda. Men som den manuella inmatningen indikerar kan egen, ma () kanske inte kombineras med varlist:. och av den anledningen är det inte tillämpligt på paneldata. I vilket fall som helst står den utanför uppsättningen kommandon som är specifikt skrivna för tidsserier, se tidsserier för detaljer. Alternativa metoder För att beräkna glidmedel för paneldata finns det minst två val. Båda är beroende av att datasetet tidigare har ställts in. Det här är väldigt mycket värt att göra: inte bara kan du spara dig själv upprepade gånger med att ange panelvariabel och tidsvariabel, men Stata beter sig smart med några luckor i data. 1. Skriv din egen definition med hjälp av generering Använda tidsserier som L. och F.. Ge definitionen av det rörliga genomsnittsvärdet som argumentet för ett genererat uttalande. Om du gör det här är du naturligtvis inte begränsad till lika viktiga (obevätade) centrerade glidmedelvärden beräknade av egen ma (). Till exempel skulle lika viktiga treårs glidande medelvärden ges av och vissa vikter kan enkelt specificeras: Du kan givetvis ange ett uttryck som logg (myvar) istället för ett variabelt namn som myvar. En stor fördel med detta tillvägagångssätt är att Stata automatiskt gör det rätta för paneldata: ledande och släpande värden utarbetas inom paneler, precis som logiken dikterar att de borde vara. Den mest anmärkningsvärda nackdelen är att kommandoraden kan bli ganska lång om det glidande medlet innefattar flera termer. Ett annat exempel är ett ensidigt rörligt medelvärde baserat endast på tidigare värden. Detta kan vara användbart för att generera en adaptiv förväntning av vilken variabel som kommer att baseras uteslutande på information till dags dato: Vad kan någon förutspå för den aktuella perioden baserat på de fyra senaste värdena, med hjälp av ett fast viktningsschema (en 4-tidsperiod kan vara särskilt vanligt förekommande med kvartalsvisa tidsserier.) 2. Använd eget filter () från SSC Använd det användarskrivna egenfunktionsfiltret () från egenmore-paketet på SSC. I Stata 7 (uppdaterad efter 14 november 2001) kan du installera det här paketet efter vilket hjälp egenmore pekar på detaljer på filteret (). De två ovanstående exemplen skulle göras (I denna jämförelse är genereringsmetoden kanske mer transparent, men vi kommer att se ett exempel på motsatsen i ett ögonblick.) Lags är en numlist. lederna är negativa lags: i det här fallet -11 expanderar till -1 0 1 eller led 1, lag 0, lag 1. Koef-ficienterna, en annan numlist, multiplicera motsvarande släpande eller ledande objekt: i detta fall är dessa föremål F1.myvar . myvar och L1.myvar. Effekten av normaliseringsalternativet är att skala varje koefficient med summan av koefficienterna så att koefficienten (1 1 1) normaliserar motsvarar koefficienterna 13 13 13 och koef (1 2 1) normaliserar motsvarar koefficienterna 14 12 14 Du måste ange inte bara lags men även koefficienterna. Eftersom egen, ma () ger det lika viktiga fallet är huvudmotivet för egen, filter () att stödja det ojämnt viktiga fallet, för vilket du måste ange koefficienter. Man kan också säga att förplikta användare att ange koefficienter är ett litet extra tryck på dem för att tänka på vilka koefficienter de vill ha. Den huvudsakliga motiveringen för lika vikter är, vi antar, enkelhet, men lika vikter har äckliga frekvensdomänegenskaper, för att bara nämna ett övervägande. Det tredje exemplet ovan kan vara vilket är ungefär lika komplicerat som genereringsmetoden. Det finns fall där eget, filter () ger en enklare formulering än att generera. Om du vill ha ett nio-termins binomialfilter, som klimatologerna tycker är användbara, ser det kanske mindre hemskt ut än, och lättare att få rätt än, precis som med genereringsmetoden, fungerar egen, filter () korrekt med paneldata. Faktum är att det som sagt ovan beror på att datasetet tidigare har ställts in. En grafisk spets Efter att du har beräknat dina glidande medelvärden kommer du förmodligen att vilja se en graf. Det användarskrivna kommandot tsgraph är smart om tsset dataset. Installera det i en aktuell Stata 7 av ssc inst tsgraph. Vad sägs om delning med om ingen av ovanstående exempel använder sig av om begränsningar. Faktum är att egen, ma () inte tillåter om det ska anges. Ibland vill folk använda om man beräknar glidande medelvärden, men användningen är lite mer komplicerad än vad som vanligtvis är. Vad förväntar du dig av ett glidande medelvärde beräknat med if. Låt oss identifiera två möjligheter: Svag tolkning: Jag vill inte se några resultat för de uteslutna observationerna. Stark tolkning: Jag vill inte ens att du ska använda värdena för de uteslutna observationerna. Här är ett konkret exempel. Antag som en följd av vissa om villkor ingår observationer 1-42 men inte observationer 43 på. Men det rörliga genomsnittsvärdet för 42 beror bland annat på värdet för observation 43 om medelvärdet sträcker sig bakåt och framåt och är av längd åtminstone 3, och det kommer också att bero på några av observationerna 44 under vissa omständigheter. Vår gissning är att de flesta skulle gå för den svaga tolkningen, men om det är korrekt, kan inte filter () heller stödja om. Du kan alltid ignorera vad du donrsquot vill eller ens ställa in oönskade värden att missa efteråt med hjälp av ersätt. En anteckning om saknade resultat i slutet av serierna Eftersom rörliga medelvärden är funktioner av lags och leads, produceras egen, ma (), där lags och leads inte existerar, i början och slutet av serien. Ett alternativ nomiss tvingar beräkningen av kortare, ocenterade glidmedel för svansarna. Däremot genererar varken egen eller filter, (), eller tillåter, något speciellt för att undvika att missa resultat. Om något av värdena som behövs för beräkning saknas, saknas det resultatet. Det är upp till användarna att bestämma om och vilken korrigering som krävs för sådana observationer, förmodligen efter att ha tittat på datasetet och med tanke på vilken underliggande vetenskap som kan bäras. Modellering: Lowess Vi arbetar med data från Colombia WFS Household Survey , genomförd 1975-1976. Jag tabulerade åldersfördelningen för alla hushållsmedlemmar och sparade den i en ascci-fil, som vi nu läser och plottar: Som ni ser ser distributionen något mindre släta ut än data från Filippinerna som vi studerade tidigare. Kan du beräkna Myers-indexet för denna fördelning Löpande medel och linjer Det enklaste sättet att släta en scatterplot är att använda ett glidande medelvärde. även känd som ett löpande medelvärde. Det vanligaste sättet är att använda ett fönster med 2 k 1 observationer, k till vänster och k till höger om varje observation. Värdet av k är en avvägning mellan jämnhetens godhet. Särskild vård måste vidtas vid ytterligheten av intervallet. Stata kan beräkna körmedel via lowess med alternativvärdet och nuight. Ett vanligt problem med löpmedel är fördomar. En lösning är att använda vikter som ger större betydelse åt närmaste grannar och mindre till de längre bort. En populär viktfunktion är Tukeys tri-kub, definierad som w (d) (1-d 3) 3 för d 1 och 0 annars, där d är avståndet till målpunkten uttryckt som en bråkdel av bandbredd. Stata kan göra denna beräkning via lowess med alternativet betyder om du släpper bort nuight. En ännu bättre lösning är att använda löpande linjer. Vi definierar återigen ett grannskap för varje punkt, typiskt de närmaste grannarna på varje sida, en regressionslinje till punkterna i grannskapet och använd sedan den för att förutsäga ett jämnare värde för indexobservationen. Det låter som mycket arbete, men beräkningarna kan göras effektivt med hjälp av regressionsuppdateringsformler. Stata kan beräkna en körlinje via lowess om du slipper menar men inkluderar nueight. Bättre är att använda viktiga löplinjer. Att ge större vikt åt de närmaste observationerna, vilket är det som gör det lättare att göra. En variant följer denna uppskattning med några iterationer för att få en mer robust linje. Detta är tydligen den bästa tekniken i familjen. Statas lowess använder en viktad löpelinje om du släpper bort menyn och nueight R implementerar lowessen mjukare genom funktionerna lowess () och den nyare loessen (), som använder ett formelgränssnitt med en eller flera prediktorer och något olika standardvärden. Parametervärdet styr graden av det lokala polynomet som standard är 2 för kvadratisk, alternativ är 1 för linjär och 0 för körmedel. Båda implementationerna kan använda en robust estimator, med antalet iterationer kontrollerade av en parameter iter eller iterationer. Skriv loess och lowess i R-konsolen för mer information. I ggplot () kan du överlappa en lågare mjukare genom att kalla geomsmooth () Figuren nedan visar de colombianska data och en lågare jämnare med en spänning eller bandbredd som är lika med 25 av data. Du kanske vill prova olika badbredd för att se hur resultaten varierar. Uppdatering av siffror Ändra åldersfördelningen ger ett bättre sätt att bedöma cifrepreferensen än Myers-blandning. Låt oss beräkna den sista ålderscalen och tabulera den över hela spektrumet av data med hjälp av de observerade frekvenserna och en lågare jämnare. Råfrekvenserna visar på preferenser för åldrar som slutar i 0 och 5, vilket är mycket vanligt, och förmodligen 2 också. Vi använder nu smidig som vikt De jämnfrekventa frekvenserna visar att vi förväntar oss färre personer vid högre siffror, även i en jämn fördelning, med mer slut på 0 än 9. Vi är nu redo att beräkna ett index för cifrepreferensen, definierad som hälften av summa av absoluta skillnader mellan observerade och släta frekvenser: Vi ser att vi skulle behöva omforma 5,5 av observationerna för att eliminera cifrepreferensen. Du kanske vill jämföra detta resultat med Myers-indexet. kopiera 2017 Germaacuten Rodriacuteguez, Princeton University Föreställ dig att du har data om priser på många produkter. För var och en av produkterna registrerar du prisinformation per vecka. clear set obs 200 gen prodid n Varje produkt har ett unikt genomsnittspris genprodprice rpoisson (5) 7 Du har uppgifter om veckopriser i 200 veckor. expandera 200 bysort prodid: gen tn label var t Vecka Det finns också vissa säsongsvariationer säsongsbetonade .2sin (pit50) Förutom en generell trend trend trend t.005 Den första observationen är inte korrelerad med något genpris prodprice2.5 trend rpoisson (10) 10 om t1 ersätta pris prodprice2 trend säsong .7pricen-1 .3rpoisson (10) 10 om t2 ersätta prisprovprice trend säsong .5pricen-1 .2pricen-2 .3rpoisson (10) 10 om t3 ersätta prisprovprice trend säsongsbetonad .3pricen-1, 2pricen-2, 2pricen-3, 3 rpoisson (10) 10 om t4 ersätter priskvalitetsutvecklingen säsongsbetonad .3pricen-1, l75pricen-2 .125pricen-3 .1pricen-4 .3rpoisson (10) 10 om tgt4 en globabl för att lagra global twograph forv i 16 global twograph (linjepriset t om prodid i) twoway twograph, legend (off) - titeln (Sann prisutveckling för första sex produkter) Nu kan vi föreställa oss att ovanstående genererade data är den sanna prisinformationen som är fundamentalt observerbar. I stället har du flera samlingar av data per vecka på priser som variera olika med några slumpmässiga tillsatsfel. expandera 3 bysort prodid t: gen prodobs n gen pricecollect price normal (). 25 Men prisinformationen du har har några poster som 10 felaktigt har skrivits in felaktigt. gen entryerror rbinomial (1, 1) gen scalarror rnormal () 1 genprisobs pricecollect (1entryerrorscalarerror) label var priceobs Registrerat pris Dessutom har 35 av dina prisuppgifter aldrig samlats gen saknas rbinomial (1, .35) drop if missing1 Skapa en globabl för att lagra global twograph forv i 16 globala twograph (line priceobs t om prodid i amp prodobs1) twoway twograph, legend (off) titel (Observerad prisutveckling för första sex produkter) behåll t priceobs prodid entryerror Jag håller inmatningsfel i dataset som ett medel för jämförelse men det skulle inte observeras direkt. Frågan är: Kan du nu med denna smutsiga data återhämta prisdata som liknar originalet Det första vi bör utnyttja är duplicerad inspelad data. scatter priceobs t om prodid 1, titel (Det är lätt att se enskilda avvikelser) Det är lätt att se enskilda avvikelser men vi vill inte gå igenom alla 200 produkter för att identifiera enskilda prisutjämnare. Vi vill komma med ett system för att identifiera avvikare. Låt generera en medelvärde för produkt och tid förkorta prodid t: egen pricemean mean (priceobs) Låt oss flagga någon observation som är 120 större än medelvärdet eller 80 mindre än medelvärdet. genflagga (pricemean priceobs1.2 pricemean lt priceobs.8) Låt oss se hur det fungerar: två (scatter priceobs t om prodid 1) (scatter priceobs t om prodid 1 amp flagg1. msymbol (lgx)). titel (Några av outliers kan identifieras bara titta på den genomsnittliga) legenden (av) corr flag entryerror Vår flagga är korrelerad cirka 45 med postfel. Det här är bra men vi kan göra det bättre. Jag föreslår det snarare än att använda bara medelvärdet att vi konstruerar ett glidande medelpris och se hur varje inmatning avviker från medeltalet. Det enda problemet är att det rörliga genomsnittliga kommandot kräver xtset och det kräver endast en post per tidsperiod. Så säger jag att vi ändrar tidsvariabeln och lägger till som om den är inspelad vid en annan tidpunkt i veckan, observationsnumret. Vi behöver nyligen generera prodob eftersom vi inte vet vilken observation som saknas från varje produkt. bysort prodid t: gen prodobs n gen t2 t4 prodobs xtset anger panelens datapanel ID och tidsserie nivå. xtset prodid t2 Kommandot vi ska använda är tssmooth Det är kodat så att genom att ange ma betyder det att flytta medelvärdet och fönstret berättar Stata hur många tidsperioder som ska räknas fram och hur många bakom i rörlig luftning. Det här kommandot kan ta ett tag. tssmooth ma mapriceobspriceobs, window (23 0 23) 23 är i kraft 5 veckor före och 5 veckor bakom 0 berättar stata att inte inkludera sig själv i det genomsnittet Det rörliga genomsnittet två (scatter priceobs t om prodid 1) (line mapriceobs t om prodid 1) (linje pricemean t om prodid 1). titel (det rörliga medelvärdet är mindre framgångsrikt för outliers) Det rörliga genomsnittet är stabilare än bara tidsgenomsnittet. Låt oss försöka flagga med hjälp av den glidande genomsnittliga cap-droppflaggan2 gen flag2 (mapriceobs gt priceobs1.2 mapriceobs lt priceobs.8) två (scatter priceobs t om prodid 1) (scatter priceobs t om prodid 1 amp flagg21. Msymbol (lgx)). titel (Moving Average kan också vara användbar) legend (av) corr flag2 entryerror Släppa vår flaggade dataförlust om flag21 Dölj till den veckovisa nivån kollaps priceobs, med (prodid t) label var priceobs Medelpris observerat forv i 16 global twograph priceobs t om prodid i) twoway twograph, legend (off) titel (Observerad prishöjning för första sex produkter) Data ser mycket bättre ut, men vi har fortfarande tydligt några oönskade utestängningar. Vi kunde dra nytta av produktutvecklingarna för att hjälpa till att identifiera avvikande produkter inom produktpriserna. bysort t: egen aveprice medelvärde (priceobs) reg priceobs aveprice om prodid 1 förutsäger resid1, restreg priceobs aveprice om prodid 2 förutsäger resid2, residual reg priceobs aveprice om prodid 3 förutsäger resid3, resterande twoway (rad kvarl om prodid 1) priceobs t om prodid 1) (linje rest2 t om prodid 2) (linjepriser t om prodid 2) (rad återstoden t ex prodid 3) (linjepriser t om prodid 3). titel (Resterna är tydliga indikatorer på avvikare) Legenden (av) Låt oss slutligen släppa observationer med rester som är större än 1,5 standardavvikelser från medelvärdet. qui forv i1200 reg priceobs aveprice om prodid jag förutspår residtemp, restsumma resttemp ersätt flagg ((residtemp-r (mean) gtr (sd) 1,5 residtemp-r (medel) droppe residtemp Låt oss se hur det fungerar: två (scatter priceobs t om prodid 2) (scatter priceobs t om prodid 2 amp flagg 1. msymbol (lgx)) title (Nu försöker du bara ta bort några slutliga outliers) legend (off) Plotting product 1 prissättning i förhållande till outliers. global twograph forv i 16 global twograph line priceobs t if prodid i) Slutligen släppa outliers dropen om flagga En sista graf globala twograph forv i 16 globala twograph (scatter priceobs t om prodid i) twoway twograph, legend (off) titel (Observerad prishöjning för första sex produkter) Inte så ren som vår första graf men definitivt mycket bättre.

No comments:

Post a Comment