Data analyse, Meten & Onzekerheid#

In natuurkundige experimenten probeer je verbanden of bepaalde waarden zo goed mogelijk vast te leggen. Wat zo goed mogelijk dan precies inhoudt, blijft nu nog even onduidelijk. Wat hopelijk wel meteen duidelijk is, is dat we die waarden vrijwel nooit direct vast kunnen stellen. We voeren verschillende experimenten uit om data te verzamelen waarmee we het verband kunnen bepalen en vervolgens zo goed mogelijk de verschillende parameters in dat verband vast te stellen.

Het lukt echter nooit om de exacte waarde(n) van die parameter(s) vast te stellen: bij elke nieuwe meting zullen er kleine fluctuaties zijn (zeker als je heel precies meet). In de loop der tijd hebben we onze experimenten kunnen verbeteren, en kunnen we in kortere tijd meer metingen doen. Dit zorgt er dan ook voor dat in de loop van de geschiedenis constanten, zoals de constante van Planck, steeds beter bepaald zijn en dat de waarde in de loop der jaren verschilt.

Het gevolg van het nooit precies kunnen vast stellen van een waarde is dat als je gaat werken met die waarde je eindantwoord ook nooit perfect (gedetermineerd) is. Er zal altijd een onzekerheid zijn wat de preciese waarde daadwerkelijk is. In dit hoofdstuk leer je hoe de onzekerheid in een gemeten waarde doorwerkt in het eindantwoord (de basis, significante cijfers en bijbehorende rekenregels, ken je al), en hoe je die onzekerheid zo klein mogelijk maakt.

NOTE: De woorden meetfout en meetonzekerheid lopen vaak door elkaar heen. In veel gevallen zou meetonzekerheid preciezer beschrijven wat er bedoeld wordt. Een meetfout impliceert dat je iets echt fout doet, zonder dat je daar iets aan kunt doen. De fout komt inherent voort uit het gebruik van een instrument, van het meten zelf. In dat geval zou het dus netter zijn om te praten over de onzekerheid. Alhoewel we hier heel zorgvuldig proberen het onderscheid te maken, gebeurt het in het algemeen taalgebruik dat de twee termen onbedoeld verwisseld worden.

Doel#

Een volledige data-analyse zal vaak bestaan uit de volgende drie fasen:

  1. het bepalen van de betrouwbaarheid van individuele metingen en de dataset als een geheel;

  2. het vinden en bepalen van het patroon in de data met daarbij de bepaling van de variabelen met hun bijbehorende onzekerheden;

  3. een optimale data(re)presentatie om te overtuigen van fasen 1 & 2.

Het doel van dit onderdeel van het natuurkundig practicum is elk het ontwikkelen van een dieper begrip van de bovenstaande fasen en het leren toepassen van de bijbehorende technieken.

Grootheden, eenheden, dimensie-analyse en constanten#

