Saturday 28 October 2017

Flytte Gjennomsnittet Random Walk


Flytte gjennomsnitts - og eksponensielle utjevningsmodeller Som et første skritt i å bevege seg ut over gjennomsnittlige modeller, kan tilfeldige gangmodeller og lineære trendmodeller, ikke-sone-mønstre og trender ekstrapoleres ved hjelp av en flytende gjennomsnitt eller utglattningsmodell. Den grunnleggende forutsetningen bak gjennomsnittlige og utjevningsmodeller er at tidsserien er lokalt stasjonær med et sakte varierende middel. Derfor tar vi et flytende (lokalt) gjennomsnitt for å anslå dagens verdi av gjennomsnittet, og deretter bruke det som prognosen for nær fremtid. Dette kan betraktes som et kompromiss mellom den gjennomsnittlige modellen og den tilfeldige-walk-uten-drift-modellen. Den samme strategien kan brukes til å estimere og ekstrapolere en lokal trend. Et glidende gjennomsnitt kalles ofte en quotsmoothedquot-versjon av den opprinnelige serien, fordi kortsiktig gjennomsnittsverdi medfører utjevning av støtene i den opprinnelige serien. Ved å justere graden av utjevning (bredden på det bevegelige gjennomsnittet), kan vi håpe å finne en slags optimal balanse mellom ytelsen til de gjennomsnittlige og tilfeldige turmodellene. Den enkleste typen gjennomsnittlig modell er. Enkel (likevektet) Flytende gjennomsnitt: Værvarselet for verdien av Y på tidspunktet t1 som er laget på tidspunktet t, er det enkle gjennomsnittet av de nyeste m-observasjonene: (Her og andre steder vil jeg bruke symbolet 8220Y-hat8221 til å stå for en prognose av tidsserien Y som ble gjort så tidlig som mulig ved en gitt modell.) Dette gjennomsnittet er sentrert ved period-t (m1) 2, noe som innebærer at estimatet av det lokale middel vil ha en tendens til å ligge bak den sanne verdien av det lokale gjennomsnittet med ca. (m1) 2 perioder. Således sier vi at gjennomsnittsalderen for dataene i det enkle glidende gjennomsnittet er (m1) 2 i forhold til perioden for prognosen beregnes. Dette er hvor lang tid det vil være å prognostisere prognoser bak vendepunkter i dataene . For eksempel, hvis du er i gjennomsnitt de siste 5 verdiene, vil prognosene være omtrent 3 perioder sent i å svare på vendepunkter. Merk at hvis m1, den enkle glidende gjennomsnittlige (SMA) modellen er lik den tilfeldige turmodellen (uten vekst). Hvis m er veldig stor (sammenlignbar med lengden på estimeringsperioden), svarer SMA-modellen til den gjennomsnittlige modellen. Som med hvilken som helst parameter i en prognosemodell, er det vanlig å justere verdien av k for å oppnå den beste kvote kvoten til dataene, dvs. de minste prognosefeilene i gjennomsnitt. Her er et eksempel på en serie som ser ut til å vise tilfeldige svingninger rundt et sakte varierende middel. Først kan vi prøve å passe den med en tilfeldig walk-modell, noe som tilsvarer et enkelt bevegelige gjennomsnitt på 1 sikt: Den tilfeldige turmodellen reagerer veldig raskt på endringer i serien, men i så måte velger den mye av kvotenivået i data (tilfeldige svingninger) samt quotsignalquot (det lokale gjennomsnittet). Hvis vi i stedet prøver et enkelt glidende gjennomsnitt på 5 termer, får vi et smidigere sett med prognoser: Det 5-tiden enkle glidende gjennomsnittet gir betydelig mindre feil enn den tilfeldige turmodellen i dette tilfellet. Gjennomsnittsalderen for dataene i denne prognosen er 3 ((51) 2), slik at den har en tendens til å ligge bak vendepunktene med tre perioder. (For eksempel ser det ut til at en nedtur har skjedd i perioden 21, men prognosene vender seg ikke til flere perioder senere.) Legg merke til at de langsiktige prognosene fra SMA-modellen er en horisontal rettlinje, akkurat som i tilfeldig gang modell. Således antar SMA-modellen at det ikke er noen trend i dataene. Mens prognosene fra den tilfeldige turmodellen ganske enkelt er lik den siste observerte verdien, er prognosene fra SMA-modellen lik et veid gjennomsnitt av de siste verdiene. De konfidensgrenser som beregnes av Statgraphics for de langsiktige prognosene for det enkle glidende gjennomsnittet, blir ikke større da prognoseperioden øker. Dette er åpenbart ikke riktig. Dessverre er det ingen underliggende statistisk teori som forteller oss hvordan konfidensintervallene skal utvide seg for denne modellen. Det er imidlertid ikke så vanskelig å beregne empiriske estimater av konfidensgrensene for lengre horisontprognoser. For eksempel kan du sette opp et regneark der SMA-modellen skulle brukes til å prognose 2 trinn foran, 3 trinn fremover, etc. i den historiske dataprøven. Du kan deretter beregne utvalgsstandardavvikene til feilene i hver prognosehorisont, og deretter konstruere konfidensintervaller for langsiktige prognoser ved å legge til og trekke ut multipler av riktig standardavvik. Hvis vi prøver et 9-sikt enkelt glidende gjennomsnitt, får vi enda jevnere prognoser og mer av en bremseeffekt: Gjennomsnittsalderen er nå 5 perioder (91) 2). Hvis vi tar et 19-årig glidende gjennomsnitt, øker gjennomsnittsalderen til 10: Legg merke til at prognosene nå faller bakom vendepunkter med ca 10 perioder. Hvilken mengde utjevning er best for denne serien Her er et bord som sammenligner feilstatistikken sin, også et gjennomsnitt på tre sikt: Modell C, 5-års glidende gjennomsnitt, gir den laveste verdien av RMSE med en liten margin over 3 term og 9-sikt gjennomsnitt, og deres andre statistikker er nesten identiske. Så, blant modeller med svært like feilstatistikk, kan vi velge om vi foretrekker litt mer respons eller litt mer glatt i prognosene. (Tilbake til toppen av siden.) Browns Simple Exponential Smoothing (eksponentielt vektet glidende gjennomsnitt) Den enkle glidende gjennomsnittsmodellen beskrevet ovenfor har den uønskede egenskapen som den behandler de siste k-observasjonene, like og fullstendig ignorerer alle foregående observasjoner. Intuitivt bør tidligere data diskonteres på en mer gradvis måte - for eksempel bør den siste observasjonen få litt mer vekt enn 2. siste, og den 2. siste skal få litt mer vekt enn den 3. siste, og så videre. Den enkle eksponensielle utjevning (SES) - modellen oppnår dette. La 945 betegne en quotsmoothing constantquot (et tall mellom 0 og 1). En måte å skrive modellen på er å definere en serie L som representerer dagens nivå (dvs. lokal middelverdi) av serien som estimert fra data til nå. Verdien av L ved tid t beregnes rekursivt fra sin egen tidligere verdi slik: Således er den nåværende glattede verdien en interpolering mellom den forrige glattede verdien og den nåværende observasjonen, hvor 945 styrer nærheten til den interpolerte verdien til den nyeste observasjon. Forventningen for neste periode er bare den nåværende glatte verdien: Tilsvarende kan vi uttrykke neste prognose direkte i forhold til tidligere prognoser og tidligere observasjoner, i en hvilken som helst av de tilsvarende versjoner. I den første versjonen er prognosen en interpolasjon mellom forrige prognose og tidligere observasjon: I den andre versjonen blir neste prognose oppnådd ved å justere forrige prognose i retning av den forrige feilen med en brøkdel av 945. Er feilen gjort ved tid t. I den tredje versjonen er prognosen et eksponentielt vektet (dvs. nedsatt) glidende gjennomsnitt med rabattfaktor 1-945: Interpolasjonsversjonen av prognoseformelen er den enkleste å bruke hvis du implementerer modellen på et regneark: det passer inn i en enkeltcelle og inneholder cellehenvisninger som peker på forrige prognose, forrige observasjon og cellen der verdien av 945 er lagret. Merk at hvis 945 1 er SES-modellen tilsvarer en tilfeldig turmodell (uten vekst). Hvis 945 0 er SES-modellen ekvivalent med den gjennomsnittlige modellen, forutsatt at den første glattede verdien er satt lik gjennomsnittet. (Gå tilbake til toppen av siden.) Gjennomsnittsalderen for dataene i prognosen for enkel eksponensiell utjevning er 1 945 i forhold til perioden for prognosen beregnes. (Dette skal ikke være åpenbart, men det kan lett bli vist ved å evaluere en uendelig serie.) Derfor har den enkle, glidende gjennomsnittlige prognosen en tendens til å ligge bak vendepunkter med rundt 1 945 perioder. For eksempel, når 945 0,5 lag er 2 perioder når 945 0.2 lag er 5 perioder når 945 0,1 lag er 10 perioder, og så videre. For en gitt gjennomsnittlig alder (det vil si mengden lag), er prognosen for enkel eksponensiell utjevning (SES) noe bedre enn SMA-prognosen (Simple Moving Average) fordi den legger relativt mer vekt på den siste observasjonen - dvs. det er litt mer quotresponsivequot for endringer som oppstod i den siste tiden. For eksempel har en SMA-modell med 9 vilkår og en SES-modell med 945 0,2 begge en gjennomsnittlig alder på 5 for dataene i prognosene, men SES-modellen legger mer vekt på de siste 3 verdiene enn SMA-modellen og ved Samtidig er det ikke 8220forget8221 om verdier som er mer enn 9 år gamle, som vist i dette diagrammet. En annen viktig fordel ved SES-modellen over SMA-modellen er at SES-modellen bruker en utjevningsparameter som er kontinuerlig variabel, slik at den lett kan optimaliseres ved å bruke en quotsolverquot-algoritme for å minimere den gjennomsnittlige kvadratfeilen. Den optimale verdien av 945 i SES-modellen for denne serien viser seg å være 0,2961, som vist her: Gjennomsnittsalderen for dataene i denne prognosen er 10,2961 3,4 perioder, noe som ligner på et 6-sikt enkelt glidende gjennomsnitt. De langsiktige prognosene fra SES-modellen er en horisontal rett linje. som i SMA-modellen og den tilfeldige turmodellen uten vekst. Vær imidlertid oppmerksom på at konfidensintervallene som beregnes av Statgraphics, divergerer nå på en rimelig måte, og at de er vesentlig smalere enn konfidensintervallene for den tilfeldige turmodellen. SES-modellen antar at serien er noe mer forutsigbar enn den tilfeldige turmodellen. En SES-modell er faktisk et spesielt tilfelle av en ARIMA-modell. slik at den statistiske teorien om ARIMA-modeller gir et solid grunnlag for beregning av konfidensintervall for SES-modellen. Spesielt er en SES-modell en ARIMA-modell med en ikke-sesongforskjell, en MA (1) og ikke en konstant periode. ellers kjent som en quotARIMA (0,1,1) modell uten constantquot. MA (1) - koeffisienten i ARIMA-modellen tilsvarer mengden 1-945 i SES-modellen. For eksempel, hvis du passer på en ARIMA (0,1,1) modell uten konstant til serien analysert her, viser den estimerte MA (1) - koeffisienten seg å være 0,7029, som er nesten nøyaktig en minus 0,2961. Det er mulig å legge til antagelsen om en konstant lineær trend uten null som en SES-modell. For å gjøre dette oppgir du bare en ARIMA-modell med en ikke-sesongforskjell og en MA (1) - sikt med en konstant, dvs. en ARIMA-modell (0,1,1) med konstant. De langsiktige prognosene vil da ha en trend som er lik den gjennomsnittlige trenden observert over hele estimeringsperioden. Du kan ikke gjøre dette i forbindelse med sesongjustering, fordi sesongjusteringsalternativene er deaktivert når modelltypen er satt til ARIMA. Du kan imidlertid legge til en konstant langsiktig eksponensiell trend for en enkel eksponensiell utjevningsmodell (med eller uten sesongjustering) ved å bruke inflasjonsjusteringsalternativet i prognoseprosedyren. Den aktuelle kvoteringskvoten (prosentvekst) per periode kan estimeres som hellingskoeffisienten i en lineær trendmodell som er montert på dataene i forbindelse med en naturlig logaritme transformasjon, eller det kan være basert på annen uavhengig informasjon om langsiktige vekstutsikter . (Tilbake til toppen av siden.) Browns Lineær (dvs. dobbel) Eksponensiell utjevning SMA-modellene og SES-modellene antar at det ikke er noen trend av noe slag i dataene (som vanligvis er OK eller i det minste ikke altfor dårlig for 1- trinnvise prognoser når dataene er relativt støyende), og de kan modifiseres for å inkorporere en konstant lineær trend som vist ovenfor. Hva med kortsiktige trender Hvis en serie viser en varierende vekstnivå eller et syklisk mønster som skiller seg tydelig ut mot støyen, og hvis det er behov for å prognose mer enn 1 periode framover, kan estimering av en lokal trend også være et problem. Den enkle eksponensielle utjevningsmodellen kan generaliseres for å oppnå en lineær eksponensiell utjevning (LES) modell som beregner lokale estimater av både nivå og trend. Den enkleste tidsvarierende trendmodellen er Browns lineær eksponensiell utjevningsmodell, som bruker to forskjellige glatte serier som er sentrert på forskjellige tidspunkter. Forutsigelsesformelen er basert på en ekstrapolering av en linje gjennom de to sentrene. (En mer sofistikert versjon av denne modellen, Holt8217s, blir diskutert nedenfor.) Den algebraiske form av Brown8217s lineær eksponensiell utjevningsmodell, som den enkle eksponensielle utjevningsmodellen, kan uttrykkes i en rekke forskjellige, men liknende former. Denne standardmodellen er vanligvis uttrykt som følger: La S betegne den enkeltglattede serien som er oppnådd ved å anvende enkel eksponensiell utjevning til serie Y. Dvs. verdien av S ved period t er gitt av: (Husk at, under enkle eksponensiell utjevning, dette ville være prognosen for Y ved periode t1.) Lad deretter Squot betegne den dobbeltslettede serien oppnådd ved å anvende enkel eksponensiell utjevning (ved hjelp av samme 945) til serie S: Endelig prognosen for Y tk. for noe kgt1, er gitt av: Dette gir e 1 0 (det vil si lure litt, og la den første prognosen være den samme første observasjonen) og e 2 Y 2 8211 Y 1. hvoretter prognosene genereres ved å bruke ligningen ovenfor. Dette gir de samme monterte verdiene som formelen basert på S og S dersom sistnevnte ble startet med S 1 S 1 Y 1. Denne versjonen av modellen brukes på neste side som illustrerer en kombinasjon av eksponensiell utjevning med sesongjustering. Holt8217s Lineær eksponensiell utjevning Brown8217s LES-modell beregner lokale estimater av nivå og trend ved å utjevne de siste dataene, men det faktum at det gjør det med en enkelt utjevningsparameter, stiller en begrensning på datamønstrene som den kan passe: nivået og trenden er ikke tillatt å variere til uavhengige priser. Holt8217s LES-modellen løser dette problemet ved å inkludere to utjevningskonstanter, en for nivået og en for trenden. Til enhver tid t, som i Brown8217s modell, er det et estimat L t på lokalt nivå og et estimat T t av den lokale trenden. Her beregnes de rekursivt fra verdien av Y observert ved tid t og de forrige estimatene av nivået og trenden ved to likninger som gjelder eksponensiell utjevning til dem separat. Hvis estimert nivå og trend ved tid t-1 er L t82091 og T t-1. henholdsvis, da var prognosen for Y tshy som ville vært gjort på tidspunktet t-1, lik L t-1 T t-1. Når den faktiske verdien er observert, beregnes det oppdaterte estimatet av nivået rekursivt ved å interpolere mellom Y tshy og dens prognose, L t-1 T t 1, med vekt på 945 og 1- 945. Forandringen i estimert nivå, nemlig L t 8209 L t82091. kan tolkes som en støyende måling av trenden på tidspunktet t. Det oppdaterte estimatet av trenden beregnes deretter rekursivt ved å interpolere mellom L t 8209 L t82091 og det forrige estimatet av trenden, T t-1. ved bruk av vekter av 946 og 1-946: Fortolkningen av trend-utjevningskonstanten 946 er analog med den for nivåutjevningskonstanten 945. Modeller med små verdier på 946 antar at trenden bare endrer seg veldig sakte over tid, mens modeller med større 946 antar at det endrer seg raskere. En modell med en stor 946 mener at den fjerne fremtiden er veldig usikker, fordi feil i trendberegning blir ganske viktig når det regnes med mer enn en periode framover. (Tilbake til toppen av siden.) Utjevningskonstantene 945 og 946 kan estimeres på vanlig måte ved å minimere gjennomsnittlig kvadratfeil i de 1-trinns prognosene. Når dette gjøres i Statgraphics, viser estimatene seg å være 945 0.3048 og 946 0.008. Den svært små verdien av 946 betyr at modellen tar svært liten endring i trenden fra en periode til den neste, så i utgangspunktet prøver denne modellen å estimere en langsiktig trend. I analogi med begrepet gjennomsnittlig alder av dataene som brukes til å estimere det lokale nivået i serien, er gjennomsnittsalderen for dataene som brukes til estimering av lokal trenden, proporsjonal med 1 946, men ikke akkurat lik den . I dette tilfellet viser det seg å være 10 006 125. Dette er et svært nøyaktig tall, forutsatt at nøyaktigheten av estimatet av 946 er virkelig 3 desimaler, men det er av samme generelle størrelsesorden som prøvestørrelsen på 100, så denne modellen er i gjennomsnitt over ganske mye historie i estimering av trenden. Prognoseplanet nedenfor viser at LES-modellen anslår en litt større lokal trend i slutten av serien enn den konstante trenden som er estimert i SEStrend-modellen. Også den estimerte verdien på 945 er nesten identisk med den som oppnås ved å montere SES-modellen med eller uten trend, så dette er nesten den samme modellen. Nå ser disse ut som rimelige prognoser for en modell som skal estimere en lokal trend. Hvis du 8220eyeball8221 ser dette, ser det ut som om den lokale trenden har vendt nedover på slutten av serien. Hva har skjedd Parametrene til denne modellen har blitt estimert ved å minimere den kvadriske feilen på 1-trinns prognoser, ikke langsiktige prognoser, i hvilket tilfelle trenden gjør ikke en stor forskjell. Hvis alt du ser på er 1-trinns feil, ser du ikke det større bildet av trender over (si) 10 eller 20 perioder. For å få denne modellen mer i tråd med øyehals ekstrapoleringen av dataene, kan vi manuelt justere trendutjevningskonstanten slik at den bruker en kortere basislinje for trendestimering. Hvis vi for eksempel velger å sette 946 0,1, er gjennomsnittsalderen for dataene som brukes til å estimere den lokale trenden 10 perioder, noe som betyr at vi gjennomsnittsverdi trenden over de siste 20 perioder eller så. Here8217s hva prognosen tomten ser ut hvis vi setter 946 0,1 mens du holder 945 0.3. Dette ser intuitivt fornuftig ut på denne serien, selv om det er sannsynlig farlig å ekstrapolere denne trenden mer enn 10 perioder i fremtiden. Hva med feilstatistikken Her er en modell sammenligning for de to modellene vist ovenfor, samt tre SES-modeller. Den optimale verdien av 945. For SES-modellen er ca. 0,3, men tilsvarende resultater (med henholdsvis litt mer responstid) oppnås med 0,5 og 0,2. (A) Holts lineær eksp. utjevning med alfa 0,3048 og beta 0,008 (B) Holts lineær eksp. utjevning med alfa 0,3 og beta 0,1 (C) Enkel eksponensiell utjevning med alfa 0,5 (D) Enkel eksponensiell utjevning med alfa 0,3 (E) Enkel eksponensiell utjevning med alfa 0,2 Deres statistikk er nesten identisk, slik at vi virkelig kan velge på grunnlag av 1-trinns prognosefeil i dataprøven. Vi må falle tilbake på andre hensyn. Hvis vi sterkt tror at det er fornuftig å basere dagens trendoverslag på hva som har skjedd i løpet av de siste 20 perioder eller så, kan vi gjøre en sak for LES-modellen med 945 0.3 og 946 0.1. Hvis vi ønsker å være agnostiker om det er en lokal trend, kan en av SES-modellene være lettere å forklare og vil også gi mer mid-of-the-road prognoser for de neste 5 eller 10 periodene. (Tilbake til toppen av siden.) Hvilken type trend-ekstrapolering er best: Horisontal eller lineær Empirisk bevis tyder på at hvis dataene allerede er justert (om nødvendig) for inflasjon, kan det være uhensiktsmessig å ekstrapolere kortsiktig lineær trender veldig langt inn i fremtiden. Trender som tyder på i dag, kan løsne seg i fremtiden på grunn av ulike årsaker som forverring av produkt, økt konkurranse og konjunkturnedganger eller oppgang i en bransje. Av denne grunn utfører enkle eksponensielle utjevning ofte bedre ut av prøven enn det ellers kunne forventes, til tross for sin kvadratiske kvadratiske horisontal trend-ekstrapolering. Dampede trendmodifikasjoner av den lineære eksponensielle utjevningsmodellen brukes også i praksis til å introdusere en konservatismeddel i sine trendprognoser. Den demonstrede LES-modellen kan implementeres som et spesielt tilfelle av en ARIMA-modell, spesielt en ARIMA-modell (1,1,2). Det er mulig å beregne konfidensintervall rundt langsiktige prognoser produsert av eksponentielle utjevningsmodeller, ved å betrakte dem som spesielle tilfeller av ARIMA-modeller. (Pass på: ikke alle programmer beregner konfidensintervaller for disse modellene riktig.) Bredden på konfidensintervaller avhenger av (i) RMS-feilen i modellen, (ii) type utjevning (enkel eller lineær) (iii) verdien (e) av utjevningskonstanten (e) og (iv) antall perioder fremover du forutsetter. Generelt sprer intervallene raskere da 945 blir større i SES-modellen, og de sprer seg mye raskere når lineær snarere enn enkel utjevning brukes. Dette emnet blir diskutert videre i ARIMA-modellene i notatene. (Tilbake til toppen av siden.) Introduksjon til ARIMA: nonseasonal modeller ARIMA (p, d, q) prognose likning: ARIMA-modeller er i teorien den mest generelle klassen av modeller for å prognose en tidsserie som kan gjøres til å være 8220stationary8221 ved differensiering (om nødvendig), kanskje i forbindelse med ikke-lineære transformasjoner som logging eller deflatering (om nødvendig). En tilfeldig variabel som er en tidsserie er stasjonær hvis dens statistiske egenskaper er konstante over tid. En stasjonær serie har ingen trend, dens variasjoner rundt sin gjennomsnitt har en konstant amplitude, og den svinger på en konsistent måte. det vil si at kortsiktige tilfeldige tidsmønstre alltid ser like ut i statistisk forstand. Den sistnevnte tilstanden betyr at dets autokorrelasjoner (korrelasjoner med sine egne tidligere avvik fra gjennomsnittet) forblir konstante over tid, eller tilsvarende, at dets effektspektrum forblir konstant over tid. En tilfeldig variabel av dette skjemaet kan ses som en kombinasjon av signal og støy, og signalet (hvis det er tydelig) kan være et mønster av rask eller saksom gjennomsnittlig reversering eller sinusformet svingning eller rask veksling i skiltet , og det kan også ha en sesongbestemt komponent. En ARIMA-modell kan ses som en 8220filter8221 som forsøker å skille signalet fra støyen, og signalet blir deretter ekstrapolert inn i fremtiden for å oppnå prognoser. ARIMA-prognose-ligningen for en stasjonær tidsserie er en lineær (dvs. regresjonstype) ekvation hvor prediktorene består av lag av de avhengige variable ogor lagene av prognosefeilene. Det er: Forutsigbar verdi for Y en konstant og en vektet sum av en eller flere nylige verdier av Y og eller en vektet sum av en eller flere nylige verdier av feilene. Hvis prediktorene kun består av forsinkede verdier av Y. Det er en ren autoregressiv (8220self-regressed8221) modell, som bare er et spesielt tilfelle av en regresjonsmodell, og som kunne være utstyrt med standard regresjonsprogramvare. For eksempel er en førsteordens autoregressiv (8220AR (1) 8221) modell for Y en enkel regresjonsmodell der den uavhengige variabelen bare er Y forsinket med en periode (LAG (Y, 1) i Statgraphics eller YLAG1 i RegressIt). Hvis noen av prediktorene er lags av feilene, er en ARIMA-modell det IKKE en lineær regresjonsmodell, fordi det ikke er mulig å spesifisere 8220last period8217s error8221 som en uavhengig variabel: feilene må beregnes fra tid til annen når modellen er montert på dataene. Fra et teknisk synspunkt er problemet med å bruke forsinkede feil som prediktorer at modellen8217s spådommer ikke er lineære funksjoner av koeffisientene. selv om de er lineære funksjoner av tidligere data. Så koeffisienter i ARIMA-modeller som inkluderer forsinkede feil må estimeres ved ikke-lineære optimaliseringsmetoder (8220hill-klatring8221) i stedet for bare å løse et system av ligninger. Akronymet ARIMA står for Auto-Regressive Integrated Moving Average. Lags av den stationære serien i prognosekvotasjonen kalles kvotoregressivequot-termer. Lags av prognosefeilene kalles quotmoving averagequot vilkår, og en tidsserie som må differensieres for å bli stillestående, sies å være en quotintegratedquot-versjon av en stasjonær serie. Tilfeldige gange og tilfeldige trendmodeller, autoregressive modeller og eksponentielle utjevningsmodeller er alle spesielle tilfeller av ARIMA-modeller. En nonseasonal ARIMA-modell er klassifisert som en quotARIMA (p, d, q) kvotemodell hvor: p er antall autoregressive termer, d er antall ikke-sekundære forskjeller som trengs for stasjonar, og q er antall forsinkede prognosefeil i prediksjonsligningen. Forutsigelsesligningen er konstruert som følger. Først, la y betegne den d forskjellen på Y. Det betyr: Merk at den andre forskjellen på Y (d2-saken) ikke er forskjellen fra 2 perioder siden. Snarere er det den første forskjellen-av-første forskjellen. som er den diskrete analogen til et andre derivat, det vil si den lokale akselerasjonen av serien i stedet for sin lokale trend. Når det gjelder y. Den generelle prognosekvasjonen er: Her er de bevegelige gjennomsnittsparametrene (9528217s) definert slik at deres tegn er negative i ligningen, etter konvensjonen innført av Box og Jenkins. Noen forfattere og programvare (inkludert R programmeringsspråket) definerer dem slik at de har pluss tegn i stedet. Når faktiske tall er koblet til ligningen, er det ingen tvetydighet, men det er viktig å vite hvilken konvensjon programvaren bruker når du leser utgangen. Ofte er parametrene benevnt der av AR (1), AR (2), 8230 og MA (1), MA (2), 8230 etc. For å identifisere den aktuelle ARIMA modellen for Y. begynner du ved å bestemme differensordren (d) trenger å stasjonærisere serien og fjerne bruttoegenskapene til sesongmessighet, kanskje i forbindelse med en variansstabiliserende transformasjon som logging eller deflating. Hvis du stopper på dette punktet og forutsier at den forskjellige serien er konstant, har du bare montert en tilfeldig tur eller tilfeldig trendmodell. Den stasjonære serien kan imidlertid fortsatt ha autokorrelerte feil, noe som tyder på at noen antall AR-termer (p 8805 1) og eller noen nummer MA-termer (q 8805 1) også er nødvendig i prognosekvasjonen. Prosessen med å bestemme verdiene p, d og q som er best for en gitt tidsserie, vil bli diskutert i senere avsnitt av notatene (hvis koblinger er øverst på denne siden), men en forhåndsvisning av noen av typene av nonseasonal ARIMA-modeller som ofte oppstår, er gitt nedenfor. ARIMA (1,0,0) førstegangs autoregressiv modell: Hvis serien er stasjonær og autokorrelert, kan den kanskje forutsies som et flertall av sin egen tidligere verdi, pluss en konstant. Forutsigelsesligningen i dette tilfellet er 8230 som er Y regressert i seg selv forsinket med en periode. Dette er en 8220ARIMA (1,0,0) constant8221 modell. Hvis gjennomsnittet av Y er null, vil ikke det konstante begrepet bli inkludert. Hvis hellingskoeffisienten 981 1 er positiv og mindre enn 1 i størrelsesorden (den må være mindre enn 1 i størrelsesorden dersom Y er stasjonær), beskriver modellen gjennomsnittsreferanseadferd hvor neste periode8217s verdi skal anslås å være 981 1 ganger som langt unna gjennomsnittet som denne perioden8217s verdi. Hvis 981 1 er negativ, forutser det middelreferanseadferd med skifting av tegn, dvs. det forutsier også at Y vil være under gjennomsnittlig neste periode hvis den er over gjennomsnittet denne perioden. I en andre-ordregivende autoregressiv modell (ARIMA (2,0,0)), ville det være et Y t-2 begrep til høyre også, og så videre. Avhengig av tegnene og størrelsene på koeffisientene, kunne en ARIMA (2,0,0) modell beskrive et system hvis gjennomsnitts reversering foregår i sinusformet oscillerende mote, som bevegelse av en masse på en fjær som er utsatt for tilfeldige støt . ARIMA (0,1,0) tilfeldig tur: Hvis serien Y ikke er stasjonær, er den enkleste modellen for den en tilfeldig turmodell, som kan betraktes som et begrensende tilfelle av en AR (1) modell der autoregressive koeffisienten er lik 1, det vil si en serie med uendelig sakte gjennomsnittlig reversering. Forutsigelsesligningen for denne modellen kan skrives som: hvor den konstante sikt er den gjennomsnittlige perioden til periode-endringen (dvs. den langsiktige driften) i Y. Denne modellen kan monteres som en ikke-avskjæringsregresjonsmodell der Første forskjell på Y er den avhengige variabelen. Siden den inneholder (bare) en ikke-soneforskjell og en konstant periode, er den klassifisert som en quotARIMA (0,1,0) modell med constant. quot. Den tilfeldig-walk-uten-drift-modellen ville være en ARIMA (0,1, 0) modell uten konstant ARIMA (1,1,0) forskjellig førsteordens autoregressiv modell: Hvis feilene i en tilfeldig turmodell er autokorrelert, kan problemet løses ved å legge til et lag av den avhengige variabelen til prediksjonsligningen - - dvs ved å regresse den første forskjellen på Y i seg selv forsinket med en periode. Dette vil gi følgende prediksjonsligning: som kan omarrangeres til Dette er en førsteordens autoregressiv modell med en rekkefølge av ikke-soneforskjeller og en konstant term, dvs. en ARIMA (1,1,0) modell. ARIMA (0,1,1) uten konstant enkel eksponensiell utjevning: En annen strategi for korrigering av autokorrelerte feil i en tilfeldig gangmodell er foreslått av den enkle eksponensielle utjevningsmodellen. Husk at for noen ikke-stationære tidsserier (for eksempel de som viser støyende svingninger rundt et sakte varierende gjennomsnitt), utfører ikke den tilfeldige turmodellen så vel som et glidende gjennomsnittsverdier av tidligere verdier. Med andre ord, i stedet for å ta den nyeste observasjonen som prognosen for neste observasjon, er det bedre å bruke et gjennomsnitt av de siste observasjonene for å filtrere ut støy og mer nøyaktig anslå det lokale gjennomsnittet. Den enkle eksponensielle utjevningsmodellen bruker et eksponentielt vektet glidende gjennomsnitt av tidligere verdier for å oppnå denne effekten. Forutsigelsesligningen for den enkle eksponensielle utjevningsmodellen kan skrives i en rekke matematisk ekvivalente former. hvorav den ene er den såkalte 8220error correction8221 skjemaet, der den forrige prognosen er justert i retning av feilen det gjorde: Fordi e t-1 Y t-1 - 374 t-1 per definisjon kan dette omskrives som : som er en ARIMA (0,1,1) - out-konstant prognosekvasjon med 952 1 1 - 945. Dette betyr at du kan passe en enkel eksponensiell utjevning ved å angi den som en ARIMA (0,1,1) modell uten konstant, og den estimerte MA (1) - koeffisienten tilsvarer 1-minus-alfa i SES-formelen. Husk at i SES-modellen er gjennomsnittsalderen for dataene i 1-periode fremover prognosene 1 945. Det betyr at de vil ha en tendens til å ligge bak trender eller vendepunkter med ca 1 945 perioder. Det følger at gjennomsnittlig alder av dataene i 1-periode fremover prognosene for en ARIMA (0,1,1) uten konstant modell er 1 (1 - 952 1). For eksempel, hvis 952 1 0,8 er gjennomsnittsalderen 5. Når 952 1 nærmer seg 1, blir ARIMA (0,1,1) uten konstant modell et veldig langsiktig glidende gjennomsnitt og som 952 1 nærmer seg 0 blir det en tilfeldig tur uten drivmodell. What8217s den beste måten å korrigere for autokorrelasjon: legge til AR-vilkår eller legge til MA-vilkår I de to foregående modellene ble problemet med autokorrelerte feil i en tilfeldig turmodell løst på to forskjellige måter: ved å legge til en forsinket verdi av differensierte serier til ligningen eller legge til en forsinket verdi av prognosen feil. Hvilken tilnærming er best En tommelfingerregel for denne situasjonen, som vil bli nærmere omtalt senere, er at positiv autokorrelasjon vanligvis behandles best ved å legge til et AR-uttrykk for modellen og negativ autokorrelasjon vanligvis behandles best ved å legge til en MA term. I forretnings - og økonomiske tidsserier oppstår negativ autokorrelasjon ofte som en artefakt av differensiering. (Generelt reduserer differensiering positiv autokorrelasjon og kan til og med føre til en bryter fra positiv til negativ autokorrelasjon.) Så, ARIMA (0,1,1) modellen, der differensiering er ledsaget av en MA-term, brukes hyppigere enn en ARIMA (1,1,0) modell. ARIMA (0,1,1) med konstant enkel eksponensiell utjevning med vekst: Ved å implementere SES-modellen som en ARIMA-modell, får du faktisk en viss fleksibilitet. Først og fremst er estimert MA (1) - koeffisient tillatt å være negativ. Dette tilsvarer en utjevningsfaktor som er større enn 1 i en SES-modell, som vanligvis ikke er tillatt i SES-modellprosedyren. For det andre har du muligheten til å inkludere en konstant periode i ARIMA-modellen hvis du ønsker det, for å estimere en gjennomsnittlig ikke-null trend. ARIMA-modellen (0,1,1) med konstant har prediksjonsligningen: Forventningene for en periode fremover fra denne modellen er kvalitativt lik SES-modellen, bortsett fra at bane av de langsiktige prognosene vanligvis er en skrånende linje (hvis skråning er lik mu) i stedet for en horisontal linje. ARIMA (0,2,1) eller (0,2,2) uten konstant lineær eksponensiell utjevning: Linjære eksponentielle utjevningsmodeller er ARIMA-modeller som bruker to ikke-soneforskjeller i sammenheng med MA-termer. Den andre forskjellen i en serie Y er ikke bare forskjellen mellom Y og seg selv forsinket av to perioder, men det er den første forskjellen i den første forskjellen - dvs. Y-endringen i Y i periode t. Således er den andre forskjellen på Y ved periode t lik (Y t - Y t-1) - (Y t-1 - Y t-2) Y t - 2Y t-1 Y t-2. En annen forskjell på en diskret funksjon er analog med et andre derivat av en kontinuerlig funksjon: den måler kvoteringsberegningsquot eller kvoturvitaquot i funksjonen på et gitt tidspunkt. ARIMA-modellen (0,2,2) uten konstant forutser at den andre forskjellen i serien er lik en lineær funksjon av de to siste prognosefeilene: som kan omarrangeres som: hvor 952 1 og 952 2 er MA (1) og MA (2) koeffisienter. Dette er en generell lineær eksponensiell utjevningsmodell. i hovedsak det samme som Holt8217s modell, og Brown8217s modell er et spesielt tilfelle. Den bruker eksponensielt vektede glidende gjennomsnitt for å anslå både et lokalt nivå og en lokal trend i serien. De langsiktige prognosene fra denne modellen konvergerer til en rett linje hvis skråning avhenger av den gjennomsnittlige trenden observert mot slutten av serien. ARIMA (1,1,2) uten konstant fuktet trend lineær eksponensiell utjevning. Denne modellen er illustrert i de tilhørende lysbildene på ARIMA-modellene. Den ekstrapolerer den lokale trenden i slutten av serien, men flater ut på lengre prognoshorisonter for å introdusere et konservatismedokument, en praksis som har empirisk støtte. Se artikkelen om hvorfor Damped Trend worksquot av Gardner og McKenzie og quotgolden Rulequot-artikkelen av Armstrong et al. for detaljer. Det er generelt tilrådelig å holde fast i modeller der minst en av p og q ikke er større enn 1, dvs. ikke prøv å passe på en modell som ARIMA (2,1,2), da dette sannsynligvis vil føre til overfitting og kvadrat-faktorquot problemer som er omtalt nærmere i notatene om den matematiske strukturen til ARIMA-modellene. Implementering av regneark: ARIMA-modeller som de som er beskrevet ovenfor, er enkle å implementere på et regneark. Forutsigelsesligningen er bare en lineær ligning som refererer til tidligere verdier av originale tidsserier og tidligere verdier av feilene. Dermed kan du sette opp et ARIMA prognose regneark ved å lagre dataene i kolonne A, prognoseformelen i kolonne B, og feilene (data minus prognoser) i kolonne C. Forutsigelsesformelen i en typisk celle i kolonne B ville ganske enkelt være et lineært uttrykk som refererer til verdier i de foregående radene av kolonne A og C, multiplisert med de relevante AR - eller MA-koeffisientene lagret i celler andre steder på regnearket. KODETS NATUR Kodenes natur Innledning Jeg er to med naturen. Woody Allen Her er vi: begynnelsen. Vel, nesten begynnelsen. Hvis det har vært en stund siden du har gjort noen programmering i Prosessering (eller hvilken som helst matte, for det saks skyld), vil denne introduksjonen få deg til å tenke på beregningstanker før vi nærmer deg noe av det vanskeligste og komplekse materialet. I kapittel 1 skulle vi snakke om begrepet vektor og hvordan det vil fungere som byggestein for å simulere bevegelse gjennom hele denne boken. Men før vi tar det trinnet, kan vi tenke på hva det betyr for noe å bare flytte rundt på skjermen. La oss begynne med en av de mest kjente og enkleste simuleringene av bevegelse av tilfeldig gange. I.1 Tilfeldige turer Tenk deg at du står midt i en balanse. Hvert tiende sekund spretter du en mynt. Hodet, ta et skritt fremover. Haler, ta et skritt bakover. Dette er en tilfeldig walka-sti definert som en rekke tilfeldige trinn. Når du drar av denne balansen og på gulvet, kan du utføre en tilfeldig tur i to dimensjoner ved å bla den samme mynt to ganger med følgende resultater: Ja, dette kan virke som en spesielt usofistikert algoritme. Likevel kan tilfeldige turer brukes til å modellere fenomener som oppstår i den virkelige verden, fra bevegelsene til molekyler i en gass til at en gambler oppfører seg en dag på kasinoet. Som for oss begynner vi denne boken å studere en tilfeldig tur med tre mål i tankene. Vi må gjennomgå et programmeringsbegrep sentralt i denne bokobjektorienterte programmeringen. Den tilfeldige walker vil fungere som en mal for hvordan vi skal bruke objektorientert design for å lage ting som beveger seg rundt et behandlingsvindu. Den tilfeldige spaserturen ansporer de to spørsmålene som vi vil spørre om og om igjen i denne boken: Hvordan definerer vi reglene som styrer oppførselen til våre objekter og deretter Hvordan implementerer vi disse reglene i Behandling Gjennom boken, må du regelmessig trenge en grunnleggende forståelse av tilfeldighet, sannsynlighet og Perlin-støy. Den tilfeldige turen vil gjøre det mulig for oss å demonstrere noen få viktige punkter som kommer til nytte senere. I.2 Random Walker Class Lets gjennomgå litt objektorientert programmering (OOP) først ved å bygge et Walker objekt. Dette vil bare være en oversiktlig gjennomgang. Hvis du aldri har jobbet med OOP før, kan det hende du vil ha noe mer omfattende ID, foreslår at du stopper her og vurderer det grunnleggende på Processing-nettstedet før du fortsetter. Et objekt i Behandling er en enhet som har både data og funksjonalitet. Vi ser på å designe et Walker-objekt som både holder oversikt over dataene (hvor det finnes på skjermen) og har mulighet til å utføre bestemte handlinger (som å trekke seg selv eller ta et skritt). En klasse er malen for å bygge faktiske forekomster av objekter. Tenk på en klasse som cookie cutter objektene er informasjonskapslene selv. La oss begynne med å definere Walker-klassen hva det betyr å være et Walker-objekt. Walker trenger bare to deler data-nummer for sin x-plassering og en for sin y-plassering. Objekter har data. Siden vi bare tegner bakgrunnen en gang i oppsettet (). heller enn å rydde det kontinuerlig hver gang gjennom tegning (). Vi ser sporet av den tilfeldige spaserturen i Behandlingsvinduet. Nettleseren din støtter ikke lerretet. Det er et par forbedringer vi kunne gjøre til tilfeldig walker. For en, er denne Walker s trinn valg begrenset til fire opsjoner, ned, venstre og høyre. Men en hvilken som helst piksel i vinduet har åtte mulige naboer, og en niende mulighet er å forbli på samme sted. For å implementere et Walker-objekt som kan gå til en nabobilde (eller bli satt), kan vi velge et tall mellom 0 og 8 (ni mulige valg). En mer effektiv måte å skrive koden på ville imidlertid være å velge mellom tre mulige trinn langs x-aksen (-1, 0 eller 1) og tre mulige trinn langs y-aksen. Utbytter -1, 0 eller 1 Alle disse variasjonene på den tradisjonelle tilfeldige gangen har en ting til felles: Sannsynligheten for at Walker vil ta et skritt i en gitt retning, til enhver tid er lik sannsynligheten for at Walker vil ta et skritt i hvilken som helst retning. Med andre ord, hvis det er fire mulige trinn, er det en 1 til 4 (eller 25) sjanse for at Walker vil ta et gitt skritt. Med ni mulige trinn er det en 1 i 9 (eller 11.1) sjanse. Praktisk, slik fungerer tilfeldig () - funksjonen. Behandler random number generator (som opererer bak kulissene) produserer det som er kjent som en jevn fordeling av tall. Vi kan teste denne distribusjonen med en behandlingsskisse som teller hver gang et tilfeldig tall blir plukket og graver det som høyden på et rektangel. Nettleseren din støtter ikke lerretet. Eksempel I.2: Tilfeldig nummerfordeling Et array for å holde oversikt over hvor ofte tilfeldige tall blir plukket. Velg et tilfeldig tall og øk antallet. Grafering av resultatene Skjermbildet ovenfor viser resultatet av skissen som kjører i noen få minutter. Legg merke til hvordan hver linje av grafen varierer i høyde. Vår utvalgsstørrelse (dvs. antall tilfeldige tall vi har plukket) er ganske liten, og det er noen sporadiske avvik, hvor enkelte numre blir plukket oftere. Over tid, med en god tilfeldig talgenerator, ville dette til og med ut. Pseudo-tilfeldige tall De tilfeldige tallene vi får fra random () - funksjonen er ikke helt tilfeldige, derfor er de kjent som pseudo-tilfeldig. De er resultatet av en matematisk funksjon som simulerer tilfeldighet. Denne funksjonen vil gi et mønster over tid, men den tidsperioden er så lang at for oss er det like bra som ren tilfeldighet. Øvelse I.1 Opprett en tilfeldig rullator som har en tendens til å bevege seg ned og til høyre. (Vel se løsningen på dette i neste avsnitt.) I.3 Sannsynlighet og ikke-ensartede distribusjoner Husk når du begynte programmering i prosessering Kanskje du ønsket å tegne mange sirkler på skjermen. Så sa du til deg selv: Å, jeg vet det. Jeg tegner alle disse kretsene på tilfeldige steder, med tilfeldige størrelser og tilfeldige farger. I et datagrafikksystem er det ofte enklest å frøke et system med tilfeldighet. I denne boken var imidlertid ute på å bygge systemer modellert på det vi ser i naturen. Forsinkelse til tilfeldighet er ikke en spesielt gjennomtenkt løsning på et designproblem spesielt, det slags problem som innebærer å skape en organisk eller naturlig utseende simulering. Med noen få triks kan vi endre måten vi bruker tilfeldig () til å produsere ujevne distribusjoner av tilfeldige tall. Dette vil komme til nytte gjennom hele boken, da vi ser på en rekke forskjellige scenarier. Når vi undersøker genetiske algoritmer, for eksempel, trenger vi en metode for å utføre utvalg som medlemmer av vår befolkning bør velges for å videresende deres DNA til neste generasjon. Husk konseptet om overlevelse av de hardeste. Vi sier at vi har en befolkning av aper som utvikler seg. Ikke hver ape vil ha en like sjanse til å reprodusere. For å simulere Darwinian evolusjon kan vi ikke velge to tilfeldige aper for å være foreldre. Vi trenger de mer passende som er mer sannsynlig å bli valgt. Vi må definere sannsynligheten for de fitteste. For eksempel kan en spesielt rask og sterk ape ha 90 sjanser til å vokse, mens en svakere har bare 10 sjanser. Lar pause her og ta en titt på sannsynligheter grunnprinsipper. Først bør du undersøke enkelthendelsessannsynlighet, det vil si sannsynligheten for at en gitt hendelse vil oppstå. Hvis du har et system med et visst antall mulige utfall, er sannsynligheten for forekomsten av en gitt hendelse lik antall utfall som kvalifiserer som den hendelsen delt på det totale antallet av alle mulige utfall. En myntkast er et enkelt eksempel, har bare to mulige utfall, hoder eller haler. Det er bare en måte å svinge hoder på. Sannsynligheten for at mynten vil slå opp hodene er derfor en delt med to: 12 eller 50. Ta et kort med to og femti kort. Sannsynligheten for å tegne et ess fra det dekket er: Antall ess Antall kort 4 52 0,077 Sannsynligheten for å tegne en diamant er: Antall diamanter Antall kort 13 52 0,25 25 Vi kan også beregne sannsynligheten for at flere hendelser forekommer i rekkefølge . For å gjøre dette, mangler vi bare de individuelle sannsynlighetene for hver hendelse. Sannsynligheten for at en mynt setter opp hodene tre ganger på rad, er: (12) (12) (12) 18 (eller 0,125) som betyr at en mynt vil skru opp hodene tre ganger på rad en av åtte ganger (hver gang å være tre kaster). Øvelse I.2 Hva er sannsynligheten for å tegne to ess på rad fra et kort på to og to kort. Det er et par måter der vi kan bruke tilfeldig () - funksjonen med sannsynlighet i kode. Én teknikk er å fylle en matrise med et utvalg av tallrike som gjentas, og velg tilfeldige tall fra det arrayet og generer hendelser basert på disse valgene. 1 lagres i gruppen to ganger, noe som gjør det mer sannsynlig å bli plukket. Øvelse I.3 Lag en tilfeldig rullator med dynamiske sannsynligheter. For eksempel kan du gi det en 50 sjanse til å bevege seg i retning av musen. I.4 En Normal Fordeling av tilfeldige tall Lar oss gå tilbake til den populasjonen av simulerte behandlingsapene. Programmet genererer tusen Monkey-objekter, hver med en høydeverdi mellom 200 og 300 (da dette er en verden av apekatter som har høyder mellom 200 og 300 piksler). Gjør dette nøyaktig avbildet høydene til virkelige vesener Tenk på en overfylt fortau i New York City. Velg noen personer utenfor gaten, og det kan se ut som at deres høyde er tilfeldig. Likevel er det ikke den typen tilfeldig som tilfeldig () produserer. Folkens høyder er ikke jevnt fordelt. Det er mye flere folk i gjennomsnittlig høyde enn det er svært høye eller svært korte. For å simulere naturen, vil vi kanskje ha det mer sannsynlig at våre aper er av gjennomsnittlig høyde (250 piksler), men likevel tillate at de til tider er svært korte eller svært høye. En fordeling av verdier som klynger rundt et gjennomsnitt (referert til som gjennomsnittet) er kjent som en normal fordeling. Det kalles også den gaussiske distribusjonen (oppkalt etter matematiker Carl Friedrich Gauss) eller, hvis du er fransk, den Laplacian-distribusjonen (oppkalt etter Pierre-Simon Laplace). Begge matematikere jobbet samtidig i begynnelsen av det nittende århundre på å definere en slik fordeling. Når du graverer fordelingen, får du noe som ser ut som følgende, uformelt kjent som en bellkurve: Kurven genereres av en matematisk funksjon som definerer sannsynligheten for at en gitt verdi forekommer som en funksjon av middelværdien (ofte skrevet som, det greske bokstaveret mu) og standardavviket (det greske bokstaven sigma). Gjennomsnittet er ganske enkelt å forstå. Når det gjelder våre høydeverdier mellom 200 og 300, har du sannsynligvis en intuitiv følelse av gjennomsnittet (dvs. gjennomsnittlig) som 250. Men hva om jeg skulle si at standardavviket er 3 eller 15 Hva betyr dette for det tall Grafene ovenfor skal gi oss et hint. Grafen til venstre viser oss fordelingen med en svært lav standardavvik, hvor de fleste verdiene klynges tett rundt gjennomsnittet. Grafen til høyre viser oss en høyere standardavvik, hvor verdiene er jevnere fordelt ut fra gjennomsnittet. Tallene trekker seg ut som følger: Gitt en befolkning, vil 68 av medlemmene av denne befolkningen ha verdier i størrelsesorden én standardavvik fra gjennomsnittet, 98 innen to standardavvik og 99,7 innen tre standardavvik. Gitt et standardavvik på 5 piksler, vil bare 0,3 av apenhøyder være mindre enn 235 piksler (tre standardavvik under gjennomsnittet 250) eller større enn 265 piksler (tre standardavvik over gjennomsnittet på 250). Beregning av gjennomsnittlig og standardavvik Vurdere en klasse på ti studenter som får følgende karakterer (ut av 100) på en test: 85, 82, 88, 86, 85, 93, 98, 40, 73, 83 Standardavviket beregnes som kvadratroten av gjennomsnittet av firkantene av avvik rundt gjennomsnittet. Med andre ord, ta forskjellen fra gjennomsnittet for hver person og kvadrat det (varians). Beregn gjennomsnittet av alle disse verdiene og ta kvadratroten som standardavviket. Standardavviket er kvadratroten av den gjennomsnittlige variansen: 15.13 Heldigvis for oss, for å bruke en normal fordeling av tilfeldige tall i en behandlingsskisse, trenger vi ikke å gjøre noen av disse beregningene selv. I stedet kan vi gjøre bruk av en klasse som kalles Tilfeldig. som vi får gratis som en del av standard Java-biblioteker importert til Behandling (se JavaDocs for mer informasjon). For å bruke Random-klassen må vi først deklarere en variabel av typen Tilfeldig og opprette tilfeldig objekt i oppsettet (). Vi bruker variabelnavngeneratoren fordi det vi har her kan tenkes som en tilfeldig talegenerator. Hvis vi ønsker å produsere et tilfeldig tall med en normal (eller Gaussisk) distribusjon hver gang vi går gjennom tegning (). det er like enkelt som å kalle funksjonen nextGaussian (). Be om et gaussisk tilfeldig nummer. (Merk nextGaussian () returnerer en dobbel og må konverteres til float.) Heres saken. Hva skal vi gjøre med denne verdien Hva om vi ønsket å bruke den, for eksempel å tildele x-stillingen til en form som vi tegner på skjermen NesteGaussian () - funksjonen returnerer en normal fordeling av tilfeldige tall med følgende parametere: et middel på null og en standardavvik av en. La oss si at vi vil ha et gjennomsnitt på 320 (den midterste horisontale piksel i et vindu med bredde 640) og en standardavvik på 60 piksler. Vi kan justere verdien til parametrene ved å multiplisere den med standardavviket og legge til gjennomsnittet. Nettleseren din støtter ikke lerretet. Eksempel I.4: Gaussisk distribusjon Merk at nextGaussian () returnerer en dobbel. Multipliser med standardavviket og legg til gjennomsnittet. Ved å tegne ellipser oppå hverandre med litt gjennomsiktighet, kan vi faktisk se fordelingen. Det lyseste stedet er nær sentrum, hvor de fleste verdiene er klynget, men så ofte sirkler trekkes lenger til høyre eller til venstre for sentrum. Øvelse I.4 Vurder en simulering av malingsklatter tegnet som en samling av farget prikker. De fleste maleklynger rundt en sentral plassering, men noen punkter spretter ut mot kantene. Kan du bruke en normal fordeling av tilfeldige tall for å generere plasseringene til punktene. Kan du også bruke en normal fordeling av tilfeldige tall for å generere en fargepalett. Øvelse I.5 En Gaussisk tilfeldig tur er definert som en hvor trinnstørrelsen (hvordan langt objektet beveger seg i en gitt retning) genereres med en normal fordeling. Implementer denne variasjonen av vår tilfeldige tur. I.5 En tilpasset distribusjon av tilfeldige tall Det kommer en tid i livet ditt når du ikke vil ha en jevn fordeling av tilfeldige verdier, eller en gaussisk. La oss forestille oss et øyeblikk at du er en tilfeldig walker på jakt etter mat. Å flytte tilfeldig rundt en plass virker som en rimelig strategi for å finne noe å spise. Tross alt vet du ikke hvor maten er, så du kan også søke tilfeldig til du finner den. Problemet, som du kanskje har lagt merke til, er at tilfeldige vandrere går tilbake til tidligere besøkte steder mange ganger (dette kalles oversampling). En strategi for å unngå et slikt problem er å, så ofte, ta et veldig stort skritt. Dette tillater walker å tilfeldig tilfeldig rundt et bestemt sted, mens du jevnlig hopper veldig langt unna for å redusere mengden oversampling. Denne variasjonen på tilfeldig spasertur (kjent som et Lvy-fly) krever et tilpasset sett med sannsynligheter. Selv om det ikke er en nøyaktig implementering av et Lvy-fly, kan vi angi sannsynlighetsfordelingen som følger: jo lengre trinnet, desto mindre sannsynlig er det å bli plukket desto kortere trinnet, jo mer sannsynlig. Tidligere i denne prologgen så vi at vi kunne generere tilpassede sannsynlighetsfordelinger ved å fylle en matrise med verdier (noen kopierte slik at de ble plukket oftere) eller ved å teste resultatet av tilfeldig (). Vi kunne implementere et Lvy-fly ved å si at det er en sjanse for at walkeren tar et stort skritt. En 1 sjanse til å ta et stort skritt Men dette reduserer sannsynlighetene til et fast antall alternativer. Hva hvis vi ønsket å gjøre en mer generell regjeringen høyere et tall, desto mer sannsynlig er det å bli plukket 3.145 ville være mer sannsynlig å bli plukket enn 3,144, selv om denne sannsynligheten bare er en liten bit større. Med andre ord, hvis x er tilfeldig tall, kan vi kartlegge sannsynligheten for y-aksen med y x. Hvis vi kan finne ut hvordan du genererer en distribusjon av tilfeldige tall i henhold til grafen ovenfor, vil vi kunne bruke samme metode til enhver kurve som vi har en formel for. En løsning er å velge to tilfeldige tall i stedet for en. Det første tilfeldige tallet er bare det, et tilfeldig tall. Den andre er imidlertid det som kaller en kvalifiserende tilfeldig verdi. Det vil fortelle oss om å bruke den første eller kaste den bort og velge en annen. Nummer som har en lettere kvalifisering vil bli plukket oftere, og tall som sjelden kvalifiseres, blir plukket sjelden. Her er trinnene (for nå kan vi bare vurdere tilfeldige verdier mellom 0 og 1): Velg et tilfeldig tall: R1 Beregn en sannsynlighet P at R1 skal kvalifisere. La oss prøve: P R1. Velg et annet tilfeldig nummer: R2 Hvis R2 er mindre enn P, har vi funnet nummeret vårt1 Hvis R2 ikke er mindre enn P, gå tilbake til trinn 1 og start over. Her sier vi at sannsynligheten for at en tilfeldig verdi vil kvalifisere er lik det tilfeldige tallet selv. La oss si at vi velger 0,1 for R1. Dette betyr at R1 vil ha en 10 sjanse til kvalifisering. Hvis vi velger 0.83 for R1 så vil det ha 83 sjanse for kvalifisering. Jo høyere tallet er, desto større er sannsynligheten for at vi faktisk skal bruke den. Her er en funksjon (oppkalt etter Monte Carlo-metoden, som ble oppkalt etter Monte Carlo kasinoet) som implementerer ovennevnte algoritme, og returnerer en tilfeldig verdi mellom 0 og 1. Vi gjør dette for alltid til vi finner en kvalifiserende tilfeldig verdi. Øvelse I.6 Bruk en tilpasset sannsynlighetsfordeling for å variere størrelsen på et trinn tatt av den tilfeldige walker. Trinnstørrelsen kan bestemmes ved å påvirke utvalgte verdier valgt. Kan du kartlegge sannsynligheten exponentiallyi. e. gjør sannsynligheten for at en verdi plukkes lik verdien kvadratet En jevn fordeling av trinnstørrelser. Endre dette (Se senere, se hvordan dette gjøres mer effektivt ved hjelp av vektorer.) I.6 Perlin Noise (En jevnere tilnærming) En god tilfeldig talgenerator produserer tall som ikke har noe forhold og viser ingen merkbar mønster. Som vi begynner å se, kan en liten tilfeldighet være en god ting når du programmerer organisk, livlig oppførsel. Imidlertid er tilfeldighet som det eneste ledende prinsippet ikke nødvendigvis naturlig. En algoritme kjent som Perlin-støy, oppkalt etter oppfinneren Ken Perlin, tar dette konseptet i betraktning. Perlin utviklet støyfunksjonen mens han jobbet på den originale Tron-filmen tidlig på 1980-tallet. Den ble designet for å skape prosessuelle teksturer for datorgenererte effekter. I 1997 fikk Perlin en Oscar i teknisk prestasjon for dette arbeidet. Perlin støy kan brukes til å generere ulike effekter med naturlige egenskaper, for eksempel skyer, landskap og mønstrede teksturer som marmor. Perlin støy har et mer organisk utseende fordi det produserer en naturlig bestilt (jevn) rekkefølge av pseudo-tilfeldige tall. Grafen til venstre nedenfor viser Perlin-støy over tid, med x-aksen som representerer tiden, merker kurvens glatthet. Grafen til høyre viser rene tilfeldige tall over tid. (Koden for generering av disse grafene er tilgjengelig i de vedlagte boknedlastingene.) Figur I.5: Støy Figur I.6: Tilfeldig behandling har en innebygd implementering av Perlin støyalgoritmen: Funksjonsstøyen (). Funksjonen støy () tar en, to eller tre argumenter, da støy beregnes i en, to eller tre dimensjoner. La oss starte med å se på endimensjonal støy. Støydetaljer Beregningsstøyreferansen forteller oss at støy er beregnet over flere oktaver. Å ringe funksjonen noiseDetail () vil endre både antall oktaver og deres betydning i forhold til hverandre. Dette endrer seg i sin tur hvordan lydfunksjonen oppfører seg. En online forelesning av Ken Perlin lar deg lære mer om hvordan støy virker fra Perlin selv. Vurder å tegne en sirkel i prosesseringsvinduet på en tilfeldig x-plassering. En tilfeldig x-plassering Nå, i stedet for en tilfeldig x-plassering, vil vi ha en Perlin støy x-plassering som er jevnere. Du tror kanskje at alt du trenger å gjøre er å erstatte tilfeldig () med støy (). det vil si en støy x-plassering Mens det er konseptuelt, er dette akkurat det vi vil dokumentere en x-verdi som varierer mellom 0 og bredden i henhold til Perlin noisethis, er ikke riktig implementering. Mens argumentene til tilfeldig () - funksjonen angir en rekke verdier mellom minimum og maksimum, virker støy () ikke slik. I stedet er utdataområdet fast, og returnerer alltid en verdi mellom 0 og 1. Vel, se på et øyeblikk at vi lett kan komme seg rundt dette med Processings map () - funksjonen, men først må vi undersøke hva akkurat støy () forventer at vi skal passere som et argument. Vi kan tenke på endimensjonal Perlin-støy som en lineær sekvens av verdier over tid. For eksempel: Hvor raskt vi øker t, påvirker også støynivået. Hvis vi lager store hopp i tide, hopper vi fremover og verdiene blir mer tilfeldige. Prøv å kjøre koden flere ganger, øke t med 0,01, 0,02, 0,05, 0,1, 0,0001, og du vil se forskjellige resultater. Mapping Noise Nå var klar til å svare på spørsmålet om hva du skal gjøre med støyverdien. Når vi har verdien med et område mellom 0 og 1, er det opp til oss å kartlegge dette området til det vi ønsker. Den enkleste måten å gjøre dette på er med Behandlingskart () - funksjonen. Kart () - funksjonen tar fem argumenter. Først opp er verdien vi ønsker å kartlegge, i dette tilfellet n. Da må vi gi det verdiene nåværende rekkevidde (minimum og maksimum), etterfulgt av vårt ønskede område. I dette tilfellet vet vi at støy har en rekkevidde mellom 0 og 1, men vi liker å tegne vår sirkel med et område mellom 0 og Windows-bredden. Legg merke til hvordan eksemplet ovenfor krever et ekstra par variabler: tx og ty. Dette skyldes at vi må holde styr på to tidsvariabler, en for x-plasseringen av Walker-objektet og en for y-stedet. Men det er noe litt rart om disse variablene. Hvorfor starter tx ved 0 og ty på 10 000 Selv om disse tallene er vilkårlig valg, har vi veldig spesifikt initialisert våre to-tidsvariabler med forskjellige verdier. Dette skyldes at støyfunksjonen er deterministisk: den gir deg det samme resultatet for en bestemt tid t hver gang. Hvis vi ba om støyverdien på samme tid t for både x og y. da vil x og y alltid være like, noe som betyr at Walker-objektet bare vil bevege seg langs en diagonal. I stedet bruker vi bare to forskjellige deler av støyrommet, starter ved 0 for x og 10 000 for y slik at x og y kan virke som uavhengig av hverandre. I sannhet er det ikke noe konkret tidsbegrep her. Det er en nyttig metafor for å hjelpe oss å forstå hvordan støyfunksjonen fungerer, men egentlig det vi har er plass, snarere enn tid. Grafen over viser en lineær sekvens av støyverdier i et endimensjonalt mellomrom, og vi kan be om en verdi på en bestemt x-plassering når vi vil. I eksempler vil du ofte se en variabel kalt xoff for å indikere x-offset langs støygrafen, i stedet for t for tid (som nevnt i diagrammet). Øvelse I.7 I ovennevnte tilfeldig ruller blir resultatet av støyfunksjonen kartlagt direkte til Walker s plassering. Opprett en tilfeldig rullator hvor du i stedet kartlegger resultatet av støyfunksjonen () til en Walker s trinnstørrelse. To-dimensjonal støy Denne ideen om støyverdier som lever i et endimensjonalt rom er viktig fordi det fører oss rett inn i en diskusjon av todimensjonalt rom. La oss tenke på dette for et øyeblikk. Med endimensjonal støy har vi en sekvens av verdier hvor en gitt verdi ligner naboen. Fordi verdien er i en dimensjon, har den bare to naboer: en verdi som kommer før den (til venstre på grafen) og en som kommer etter den (til høyre). Figur I.10: 1D Støy Figur I.11: 2D Støy Todimensjonal støy fungerer nøyaktig på samme måte konseptuelt. Forskjellen er selvsagt at vi ikke ser på verdier langs en lineær bane, men verdier som sitter på et rutenett. Tenk på et stykke grafpapir med tall skrevet inn i hver celle. En gitt verdi vil lignes på alle naboene: over, under, til høyre, til venstre og langs alle diagonaler. Hvis du skulle visualisere dette grafpapiret med hver verdi som er kartlagt til lysstyrken på en farge, vil du få noe som ser ut som skyer. Hvit sitter ved siden av grått, som sitter ved siden av grått, som sitter ved siden av mørkegrå, som sitter ved siden av svart, som sitter ved siden av mørkegrå, etc. Dette er grunnen til at støyen opprinnelig ble oppfunnet. Du justerer parametrene litt eller spiller med farge for å få det resulterende bildet til å se ut som marmor eller tre eller annen organisk tekstur. La oss ta en rask titt på hvordan du implementerer todimensjonal støy i Behandling. Hvis du vil farge hver piksel av et vindu tilfeldig, vil du trenge en nestet sløyfe, en som har tilgang til hver piksel og plukket en tilfeldig lysstyrke. En tilfeldig lysstyrke Hvis du vil fargelegge hver piksel i henhold til støyfunksjonen (), gjør du akkurat det samme, bare i stedet for å ringe tilfeldig () vel ringestøy (). En Perlin støyens lysstyrke Dette er en fin start konseptuelt gir deg en støyverdi for hver (x, y) plassering i vårt todimensjonale rom. Problemet er at dette ikke vil ha den skyige kvaliteten vi ønsker. Hopping fra piksel 200 til piksel 201 er for stor av et hopp gjennom støy. Husk at når vi jobbet med endimensjonal støy, økte vi vår tidsvariabel med 0,01 hver ramme, ikke med 1 En ganske god løsning på dette problemet er å bare bruke forskjellige variabler for støyargumentene. For eksempel kan vi øke en variabel som heter xoff hver gang vi beveger seg horisontalt, og en yoff-variabel hver gang vi beveger seg vertikalt gjennom de nestede løkkene. Eksempel I.6: 2D Perlin støy Start xoff ved 0. For hver xoff, start yoff ved 0.

No comments:

Post a Comment