Viktat glidande medelvärde implementering


Jag skulle vilja utföra ett exponentiellt vägat glidande medelvärde med parametrering definierad här på en vektor i R Finns det en bättre implementering än mitt första försök nedan. Mitt första försök var. I mitt andra försök trodde jag att jag kunde göra bättre genom vectorizing. I antar att jag inte borde vara överraskad av resultaten i mitt andra försök. Det var ett ganska fuligt försök på vektorisering. Men det måste finnas något som här förbättras vid mitt första försök. Jag hittade en bättre implementering här och anpassade den som följer. digEmAll var väldigt snäll med en Rcpp-version, men noterade också att du bara kunde använda TTR-paketet eller, som dess författare noterar, statistikfiltret som jag använde i ett inlägg på det nu avvecklade R Graph Gallery ett decennium sedan. En snabb shootout shootout visar Rcpp-versionen så mycket snabbare vilket förmodligen betyder att vi har parametreringen fel. Lambda 0 5 är en exceptionellt stark förfall som skulle motsvara en halveringstid på en dag eller N 1 Om jag använder det, Klyftan är ännu bredare. För fullständighet, hela filen som bara kan vara Rcpp sourceCpp - ed. answered 13 mar kl 22.30. Jag skulle ställa in TTR EMA y, förhållande 0 5 för referenspunkten, inte att jag tror att det kommer att göra stor skillnad Observera också att TTR EMA gör lite mer än statistikfilter och den här Rcpp-versionen har lite felkontroll, hanterar ledande NA och använder paradiset för reclassering för att internt hantera många olika typer av objekt Joshua Ulrich 13 mars på 22 58. Tack för påminnelsen om förhållandet Dirk Eddelbuettel 13 mar kl 23 46.Y Vårt Svar.2017 Stack Exchange, Inc. Jag har i huvudsak en mängd värden som denna. Den ovanstående matrisen är översimplifierad, jag samlar 1 värde per millisekund i min riktiga kod och jag behöver bearbeta utmatningen på en algoritm som jag skrev för att hitta Närmaste topp för en tidpunkt Min logik misslyckas eftersom i mitt exempel ovan är 0 36 den verkliga toppen, men min algoritm skulle se bakåt och se det sista numret 0 25 som toppen eftersom det sänks till 0 24 innan Målet är att ta dessa värden och tillämpa en algoritm för dem som släpper ut dem lite så att jag har mer linjära värden, det vill säga att jag tycker att mina resultat är kurva, inte jaggediga. Jag har fått veta att man tillämpar en exponentiell glidande medelfilter till mina värden Hur kan jag göra det? Det är verkligen svårt för mig att läsa matematiska ekvationer. Jag hanterar mycket bättre med kod. Hur bearbetar jag värden i min matris och tillämpar en exponentiell glidande genomsnittlig beräkning för att till och med utgå. Feb 8 12 på 20 27.Till beräkna ett exponentiellt rörligt medelvärde du Behöver behålla någon stat runt och du behöver en inställningsparameter Detta kräver en liten klass om du antar att du använder Java 5 eller senare. Inställning med sönderfallsparametern du vill kan ta tuning ska vara mellan 0 och 1 och använd sedan medelvärdet för att filtrera. När du läser en sida om matematisk återkommande är allt du verkligen behöver veta när du gör det till kod, att matematiker gillar att skriva indexer i arrays och sekvenser med prenumerationer. De har några andra noteringar, som inte hjälper EMA är ganska enkel eftersom du bara behöver komma ihåg ett gammalt värde, inga komplicerade tillståndsuppställningar krävs. svarade den 8 februari 12 på 20 42. TKKocheran Ganska mycket Är det inte trevligt när saker kan vara enkla Om du börjar med en ny sekvens får du en ny sedvanlig notering Att de första villkoren i den genomsnittliga sekvensen kommer att hoppa runt lite på grund av gränseffekter, men du får även de med andra glidande medelvärden. En bra fördel är dock att du kan linda den glidande genomsnittliga logiken in i medelvärdet och försök utan att störa resten av ditt program för mycket Donal Fellows 9 feb 12 på 0 06. Jag har svårt att förstå dina frågor, men jag kommer försöka svara ändå.1 Om din algoritm hittat 0 25 istället för 0 36, då är det fel Det är fel eftersom det förutsätter en monotonisk ökning eller minskning som alltid går upp eller går alltid ner Om du inte vill ha dina data, dina datapunkter --- som du presenterar dem --- är olinjära Om du verkligen vill För att hitta det maximala värdet mellan två punkter i tid, skära sedan din matris från tmin till tmax och hitta max av den subarray.2 Nu är konceptet med glidande medelvärden mycket enkelt att föreställa mig att jag har följande lista 1 4, 1 5 , 1 4, 1 5, 1 5 Jag kan släta ut det genom att ta medeltalet av två nummer 1 45, 1 45, 1 45, 1 5 Observera att det första numret är genomsnittet av 1 5 och 1 4 sekund och första siffrorna den andra nya listan är genomsnittet av 1 4 och 1 5 tredje och andra gamla listan den tredje nya listan medeltalet 1 5 och 1 4 f Vår och tredje och så vidare kunde jag ha gjort det tre eller fyra år, eller n Observera hur dataen är mycket jämnare Ett bra sätt att se glidande medelvärden på jobbet är att gå till Google Finance, välj ett lager försök Tesla Motors ganska flyktiga TSLA och klicka på technicals längst ner i diagrammet Välj Flytta genomsnittet med en given period och Exponentiell glidande medelvärde för att jämföra deras skillnader. Exponentiell glidande medelvärde är bara en annan utarbetande av detta men viktar de äldre data mindre än de nya uppgifterna detta är ett sätt att förspänna utjämningen mot baksidan Vänligen läs Wikipedia-posten. Så det här är mer en kommentar än ett svar, men den lilla kommentarrutan var bara för liten lycka till. Om du har problem med matte kan du gå Med ett enkelt rörligt medelvärde istället för exponentiellt. Således får du de sista x-värdena som är de sista x-termerna dividerat med x Otestad pseudokod. Observera att du måste hantera start - och slutdelarna av data eftersom det klart kan du inte medge de senaste 5 termerna när du finns på din 2: a datapunkt Det finns också mer effektiva sätt att beräkna den här glidande summan summan - äldsta nyaste, men det här är att få konceptet av vad som händer across. answered Feb 8 12 på 20 41. Är det möjligt att genomföra ett glidande medelvärde i C utan att det behövs ett fönster på prover. Jag har funnit att jag kan optimera lite genom att välja en fönsterstorlek som är en kraft av två för att tillåta bitskiftning istället för att dela men inte behövde en buffert skulle Vara trevligt Finns det ett sätt att uttrycka ett nytt glidande medelresultat endast som en funktion av det gamla resultatet och det nya provet. Ange ett exempel på glidande medelvärde, över ett fönster med 4 prov att vara. Lägg till nytt prov eA glidande medel kan implementeras rekursivt men för en exakt beräkning av det rörliga genomsnittsvärdet måste du komma ihåg det äldsta ingångsprovet i summan dvs a i ditt exempel. För ett längd N glidande medelvärde beräknar du. Där yn är utsignalen och xn är ingångssignalen Eq 1 kan skrivas rekursivt som så du alltid måste komma ihåg provet x nN för att beräkna 2. Som påpekat av Conrad Turner kan du använda ett oändligt långt exponentiellt fönster istället, vilket gör det möjligt att beräkna utmatningen endast från tidigare utmatning och nuvarande input. but detta är inte ett vanligt obetydligt glidande medelvärde, men ett exponentiellt vägat glidande medelvärde, där proverna tidigare har en mindre vikt, men åtminstone teoretiskt glömmer du aldrig någonting, vikterna blir bara mindre och mindre för prover långt borta. Jag implementerade en glidande medelvärde utan individuellt objektminne för ett GPS-spårningsprogram som jag skrev. Jag börjar med 1 prov och dela med 1 för att få nuvarande avg. I lägger sedan till ett exempel och delar upp med 2 till den aktuella avg. This fortsätter tills jag kommer till längden på genomsnittet. Varje gång senare lägger jag till i det nya provet, får medelvärdet och tar bort det genomsnittet från summan. Jag är inte en matematiker men det verkade som en bra väg att göra det. Jag tänkte att det skulle vända på magen av en riktig matte kille men det visar sig att det är ett av de accepterade sätten att göra det Och det fungerar bra Kom bara ihåg att ju högre längden desto långsammare följer det du vill följa Det kan inte ha betydelse mestadels men när du följer satelliter Om du är långsam kan spåret vara långt ifrån den verkliga positionen och det kommer att se dåligt ut. Du kan ha en klyfta mellan mitten och de efterföljande punkterna jag valde en längd på 15 uppdaterade 6 gånger per minut för att få tillräcklig utjämning och inte få För långt från den faktiska lätta positionen med de släta spårpunkterna. Svarade 16 november 16 vid 23 03.initialisera totalt 0, räkna 0 varje gång vi ser ett nytt värde. Då en inmatningsscannf, lägger man till totalt nyttValue, ett inkrementstal, en delning Genomsnittlig totalräkning. Detta skulle vara ett glidande medelvärde över alla inmatningar. För att beräkna medelvärdet över endast de senaste 4 ingångarna, skulle det behöva 4 ingångsvariabler, kanske kopiering av varje ingång till en äldre ingångsvariabel och sedan beräkna det nya glidande medlet som summa av 4 inputvariabler, uppdelade med 4 höger skift 2 skulle vara bra om alla ingångar var positiva för att göra den genomsnittliga beräkningen. svarade den 3 februari kl. 04 06. Det kommer faktiskt att beräkna det totala genomsnittet och INTE det glidande genomsnittet Eftersom räkningen blir större påverkas eventuella nya ingångar Provet blir försvinnande liten Hilmar 3 feb kl 15 på 13 53. Ditt svar.2017 Stack Exchange, Inc.

Comments

Popular Posts