In de natuurkunde meten we fysische grootheden. We onderscheiden vectoren (grootheden met een richting \(\vec{F}\) (N)) en scalairen (grootheden met alleen een waarde (\(m\) (kg)). De grootheid wordt schuingedrukt (\(U\)), bijbehorende eenheid rechtop (V).

Er zijn vijf veel gebruikte standaardeenheden (kg, m, s, K, C). Er is ook nog een zesde standaardeenheid die je minder vaak tegen komt (cd). Alle andere eenheden zijn afgeleid van deze standaardeenheden. De afleiding van de eenheid gebeurt op basis van de formule:

Op een zelfde wijze, op basis van eenheden (dimensie-analyse), kun je formules afleiden als je weet welke grootheden mogelijk een rol spelen. Bij het tweedejaarsvak Fysische Transportverschijnselen zal daar veel dieper op ingegaan worden. Wil je weten hoe je een dimensie-analyse uitvoert? Kijk dan eens dit filmpje:

Bij veel experimenten waarin je een verband bepaalt, maak je gebruik van een constante, bijvoorbeeld de constante van Planck. CODATA heeft een mooi lijstje gemaakt van die constanten met hun bijbehorende (relatieve) onzekerheid. Maak gebruik van deze referentie bij het opzoeken en gebruik van natuurkundige constanten.

Fouten en onzekerheden in fysische metingen#

Elke meting aan een fysische grootheid komt met een bepaalde onzekerheid in de meting. Dit komt alleen al doordat je met een meting hetgeen je meet beïnvloedt. In Figuur {number} en Figuur {number} zijn hier twee voorbeelden van gegeven. Het plaatsen van een spanningsmeter in een elektrisch circuit, verandert het inherent het oorspronkelijke elektrisch circuit. Het plaatsen van een drukmeter (buis van Venturi) in een vloeistofstroom, beïnvloedt de oorspronkelijke opstelling en daarmee de vloeistofstroming.

../_images/beinvloeding_meting.png

Het meten van de spanning verandert het elektrische circuit zelf.#

../_images/venturi.png

Het plaatsen van drukmeters in een vloeistofstroom beïnvloedt de oorspronkelijke stroom.#

Systematische fout#

Naast beïnvloeding van de meting aan je fysische grootheid door die te meten, zijn er andere oorzaken die kunnen leiden tot ‘fouten’. We onderscheiden daarin systematische fouten van willekeurige fouten. Een systematische fout zal altijd even groot zijn, en zorgt dus voor een afwijking in je gemiddelde resultaat. Zo’n fout beïnvloedt sterk je eindresultaat. Gelukkig kun je hier wel voor corrigeren. Voorbeelden van systematische fouten zijn een nulpuntsfout en een calibratiefout, zie bijvoorbeeld Figuur {number}.

../_images/Meetfout.png

Hier ontstaat een systematische fout wanneer je er niet op bedacht bent dat de liniaal niet bij 0 begint.#

Om er achter te komen of er een systematische fout in je data zit, kun je dit controleren met bijvoorbeeld Python. Het best valt dit uit te leggen aan de hand van een voorbeeld.

In Figuur {number} is het verschil te zien tussen een fit met en zonder compensatie van systematische fout. Alhoewel de bovenste figuur een goede fit lijkt te zijn, is te zien dat de fit van de onderste figuur nog beter door alle metingen heen gaan. Straks zullen we bekijken hoe we zulke fouten systematischer kunnen onderzoeken.

../_images/quad_without.png

Least-squares curve fit zonder correctie voor een systematische fout: \(F = \frac{a}{r^4}\)#

../_images/quad_with.png

Least-squares fit met correctie voor een systematische fout: \(F = \frac{a}{(r+\Delta r)^4}\) Duidelijk is dat de fit nu door alle meetpunten gaat.#

Willekeurige fout#

Een willekeurige meetfout kan ontstaan door bijvoorbeeld temperatuurschommelingen, vibraties, luchtstromingen, botsingen op moleculair niveau etc. Er is dan sprake van een technische willekeurige fout. Deze onzekerheden kun je niet altijd verkleinen. Willekeurige fouten zijn zowel positief als negatief, en middelen dus uit als je genoeg metingen doet. Je kunt er mee werken en rekenen doordat er een kansverdeling aan ten grondslag ligt. In de volgende paragrafen gaan we er van uit dat je steeds te maken hebt met een willekeurige fout, dat wil zeggen een fout die niet gecorreleerd is met andere variabelen en waarvan de kans dat die fout optreedt normaal (Gaussisch) verdeeld is.

Naast technische willekeurige fouten, kun je te maken krijgen met fundamentele fouten doordat aan sommige metingen een fysische beperking zit, bijvoorbeeld door thermische fluctuaties wanneer je meet aan stroomsterktes. Er is dan sprake van een fundamentele willekeurige fout. Deze bijdrage aan de meetonzekerheid kun je niet reduceren. De bijdrage aan de totale onzekerheid kan zowel positief als negatief zijn.

Instrumentele onzekerheid#

Elk instrument dat je gebruikt heeft bepaalde beperkingen. De onzekerheid kan liggen in het aflezen van het instrument, maar ook aan het instrument zelf, en dan ook nog eens aan de waarde van de gemeten grootheid. Daarnaast moet je (sommige) instrumenten eerst ijken voordat je ze gebruikt. Een fout in de ijking kan leiden tot een systematisch fout.

Bij het gebruik van instrumenten wordt vaak gebruik gemaakt van de termen precision en accuracy. Precision verwijst naar de kleine spreiding in de metingen. Precision is nauw verbonden met willekeurige fouten. Accuracy verwijst naar hoe dicht de metingen liggen op de gewenste waarde. Accuracy is nauw verbonden met systematische fouten. De vier varianten die je kunt hebben, zijn weergegeven in Figuur {number}.

../_images/precision.png

De vier varianten aangaande nauwkeurigheid en precisie. Nauwkeurigheid is sterk gelinkt aan systematische fouten, precisie aan willekeurige fouten.#

Meetonzekerheid bij analoge instrumenten
Bij analoge instrumenten moet je aflezen wat de waarde is, zie Figuur {number}. In sommige gevallen zit er achter de wijzer een spiegeltje zodat je niet al een fout maakt door de wijzer onder een hoek af te lezen. Daarnaast kun je niet oneindig precies aflezen wat de waarde is. Denk aan meetlat waar je op mm nauwkeurig kunt meten, maar afstanden tussen de mm niet goed te bepalen zijn, zeker niet wanneer de lijntjes van het liniaal dik zijn. Voor het aflezen van een analoge meter moet je een inschatting maken van de bijbehorende onzekerheid. Lees de waarde zo goed mogelijk af. Bepaal de waarden die je nog goed kunt aflezen. Neem vervolgens de helft van de waarde die je tussen twee nog te bepalen waarden als maat voor onzekerheid.

Zoals je ziet zijn er lang niet altijd vaste voorgeschreven regels voor het bepalen van de meetonzekerheid en komt het soms neer op gezond verstand en beargumenteren hoe je aan die waarde komt.

../_images/aflezen.png

Het aflezen van een analoge meter waarbij het eerste decimaal op basis van interpolatie geschat moet worden.#

Meetonzekerheid bij digitale instrumenten
Bij het aflezen van een digitaal instrument, zie Figuur {number} zou je zeggen dat de onzekerheid zit in het laatste decimale cijfer dat getoond wordt. Echter is de onzekerheid van digitale instrumenten veel groter dan het laatste decimale cijfer, denk maar eens aan de onzekerheid bij het gebruik van een stopwatch. Bij apparaten die je op het natuurkundig practicum gebruikt, wordt die onzekerheid soms zelfs bepaald door de leeftijd van het apparaat en de tijd dat deze aanstaat (warm worden). Voor veel digitale (dure) apparaten staat in de specificaties precies vermeld hoe de meetonzekerheid berekend moet worden.

../_images/digituitle.jpg

De digitale multimeter bepaalt de ’exacte’ waarde van een 33 kΩ (5% tolerantie) weerstand#

Gemiddelde, standaard deviatie en standaard onzekerheid#

Doordat meetwaarden kunnen flucteren, geeft het gemiddelde van een serie herhaalde metingen (\(x_i\)) de best mogelijke benadering van de werkelijke waarde. De gemiddelde waarde bereken je op basis van de serie herhaalde metingen:

()#\[\mu(x)=\overline{x} = \frac{x_1 + x_2 + x_3 + ... + x_n}{N} = \frac{1}{N}\sum_{i=1}^{N} x_i\]

Uiteraard is een herhaalde meting alleen zinnig wanneer je instrument nauwkeurig genoeg is om variaties te tonen. In de serie metingen zit een mate van spreiding: De metingen verschillen van elkaar. De standaard deviatie is een maat voor die spreiding:

()#\[\sigma(x) = \sqrt{\frac{\sum_{i=1}^N (x_i-\overline{x})^2}{N-1}}\]

Alhoewel het gemiddelde en de standaard deviatie beter gedefinieerd worden met meer metingen, neemt de standaard deviatie niet af in waarde, zie Figuur {number}. De spreiding zelf is dan ook geen goede maat voor de onzekerheid in je gemiddelde waarde. De onzekerheid in je gemiddelde wordt gegeven door:

()#\[u(x) = \frac{\sigma(x)}{\sqrt{N}}\]

Een belangrijk inzicht is dat de meetonzekerheid afneemt met de wortel van het aantal metingen. Om de meetonzekerheid op basis van meerdere metingen 10x zo klein te krijgen, moet je 100x zoveel herhaalde metingen uitvoeren. Het optimum van het aantal herhaalde metingen hangt dan ook af van (1) de nauwkeurigheid die je wilt hebben, en (2) de tijd en geld die je hebt om die nauwkeurigheid te verkrijgen.

../_images/noise_anim.gif

Het genereren van ruis weergegeven als punten en in een histogram. Links onder de standaard deviatie (convergeert) en rechtsonder de meetonzekerheid (wordt kleiner met \(\frac{1}{\sqrt{N}}\)).#

De meetonzekerheid is gelijk aan de deviatie van het gemiddelde van herhaalde experimenten. Dat wil zeggen, als het volledige experiment herhaald wordt, zal er steeds een verschil zitten in het gevonden gemiddelde. De standaard deviatie daarvan is gelijk aan \(u(x)\), ofwel, er is een kans van grofweg 2/3 dat bij een herhaling van het volledige experiment het gemiddelde tussen \(\overline{x} \pm u(x)\) ligt. In onderstaande code zie je hoe je die bewering zou kunnen controleren.

Tip

Om de code hieronder te runnen en aan te passen, druk op het raketje bovenaan de pagina. Na het inladen van de benodigde packages, kun je aan de slag!

# we voeren hier een experiment met 1000 samples 100x uit. Als bovenstaande klopt, dan is de standaard deviatie in het gemiddelde van de verschillende experimenten gelijk aan de onzekerheid in een enkele dataset.
import numpy as np

mean_values = np.array([])
N = 100
samples = 1000

for i in range(N):
    dataset = np.random.normal(1.00,0.5,samples) 
    mean_values = np.append(mean_values,np.mean(dataset))
    
print('De standaard deviatie in het gemiddelde van herhaalde experimenten is: ', np.std(mean_values,ddof=1))
print('De onzekerheid in een enkele dataset is: ', np.std(dataset,ddof=1)/np.sqrt(samples))
De standaard deviatie in het gemiddelde van herhaalde experimenten is:  0.01659514519221218
De onzekerheid in een enkele dataset is:  0.015854859975105415

De uiteindelijke waarde die je gebruikt noteer je als: Meting \(\pm\) onzekerheid + eenheid. De onzekerheid bepaalt het aantal te gebruiken significante cijfers. Je gebruikt namelijk hetzelfde aantal decimale cijfers.

Gewogen gemiddelde#

Het kan voorkomen dat niet alle herhaalde metingen even betrouwbaar zijn. Als meting 1 twee keer zo kleine onzekerheid heeft als meting 2, dan lijkt het logisch dat het gemiddelde berekend wordt door \(\frac{2 \cdot x_1 + 1 \cdot x_2}{3}\). We spreken dan over een gewogen gemiddelde. De vraag is dan natuurlijk hoe je aan de uitspraak komt over de betrouwbaarheid en hoe we daarmee aan onze weegfactor komen. Gelukkig hebben we daar net een maat voor gevonden, nl. de meetonzekerheid. De weegfactor wordt gedefinieerd door:

()#\[w_i = \frac{1}{u(x_i)^2}\]

Het gewogen gemiddelde is daarmee:

()#\[\overline{x} = \frac{w_1 x_1 + w_2 x_2 + w_3 x_3 + ... + w_n x_n}{w_1 + w_2 + w_3 + ... + w_n} = \frac{\sum_{i=1}^{N} w_i x_i}{\sum_{i=1}^{N} w_i}.\]

met een bijbehorende onzekerheid van:

()#\[u(x) \sqrt{\frac{1}{\sum_i^N{w_i}}}\]

Merk op dat de bovenstaande formule wordt gereduceerd tot het normale gemiddelde als alle weegfactoren \(w_i\) gelijk zijn aan 1.

Kansverdelingen#

Zoals aangegeven zit er spreiding in herhaalde metingen. De fysische meting \(M\) kunnen we zien als de optelsom van de fysische waarde \(G\) en ruis \(s\):

()#\[M = G + s\]

Ruis is hier ruim gedefinieerd, we verstaan er hier even alle mogelijke fouten onder. Onze interesse gaat met name uit naar willekeurige fouten. Deze zijn normaal verdeeld.

Normale verdeling#

Wanneer we te maken hebben met willekeurige ruis, dan kan de kans dat een waarde optreedt beschreven worden aan de hand van een normale (Gaussische) verdeling:

()#\[ P(x) = \frac{1}{{\sigma \sqrt{2\pi}}}e^{\frac{{-(x - \mu)^2}}{{2\sigma^2}}} \]

hierin is \(P(x)\) de kansdichtheidsfunctie, met \(\mu\) het gemiddelde waarde van de ruis en \(\sigma\) de standaard deviatie.

Een voorbeeld van een ruis signaal is weergegeven in Figuur {number} (de bijbehorende code is in een cel daaronder getoond). Het gemiddelde van deze waarden is 0. Het herhalen van metingen zorgt er dus voor dat de invloed van de ruis beperkt wordt omdat de gemiddelde bijdrage 0 is:

()#\[\overline{M} = \frac{\sum_{i=1}^{N} (G + s)}{N} = \frac{\sum_{i=1}^{N} G + \sum_{i=1}^{N} s}{N} = \frac{\sum_{i=1}^{N} G}{N} = \overline{G}\]
../_images/noise.png

Random noise, te zien is dat grote uitschieters voorkomen, maar minder frequent.#

../_images/noise_average.png

De gemiddelde waarde van ruis wordt steeds beter gedefinieerd bij herhaalde metingen.#

../_images/noise_sigma.png

De standaard deviatie wordt steeds beter gedefinieerd bij herhaalde metingen.#

We moeten hier wel voorzichtig mee zijn, in Figuur {number} is te zien dat een histogram van vier herhaalde metingen aan ruis steeds een net iets ander beeld geeft. Elk histogram bestaat uit een 1000 herhaalde metingen. Er is dus zelfs een onzekerheid in de onzekerheid \(\left( \frac{1}{\sqrt{2N-2}}\right )\). De precieze wijze waarop we onze waarden rapporteren is uitgewerkt in Standaard onzekerheid en significante cijfers.

../_images/noise1.png

Zelfs 1000 herhaalde metingen (aan ruis) laten verschillen zien.#

# Maken van 1000 random punten
x = np.random.normal(0,5,1000)

# Bereken van gemiddelde waarde en standaard deviatie
av_x = np.array([])
std_x = np.array([])
for i in range(1,len(x)-1):
    av_x = np.append(av_x,np.mean(x[:i]))
    std_x = np.append(std_x,np.std(x[:i],ddof=1))

# Plotten van de waarden als functie van N
fig, axs = plt.subplots(1,3,figsize=(15, 5))
axs[0].plot(x,'k.',markersize=1)
axs[0].set_xlabel('N')
axs[0].set_ylabel('')

axs[1].plot(av_x,'k.',ms=1)
axs[1].set_xlabel('N')
axs[1].set_ylabel('average of x as function of N')

axs[2].plot(std_x,'k.',ms=1)
axs[2].set_xlabel('N')
axs[2].set_ylabel('standard deviation of x as function of N')

plt.show()
/usr/local/lib/python3.11/site-packages/numpy/core/_methods.py:269: RuntimeWarning: Degrees of freedom <= 0 for slice
  ret = _var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,
/usr/local/lib/python3.11/site-packages/numpy/core/_methods.py:261: RuntimeWarning: invalid value encountered in scalar divide
  ret = ret.dtype.type(ret / rcount)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[2], line 12
      9     std_x = np.append(std_x,np.std(x[:i],ddof=1))
     11 # Plotten van de waarden als functie van N
---> 12 fig, axs = plt.subplots(1,3,figsize=(15, 5))
     13 axs[0].plot(x,'k.',markersize=1)
     14 axs[0].set_xlabel('N')

NameError: name 'plt' is not defined

Poissonverdeling#

Een tweede kansverdeling die we hier introduceren is de Poissonverdeling. De Poissonverdeling is een discrete (in tegenstelling tot de normaalverdeling) kansverdeling, die gebruikt wordt om onafhankelijke gebeurtenissen te tellen binnen een bepaalde tijd, waarbij de evenementen zelf ook op een normale verdeling zijn gebaseerd. Voorbeelden hiervan zijn radioactief verval, het aantal photonen dat op een detector valt, etc.

De kans op \(k\) gebeurtenissen binnen een bepaalde tijd met een gemiddelde van \(\lambda\) wordt gegeven door:

()#\[ P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}. \]

De standaardafwijking in een Poissonverdeling is gelijk aan de wortel van het gemiddelde (\(\sigma = \sqrt{\lambda}\)).

Zowel de vorm als de functie lijken wat op die van de Gaussische verdeling. Maar met name bij kleine waarden voor \(\lambda\) zijn er duidelijke verschillen. Ook is het aantal events altijd groter dan 0, terwijl bij een Gaussische verdeling een verwachtingswaarde ook kleiner kan zijn dan 0.

Uniforme verdeling#

Als je een dobbelsteen gooit is de kans op het gooien van een 1 even groot als het gooien van een 6. Met andere woorden, de kans voor willekeurig welk getal is uniform (discreet) verdeeld. Stel nu dat we te maken hebben met een continue, uniforme kansverdeling dan geldt er voor de kansdichtheidsfunctie:

()#\[\begin{split} P(x)= \begin{cases} \frac{1}{b-a},& \text{als } a<x<b\\ 0, & \text{elders} \end{cases} \end{split}\]

De kans dat een punt zich tussen de waarde \(X\) en \(X+dX\) bevindt (als \(X\) zich tussen \(a\) en \(b\) bevindt!), wordt dan gegeven door:

\[ p(X<x<X+dX) = \int_{X}^{X+dX}\frac{1}{b-a}dx \]

De verwachtingswaarde is eenvoudig uit te rekenen en wordt gegeven door:

()#\[ \mu = \frac{a+b}{2} \]

en de standaard deviatie:

()#\[ \sigma = \sqrt{\frac{(b-a)^2}{12}} \]

Monte Carlo simulatie#

Zo’n uniforme verdeling is handig bij bijvoorbeeld Monte Carlo simulaties. In zo’n simulatie wordt een groot aantal random punten aangemaakt en vervolgens wordt onderzocht waar die punten terecht komen. Voor een niet analytische oplosbare integraal kun je zo alsnog het oppervlak uitrekenen, nl:

()#\[ \int_{a}^{b} f(x) dx = \frac{N}{N_{totaal}} \cdot (b-a) \cdot (y_{max} - y_{min}) \]

Hierin zijn \(y_{min}\) en \(y_{max}\) de verticale grenzen die je kiest voor het maken van je random punten. Die moeten natuurlijk wel de gehele grafiek omvatten!

Een voorbeeld van een Monte Carlo simulatie is gegeven in Figuur {number} waarbij een eenvoudige integraal is uitgerekend door voor 10.000 punten uit te rekenen of geldt: \(y<x^2\). De integraal op het domein [0,5] is dan: het aantal punten dat aan deze voorwaarde voldoet gedeeld door het totaal aantal gecreeerde punten maal 5 maal 25. In zo’n Monte Carlo simulatie (wat een telprobleem is) schaalt de onzekerheid met \(\frac{1}{\sqrt{N}}\), waarin \(N\) het aantal punten is dat voldoet aan de voorwaarde (dus kies je de verticale grenzen optimaal!).

../_images/montecarlopi_square.png

Een voorbeeld van een Monte Carlo simulatie voor het berekenen van een integraal met behulp van een uniforme verdeling van random punten.#

Criterium van Chauvenet#

Herhaalde metingen leiden tot een beter gemiddelde. Echter in herhaalde metingen kunnen bepaalde waardes veel afwijken van het gemiddelde. Het kan verleidelijk zijn om een meetpunt dat wel erg veel afwijkt van de rest simpelweg af te schrijven als meetfout. Echter is dit al snel manipuleren van data en dat is niet de bedoeling. Je kunt het criterium van Chauvenet toe passen om te kijken of het meetpunt verwijderd mag worden. Het criterium van Chauvenet is een vuistregel (er zijn andere, meer gecompliceerde methoden om na te gaan of je datapunten mag verwijderen, maar die werken we hier niet uit). Het criterium van Chauvenet zegt dat een meting uit de dataset verwijderd mag worden als de kans daarop kleiner is dan \(\frac{1}{2N}\) ofwel \(P(X)<\frac{1}{2N}\).

Verder uitgewerkt houdt dit in dat je eerst het gemiddelde en de standaardafwijking uitrekent van je data, inclusief het verdachte punt. Vervolgens mag je een punt achterwege laten als het voldoet aan de volgende ongelijkheid:

()#\[N\cdot P_{out} < 0.5\]

waar

()#\[P_{out}=2Erf(x_{out},\overline{x},\sigma)\]

erf is hier de errorfunctie, de integraal van de normale verdeling. De uitkomst van deze integraal is niet algebrarisch uit te rekeken. Op https://www.danielsoper.com/statcalc/calculator.aspx?id=53 kun je de waarde voor de errorfunctie berekenen. Hieronder werken we uit hoe dat gaat in Python.

Als je het criterium van Chauvenet gebruikt om een outlier uit te sluiten, moet je dit altijd vermelden in je verslag! Daarnaast moet je wederom het gemiddelde en standaard deviatie uitrekenen na de verwijdering van het verdachte punt. Dit punt heeft immers een significant effect op je dataset

Error function(s)#

Er zijn twee soorten error functies, de \(\text{erf}(x)\) en de \(\text{Erf}(x_{out},\overline{x},\sigma)\) (ook wel de cdf functie genoemd). Die als volgt gedefinieerd zijn:

()#\[\begin{split} \begin{align*} \text{erf}(x) &= \frac{2}{\sqrt{\pi}} \int_0^x e^{-t^2} dt \\ \text{Erf}(x, \overline{x}, \sigma_x) &= \frac{1}{2} \left[1 + \text{erf}\left(\frac{x - \overline{x}}{\sqrt{2}\sigma_x}\right)\right] \end{align*} \end{split}\]

Een plot van beide is te zien in Figuur {number}

../_images/erfplots.png

2 plots, een met de \(\text{erf}(x)\) en een met de \(\text{Erf}(x_{out},\overline{x},\sigma)\) (rechts), \(\overline{x} = 10\) en \(\sigma = 5\).#

Beide functies zijn te vinden in de scipy.special.erf en de scipy.stats.norm.cdf functie. Wanneer je gebruik maakt van de \(\text{Erf}\) of de scipy.stats.norm.cdf functie (of de site) moet je opletten dat wanneer je een outlier naar boven gaat onderzoeken dat de functies je allemaal een waarde boven de 0.5 gaan terug geven. Dit betekent dus dat je \(P_{out\_new} = 1 - P_{out}\) moet doen. De uiteindelijke code zou dus iets in deze trant moeten zijn:

from scipy.stats import norm

#P is the dataset (a numpy array)
x_out = np.max(P) #In this case, could also have been other outliers
x_mean = np.mean(P)
x_std = np.std(P,ddof=1)

#Use the Erf function
Q = norm.cdf(x_out,x_mean,x_std)
#You could have also defined the Erf on your own

#Check if it is a high 'outlier'
if Q > 0.5:
    Q = (1-Q)

#Use Chauvenets criterion
C =  2 * len(P) * Q

if C < 0.5:
    print('The value can be discarded.')
else:
    print('The value cannot be discarded.')

Standaard onzekerheid en significante cijfers#

Een belangrijke regel met betrekking tot significantie is dat je eerst het aantal decimalen van je onzekerheid bepaalt. Als je minder dan \(10^3\) meetpunten hebt, heeft de onzekerheid één significant cijfer. Je past hier de significantie van je resultaat hier op aan, zodat het laatste cijfer dezelfde waarde heeft als je onzekerheid. Je kunt gebruik maken van machten van 10 of voorvoegsel om het getal duidelijk weer te geven, zie tabel hieronder.

Er is nog wel een belangrijk punt aangaande afronden. Als je alle vijven naar boven af zou ronden, zou je een systematische fout introduceren, je rondt altijd af naar boven. De afspraak is dat bij een even getal voor de 5 naar beneden wordt afgerond (33.45 \(\rightarrow\) 33.4), bij een oneven getal voor de 5 wordt naar boven afgerond (33.55 \(\rightarrow\) 33.6). Daarnaast is het in sommige vakgebieden goed gebruik dat de onzekerheid niet afgerond wordt naar beneden, dit voorkomt een onderschatting van de onzekerheid. Binnen het natuurkundig practicum letten we daar echter niet op.

Tabel: Machten van 10 met bijbehorend symbool.

macht van 10

\(10^{-12}\)

\(10^{-9}\)

\(10^{-6}\)

\(10^{-3}\)

\(10^{-2}\)

\(10^{-1}\)

\(10^1\)

\(10^2\)

\(10^3\)

\(10^6\)

\(10^9\)

\(10^{12}\)

voorvoegsel

pico

nano

micro

milli

centi

deci

deca

hecto

kilo

mega

giga

tera

symbool

p

n

\(\mu\)

m

c

d

da

h

k

M

G

T

Voor extra informatie over significante cijfer kan je dit filmpje bekijken.

Doorwerken van onzekerheden#

Vaak laat je een berekening op je ruwe data los om tot een antwoord op je onderzoeksvraag te komen. Een kleine afwijking in je meting kan grote gevolgen hebben voor je eindantwoord. Daarom is het belangrijk om rekening te houden met het doorwerken van onzekerheden. Er zijn twee methodes om fouten door te rekenen; de functional approach en de calculus approach. De eerstgenoemde is wat intuïtiever, maar de tweede is dan weer iets makkelijker uit te rekenen.

We gaan er in de onderstaande theorie vanuit dat we een functie \(Z\) toepassen op onze empirisch bepaalde waarde \(x\) waarvan het gemiddelde \(\overline{x}\) is met een onzekerheid \(u(x)\).

Functional approach#

Bij de functional approach kijk je naar het verschil als je de functie evalueert in het punt dat één onzekerheid van je meetpunt af ligt. In formulevorm wordt het dan:

()#\[u(Z) = \frac{Z(\overline{x}+u(x)) - Z(\overline{x} - u(x))}{2}\]

In veel gevallen is er sprake van symmetrie waardoor bovenstaande vergelijking ook opgevat kan worden als:

()#\[u(Z) = Z(\overline{x}+u(x)) - Z(\overline{x})\]

De functional approach is heel handig toe te passen bij berekeningen die je moet herhalen. Je definieert in python eerst de functie en laat vervolgens voor de variabelen + onzekerheid de uitkomst uitrekenen, zie de code hieronder voor het gegeven voorbeeld. Dit scheelt je een hoop tijd en rekenwerk. Echter, bij het opzetten van een nieuwe methode geeft de calculus approach een beter beeld van de grootte van de onzekerheden. Met behulp van de calculus approach kun je je experiment dimensioneren.

import numpy as np
def omtrek(x,a):
    return 2*np.pi*(x+a)
    
r = 2.0
ur = 0.1

u_omtrek = (omtrek(r,ur)-omtrek(r,-ur))/2
print(u_omtrek)

Calculus approach#

Bij de calculus methode gebruik je partiële afgeleides om het effect van een fout te lineariseren:

()#\[u(Z) = |\frac{\partial Z}{\partial x}|u(x)\]

Een gevolg van het lineair benaderen van de fout is dat deze methode minder nauwkeurig wordt naarmate de fout groter wordt of de functie sterk niet-linear gedrag vertoont.

Meerdere variabelen#

Als je resultaat een functie van meerdere onafhankelijke variabelen is, tel je de fouten kwadratisch op:

()#\[u(f(x_1,x_2,\dotsc,x_n))^2 = \sum_{i=1}^n \left(\frac{\partial f(\vec{x})}{\partial x_i}u(x_i)\right)^2\]

Met de calculus methode is af te leiden dat de onzekerheid \(u(f)\) voor een functie \(f(y,x)=cy^nx^m\) geldt:

()#\[\left(\frac{u(f)}{f}\right)^2 = \left(\frac{u(c)}{c}\right)^2+n^2\left(\frac{u(y)}{y}\right)^2+m^2\left(\frac{u(x)}{x}\right)^2\]

Let op, heb je twee waardes A en B die dicht bij elkaar liggen en trek je die van elkaar af (A-B), dan kan het zomaar zo zijn dat je fout veel groter is dan de het verschil tussen die twee waarden. In zulke gevallen moet je dan op zoek naar alternatieve meetmethodes die een kleinere relatieve onzekerheid opleveren. Zie hieronder een voorbeeld ter inspiratie.

Dimensioneren#

Een voordeel van de Calculus methode boven de Functional Approach is dat je je experiment kunt dimensioneren: Op basis van voorafgestelde criteria kun je aangeven hoe groot het experiment moet zijn, welke eigenschappen het moet hebben en waar de meeste tijd en aandacht in gestopt moet worden zodat het voldoet aan de gestelde criteria. Het makkelijkst is dit weer uit te leggen aan de hand van een voorbeeld.

Functiefit#

Vaak meten we een grootheid als functie van een andere grootheid, bijvoorbeeld de rek van een veer als functie van de veerbelasting of de slingertijd als functie van de lengte van de slinger. Het doel daarvan kan verschillend zijn. We kunnen ons bijvoorbeeld afvragen: hoe (volgens welk functioneel verband) hangt de rek af van de belasting? Of: wat is de veerconstante van de veer? We veronderstellen dan een bepaald verband en gebruiken dat verband om de waardes van parameters vast te stellen. In het eerste geval spreken we van modelleren, in het tweede geval van aanpassen of “fitten”. In de statistiek staat het tweede geval bekend als een regressieprobleem. Hier zullen we nader op ingaan.

Fitten is een procedure waar wordt geprobeerd om een mathematisch verband te vinden in een aantal (meet)punten. We zijn dan op zoek naar een verband \(F(x)\) die de meetpunten \(M(x)\) beschrijft, zodanig dat:

()#\[F(x) - M(x)\approx 0\]

Eerst is het nodig om een type verband te kiezen. Voorbeelden zijn een lineaire fit, een polynoom, sinus, etc. In de fitprocedure zelf worden de parameters van dit verband zo gekozen, dat ze het beste overeenkomen met de data. Als een 2\(\textrm{e}\) orde polynoom wordt gefit bijvoorbeeld, zoek je welke combinatie van \(a\), \(b\), en \(c\) ervoor zorgen dat de curve \(a + bx + cx^2\) zo goed mogelijk op je meetpunten ligt.

Een veelgebruikte methode om de goedheid van een fit te bepalen is de least-squares methode. Hierin wordt de som van de gekwadrateerde afstand van de meetpunten tot de fit geminimaliseerd. Daartoe definiëren we eerst de afstand tussen de meetpunt en de fit:

()#\[R_i = M_i - F_i\]

Deze afstand wordt ook wel het residu genoemd, hier gaan we later ook dieper op in. De totale som van de absolute afstanden moet zo klein mogelijk worden:

()#\[\chi^2=\sum R_i^2\]
../_images/least_squar_fit.png

Het idee van een least-square methode is dat het oppervlak zo klein mogelijk gemaakt wordt#

Je kunt hieronder door te spelen met de sliders kijken wanneer \(\chi^2\) zo klein mogelijk is.

link

In bovenstaande geval gaan we uit dat de waarde van de onafhankelijke variabele voldoende nauwkeurig en precies is bepaald. Er zijn andere technieken die rekening houden met de afwijking in de afhankelijke variabele. Ook kunnen we wederom kijken naar de invloed van meetonzekerheid in het bepalen van de beste fit.

Gewogen fit#

Net als dat bij een gewogen gemiddelde rekening gehouden wordt met de onzekerheid in de meting, kun je bij een functiefit gebruik maken van een gewogen fit. Je houdt dan rekening met de onzekerheid in de afhankelijke variabele (er is ook een techniek die rekening houdt met zowel de onzekerheid in de onafhankelijke als afhankelijke variabele, die behandelen we hier niet).

Voor een gewogen fit wordt er gekeken naar de kleinste waarde voor \(\chi^2\) waarbij de onzekerheid meegewogen wordt:

()#\[\chi^2 = \sum \frac{(M_i-F_i)^2 }{u(M_i)^2} \]

Andere fit#

Bij een least-square fit proberen we het residu (in het kwadraat) zo klein mogelijk te maken. Dat gaat vooral goed onder de aanname dat de onzekerheid in de afhankelijke variabele zit. We zijn dus in staat om de onafhankelijke variabele zelf in te stellen, of de onzekerheid zo ver te reduceren dat deze verwaarloosd kan worden t.o.v. de onzekerheid in de afhankelijke variabele. Maar de least-square methode is niet de enige methode. Er is bijvoorbeeld ook de ‘orthogonal distance regression’ ofwel, kleinste afstand methode. De methode is gevisualiseerd in Figuur {number}. De verdere wiskundige uitwerking zullen we hier niet geven, maar hoe de methode geïmplementeerd kan worden, is te vinden in deze bron.

../_images/ODR.JPG

Een andere fit methode is de ODR die de afstand tot de fitlijn zo klein mogelijk maakt#

Analyse van het residu#

In een van de eerdere secties is gesproken dat een fysische meting (\(M(x)\)) beschreven kan worden als de optelsom van de fysische waarde (\(G(x)\)) + ruis (\(s\)). Een functiefit (\(F(x)\)) gebeurt op basis van de metingen. Om te controleren dat we een goede fit te pakken hebben, moeten we nog naar de ruis kijken. Deze zouden we krijgen wanneer we de fitfunctie aftrekken van de meting:

()#\[ R = M(x) - F(x) \stackrel{?}{=} s \]

De eerste analyse gebeurt door de ruis \(s\) als functie van de onafhankelijke grootheid \(x\) te plotten. Als daar een patroon in zit, bijvoorbeeld stijgende lijn, een sinus-vormig signaal, of alle ruispunten boven de 0, zie Figuur {number}, dan is er grote kans dat er een betere functie \(F(x)\) te vinden is die de fysische waarde \(G(x)\) beschrijft.

../_images/three_graphs.png

(a) \(M(x) = 2x + 0.05 \), (b) \(M(x) = 2x + 0.1x\) en \((c) M(x) = 2x + 0.05sin(3x)\). In elk van de metingen zit een ‘verborgen’ singaal dat zichtbaar wordt bij analyse van de residuals. Voor alle figuren is er een lijn \(F(x) = 2x\) gefit.#

De tweede analyse van het residu is op basis van een histogram. Als je op basis van het experiment verwacht dat de ruis normaal verdeeld is, dan zal het histogram een normaal verdeelde functie zijn. Ook over dit ruis signaal kun je een functiefit leggen, waarbij we verwachten dat het gemiddelde 0 is, en de standaard deviatie bepaald kan worden.

Linearisatie#

Tijdens het experimenteren is het doel vaak om de relatie tussen twee variabelen te ontdekken. In veel gevallen is deze relatie niet lineair, bijvoorbeeld tussen de slingertijd en lengte van een slinger. In zulke gevallen is het inzichtelijk om de grafieken te lineariseren. Ten eerste is het makkelijker om zo afwijkingen te zien, en ten tweede is het fitten ook eenvoudiger.

Strijdigheidsanalyse#

Een van de belangrijkste redenen om de onzekerheid te bepalen is dat je resultaten onderling of met theoretische voorspellingen systematisch en kwantitatief wilt vergelijken en zo na wilt gaan in hoeverre de waarden van elkaar verschillen. De vraag is dan: ‘In hoeverre komen de empirisch gevonden waarden overeen met …’.

Stel dat we twee waarden \(a\) en \(b\) elk met hun eigen onzekerheid \(u(a)\) en \(u(b)\) willen vergelijken. Dan willen we eerst kijken naar het verschil tussen deze twee waarden: \(v = a- b\). Op basis van de calculus approach wordt de onzekerheid in \(v\) gegeven door \(u(v) = \sqrt{u(a)^2 + u(b)^2}\). De afspraak is nu dat twee waarden strijdig met elkaar zijn (in wetenschappelijke zin onvoldoende met elkaar overeenkomen) als geldt:

()#\[\lvert v \rvert = \lvert a - b \rvert > 2\sqrt{u(a)^2 + u(b)^2} = 2u(v)\]

Voor de bepaling van natuurkundige constanten, is de onzekerheid vaak zo klein dat deze ten opzichte van de andere onzekerheid te verwaarlozen is. Let op! Je kunt beargumenteren dat als je meetonzekerheid maar groot genoeg is, de waarden nooit strijdig zullen zijn. Maar wanneer de onzekerheid relatief groot is ten opzichte van de bepaalde waarde, dan heeft de gevonden waarden ook weinig wetenschappelijke waarde.

Goede voorbeelden van slechte grafieken#

Er zijn heel veel manieren waarop je je data slecht kunt presenteren. Er zijn maar een paar manieren waarop dat goed kan. Belangrijkste bij het maken van een grafiek is dat deze overzichtelijk is, dat helder is voor de lezer waar er naar gekeken moet worden.

Figuur {number} is een goed voorbeeld van een slechte grafiek. Allereerst is de trend niet te zien. Er is een punt dat ruim boven de andere liggen, maar zijn de waarden voor \(r>11\) gelijk aan 0 of niet? Daarnaast staan er veel te veel getallen (ticks) op de horizontale as. Ook is de indeling van de schaal voor de horizontale as slecht gekozen. We missen verder nog wat er eigenlijk op de horizontale as en verticale as is gepresenteerd.

../_images/slechtegrafiek.png

Een goed voorbeeld van een slechte grafiek#

Figuur {number} presenteert dezelfde data. De verschillen mogen duidelijk zijn, de data zijn weergegeven op een log-log schaal, een trendlijn laat zien wat de relatie is tussen de kracht en de afstand. Het aantal ticks is beperkt. De grafiek zou nog verder verbeterd kunnen worden door de meetonzekerheid mee te geven.

../_images/beteregrafiek.png

Een verbeterde versie van de grafiek#

Verder lezen#

Enkele bronnen die gaan over het gebruik van data en meetonzekerheid:
Guide to the expression of uncertainty in measurement
Liegen met cijfers
Het bestverkochte boek ooit

Oefeningen#