The Black Forest

4635. Submitted on 2011/10/21, 20.44 h by Arduenn:

Ruisvraagje

Heeft iemand nog een begrijpelijk algoritme om de respectievelijke posities van deze twee significante bultjes uit de ruis aan te wijzen?

[image]

Dan kijk ik in het bijzonder naar... >^v< ? Hallo?

[Update] W00t! Het eindresultaat!

[image]

Gemiddeld + genormaliseerd + area under the curve threshold = superstrakke pieken + geen ruis.

There are 67 comments to this post (the latest by Arduenn on 2011/11/1, 11.49 h).

1. Arduenn commented on 2011/10/21, 20.45 h:

Mijn timmermansoog voelt aan zijn water dat dat significante bultjes zijn. Een computer ziet dat niet zo 1, 2, 3. Die is daar te objectief voor, naar mijn gevoel.

2. Arduenn commented on 2011/10/21, 20.52 h:

Is er een op-afstand-door-oogharen-kijk-algoritme?

3. Arduenn commented on 2011/10/21, 20.55 h:

Iets met top = 2 x standaarddeviatie en iets met bandbreedte erbij die groot genoeg moet zijn (maar hoe groot?)

4. gast! commented on 2011/10/21, 20.58 h:

ruis waarin?

5. gast! commented on 2011/10/21, 21.00 h:

/inb4 struikgewas

[image]

6. Dave commented on 2011/10/21, 21.01 h:

Ah, dat is een goeie.

Je zou kunnen kijken met een treshold. Instellen op een bepaalde waarde, alleen waardes doorlaten die erboven komen, anders op nul stellen, en dan de analyse nog eens draaien. Dan loop je wel kans dat je een piekje mist, of dat er een door ruis nog eens ontstaat, dus je moet nakijken op het oog.

Er is een flink verschil tussen de afstand van de meet-piekjes en afstanden tussen de ruis-piekjes. Ja zou de boel kunnen afronden, door elke waarde te middelen met een aantal naastgelegen waardes. Dan moet je computer de pieken duidelijker kunnen zien.

Je zou de boel kunnen kwadrateren, om de meet-pieken hoger te maken, en dan je analyse nog eens draaien.

Maar voor ik verder ga verzinnen: Wat staat er op de x- en de y-as? Is dat nog iets waar we Fourier nog even bij kunnen roepen?

[image]

"Toen ik warmtevloeistof onderzocht, heb ik de basis voor de mp3 gelegd."

7. Arduenn commented on 2011/10/21, 21.07 h:

Op de x-as staan de meetmomenten. Die zijn gerelateerd aan de tijd. Op de y-as staan de relative light units die van een fluorescerend materiaal gemeten worden die langs de detector voorbij komt. De ruis ontstaat door kosmische straling en andere verstoringen die de fotomultiplier onwillekeurig triggeren.

Ok ga eens kwadrateren en afronden, in die volgorde. Eens kijken wat eruit komt.

Voor Fourier heb ik eerst nog een paar mokken Nespresso nodig.

8. Dave commented on 2011/10/21, 21.16 h:

Je kunt het aantal waarden aan de x-as kunnen beperken. Dan verlies je wel precisie, maar ik weet niet hoe precies je antwoord moet zijn. Maar je zou een staafdiagram (histogram) van dit alles kunnen maken 100 verschillende waardes op de horizontale as. De ruis aan de verticale as middelt zich dan in elk van die staafjes uit, dus die ben je dan kwijt. Vervolgens kun je aan de computer vragen wat de hoogste waardes zijn.

Met deze methode verlies je, net als bij het middelen van elke waarde op de x-as zoals ik eerder voorstelde, wat resolutie in je antwoord. Maar dat is ook terecht, aangezien ruis ook je frequentiewaarneming verslechterd.

En dan vroeg ik me nog af: Zijn de piekjes links van de rechter piek nog relevant? En is het feit dat er een regelmatige afstand tussen deze pieken zit nog interessant? Want dan moet je een ook een principale componenten analyse of een factoranalyse draaien.

9. Dave commented on 2011/10/21, 21.21 h:

Fourier is niet echt van toepassing, tenzij deze pieken zich herhalend voordoen.

Als je alleen het moment wilt weten, en de hoogte van de piek niet relevant is, dan is kwadrateren en dan middelen met twee of drie voorgaande waarden de oplossing.

Hoe sample je eigenlijk? Als er een analoge tussenstand is, dan moet er een low pass filter tussen. Is daar geen knopje voor?

