Flytta genomsnittliga och exponentiella utjämningsmodeller Som ett första steg för att flytta bortom genomsnittliga modeller kan slumpmässiga gångmodeller, linjära trendmodeller, nonseasonala mönster och trender extrapoleras med hjälp av en rörlig genomsnitts - eller utjämningsmodell. Det grundläggande antagandet bakom medelvärdes - och utjämningsmodeller är att tidsserierna är lokalt stationära med ett långsamt varierande medelvärde. Därför tar vi ett rörligt (lokalt) medelvärde för att uppskatta det nuvarande värdet av medelvärdet och sedan använda det som prognosen för den närmaste framtiden. Detta kan betraktas som en kompromiss mellan medelmodellen och slumpmässig-walk-without-drift-modellen. Samma strategi kan användas för att uppskatta och extrapolera en lokal trend. Ett rörligt medelvärde kallas ofta en quotsmoothedquot-version av den ursprungliga serien, eftersom kortsiktig medelvärde har en effekt att utjämna stötarna i originalserien. Genom att justera graden av utjämning (bredden på glidande medelvärdet) kan vi hoppas att hitta någon form av optimal balans mellan prestandan hos medel och slumpmässiga gångmodeller. Den enklaste typen av medelvärdesmodell är. Enkelt (lika viktat) Flyttande medelvärde: Prognosen för värdet på Y vid tiden t1 som görs vid tid t motsvarar det enkla medelvärdet av de senaste m-observationerna: (Här och på annat håll använder jag symbolen 8220Y-hat8221 för att stå för en prognos av tidsserie Y som gjordes så tidigt som möjligt enligt en given modell.) Detta medel är centrerat vid period-t (m1) 2, vilket innebär att uppskattningen av det lokala medelvärdet tenderar att ligga bakom den sanna värdet av det lokala medelvärdet med ca (m1) 2 perioder. Således säger vi att medelåldern för data i det enkla glidande medlet är (m1) 2 i förhållande till den period för vilken prognosen beräknas: det här är hur lång tid prognoserna tenderar att ligga bakom vändpunkter i data . Om du till exempel medger de senaste 5 värdena, kommer prognoserna att vara cirka 3 perioder sent för att svara på vändpunkter. Observera att om m1 är den enkla glidande genomsnittsmodellen (SMA) motsvarar den slumpmässiga gångmodellen (utan tillväxt). Om m är mycket stor (jämförbar med längden på uppskattningsperioden), motsvarar SMA-modellen den genomsnittliga modellen. Precis som med vilken parameter som helst av en prognosmodell, är det vanligt att justera värdet på k för att få den bästa kvotkvoten till data, dvs de minsta prognosfelen i genomsnitt. Här är ett exempel på en serie som verkar utgöra slumpmässiga fluktuationer runt ett långsamt varierande medelvärde. Först kan vi försöka passa den med en slumpmässig promenadmodell, vilket motsvarar ett enkelt glidande medelvärde på 1 term: Slumpmässig gångmodell svarar väldigt snabbt på förändringar i serien, men därmed väljer den mycket av kvotenhetskvoten i data (de slumpmässiga fluktuationerna) samt quotsignalquot (det lokala medelvärdet). Om vi istället försöker ett enkelt glidande medelvärde på 5 termer får vi en snyggare uppsättning prognoser: Det 5-åriga enkla glidande medlet ger betydligt mindre fel än den slumpmässiga promenadmodellen i det här fallet. Medelåldern för data i denna prognos är 3 ((51) 2), så att den tenderar att ligga bakom vändpunkter med cirka tre perioder. (Till exempel verkar en nedgång ha skett i period 21, men prognoserna vänder inte om till flera perioder senare.) Notera att de långsiktiga prognoserna från SMA-modellen är en horisontell rak linje, precis som i slumpmässig promenad modell. Således antar SMA-modellen att det inte finns någon trend i data. Men medan prognoserna från den slumpmässiga promenadmodellen helt enkelt motsvarar det senast observerade värdet är prognoserna från SMA-modellen lika med ett vägt genomsnitt av de senaste värdena. De konfidensbegränsningar som beräknas av Statgraphics för de långsiktiga prognoserna för det enkla glidande genomsnittet blir inte större eftersom prognostiseringshorisonten ökar. Det här är uppenbarligen inte korrekt Tyvärr finns det ingen underliggande statistisk teori som berättar hur förtroendeintervallen borde utvidgas för denna modell. Det är emellertid inte så svårt att beräkna empiriska uppskattningar av konfidensgränserna för prognosen för längre tid. Du kan till exempel skapa ett kalkylblad där SMA-modellen skulle användas för att prognostisera två steg framåt, 3 steg framåt etc. i det historiska dataprov. Därefter kan du beräkna felfunktionens avvikelser vid varje prognoshorisont och sedan konstruera konfidensintervaller för längre siktprognoser genom att lägga till och subtrahera multiplar med lämplig standardavvikelse. Om vi försöker ett 9-sikt enkelt glidande medelvärde får vi ännu smidigare prognoser och mer av en långsammare effekt: Medelåldern är nu 5 perioder (91) 2). Om vi tar ett 19-årigt glidande medel ökar medeltiden till 10: Observera att prognoserna nu försvinner nu bakom vändpunkter med cirka 10 perioder. Vilken mängd utjämning är bäst för denna serie Här är en tabell som jämför deras felstatistik, inklusive ett 3-siktsmedel: Modell C, det 5-åriga glidande genomsnittet, ger det lägsta värdet av RMSE med en liten marginal över 3 term och medellång sikt, och deras andra statistik är nästan identiska. Så, bland modeller med mycket liknande felstatistik kan vi välja om vi föredrar lite mer lyhördhet eller lite mer jämnhet i prognoserna. (Return to top of page.) Browns Enkel exponentiell utjämning (exponentiellt viktad glidande medelvärde) Den enkla glidande medelmodellen beskriven ovan har den oönskade egenskapen som den behandlar de sista k-observationerna lika och fullständigt ignorerar alla föregående observationer. Intuitivt bör tidigare data diskonteras på ett mer gradvis sätt - till exempel bör den senaste observationen få lite mer vikt än 2: a senast, och den 2: a senaste bör få lite mer vikt än den 3: e senaste, och så vidare. Den enkla exponentiella utjämningens (SES) - modellen åstadkommer detta. Låt 945 beteckna en quotsmoothing constantquot (ett tal mellan 0 och 1). Ett sätt att skriva modellen är att definiera en serie L som representerar den nuvarande nivån (dvs lokal medelvärde) för serien som uppskattad från data fram till idag. Värdet på L vid tid t beräknas rekursivt från sitt eget tidigare värde så här: Således är det nuvarande utjämnade värdet en interpolation mellan det tidigare jämnda värdet och den aktuella observationen, där 945 styr närheten av det interpolerade värdet till det senaste observation. Prognosen för nästa period är helt enkelt det nuvarande utjämnade värdet: Likvärdigt kan vi uttrycka nästa prognos direkt i form av tidigare prognoser och tidigare observationer, i någon av följande ekvivalenta versioner. I den första versionen är prognosen en interpolation mellan föregående prognos och tidigare observation: I den andra versionen erhålls nästa prognos genom att justera föregående prognos i riktning mot det föregående felet med en bråkdel av 945. Är felet gjort vid tid t. I den tredje versionen är prognosen ett exponentiellt vägt (dvs. rabatterat) glidande medelvärde med rabattfaktor 1-945: Interpolationsversionen av prognosformuläret är det enklaste att använda om du genomför modellen på ett kalkylblad: det passar in i en encell och innehåller cellreferenser som pekar på föregående prognos, föregående observation och cellen där värdet 945 lagras. Observera att om 945 1 motsvarar SES-modellen en slumpmässig gångmodell (utan tillväxt). Om 945 0 motsvarar SES-modellen den genomsnittliga modellen, förutsatt att det första släta värdet sätts lika med medelvärdet. (Återgå till början av sidan.) Medelåldern för data i prognosen för enkel exponentiell utjämning är 1 945 i förhållande till den period som prognosen beräknas för. (Detta är inte tänkt att vara uppenbart, men det kan enkelt visas genom att utvärdera en oändlig serie.) Den enkla, snabba genomsnittliga prognosen tenderar därför att ligga bakom vändpunkter med cirka 1 945 perioder. Till exempel, när 945 0,5 är fördröjningen 2 perioder när 945 0,2 är fördröjningen 5 perioder när 945 0,1 är fördröjningen 10 perioder, och så vidare. För en given genomsnittlig ålder (dvs mängden fördröjning) är prognosen för enkel exponentiell utjämning (SES) något överlägsen SMA-prognosen (Simple Moving Average) eftersom den lägger relativt större vikt vid den senaste observationen, dvs. det är något mer quotresponsivequot för förändringar som inträffade under det senaste förflutna. Exempelvis har en SMA-modell med 9 villkor och en SES-modell med 945 0,2 båda en genomsnittlig ålder på 5 för data i sina prognoser, men SES-modellen lägger mer vikt på de sista 3 värdena än SMA-modellen och vid Samtidigt gör det inte helt 8220forget8221 om värden som är mer än 9 perioder gamla, vilket visas i det här diagrammet. En annan viktig fördel med SES-modellen över SMA-modellen är att SES-modellen använder en utjämningsparameter som kontinuerligt varierar, så att den lätt kan optimeras genom att använda en kvotsolverquot-algoritm för att minimera det genomsnittliga kvadratfelet. Det optimala värdet på 945 i SES-modellen för denna serie visar sig vara 0,2961, som visas här: Medelåldern för data i denna prognos är 10,2961 3,4 perioder, vilket liknar det för ett 6-sikt enkelt glidande medelvärde. De långsiktiga prognoserna från SES-modellen är en horisontell rak linje. som i SMA-modellen och den slumpmässiga promenadmodellen utan tillväxt. Observera dock att de konfidensintervaller som beräknas av Statgraphics avviker nu på ett rimligt sätt, och att de är väsentligt smalare än konfidensintervallen för slumpmässig promenadmodell. SES-modellen förutsätter att serien är något mer förutsägbar än den slumpmässiga promenadmodellen. En SES-modell är egentligen ett speciellt fall av en ARIMA-modell. så ger den statistiska teorin om ARIMA-modeller en bra grund för beräkning av konfidensintervall för SES-modellen. I synnerhet är en SES-modell en ARIMA-modell med en icke-säsongsskillnad, en MA (1) term och ingen konstant term. annars känd som en quotARIMA (0,1,1) modell utan constantquot. MA (1) - koefficienten i ARIMA-modellen motsvarar kvantiteten 1-945 i SES-modellen. Om du till exempel passar en ARIMA (0,1,1) modell utan konstant till serien som analyseras här, visar den uppskattade MA (1) - koefficienten sig att vara 0.7029, vilket är nästan exakt en minus 0,2961. Det är möjligt att lägga till antagandet om en icke-noll konstant linjär trend till en SES-modell. För att göra detta, ange bara en ARIMA-modell med en icke-sekundär skillnad och en MA (1) term med en konstant, dvs en ARIMA (0,1,1) modell med konstant. De långsiktiga prognoserna kommer då att ha en trend som är lika med den genomsnittliga trenden som observerats under hela estimeringsperioden. Det går inte att göra detta i samband med säsongjustering, eftersom säsongsjusteringsalternativen är inaktiverade när modelltypen är inställd på ARIMA. Du kan emellertid lägga till en konstant långsiktig exponentiell trend till en enkel exponentiell utjämningsmodell (med eller utan säsongsjustering) genom att använda inflationsjusteringsalternativet i prognosproceduren. Den lämpliga quotinflationen (procentuell tillväxt) per period kan beräknas som lutningskoefficienten i en linjär trendmodell som är anpassad till data i samband med en naturlig logaritmtransformation, eller det kan baseras på annan oberoende information om långsiktiga tillväxtutsikter . (Återgå till början av sidan.) Browns Linear (ie double) Exponentiell utjämning SMA-modellerna och SES-modellerna antar att det inte finns någon trend av något slag i data (vilket vanligtvis är OK eller åtminstone inte för dåligt för 1- stegprognoser när data är relativt bullriga), och de kan modifieras för att införliva en konstant linjär trend som visas ovan. Vad sägs om kortsiktiga trender Om en serie visar en växande tillväxt eller ett cykliskt mönster som står klart mot bruset, och om det finns behov av att prognostisera mer än en period framåt, kan uppskattningen av en lokal trend också vara en fråga. Den enkla exponentiella utjämningsmodellen kan generaliseras för att erhålla en linjär exponentiell utjämning (LES) - modell som beräknar lokala uppskattningar av både nivå och trend. Den enklaste tidsvarierande trendmodellen är Browns linjära exponentiell utjämningsmodell, som använder två olika slätmade serier som centreras vid olika tidpunkter. Prognosformeln baseras på en extrapolering av en linje genom de två centra. (En mer sofistikerad version av denna modell, Holt8217s, diskuteras nedan.) Den algebraiska formen av Brown8217s linjär exponentiell utjämningsmodell, som den enkla exponentiella utjämningsmodellen, kan uttryckas i ett antal olika men likvärdiga former. Den här kvotens kvotstandardkvot uttrycks vanligtvis enligt följande: Låt S beteckna den singeljämnade serien som erhållits genom att använda enkel exponentiell utjämning till serie Y. Dvs, värdet på S vid period t ges av: (Minns att, under enkel exponentiell utjämning, detta skulle vara prognosen för Y vid period t1.) Låt sedan Squot beteckna den dubbelsidiga serien erhållen genom att applicera enkel exponentiell utjämning (med samma 945) till serie S: Slutligen prognosen för Y tk. för vilken kgt1 som helst, ges av: Detta ger e 1 0 (det vill säga lura lite och låt den första prognosen motsvara den faktiska första observationen) och e 2 Y 2 8211 Y 1. varefter prognoser genereras med hjälp av ekvationen ovan. Detta ger samma monterade värden som formeln baserad på S och S om de senare startades med användning av S1S1Y1. Denna version av modellen används på nästa sida som illustrerar en kombination av exponentiell utjämning med säsongsjustering. Holt8217s linjär exponentiell utjämning Brown8217s LES-modell beräknar lokala uppskattningar av nivå och trend genom att utjämna de senaste uppgifterna, men det faktum att det gör det med en enda utjämningsparameter ställer in en begränsning av de datamönster som den kan passa: nivån och trenden får inte variera till oberoende priser. Holt8217s LES-modell adresserar problemet genom att inkludera två utjämningskonstanter, en för nivån och en för trenden. När som helst t, som i Brown8217s modell, finns det en uppskattning L t på lokal nivå och en uppskattning T t av den lokala trenden. Här rekryteras de rekursivt från värdet av Y observerat vid tid t och de tidigare uppskattningarna av nivån och trenden med två ekvationer som applicerar exponentiell utjämning till dem separat. Om den beräknade nivån och trenden vid tiden t-1 är L t82091 och T t-1. respektive prognosen för Y tshy som skulle ha gjorts vid tid t-1 är lika med L t-1 T t-1. När det verkliga värdet observeras beräknas den uppdaterade uppskattningen av nivån rekursivt genom interpolering mellan Y tshy och dess prognos L t-1 T t 1 med vikter av 945 och 1- 945. Förändringen i beräknad nivå, nämligen L t 8209 L t82091. kan tolkas som en bullrig mätning av trenden vid tiden t. Den uppdaterade uppskattningen av trenden beräknas sedan rekursivt genom interpolering mellan L t 8209 L t82091 och den tidigare uppskattningen av trenden T t-1. Användning av vikter av 946 och 1-946: Tolkningen av trendutjämningskonstanten 946 är analog med den för nivåutjämningskonstanten 945. Modeller med små värden av 946 förutsätter att trenden ändras endast mycket långsamt över tiden, medan modeller med större 946 antar att det förändras snabbare. En modell med en stor 946 tror att den avlägsna framtiden är väldigt osäker, eftersom fel i trendberäkning blir ganska viktiga vid prognoser mer än en period framåt. (Återgå till början av sidan.) Utjämningskonstanterna 945 och 946 kan beräknas på vanligt sätt genom att minimera medelkvadratfelet i de 1-stegs-prognoserna. När detta görs i Statgraphics visar uppskattningarna att vara 945 0.3048 och 946 0.008. Det mycket lilla värdet av 946 innebär att modellen antar mycket liten förändring i trenden från en period till nästa, så i grunden försöker denna modell att uppskatta en långsiktig trend. I analogi med begreppet medelålder för de data som används för att uppskatta den lokala nivån i serien, är medelåldern för de data som används för att uppskatta den lokala trenden proportionell mot 1 946, men inte exakt lika med den . I detta fall visar det sig att vara 10.006 125. Detta är ett mycket exakt nummer eftersom precisionen av uppskattningen av 946 är verkligen 3 decimaler, men den har samma generella storleksordning som provstorleken på 100, så denna modell är medeltal över ganska mycket historia för att beräkna trenden. Prognosplotten nedan visar att LES-modellen beräknar en något större lokal trend i slutet av serien än den ständiga trenden som beräknas i SEStrend-modellen. Det uppskattade värdet på 945 är också nästan identiskt med det som erhållits genom att montera SES-modellen med eller utan trend, så det är nästan samma modell. Nu ser dessa ut som rimliga prognoser för en modell som beräknas beräkna en lokal trend. Om du 8220eyeball8221 ser det här, ser det ut som om den lokala trenden har vänt sig nedåt i slutet av serien. Vad har hänt Parametrarna i denna modell har uppskattats genom att minimera det kvadrerade felet i 1-stegs-prognoser, inte längre prognoser, i vilket fall trenden gör inte en stor skillnad. Om allt du tittar på är 1 steg framåt, ser du inte den större bilden av trender över (säg) 10 eller 20 perioder. För att få denna modell mer i linje med vår ögonbolls extrapolering av data kan vi manuellt justera trendutjämningskonstanten så att den använder en kortare baslinje för trendberäkning. Om vi till exempel väljer att ställa in 946 0,1, är medelåldern för de data som används vid uppskattning av den lokala trenden 10 perioder, vilket innebär att vi medeltar trenden över de senaste 20 perioderna eller så. Here8217s vad prognosplottet ser ut om vi sätter 946 0,1 samtidigt som ni håller 945 0.3. Detta ser intuitivt rimligt ut för denna serie, men det är troligen farligt att extrapolera denna trend mer än 10 perioder i framtiden. Vad sägs om felstatistik Här är en modelljämförelse för de två modellerna ovan och tre SES-modeller. Det optimala värdet på 945. För SES-modellen är ungefär 0,3, men liknande resultat (med något mer eller mindre responsivitet) erhålls med 0,5 och 0,2. (A) Hål linjär exp. utjämning med alfa 0,3048 och beta 0,008 (B) Hål linjär exp. utjämning med alfa 0,3 och beta 0,1 (C) Enkel exponentiell utjämning med alfa 0,5 (D) Enkel exponentiell utjämning med alfa 0,3 (E) Enkel exponentiell utjämning med alfa 0,2 Deras statistik är nästan identisk, så vi kan verkligen göra valet på grundval av prognosfel i 1 steg före proverna. Vi måste falla tillbaka på andra överväganden. Om vi starkt tror att det är vettigt att basera den nuvarande trendberäkningen på vad som hänt under de senaste 20 perioderna eller så kan vi göra ett ärende för LES-modellen med 945 0,3 och 946 0,1. Om vi vill vara agnostiska om det finns en lokal trend, kan en av SES-modellerna vara enklare att förklara och skulle också ge fler mitten av vägtrafikprognoserna för de kommande 5 eller 10 perioderna. (Tillbaka till början av sidan.) Vilken typ av trend-extrapolation är bäst: Horisontell eller linjär Empiriska bevis tyder på att om uppgifterna redan har justerats (om det behövs) för inflationen, kan det vara osäkert att extrapolera kortsiktiga linjära trender mycket långt in i framtiden. Tendenser som uppenbaras idag kan sänkas i framtiden på grund av olika orsaker som produktförstörelse, ökad konkurrens och konjunkturnedgångar eller uppgångar i en bransch. Av denna anledning utför enkel exponentiell utjämning ofta bättre utom provet än vad som annars skulle kunna förväntas, trots sin kvotiv kvot horisontell trend extrapolering. Dämpade trendmodifieringar av den linjära exponentiella utjämningsmodellen används också i praktiken för att införa en konservatismedel i sina trendprognoser. Den demoniserade trenden LES-modellen kan implementeras som ett speciellt fall av en ARIMA-modell, i synnerhet en ARIMA-modell (1,1,2). Det är möjligt att beräkna konfidensintervaller kring långsiktiga prognoser som produceras av exponentiella utjämningsmodeller, genom att betrakta dem som speciella fall av ARIMA-modeller. (Var försiktig: inte alla mjukvaror beräknar konfidensintervall för dessa modeller korrekt.) Bredden på konfidensintervallet beror på (i) modellens RMS-fel, (ii) utjämningstypen (enkel eller linjär) (iii) värdet (er) av utjämningskonstanten (erna) och (iv) antalet perioder framåt du prognoserar. I allmänhet sprids intervallet snabbare, eftersom 945 blir större i SES-modellen och de sprider sig mycket snabbare när linjär snarare än enkel utjämning används. Detta ämne diskuteras vidare i avsnittet ARIMA-modeller i anteckningarna. (Återgå till början av sidan.) Introduktion till ARIMA: nonseasonal modeller ARIMA (p, d, q) prognoser ekvation: ARIMA-modeller är i teorin den vanligaste klassen av modeller för prognoser för en tidsserie som kan göras för att vara 8220stationary8221 genom att differentiera (om nödvändigt), kanske i samband med olinjära transformationer såsom loggning eller deflatering (om nödvändigt). En slumpmässig variabel som är en tidsserie är stationär om dess statistiska egenskaper är konstanta över tiden. En stationär serie har ingen trend, dess variationer kring dess medelvärde har en konstant amplitud, och det vinklar på ett konsekvent sätt. d. v.s. dess kortsiktiga slumpmässiga tidsmönster ser alltid ut i statistisk mening. Det sistnämnda tillståndet betyder att dess autokorrelationer (korrelationer med sina egna tidigare avvikelser från medelvärdet) förblir konstanta över tiden, eller likvärdigt, att dess effektspektrum förblir konstant över tiden. En slumpmässig variabel i denna blankett kan ses som en kombination av signal och brus, och signalen (om en är uppenbar) kan vara ett mönster av snabb eller långsam mean reversion eller sinusformig oscillation eller snabb växling i tecken , och det kan också ha en säsongskomponent. En ARIMA-modell kan ses som en 8220filter8221 som försöker separera signalen från bruset, och signalen extrapoleras därefter i framtiden för att få prognoser. ARIMA-prognosekvationen för en stationär tidsserie är en linjär (d. v.s. regressionstyp) ekvation där prediktorerna består av lags av de beroende variabla andorlagren av prognosfel. Det vill säga: Förutsatt värdet på Y är en konstant och en viktad summa av ett eller flera nya värden av Y och eller en vägd summa av ett eller flera nya värden av felen. Om prediktorerna endast består av fördröjda värden på Y. Det är en ren autoregressiv (8220self-regressed8221) modell, som bara är ett speciellt fall av en regressionsmodell och som kan förses med standard regressionsprogram. Exempelvis är en första-order-autoregressiv (8220AR (1) 8221) modell för Y en enkel regressionsmodell där den oberoende variabeln bara Y är försenad med en period (LAG (Y, 1) i Statgraphics eller YLAG1 i RegressIt). Om en del av prediktorerna är felaktiga, är en ARIMA-modell inte en linjär regressionsmodell, eftersom det inte går att ange 8220last period8217s error8221 som en oberoende variabel: felen måste beräknas periodvis när modellen är monterad på data. Tekniskt sett är problemet med att använda fördröjda fel som prediktorer att modellen8217s förutsägelser inte är linjära funktioner för koefficienterna. även om de är linjära funktioner i tidigare data. Så koefficienter i ARIMA-modeller som innehåller försenade fel måste uppskattas genom olinjära optimeringsmetoder (8220hill-climbing8221) istället för att bara lösa ett system av ekvationer. Akronymet ARIMA står för Auto-Regressive Integrated Moving Average. Lags av den stationära serien i prognosen ekvationen kallas quotautoregressivequot termer, lags av prognosfel kallas quotmoving averagequot termer och en tidsserie som behöver differentieras för att göras stationär sägs vara en quotintegratedquot-version av en stationär serie. Slumpmässiga och slumpmässiga modeller, autoregressiva modeller och exponentiella utjämningsmodeller är alla speciella fall av ARIMA-modeller. En nonseasonal ARIMA-modell klassificeras som en quotARIMA (p, d, q) kvotmodell där: p är antalet autoregressiva termer, d är antalet icke-säsongsskillnader som behövs för stationaritet och q är antalet fördröjda prognosfel i prediksionsekvationen. Prognosekvationen är konstruerad enligt följande. Först, låt y beteckna d: s skillnad på Y. Det betyder: Observera att den andra skillnaden i Y (d2-fallet) inte är skillnaden från 2 perioder sedan. Det är snarare den första skillnaden-av-första skillnaden. vilken är den diskreta analogen av ett andra derivat, dvs den lokala accelerationen av serien i stället för dess lokala trend. När det gäller y. Den allmänna prognostiseringsekvationen är: Här definieras de rörliga genomsnittsparametrarna (9528217s) så att deras tecken är negativa i ekvationen, enligt konventionen införd av Box och Jenkins. Vissa författare och programvara (inklusive R-programmeringsspråket) definierar dem så att de har plustecken istället. När faktiska siffror är anslutna till ekvationen finns det ingen tvetydighet, men det är viktigt att veta vilken konvention din programvara använder när du läser utmatningen. Ofta anges parametrarna av AR (1), AR (2), 8230 och MA (1), MA (2), 8230 etc. För att identifiera lämplig ARIMA-modell för Y. börjar du med att bestämma sorteringsordningen (d) behöver stationera serierna och ta bort säsongens bruttoegenskaper, kanske i kombination med en variationsstabiliserande transformation, såsom loggning eller avflöde. Om du slutar vid denna tidpunkt och förutsäger att den olika serien är konstant, har du bara monterat en slumpmässig promenad eller slumpmässig trendmodell. Den stationära serien kan emellertid fortfarande ha autokorrelerade fel, vilket tyder på att vissa antal AR-termer (p 8805 1) och eller några nummer MA-termer (q 8805 1) också behövs i prognosekvationen. Processen att bestämma värdena p, d och q som är bäst för en given tidsserie kommer att diskuteras i senare avsnitt av anteckningarna (vars länkar finns längst upp på denna sida), men en förhandsvisning av några av de typerna av nonseasonal ARIMA-modeller som vanligtvis förekommer ges nedan. ARIMA (1,0,0) första ordningens autoregressiva modell: Om serien är stationär och autokorrelerad kanske den kan förutsägas som en multipel av sitt eget tidigare värde plus en konstant. Prognosekvationen i detta fall är 8230, som Y är regresserad i sig själv fördröjd med en period. Detta är en 8220ARIMA (1,0,0) constant8221 modell. Om medelvärdet av Y är noll, skulle den konstanta termen inte inkluderas. Om lutningskoefficienten 981 1 är positiv och mindre än 1 i storleksordningen (den måste vara mindre än 1 i storleksordningen om Y är stillastående), beskriver modellen medelåterkallande beteende där nästa period8217s värde bör förutses vara 981 1 gånger som långt ifrån medelvärdet som detta period8217s värde. Om 981 1 är negativ förutspår det medelåterkallande beteende med teckenväxling, dvs det förutspår också att Y kommer att ligga under den genomsnittliga nästa perioden om den är över medelvärdet denna period. I en andra-ordningsautoregressiv modell (ARIMA (2,0,0)) skulle det finnas en Y t-2 term till höger också, och så vidare. Beroende på tecken och storheter på koefficienterna kan en ARIMA (2,0,0) modell beskriva ett system vars medföljande reversering sker på ett sinusformigt oscillerande sätt, som en massans rörelse på en fjäder som utsätts för slumpmässiga stötar . ARIMA (0,1,0) slumpmässig promenad: Om serien Y inte är stillastående är den enklaste möjliga modellen för en slumpmässig promenadmodell, vilken kan betraktas som ett begränsande fall av en AR (1) - modell där den autogegrativa koefficienten är lika med 1, dvs en serie med oändligt långsam medelbackning. Förutsägningsekvationen för denna modell kan skrivas som: där den konstanta termen är den genomsnittliga period-till-period-förändringen (dvs. den långsiktiga driften) i Y. Denna modell kan monteras som en icke-avlyssningsregressionsmodell där första skillnaden i Y är den beroende variabeln. Eftersom den innehåller (endast) en nonseasonal skillnad och en konstant term, klassificeras den som en quotARIMA (0,1,0) modell med constant. quot. Den slumpmässiga walk-without-drift-modellen skulle vara en ARIMA (0,1, 0) modell utan konstant ARIMA (1,1,0) annorlunda första ordningens autoregressiva modell: Om fel i en slumpmässig promenadmodell är autokorrelerade kanske problemet kan lösas genom att lägga en lag av den beroende variabeln till prediktionsekvationen - - ie genom att regressera den första skillnaden av Y på sig själv fördröjd med en period. Detta skulle ge följande förutsägelsesekvation: som kan omordnas till Detta är en första-orders autregressiv modell med en ordning av icke-säsongsskillnader och en konstant term, dvs. en ARIMA (1,1,0) modell. ARIMA (0,1,1) utan konstant enkel exponentiell utjämning: En annan strategi för korrigering av autokorrelerade fel i en slumpmässig promenadmodell föreslås av den enkla exponentiella utjämningsmodellen. Minns att för några icke-stationära tidsserier (t ex de som uppvisar bullriga fluktuationer kring ett långsamt varierande medelvärde), utförs slumpmässiga promenadmodellen inte lika bra som ett glidande medelvärde av tidigare värden. Med andra ord, istället för att ta den senaste observationen som prognosen för nästa observation, är det bättre att använda ett genomsnitt av de sista observationerna för att filtrera bort bullret och mer exakt uppskatta det lokala medelvärdet. Den enkla exponentiella utjämningsmodellen använder ett exponentiellt vägt glidande medelvärde av tidigare värden för att uppnå denna effekt. Förutsägningsekvationen för den enkla exponentiella utjämningsmodellen kan skrivas i ett antal matematiskt ekvivalenta former. varav den ena är den så kallade 8220error correction8221-formen, där den föregående prognosen justeras i riktning mot det fel som det gjorde: Eftersom e t-1 Y t-1 - 374 t-1 per definition kan det skrivas om som : vilket är en ARIMA (0,1,1) - utan konstant prognosekvation med 952 1 1 - 945. Det innebär att du kan passa en enkel exponentiell utjämning genom att ange den som en ARIMA (0,1,1) modell utan konstant, och den uppskattade MA (1) - koefficienten motsvarar 1-minus-alfa i SES-formeln. Minns att i SES-modellen är den genomsnittliga åldern för data i prognoserna för 1-tiden framåt 1 945. Det betyder att de tenderar att ligga bakom trender eller vändpunkter med cirka 1 945 perioder. Det följer att den genomsnittliga åldern för data i de 1-prognos framåt av en ARIMA (0,1,1) utan konstant modell är 1 (1 - 952 1). Så, till exempel, om 952 1 0,8 är medelåldern 5. När 952 1 närmar sig 1 blir ARIMA (0,1,1) utan konstant modell ett mycket långsiktigt rörligt medelvärde och som 952 1 närmar sig 0 blir det en slumpmässig promenad utan driftmodell. What8217s det bästa sättet att korrigera för autokorrelation: Lägga till AR-termer eller lägga till MA-termer I de tidigare två modellerna som diskuterats ovan fixades problemet med autokorrelerade fel i en slumpmässig promenadmodell på två olika sätt: genom att lägga till ett fördröjt värde av de olika serierna till ekvationen eller lägga till ett fördröjt värde av prognosfelet. Vilket tillvägagångssätt är bäst En tumregel för denna situation, som kommer att diskuteras mer i detalj senare, är att positiv autokorrelation vanligtvis behandlas bäst genom att addera en AR-term till modellen och negativ autokorrelation behandlas vanligtvis bäst genom att lägga till en MA term. I affärs - och ekonomiska tidsserier uppstår negativ autokorrelation ofta som en artefakt av differentiering. (I allmänhet minskar differentieringen positiv autokorrelation och kan även orsaka en växling från positiv till negativ autokorrelation.) Således används ARIMA (0,1,1) - modellen, i vilken skillnad åtföljs av en MA-term, oftare än en ARIMA (1,1,0) modell. ARIMA (0,1,1) med konstant enkel exponentiell utjämning med tillväxt: Genom att implementera SES-modellen som en ARIMA-modell får du viss flexibilitet. För det första får den uppskattade MA (1) - koefficienten vara negativ. Detta motsvarar en utjämningsfaktor som är större än 1 i en SES-modell, vilket vanligtvis inte är tillåtet med SES-modellproceduren. För det andra har du möjlighet att inkludera en konstant term i ARIMA-modellen om du vill, för att uppskatta en genomsnittlig trendfri noll. ARIMA-modellen (0,1,1) med konstant har förutsägelsesekvationen: Prognoserna från den här modellen är kvalitativt likartade som i SES-modellen, förutom att banan för de långsiktiga prognoserna typiskt är en sluttande linje (vars lutning är lika med mu) snarare än en horisontell linje. ARIMA (0,2,1) eller (0,2,2) utan konstant linjär exponentiell utjämning: Linjära exponentiella utjämningsmodeller är ARIMA-modeller som använder två icke-säsongsskillnader i samband med MA-termer. Den andra skillnaden i en serie Y är inte bara skillnaden mellan Y och sig själv i två perioder, men det är snarare den första skillnaden i den första skillnaden, dvs. Y-förändringen i Y vid period t. Således är den andra skillnaden av Y vid period t lika med (Y t - Y t-1) - (Y t-1 - Y t-2) Y t - 2Y t-1 Y t-2. En andra skillnad av en diskret funktion är analog med ett andra derivat av en kontinuerlig funktion: det mäter kvotccelerationquot eller quotcurvaturequot i funktionen vid en given tidpunkt. ARIMA-modellen (0,2,2) utan konstant förutspår att den andra skillnaden i serien motsvarar en linjär funktion av de två sista prognosfel: som kan omordnas som: där 952 1 och 952 2 är MA (1) och MA (2) koefficienter. Detta är en generell linjär exponentiell utjämningsmodell. väsentligen samma som Holt8217s modell, och Brown8217s modell är ett speciellt fall. Den använder exponentiellt vägda glidande medelvärden för att uppskatta både en lokal nivå och en lokal trend i serien. De långsiktiga prognoserna från denna modell konvergerar till en rak linje vars lutning beror på den genomsnittliga trenden som observerats mot slutet av serien. ARIMA (1,1,2) utan konstant dämpad trend linjär exponentiell utjämning. Denna modell illustreras i de bifogade bilderna på ARIMA-modellerna. Den extrapolerar den lokala trenden i slutet av serien men plattar ut på längre prognoshorisonter för att presentera en konservatismskampanj, en övning som har empiriskt stöd. Se artikeln om varför Damped Trend worksquot av Gardner och McKenzie och artikeln "Rulequot Rulequot" av Armstrong et al. för detaljer. Det är i allmänhet lämpligt att hålla fast vid modeller där minst en av p och q inte är större än 1, dvs försök inte passa en modell som ARIMA (2,1,2), eftersom det här sannolikt kommer att leda till övermontering och quotcommon-factorquot-problem som diskuteras närmare i noterna om den matematiska strukturen för ARIMA-modeller. Implementering av kalkylark: ARIMA-modeller som de som beskrivs ovan är enkla att implementera på ett kalkylblad. Förutsägningsekvationen är helt enkelt en linjär ekvation som refererar till tidigare värden av ursprungliga tidsserier och tidigare värden av felen. Således kan du ställa in ett ARIMA-prognoskalkylblad genom att lagra data i kolumn A, prognosformeln i kolumn B och felen (data minus prognoser) i kolumn C. Förutsättningsformeln i en typisk cell i kolumn B skulle helt enkelt vara ett linjärt uttryck som hänvisar till värden i föregående rader av kolumnerna A och C multiplicerat med lämpliga AR - eller MA-koefficienter som lagras i cellerna någon annanstans på kalkylbladet. KODETS NATUR KODETS NATUR Inledning Jag är två med naturen. Woody Allen Här är vi: början. Tja, nästan början. Om det har varit ett tag sedan du har gjort någon programmering i Processing (eller någon matematik, för den delen) kommer den här introduktionen att komma tillbaka till beräkningstänkandet innan vi närmar oss något av det svåraste och komplexa materialet. I kapitel 1 skulle vi prata om begreppet vektor och hur det kommer att fungera som byggsten för att simulera rörelse i hela denna bok. Men innan vi tar det steget, kan vi tänka på vad det betyder för att helt enkelt flytta runt på skärmen. Låt oss börja med en av de mest kända och enklaste simuleringarna av motionthe random walk. I.1 Slumpmässiga promenader Tänk dig att du står i mitten av en balansbalk. Varje tio sekunder vänder du ett mynt. Huvud, ta ett steg framåt. Svansar, ta ett steg bakåt. Detta är en slumpmässig Walka-sökväg definierad som en serie av slumpmässiga steg. Genom att trycka på den här balansen och på golvet kan du utföra en slumpmässig promenad i två dimensioner genom att vända samma mynt två gånger med följande resultat: Ja, det här kan verka som en särskilt osofistikerad algoritm. Likväl kan slumpmässiga promenader användas för att modellera fenomen som uppträder i den verkliga världen, från rörelser av molekyler i en gas till beteendet hos en spelare som spenderar en dag på kasinot. När det gäller oss börjar vi den här boken som studerar en slumpmässig promenad med tre mål i åtanke. Vi behöver granska ett programkoncept som är centralt för denna bokobjektorienterade programmering. Den slumpmässiga walker kommer att fungera som en mall för hur vi ska använda objektorienterad design för att göra saker som rör sig runt ett bearbetningsfönster. Den slumpmässiga promenaden initierar de två frågorna som vi kommer att fråga om och om igen i hela denna bok: Hur definierar vi reglerna som reglerar beteendet hos våra objekt och sedan, hur implementerar vi dessa regler i bearbetning genom hela boken, behöver du regelbundet en grundläggande förståelse för slumpmässighet, sannolikhet och Perlin brus. Den slumpmässiga promenaden gör det möjligt för oss att visa några viktiga punkter som kommer att vara till nytta senare. I.2 Random Walker Class Lets granska lite objektorienterad programmering (OOP) först genom att bygga ett Walker-objekt. Detta kommer bara att bli en översiktlig granskning. Om du aldrig har arbetat med OOP tidigare kanske du vill ha något mer omfattande Id föreslår att du stannar här och granskar grunderna på Processing-webbplatsen innan du fortsätter. Ett objekt i Processing är en enhet som har både data och funktionalitet. Vi letar efter att designa ett Walker-objekt som både håller reda på dess data (var det finns på skärmen) och har förmåga att utföra vissa åtgärder (till exempel dra sig själv eller ta ett steg). En klass är mallen för att bygga verkliga förekomster av objekt. Tänk på en klass som cookie cutter föremålen är kakorna själva. Låt oss börja med att definiera Walker-klassen vad det innebär att vara ett Walker-objekt. Walker behöver bara två bitar dataa nummer för sin x-plats och en för sin y-plats. Objekt har data. Eftersom vi bara ritar bakgrunden en gång i setup (). snarare än att rensa det kontinuerligt varje gång genom att dra (). vi ser spåret av den slumpmässiga promenad i vårt bearbetningsfönster. Din webbläsare stöder inte duketttaggen. Det finns några förbättringar som vi kan göra till slumpmässig walker. För en, är denna Walker s steg val begränsad till fyra alternativ upp, ner, vänster och höger. Men en viss pixel i fönstret har åtta möjliga grannar, och en nionde möjlighet är att stanna på samma ställe. För att implementera ett Walker-objekt som kan gå till någon angränsande pixel (eller stanna) kan vi välja ett nummer mellan 0 och 8 (nio möjliga val). Ett effektivare sätt att skriva koden skulle emellertid vara att helt enkelt välja från tre möjliga steg längs x-axeln (-1, 0 eller 1) och tre möjliga steg längs y-axeln. Utbyten -1, 0 eller 1 Alla dessa variationer på den traditionella slumpmässiga gången har en sak gemensamt: sannolikheten att Walker kommer att ta ett steg i en given riktning är lika stor som sannolikheten för att Walker kommer att ta ett steg i vilken riktning som helst. Med andra ord, om det finns fyra möjliga steg, finns det en 1 till 4 (eller 25) chans att Walker kommer att ta ett visst steg. Med nio möjliga steg är det en 1 i 9 (eller 11,1) chans. Bekvämt så här fungerar funktionen random (). Processing random number generator (som fungerar bakom kulisserna) producerar det som kallas en enhetlig fördelning av siffror. Vi kan testa denna distribution med en bearbetningsskissa som räknas varje gång ett slumptal plockas och graver det som en rektangelhöjd. Din webbläsare stöder inte duketttaggen. Exempel I.2: Slumpmässig nummerfördelning En tabell för att hålla reda på hur ofta slumpmässiga nummer plockas. Välj ett slumpmässigt nummer och öka räkningen. Grafikera resultaten Ovanstående skärmdump visar resultatet av skissen som körs i några minuter. Lägg märke till hur varje stapel av diagrammet skiljer sig i höjd. Vårt provstorlek (dvs antalet slumptal som vi har valt) är ganska litet och det finns vissa tillfälliga skillnader, där vissa nummer plockas oftare. Över tiden, med en bra slumptalgenerator, skulle detta till och med ut. Pseudo-Random Numbers De slumpartstal som vi får från funktionen random () är inte riktigt slumpmässiga därför är de kända som pseudo-slumpmässiga. De är resultatet av en matematisk funktion som simulerar slumpmässighet. Denna funktion skulle ge ett mönster över tiden, men den tidsperioden är så lång att för oss är det lika bra som ren slump. Övning I.1 Skapa en slumpmässig vandrare som har en tendens att flytta ner och till höger. (Se lösningen på detta i nästa avsnitt.) I.3 Sannolikhet och icke-enhetliga fördelningar Kom ihåg när du började programmera i Processing Kanske ville du rita en hel del cirklar på skärmen. Så du sa till dig själv: Åh, jag vet. Jag ritar alla dessa cirklar på slumpmässiga platser, med slumpmässiga storlekar och slumpmässiga färger. I ett datorgrafiksystem är det ofta lättast att fröa ett system med slumpmässighet. I den här boken letade vi dock efter att bygga system modellerade på vad vi ser i naturen. Försvinnande till slumpmässighet är inte en särskilt tankeväckande lösning på ett designproblem, särskilt det slags problem som innebär att man skapar en organisk eller naturlig utseende. Med några få tricks kan vi ändra hur vi använder slumpmässigt () för att producera icke-enhetliga fördelningar av slumptal. Detta kommer att vara till nytta i hela boken när vi tittar på ett antal olika scenarier. När vi exempelvis undersöker genetiska algoritmer behöver vi väl en metod för att utföra det val som medlemmar av vår befolkning ska väljas för att skicka sina DNA till nästa generation. Kom ihåg begreppet överlevnad av de fittaste. Låt oss säga att vi har en population av apor som utvecklas. Inte varje apa kommer att ha lika stor chans att reproducera. För att simulera Darwinian evolution kan vi inte bara välja två slumpmässiga apor för att vara föräldrar. Vi behöver de mer passande som är mer benägna att bli utvalda. Vi måste definiera sannolikheten för de fittesta. Till exempel kan en särskilt snabb och stark apa ha en 90 chans att odla, medan en svagare bara har en 10 chans. Låt oss stanna här och ta en titt på sannolikheten för grundläggande principer. Undersök först enstaka sannolikhet, dvs sannolikheten för att en given händelse kommer att inträffa. Om du har ett system med ett visst antal möjliga resultat, är sannolikheten för förekomst av en given händelse lika med antalet resultat som kvalificerar som händelse dividerat med det totala antalet alla möjliga resultat. En myntkast är ett enkelt exempel, har bara två möjliga resultat, huvuden eller svansarna. Det finns bara ett sätt att vända huvud. Sannolikheten för att myntet kommer att vända upp huvuden är därför en uppdelad av två: 12 eller 50. Ta ett däck med femtiofem kort. Sannolikheten att rita en ess från det däcket är: antal ess antal kort 4 52 0,077 Sannolikheten att rita en diamant är: antal diamanter antal kort 13 52 0,25 25 Vi kan även beräkna sannolikheten för att flera händelser förekommer i följd . För att göra detta multiplicerar vi enkelt de enskilda sannolikheterna för varje händelse. Sannolikheten för att ett mynt vänder upp huvuden tre gånger i rad är: (12) (12) (12) 18 (eller 0,125) vilket innebär att ett mynt kommer att vända huvud tre gånger i rad en av åtta gånger (varje gång vara tre kastar). Övning I.2 Vad är sannolikheten för att rita två ess i rad från ett däck på femtiofem kort Det finns ett par sätt på vilka vi kan använda funktionen slumpmässig () med sannolikhet i kod. En teknik är att fylla en matris med ett urval av numberssome som upprepas och välj slumpmässiga nummer från den uppsättningen och generera händelser baserat på dessa val. 1 lagras i array två gånger, vilket gör det mer sannolikt att bli plockat. Övning I.3 Skapa en slumpmässig walker med dynamiska sannolikheter. Kan du till exempel ge det en 50 chans att flytta i riktning mot musen. I.4 En normal fördelning av slumpartier. Låt oss gå tillbaka till den populationen av simulerade behandlingsapor. Ditt program genererar tusen Monkey-objekt, vardera med ett höjdvärde mellan 200 och 300 (eftersom det här är en värld av apor som har höjder mellan 200 och 300 pixlar). Skildrar detta noggrant höjderna av verkliga varelser Tänk på en trångt trottoar i New York City. Välj någon person utanför gatan och det kan tyckas att deras höjd är slumpmässig. Ändå är det inte den slumpmässiga slumpen som slumpmässigt () producerar. Folkens höjder är inte jämnt fördelade. Det finns mycket fler människor i medelhöjd än det är mycket långa eller mycket korta. För att simulera naturen kanske vi vill ha större sannolikhet för att våra apor är av medelhöjd (250 pixlar), men ändå tillåter att de ibland är mycket korta eller väldigt långa. En fördelning av värden som kluster kring ett medelvärde (kallat medelvärdet) är känt som en normal fördelning. Det kallas också Gaussfördelningen (namngiven matematiker Carl Friedrich Gauss) eller, om du är fransk, Laplacianfördelningen (namngiven Pierre-Simon Laplace). Båda matematikerna arbetade samtidigt i början av nittonde århundradet för att definiera en sådan fördelning. När du graverar fördelningen får du något som ser ut som följande, informellt känd som en bellkurva: Kurvan genereras av en matematisk funktion som definierar sannolikheten för att ett givet värde uppträder som en funktion av medelvärdet (ofta skrivet som, det grekiska brevet mu) och standardavvikelsen (den grekiska bokstaven sigma). Medelvärdet är ganska lätt att förstå. När det gäller våra höjdvärden mellan 200 och 300 har du förmodligen en intuitiv känsla av medelvärdet (dvs genomsnittet) som 250. Men om jag skulle säga att standardavvikelsen är 3 eller 15 Vad betyder detta för siffror Diagrammen ovan bör ge oss en ledtråd. Diagrammet till vänster visar oss fördelningen med en mycket låg standardavvikelse, där majoriteten av värdena klarar sig nära genomsnittet. Grafen till höger visar oss en högre standardavvikelse, där värdena är jämnare fördelade ut från medelvärdet. Antalet fungerar enligt följande: Med tanke på en befolkning kommer 68 av medlemmarna av den befolkningen att ha värden inom intervallet av en standardavvikelse från medelvärdet, 98 inom två standardavvikelser och 99,7 inom tre standardavvikelser. Med en standardavvikelse på 5 pixlar kommer endast 0,3 av apahöjderna att vara mindre än 235 pixlar (tre standardavvikelser under medelvärdet 250) eller större än 265 pixlar (tre standardavvikelser över medelvärdet 250). Beräkna genomsnittlig och standardavvikelse Överväg en klass av tio studenter som får följande poäng (av 100) på ett test: 85, 82, 88, 86, 85, 93, 98, 40, 73, 83 Standardavvikelsen beräknas som kvadratroten av medelvärdet av kvadraterna av avvikelser runt medelvärdet. Med andra ord, ta skillnaden från medelvärdet för varje person och kvadrat det (varians). Beräkna medelvärdet av alla dessa värden och ta kvadratroten som standardavvikelsen. Standardavvikelsen är kvadratroten av den genomsnittliga variansen: 15.13 Lyckligtvis för oss, för att använda en normal fördelning av slumptal i en bearbetningsskissa, behöver vi inte göra någon av dessa beräkningar själva. I stället kan vi använda en klass som kallas slumpmässig. som vi får gratis som en del av standard Java-bibliotek som importeras till Processing (se JavaDocs för mer information). För att använda slumpmässig klass måste vi först deklarera en variabel av typen Slumpmässig och skapa slumpmässigt objekt i inställningen (). Vi använder variabelnamngeneratorn eftersom det vi har här kan betraktas som en slumptalsgenerator. Om vi vill producera ett slumpmässigt nummer med en normal (eller Gaussisk) fördelning varje gång vi går igenom tecknet (). det är lika lätt som att ringa funktionen nextGaussian (). Be om ett gaussiskt slumptal. (Observera nextGaussian () returnerar en dubbel och måste konverteras till float.) Heres saken. Vad ska vi göra med det här värdet Vad händer om vi vill använda det, till exempel, att tilldela x-positionen av en form som vi ritar på skärmen Funktionen nextGaussian () returnerar en normal fördelning av slumptal med följande parametrar: ett medelvärde av noll och en standardavvikelse för en. Låt oss säga att vi vill ha ett medelvärde på 320 (den centrala horisontella pixeln i ett fönster med bredd 640) och en standardavvikelse på 60 pixlar. Vi kan justera värdet till våra parametrar genom att multiplicera det med standardavvikelsen och lägga till medelvärdet. Din webbläsare stöder inte duketttaggen. Exempel I.4: Gaussisk fördelning Observera att nextGaussian () returnerar en dubbel. Multiplicera med standardavvikelsen och lägg till medelvärdet. Genom att dra ellipserna ovanpå varandra med viss genomskinlighet kan vi faktiskt se fördelningen. Den ljusaste platsen ligger nära mitten, där de flesta värdena kluster, men alla så ofta cirklar dras längre till höger eller vänster om mitten. Övning I.4 Betrakta en simulering av färgskikt som ritats som en samling färgade prickar. De flesta färgklyftorna ligger centralt, men vissa prickar spruter ut mot kanterna. Kan du använda en normal fördelning av slumpmässiga tal för att generera punkterna? Kan du också använda en normal fördelning av slumptal för att skapa en färgpalett. Utövning I.5 En Gaussisk slumpmässig promenad definieras som en i vilken stegstorleken (hur långt objektet rör sig i en given riktning) genereras med en normal fördelning. Genomför denna variation av vår slumpmässiga promenad. I.5 En anpassad distribution av slumpmässiga nummer Det kommer en tid i ditt liv när du inte vill ha en enhetlig fördelning av slumpmässiga värden, eller en gaussisk. Låt oss föreställa oss ett ögonblick att du är en slumpmässig walker på jakt efter mat. Att flytta slumpmässigt runt ett utrymme verkar som en rimlig strategi för att hitta något att äta. När allt kommer omkring vet du inte var maten är, så du kan också söka slumpmässigt tills du hittar den. Problemet, som du kanske har märkt, är att slumpmässiga vandrare återvänder till tidigare besökta platser många gånger (det här kallas översampling). En strategi för att undvika ett sådant problem är att, så ofta, ta ett mycket stort steg. Detta gör att walkeren kan slumpmässigt runt en viss plats medan du periodiskt hoppar väldigt långt bort för att minska mängden översampling. Denna variation på slumpmässig promenad (känd som ett Lvy-flyg) kräver en anpassad uppsättning sannolikheter. Även om inte ett exakt genomförande av ett Lvy-flyg skulle vi kunna ange sannolikhetsfördelningen enligt följande: ju längre steg, ju mindre sannolikt det är att plockas desto kortare är steget desto mer troligt. Tidigare i denna prolog såg vi att vi kunde generera anpassade sannolikhetsfördelningar genom att fylla en matris med värden (vissa duplicerade så att de skulle plockas oftare) eller genom att testa resultatet av slumpmässigt (). Vi kunde genomföra ett Lvy-flyg genom att säga att det finns en chans att walkeren tar ett stort steg. En chans att ta ett stort steg Men det minskar sannolikheten för ett fast antal alternativ. Vad händer om vi ville göra en mer generell ruleethhe högre ett tal, desto sannolikt är det att plockas 3.145 skulle vara mer sannolikt att plockas än 3,144, även om den sannolikheten bara är en liten bit större. Med andra ord, om x är slumptalet kan vi kartlägga sannolikheten på y-axeln med y x. Om vi kan ta reda på hur man genererar en fördelning av slumptal enligt ovanstående diagram, kommer vi att kunna tillämpa samma metod på varje kurva som vi har en formel för. En lösning är att välja två slumptal istället för ett. Det första slumptalet är just det, ett slumptal. Den andra är dock det som kallar ett kvalificerat slumpmässigt värde. Det kommer att berätta för oss om du ska använda den första eller kasta den bort och välja en annan. Nummer som har en enklare tid kvalificeras kommer att plockas oftare, och siffror som sällan kvalificeras kommer att plockas sällan. Här är stegen (för nu kan vi bara överväga slumpmässiga värden mellan 0 och 1): Välj ett slumptal: R1 Beräkna en sannolikhet P att R1 ska kvalificera. Låt oss försöka: P R1. Välj ett annat slumptal: R2 Om R2 är mindre än P, har vi hittat vårt nummerR1 Om R2 inte är mindre än P, gå tillbaka till steg 1 och börja om. Här säger vi att sannolikheten för att ett slumpmässigt värde kommer att kvalificera är lika med slumpmässigt antal i sig. Låt oss säga att vi väljer 0,1 för R1. Det betyder att R1 får 10 chans att kvalificera sig. Om vi väljer 0.83 för R1 så kommer det att ha 83 chans att kvalificera. Ju högre antal, desto större sannolikhet kommer vi att faktiskt använda den. Här är en funktion (namngiven Monte Carlo-metoden, som namngavs för Monte Carlo-kasinot) som genomför ovanstående algoritm och returnerar ett slumpmässigt värde mellan 0 och 1. Vi gör detta för alltid tills vi hittar ett kvalificerat slumpmässigt värde. Övning I.6 Använd en anpassad sannolikhetsfördelning för att variera storleken på ett steg som tas av den slumpmässiga walker. Stegstorleken kan bestämmas genom att påverka valet av värden som valts. Kan du kartlägga sannolikheten exponentiallyi. e. gör sannolikheten för att ett värde plockas lika med värdet kvadrerat En jämn fördelning av stegstorlekar. Ändra det här (Senare, se hur man gör det mer effektivt med vektorer.) I.6 Perlin Noise (En smidigare tillvägagångssätt) En bra slumptalsgenerator producerar nummer som inte har något samband och visar inget märkbart mönster. Som vi börjar se, kan en liten slump vara en bra sak när man programmerar organiskt, livligt beteende. Slumpmässighet som enstaka styrprincip är dock inte nödvändigtvis naturlig. En algoritm som kallas Perlins brus, namngiven för sin uppfinnare Ken Perlin, tar hänsyn till detta koncept. Perlin utvecklade ljudfunktionen när man arbetade med den ursprungliga Tron-filmen i början av 1980-talet. Den var utformad för att skapa processuella texturer för datorgenererade effekter. 1997 vann Perlin ett Oscar i teknisk prestation för detta arbete. Perlin brus kan användas för att generera olika effekter med naturliga egenskaper, såsom moln, landskap och mönstrade texturer som marmor. Perlin brus har ett mer organiskt utseende eftersom det producerar en naturligt beställd (jämn) sekvens av pseudoslumpmässiga tal. Grafen till vänster nedan visar Perlin brus över tiden, med x-axeln som representerar tiden noterar kurvens jämnhet. Grafen till höger visar rena slumpmässiga siffror över tiden. (Koden för generering av dessa grafer finns tillgänglig i de medföljande bokdownloaderna.) Figur I.5: Buller Figur I.6: Slumpmässig bearbetning har en inbyggd implementering av Perlin-brusalgoritmen: funktionsbullret (). Funktionen brus () tar en, två eller tre argument, eftersom bruset beräknas i en, två eller tre dimensioner. Låt oss börja med att titta på ettdimensionellt buller. Buller Detaljen Berörande buller hänvisar oss till att buller beräknas över flera oktaver. Att ringa funktionen noiseDetail () kommer att ändra både oktavtalet och deras betydelse i förhållande till varandra. Detta förändrar i sin tur hur brusfunktionen fungerar. En online-föreläsning av Ken Perlin låter dig lära dig mer om hur brus fungerar från Perlin själv. Överväg att rita en cirkel i vårt behandlingsfönster på en slumpmässig x-plats. En slumpmässig x-plats I stället för en slumpmässig x-plats vill vi ha en Perlin brus x-plats som är mjukare. Du kanske tror att allt du behöver göra är att ersätta slumpmässigt () med brus (). d. v.s. En brus x-plats Medan begreppsmässigt är detta precis vad vi vill docalculate ett x-värde som varierar mellan 0 och bredden enligt Perlin noisethis är inte den korrekta implementeringen. Medan argumenten till funktionen slumpmässig () anger ett värdeområde mellan ett minimum och ett maximum, fungerar brus () inte så här. Istället är utmatningsintervallet fixit och returnerar alltid ett värde mellan 0 och 1. Tja, se ett ögonblick att vi lätt kan komma runt detta med Processings map () - funktionen, men först måste vi undersöka vad exakt bruset () förväntar oss att passera som ett argument. Vi kan tänka på ettdimensionellt Perlin-brus som en linjär sekvens av värden över tiden. Till exempel: Hur snabbt vi ökar t påverkar också brusets jämnhet. Om vi gör stora hopp i tid, hoppar vi framåt och värdena blir mer slumpmässiga. Prova att köra koden flera gånger, öka t med 0,01, 0,02, 0,05, 0,1, 0,0001, och du kommer se olika resultat. Mapping Noise Nu var redo att svara på frågan om vad man ska göra med ljudvärdet. När vi har värdet med ett intervall mellan 0 och 1, är det upp till oss att kartlägga det intervallet till vad vi vill ha. Det enklaste sättet att göra detta är med Processing map () - funktionen. Kartan () - funktionen tar fem argument. Först är värdet vi vill kartlägga, i det här fallet n. Då måste vi ge det nuvarande värdena (minsta och maximala), följt av vårt önskade intervall. I det här fallet vet vi att bruset har ett intervall mellan 0 och 1, men vi vill rita vår cirkel med ett intervall mellan 0 och windows bredden. Observera hur exemplet ovan kräver ytterligare ett par variabler: tx och ty. Detta beror på att vi behöver hålla reda på två tidsvariabler, en för x-platsen för Walker-objektet och en för y-platsen. Men det finns något lite konstigt om dessa variabler. Varför startar tx vid 0 och tyder på 10 000 Medan dessa siffror är godtyckliga val har vi väldigt specifikt initierat våra två-tidsvariabler med olika värden. Detta beror på att brusfunktionen är deterministisk: den ger dig samma resultat för en viss tid t varje gång. Om vi frågade om ljudvärdet samtidigt t för både x och y. då skulle x och y alltid vara lika, vilket innebär att Walker-objektet bara skulle röra sig längs en diagonal. I stället använder vi helt enkelt två olika delar av brusutrymmet, från 0 för x och 10 000 för y så att x och y kan verka som att verka oberoende av varandra. I själva verket finns det inget konkret begrepp av tid på spel här. Det är en användbar metafor för att hjälpa oss att förstå hur brusfunktionen fungerar, men egentligen vad vi har är utrymme, snarare än tid. Diagrammet ovan visar en linjär sekvens av ljudvärden i ett ettdimensionellt utrymme, och vi kan fråga om ett värde vid en specifik x-plats närhelst vi vill. I exempel ser du ofta en variabel som heter xoff för att indikera x-offset längs brusgrafen, i stället för t för tiden (som noterat i diagrammet). Övning I.7 I ovannämnda slumpmässiga rullare kartläggs resultatet av brusfunktionen direkt till Walker s-platsen. Skapa en slumpmässig vandrare där du istället kartlägger resultatet av brusen () - funktionen till en Walker s stegstorlek. Två-dimensionell buller Den här ideen om ljudvärden som lever i ett ettdimensionellt utrymme är viktigt eftersom det leder oss in i en diskussion om tvådimensionellt utrymme. Låt oss tänka på det här ett ögonblick. Med ettdimensionellt brus har vi en sekvens av värden där ett givet värde liknar sin granne. Eftersom värdet ligger i en dimension, har det bara två grannar: ett värde som kommer före det (till vänster på grafen) och en som kommer efter det (till höger). Figur I.10: 1D Buller Figur I.11: 2D Buller Tvådimensionellt ljud fungerar exakt på samma sätt begreppsmässigt. Skillnaden är givetvis att vi inte ser på värden längs en linjär väg men värden som sitter på ett rutnät. Tänk på en bit av grafpapper med siffror skrivna in i varje cell. Ett givet värde kommer att likna alla dess grannar: ovanför, nedanför, till höger, till vänster och längs alla diagonaler. Om du skulle visualisera det här diagrammet med varje värde som är kartlagt till ljusstyrkan på en färg, skulle du få något som ser ut som moln. Vit sitter bredvid ljusgrå, som sitter bredvid grått, som sitter bredvid mörkgrå, som sitter bredvid svart, som sitter bredvid mörkgrå etc. Därför har ljudet ursprungligen uppfunnits. Du anpassar parametrarna lite eller spelar med färg för att göra den resulterande bilden mer lik marmor eller trä eller någon annan organisk textur. Låt oss ta en snabb titt på hur du implementerar tvådimensionellt brus i Processing. Om du vill färga varje pixel av ett fönster slumpmässigt skulle du behöva en kapslad slinga, en som nått varje pixel och valde en slumpmässig ljusstyrka. En slumpmässig ljusstyrka För att färga varje pixel i enlighet med funktionen brus (), gör du exakt samma sak, bara i stället för att ringa slumpmässigt () väl anropsbrus (). En ljusstyrka från Perlin Detta är en bra start med konceptuellt ger dig ett ljudvärde för varje (x, y) plats i vårt tvådimensionella utrymme. Problemet är att det inte kommer att få den muliga kvaliteten vi vill ha. Hoppning från pixel 200 till pixel 201 är för stor av ett hopp genom brus. Kom ihåg att när vi arbetade med ettdimensionellt buller ökade vi vår tidsvariabel med 0,01 per ram, inte med 1 En ganska bra lösning på det här problemet är att bara använda olika variabler för brusargumenten. Till exempel kan vi öka en variabel som heter xoff varje gång vi rör sig horisontellt, och en yoff-variabel varje gång vi rör sig vertikalt genom de kapslingar. Exempel I.6: 2D Perlin brus Start xoff vid 0. För varje xoff, starta yoff vid 0.
Comments
Post a Comment