10. Dave commented on 2011/10/21, 21.23 h:

Het zal ook eens niet zo zijn dat het universum zand tussen de raderen gooit als je er heidense sequliere wetenschappelijke meetmethodes op los laat. Scumbag universum.

11. Arduenn commented on 2011/10/21, 21.27 h:

Qua low-pass filter: aan de hardware mag ik niet zitten met mijn wriemelvingertjes.

Het begint al wat te worden, trouwens. Met een beetje spelen met de paraaamters worden het al echte pieken. Plaatje volgt dra.

12. Arduenn commented on 2011/10/21, 21.38 h:

Jeetje!

[image]

Het worden al echte pieken. Ik neem nu steeds om de 10 meetmomenten een punt en middel de omliggende 10 punten (links 10 en rechts 10).

13. Arduenn commented on 2011/10/21, 21.41 h:

Er zit ook een trend in de curve. M.a.w., de 'basislijn' lijkt op grotere schaal wat te schommelen. Als ik van bovenstaande curve nou eens de afgeleide neem, dan moet die trend mooi weggepoetst worden. De pieken worden er wel weer kleiner door, denk ik...

14. gast! commented on 2011/10/21, 21.44 h:

Da's geen ruis, da's Micha Kat. Of een andere alien.

15. Arduenn commented on 2011/10/21, 22.03 h:

Nu zonder trend. Een vlakke lijn met pixels.

[image]

woet

16. Dave commented on 2011/10/21, 22.17 h:

Is je resolutie in de hoogte niet van belang?

Ik zie nog iets: Waar is de drift gebleven? En waarom is er een dip na elke piek? Heb je ook een laag-af in je filter gebouwd?

17. dave commented on 2011/10/21, 22.18 h:

Ow, ik had niet ver genoeg terug gelezen. Comment 13 is wat ik zag.

18. Dave commented on 2011/10/21, 22.21 h:

Je kunt weer wat resolutie terugwinnen als volgt:

Voor ieder punt in de meting middel je de waarde van je nieuwe meting met de 5 voorgaande en de 4 opvolgende metingen. Dan hou je het originele aantal meetmomenten, maar dan heb je wel een hoog-af filter.

Hoe heb je de trend er uit gefilterd?

19. Arduenn commented on 2011/10/21, 22.32 h:

Door de afgeleide te nemen met andere, mooiere curves, kreeg ik allemaal rommel. Ik moet de trend op een andere manier wegpoetsen. Door het gemiddelde steeds terug te trekken naar het gemiddelde aan het begin van de curve, bijvoorbeeld.]

Hier nog even de curve met het gemiddelde-filter,maar dan een langer stuk:

[image]

Oranje = ongefilterd, zwart (altijd goed) = gefilterd.

20. Arduenn commented on 2011/10/21, 22.34 h:

Overigens: de hoogte van de toppen zijn niet relevant, wl de x-waarde ervan, zo accuraat mogelijk.

21. Kittekat commented on 2011/10/21, 22.42 h:

[image]

22. Dave commented on 2011/10/21, 22.47 h:

Aha. Als die x-waarde zo belangrijk is, dan verlies je wel iets resolutie als je hoog af filtert, maar hee, dat was toch al ruis. Dus moet je het aantal waardes dat je middelt afstemmen op de ruis die je ziet. Je zou ook nog kunnen wegen: Hoe verder van het meetmoment, hoe minder het telt (dus niet als proefwerk, maar als overhoring)

Maar het ziet er al een stuk netter uit! Meten gaat eens stuk beter als je weet welke waarde er uit moet komen!

wel oppassen dat de klimaatontkenners er niet achter komen, want die snappen geen hol van data-cleaning, is me opgevallen. Climate-emails-gate bevatte niets anders dan dit soort data-cleaning, niets bijzonders dus.

23. Paul commented on 2011/10/21, 23.50 h:

[image]

Let maar niet op mij
Ik maak een boodschappenlijstje. Geen aantekeningen, ofzo

24. Jasper commented on 2011/10/22, 12.49 h:

[image]

Schrijven we wel mee, dametje?

25. Arduenn commented on 2011/10/22, 13.15 h:

Volgens mij krijgt er zometeen een billenkoek.

[image]

Woet. Genormaliseerd t.o.v. de mediaan van een initile reeks punten. Wg trend.

Ik ga eens statistisch kijken of die golfjes niet te categoriseren zijn in een groep lage signalen (de ruis, die eruit moet) en een groep hoge signalen (die blijven erin). De cut-off wordt dan het midden tussen de categorie kleine en grote. Dunkt mij...

26. Dave commented on 2011/10/22, 17.41 h:

Strak.

Wat veroorzaakt die pieken naar onderen?

27. Arduenn commented on 2011/10/22, 18.38 h:

Hele sterke signalen op andere lichtgolflengtes, die overstralen en de detector satureren.

28. Arduenn commented on 2011/10/22, 19.08 h:

En nu de Area Under The Curve * 1.2 eronderuit gerukt:

[image]

Oranje = orizineel, zwart = ontzettend gemanipuleerd

29. Arduenn commented on 2011/10/22, 19.09 h:

Het eindresultaat, ingezoomd op het originele gebied:

[image]

30. gast! commented on 2011/10/22, 19.28 h:

[image]

31. Arduenn commented on 2011/10/22, 19.36 h:

@gast!: ty!

http://www.uri.edu/research/gsc/docs/ABI%20Dy e%20Set%20card.pdf

Wat is die paarse?

32. Arduenn commented on 2011/10/22, 19.42 h:

We zijn er nog niet. Nu moeten alle waarden

$STANDARD=array(

20,30,40,60,80,100,114,120,140,160,180,200,

214,220,240,250,260,280,300,314,320,340,360,

380,400,414,420,440,460,480,500,514,520,540,

560,580,600,614,620,640,660,680,700,714,720,

740,760,780,800,820,840,850,860,880,900,920,

940,960,980,1000,1020,1040,1060,1080,1100,

1120,1160,1200

);

toegekend worden aan de pieken.

33. Arduenn commented on 2011/10/22, 19.43 h:

Ermee rekening houdend dat er soms een piekje of wat mist of er eentje extra opduikt wegens niet te onderdrukken ruis...

34. gast! commented on 2011/10/22, 19.45 h:

dat weet ik niet.

[image]

35. gast! commented on 2011/10/22, 19.45 h:

(ultra)violet?

36. Arduenn commented on 2011/10/22, 19.52 h:

37. boog commented on 2011/10/22, 21.08 h:

Ik zou het eens proberen door er eerst een lowess smoother erdoorheen te jassen, en daar een gefitte y=constant curve vanaf te trekken. De posities van de pieken zijn vervolgens de posities waar dat verschil maximaal is (of groter dan een treshold, bijvoorbeeld uitgedrukt in standaard deviaties van de ruis)

Post de ruwe data eens, arduenn.

Om alle lezertjes mee te laten doen: R is je vriend.

al zuigt de syntax harige apeballen

38. Dave commented on 2011/10/23, 13.03 h:

Je hebt wel ruis. Het gaat nooit weg.

1. het moment van het piekje blijft ruisig.

2. het middelen maakt het moment ook onzekerder.

39. choco commented on 2011/10/23, 13.19 h:

wel mooi om te zien dat alle statistieken de deur uitgegooit worden als het niet strookt met het gewenste resultaat :P

Maar verder zie ik ook duidelijk 2 joekels van hobbels!

40. Dave commented on 2011/10/23, 13.45 h:

Tuurlijk. Dat doet iedereen. Toen die hackers die emails van die klimaatwetenschappers publiceerden, gebeurden er drie dingen:

1. Leken reageerden geschokt op de discussie over datacleaning, terwijl dat niets bijzonders was. Bizarre metingen er uit, beetje ruis wegwerken, corrigeren voor veranderende meetmethodes, etc.

2. De rechtsmedia gooiden wat olie op het vuur, door citaten te verzinnen die niet in die emails staan. Multi file search is handig, maar die kut-journalisten namen niet de moeite om te doen wat ik deed. Daardoor duurde het dagen voor dat de zwendel van de rechtsmedia aan het licht kwam in de massamedia, maar toen was het gewenste resultaat al bereikt.

3. Klimaat-invloed-ontkenners gooiden op basis van verzonnen citaten alle keiharde data die hun ongelijk bewijst, overboord. Ironisch genoeg is dat een veel duidelijker voorbeeld van data naar je hand zetten dan wat ruis wegwerken, maar die ironie ontgaat de massamedia.

Moraal van dit verhaal: Pas ontzettend goed op als je leken uitlegt hoe je data zuivert.

41. roy rolls commented on 2011/10/23, 16.37 h:

witte ruis of roze ruis?

http://www.youtube.com/watch?v=oIyRuSt3An4

42. Dave commented on 2011/10/23, 17.00 h:

Die man piekt duidelijk.

43. Jasper commented on 2011/10/23, 23.28 h:

*zit in een hoekje op een biskwietje te knabbelen en mee te lezen, vindt het allemaal verdomd interessant maar begrijpt er werkelijk geen ene iota van.*

44. Arduenn commented on 2011/10/24, 8.33 h:

@gast!

Het is wel een beetje zo gegaan.

Een substantie gaat door en capillair en wordt beschenen door een UV-straal. Het monster raakt gexciteerd, de electronen verlaten de grondtoestand, keren trug en emitteren een lichtstraal. Niet alle zeven kleuren gelijk, maar slechts eentje, afhankelijk van de grondtoestand en de excitatietoestand van de electronen in de substantie.

Ik zal de ruwe getallen zo ens linken.

45. Arduenn commented on 2011/10/24, 9.35 h:

@boog: http://arduenn.com/archive/curve.txt

46. boog commented on 2011/10/24, 10.28 h:

@arduenn.

Check. heb al wat geprobeert, de lowess benadering lijkt te werken. Een met een grote span om de (niet noodzakelijke lineare) trends eruit te halen, en een tweede met een kleine span om de pieken te identificeren. Dan een 95% precentiel threshold een, om ze te isoleren.

ga er vanavond mee verder.

47. Dave commented on 2011/10/24, 15.30 h:

@Boog Met plaatjes van golfjes?

48. roy rolls commented on 2011/10/24, 22.47 h:

en dan volgen nu de waterstanden:

pannerdingen aan de zee: -103, plus 3

lobith: -205 plus 76

maastricht: -700045 , min 4003

nec-nac: nul nul

49. boog commented on 2011/10/24, 23.34 h:

Hier de resultaten van wat huisvlijt.

Eerst de data laden en tonen:

all.y = scan("curve.txt")

n = 5000

y=all.y[1:n]

x=seq(1,n)

plot(x,y, type='l',col=gray(0.8))

[image]

Dan de ruis eruit filteren doormiddel van een moving median filter (geen moving average, want die is veel gevoeliger voor uitschieters, zoals de pieken). We hebben wel een flinke window size nodig, 301 bijvoorbeeld.

library(zoo)

rm = rollmedian(y, 301, na.pad=TRUE)

lines(x,rm, col="red")

[image]

Merk op dat deze moving median vrij stabiel is op deze deelreeks, aangezien hier nog weinig drift/trend in zit. Voor de gehele dataset is dat anders.

Volgende stap is detrending, door simpelweg de moving median van de oorspronkelijke data af te trekken.

y.norm = y - rm

plot(x, y.norm, type='l', col=gray(0.8))

[image]

Nu kunnen we veilig op jacht gaan naar de pieken. Dat kun je doen op basis van de standaardafwijking in de detrended ruis, maar ik blijf geheel in de geest van de moving median lekker non-parametric bezig en gebruik de 95e percentiel als drempelwaarde.

p95 = quantile(y, 0.95)

y.peak = y.norm

y.peak[y.norm < p95] = NA

lines(x, y.peak, col="red")

[image]

De piekmomenten zou je vervolgens kunnen detecteren als zijnde de x-waarde behorende bij de hoogste y voor elk rood piekje in bovenstaande grafiek.

Dat zou ik nog moeten uitwerken. De voor de hand liggende aanpak is eerst een binaire codering maken van piek / geenpiek metingen, en dan zo alle clusters aflopen.

Exercise 1: Implement above algorithm

50. paul commented on 2011/10/25, 1.08 h:

[image]

deelt uit aan Jasper

51. Arduenn commented on 2011/10/25, 11.43 h:

[image]

Deelt uit aan boog

Ik denk dat ik in PHP ook de trend eruit heb gehaald met de moving median, maar eerst de ruis gemiddeld had. Die piekintervallen ga ik inderdaad nemen om de hoogste uit te vissen.

52. boog commented on 2011/10/25, 13.41 h:

Dataanalyse met PHP? Dat is bijna net zoiets als regeren met de pvv, omdat het kan.

Voor de volledigheid: ik gebruik dus R.

Gaat weer verder met betaalde data-analyse: checken of Nederland wel aan zijn verplichtingen voldoet, qua varkenspoep en waterkwaliteit.

53. Arduenn commented on 2011/10/25, 14.13 h:

Dataanalyse met PHP?

Ik kan ook een python in elkaar draaien, met hetzelfde (zoniet groter) gemak. Het moet in ieder geval een web app worden.

54. Arduenn commented on 2011/10/25, 14.14 h:

Kan R ook minimal spanning trees maken?

55. boog commented on 2011/10/25, 14.43 h:

There's a package for that!

Meer dan n zelfs:

nnclust heeft mst()

ade4 heeft mstree()

vegan heeft spantree()

Voor een overzicht van R libraries voor verschillende domeinen, zie de CRAN Task Views

Het verbaast me overigens dat je R niet kent. Check Bioconductor eens.

56. Arduenn commented on 2011/10/25, 17.48 h:

R heeft nooit in het curriculum gezeten in het Limburgse. Ik heb alles tijdens mijn promotietijd zelf maar een beetje moeten leren (1993 e.v., de begindagen van de interwebs. Al het bioinformatische ging toen via Kermit/FTP en Telnet richting KAOS/KAMM in Nijmegen en terug).

57. jorrit commented on 2011/10/26, 20.09 h:

R heeft ook een python module, voor je webapp.

58. ikiro commented on 2011/10/26, 20.19 h:

Witte ruis klinkt ook meer Brabants dan Limburgs.

Is jullie Matlab stuk ofzo?

59. boog commented on 2011/10/27, 11.41 h:

Voor matlab moet je een licentie hebben.

60. Arduenn commented on 2011/10/27, 11.48 h:

Ze hebben hier wel matlab, idd, maar da's na mjn tijd en dat laat ik verder aan de bioinformatici over, qua onderwijs.

If your experiment needs statistics, then you ought to have done a better experiment. Ernest Rutherford

61. Dave commented on 2011/10/27, 20.11 h:

"geen moving average, want die is veel gevoeliger voor uitschieters, zoals de pieken

"De belangrijkste dingen staan tussen haakjes. Met dat gedonder met middelen zou je inderdaad de geldige data verneuken!

Daar gaat ons schoolsy steem ook aan ten onder. Alles wordt maar gemiddeld, waardoor de mensen die het talent hebben om briljant uit de hoek te komen binnen hun vakgebied, op school niet kunnen excelleren. "Uw zoon scoort over het algemeen een beetje matigjes, al had hij wel een 10 voor n van de scheikundeproefwerken."

En bij talentenjachten idem dito. Een band met een briljante zanger, of teksten of gitarist verdwijnt in het eeuwige middelen. De band die overal zevenkommazesjes voor scoort, komt wel overal doorheen. "De jury heeft lang moeten nadenken, maar uiteindelijk wint de band Middenmoot de Grote Prijs van Nederland."

62. Dave commented on 2011/10/27, 20.14 h:

Het bioinformatische ging via Kermit!

Lol, dat waren nog eens tijden. Zat je met VT100 te kloten, of je toestenbord was in de war, of VM/CMS had een letter niet ontvangen OF niet aan je terug gestuurd. En een fijn numeriek emailadres had ik toen. Iets met u211...@soc.uci.kun.nl ofzo

63. Arduenn commented on 2011/10/27, 20.51 h:

Vroegh, toen minicomputers zo klein waren als koelkasten!

Met allemaal lampjes erop!

64. boog commented on 2011/10/27, 23.11 h:

Vroegh, toen je de interwebs nog geheel uitprintte. Althans: de lijst met alle Anonymous-FTP sites.

* zoekt *

Goedver! Die lijst bestaat nog steeds.

On topic: mediaan nemen is natuurlijk ook middelen, maar dan anders. Om die 10 van Dave mee te laten tellen moet je overigens juist wel het rekenkundig gemiddelde nemen, en vooral niet de mediaan...

65. ikiro commented on 2011/11/1, 11.20 h:

Als Matlab voor je tijd is gaat ik er helemaal geen woorden aan vuil maken ;-)

En Matlab alleen voor statistiek? Tsssk Kijkt met schuin oog naar mobiele telefoon met chip gemaakt op waferscanner ten dele (een klein deel dan) bestuurt met Matlab code gehacked in Vi op gare Sun bak van 15jr oud.

66. Arduenn commented on 2011/11/1, 11.46 h:

Minitab op de VAX/VMS!

67. Arduenn commented on 2011/11/1, 11.49 h:

Volgens mij was het deze:

[image]

Add new comment:

Name:

Site: