Statistische Messunsicherheit#

Statistische, oder zufällige, Einflüsse auf einen Messwert lassen sich leider nicht korrigieren, dennoch können durch wiederholte Messungen der eigentliche Messwert bestimmt werden. Wiederholte Messungen sind auch als Messreihe bekannt. Hierbei wird eine Anzahl von \(m\) Messungen für ein und denselben Messwert durchgeführt. Die einzelnen Messwerte \(x_j = [x_1, x_2, ... x_m]\) unterscheiden sich, da der wahre Wert, \(x_w\), immer mit einer zufälligen Abweichung, \(A_j\), versehen wird:

\[x_j = x_w + A_j\]

Bei genügend vielen Wiederholungen der Messung kann in vielen Fällen beobachtet werden, dass sich die Messwerte \(x_j\) um einen zentralen Wert, \(\overline x\) scharen. Die Häufigkeit, einen Messwert in einem bestimmten Abstand zu diesem zentralen Wert zu finden, \(|x_j - \overline x|\), ist umso kleiner, je größer der Abstand ist. Man spricht hierbei von einer Häufigkeitsverteilung der \(x_j\). Die grafische Darstellung einer solchen Messreihe erfolgt in einem Histogramm.

Histogramm#

Die Histogramm-Darstellung wird insbesondere dann benutzt, wenn Messreihen mit vielen Messwerten vorliegen. An einer solchen Darstellung erkennt man die Art der zugrundeliegenden Verteilung der Messwerte (symmetrisch, schief, …) und die ungefähre Lage und Streuung. Außerdem können Ausreißer, also Messwerte die viel zu weit von den anderen Messwerten entfernt liegen, identifiziert werden.

In nachfolgendem Code-Block wird für die Messreihe

\[1.41, 1.35, 1.45, 1.43, 1.44, 1.43, 1.41, 1.32, 1.43, 1.40, 1.49, 1.40, 1.40, 1.42, 1.40, 1.38, 1.37, 1.36, 1.37, 1.32, 1.47, 1.40\]

die absolute Häufigkeit der einzelnen Werte in einer bestimmten Klasse grafisch dargestellt. Dafür werden sogenannten Klassen erstellt, inwelche die einzelnen Messwerte eingruppiert werden. Diese Klassen müssen nicht zwangsläufig die gleiche Breite haben. Bei gleich großen Klassen (gleich breite Balken) kann die absolute Häufigkeit als Höhe angegeben werden, was für die oben gegebene Messreihe im nachfogenden Diagramm gezeigt ist:

Hide code cell source
# Import necessary libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings

# Matplotlib settings
plt.style.use('default')
plt.rcParams['font.size'] = 10
plt.figure(figsize=(4,4)) # Plot-Größe

# Sample data
t_sec = pd.DataFrame([1.41, 1.35, 1.45, 1.43, 1.44, 1.43,
                      1.41, 1.32, 1.43, 1.40, 1.49, 1.40,
                      1.40, 1.42, 1.40, 1.38, 1.37, 1.36,
                      1.37, 1.32, 1.47, 1.40])
klasse = np.linspace(1.3, 1.5, 6)

# Calculate the histogram using np.histogram
#hist_values, bin_edges = np.histogram(t_sec, bins=klasse)
bconts, bedges, _p= plt.hist(t_sec, bins=klasse)
plt.ylabel('Absolute Häufigkeit f')
plt.xlabel('Klassenverteilung der Zeit (s)')
plt.show()
../_images/7ff7f87fd546d0f9bfa5799afd8bade3b4ccd0b2057818506f88f8b4d8b5b31d.png

Im Diagramm ist die absolute Häufigkeit der Zeitmessung dargestellt. Die Klassen sind jeweils gleich groß mit einer Breite von 0,04s. In der ersten befinden sich die Messwerte von 1.3s-1.34s.

Hide code cell source
# Print histogram data as a table
from tabulate import tabulate

# Create a DataFrame from the histogram data
hist_df = pd.DataFrame({'Klasse (s)': bedges[:-1], 'Häufigkeit f': bconts})

print(tabulate(hist_df, headers='keys', tablefmt='pretty'))
+---+--------------------+--------------+
|   |     Klasse (s)     | Häufigkeit f |
+---+--------------------+--------------+
| 0 |        1.3         |     2.0      |
| 1 |        1.34        |     5.0      |
| 2 | 1.3800000000000001 |     7.0      |
| 3 |        1.42        |     6.0      |
| 4 |        1.46        |     2.0      |
+---+--------------------+--------------+

Anhand dieser Darstellung kann man schon vermuten, dass der richtige Werte unseres Experimentes irgendwo im Bereich zwischen 1,38s - 1,41s liegt, da hier die meisten Messungen auftreten.

Häufigkeitsdichte#

Sind die Klassen nicht gleich groß, müssen wir die Dichte der Häufigkeit berechnen. Die relative Häufigkeit \(h\) berechnet sich aus der absoluten Häufigkeit dividiert durch die Gesamtanzahl der vorgenommenen Messungen, \(m\):

\[h_i = \frac{f_i}{m}\]

Aus der Häufigkeit lässt sich dann die sogenannte Häufigkeitsdichte \(d\) berechnen. Die Häufigkeitsdichte gibt bei einem Histogramm die Höhe des Rechtecks an (Die Fläche der Balken gibt dann die relative Häufigkeit an). Mit ihr kann man den Vergleich verschiedener Klassen erst vornehmen. Anders ausgedrückt heißt dass, dass die Häufigkeitsdichte einer Klasse das Verhältnis der absoluten oder der relativen Häufigkeit einer Klasse zur entsprechenden Klassenbreite ist. Genauso lässt sich die Häufigkeitsdichte auch berechnen:

\[ d_i = \frac{\textrm{relative Häufigkeit ($h_i$)}}{\textrm{obere Grenze der Klasse i} - \textrm{untere Grenze der Klasse i}} = \frac{h_i}{b_i}\]
\[ D_i = \frac{\textrm{absolute Häufigkeit ($f_i$)}}{\textrm{obere Grenze der Klasse i} - \textrm{untere Grenze der Klasse i}} = \frac{f_i}{b_i}\]

Das Integral über die relative Häufigkeitsdichte ist immer auf 1 normiert, bzw. auf 100% im Falle der absoluten Häufigkeitsdichte.

Im nachstehenden Code-Block wird die relative Häufigkeitsdichte, \(d_i\), für die obenstehende Messreihe geplottet und das Integral berechnet.

Hide code cell source
# MatplotLib Settings:
plt.style.use('default') # Matplotlib Style wählen
plt.figure(figsize=(4,4)) # Plot-Größe

bconts, bedges, _p = plt.hist(t_sec, density=True, bins=np.linspace(1.3, 1.5, 6))
plt.ylabel('Häufigkeitsdichte d')
plt.xlabel('Klassenverteilung der Zeit (s)')
plt.show()
../_images/a93fd2ea7ae3817e3eae2e5b3c4c52804415365079b1b90b46a5e62ec0b67843.png

Im Diagramm ist die relative Häufigkeitsdichte \(d\) der Zeitmessung dargestellt. Die Fläche der Balken gibt die relative Häufigkeit \(h\) an. In Summe muss diese 1 betragen (100% im Falle der absoluten Häufigkeitsdichte).

Hide code cell content
print('Integral über die Häufigkeitsdichte: ',(bconts * np.diff(bedges)).sum())
Integral über die Häufigkeitsdichte:  1.0

Die Wahrscheinlichkeit, einen Messwert innerhalb eines kleinen Intervalls \(\Delta x\) um den Wert \(\overline x\) zu finden, ist \(dP(X) = d(x)\cdot \Delta x\), wobei \(d(x) = d_i\).

Normalverteilung (unendliche Stichprobe)#

Je größer die Stichprobe \(m\) (Anzahl der Messungen), desto eher erkennt man die zugrundeliegende Verteilung, der die Messreihe unterliegt. Häufig handelt es sich in der Praxis um eine Normalverteilung (oder auch Gaußverteilung genannt):

\[P(x) = \frac{1}{\sigma \sqrt{2\pi}}\int_{x_1}^{x_2} \mathrm{exp}\left(-\frac{(x-\mu)^2}{2\sigma^2}\right) dx\]
Hide code cell source
from scipy.stats import norm
# MatplotLib Settings:
plt.style.use('default') # Matplotlib Style wählen
plt.figure(figsize=(6,4)) # Plot-Größe
#plt.xkcd()
plt.rcParams['font.size'] = 10; # Schriftgröße

n = len(t_sec)
data=np.array(t_sec)
mean=data.mean()
std=data.std(ddof=1)

bconts, bedges, _p = plt.hist(t_sec, density=True, bins=np.linspace(1.3, 1.5, 6))
#xmin, xmax = plt.xlim()
xmin = mean-5*std
xmax = mean+5*std
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mean, std)
plt.plot(x, p, linewidth=2, label = 'Normalverteilung', color = "tab:red")
plt.axvline(x=mean, color="tab:red", ls='--', label='Mittelwert')
plt.ylabel('Häufigkeitsdichte d(x)')
plt.xlabel('Klassenverteilung der Zeitmessung (s)')
plt.legend()
plt.show()
../_images/a0c93abfad78f7e07e2caa84d33de3e4e8f2e5646c6558d4487608bce321d68a.png

Im Diagramm sind die relative Häufigkeitsdichte \(d\) der Zeitmessung und ein Modell der Normalverteilung \(P(x)\) dargestellt.

Überraschenderweise ist die Verteilungsfunktion häufig auch dann immer noch normalverteilt, wenn sehr viele externe Störungen (evtl. mit unterschiedlichen Verteilungsfunktionen) zu einer gemeinsamen Störgröße kombiniert werden. Die zusammengefasste Störung ist trotzdem fast immer gaußverteilt, egal wie die Einzelverteilungen aussehen (Poissonverteilung oder anderes). Dies wird auch als der zentrale Grenzwertsatz der Wahrscheinlichkeitstheorie bezeichnet.

Zentraler Grenzwertsatz der Wahrscheinlichkeitstheorie

Der Durchschnitt einer großen Anzahl von Zufallsvariablen aus derselben Verteilung sind annäherend normalverteilt, unabhängig von der Verteilungsfunktion aus der sie herausgenommen wurden.

Arithmetisches Mittel bzw. Erwartungswert#

Für normalverteilte Zufallsgrößen können wir mittels statistischen Methoden Messwerte und Messunsicherheit aus der Stichprobe bestimmen.

Normalverteilte Zufallsgrößen werden immer von zwei Parametern \(\overline x\) und \(\sigma\) beschrieben. Der arithmetische Mittelwert \(\overline x\), der das arithmetische Mittel \(\mu\) aus \(m \rightarrow \infty\) Beobachtungen ist, oder auch Erwartungswert \(E(x)\) genannt, gilt:

\[\mu = \frac{1}{m}\sum_{j=1}^m x_j =: E(x) = \left< x \right>\]

Varianz#

Der Erwartungswert der quadratischen Abweichung der Einzelmessungen vom Mittelwert, die Varianz \(\sigma^2\), ist:

\[\sigma^2 = \frac{1}{m} \sum_{j=1}^m \left( x_j - \mu \right)^2\]

Der arithmetische Mittelwert zeichnet sich dadurch aus, dass für diesen Wert die Summe der Abweichungsquadrate minimal ist. Die Varianz hängt nicht von der Anzahl der Messungen ab. Die Streuung kann ausschließlich durch ein besseres Messverfahren verkleinert werden. Anschaulich ist das direkt nachvollziehbar: Die „Punktwolke“ der Messergebnisse um den Mittelwert schmiegt sich nicht enger an den Mittelwert, nur weil häufiger gemessen wurde. Ein stark streuendes Messverfahren streut durch seine Wiederholung nicht weniger.

Standardabweichung#

Unabhängig von der zugrundeliegenden Verteilung der Messwerte kann nun ein Maß für die Abweichung definiert werden, welche als Standardabweichung der Einzelmessungen bekannt ist und sich aus der Quadratwurzel der Varianz berechnen lässt:

\[\sigma = \sqrt{\frac{1}{m} \sum_{j=1}^m (x_j - \mu)^2}\]

Man nehme beispielhaft die Zeitmessung von oben. Es wurden 22 wiederholte Messungen der Zeit durchgeführt. Mittelwert, Standardabweichung der Einzelmessungen und Unsicherheit des Mittelwertes werden berechnet.

Hide code cell source
import math

def arithmetischer_mittelwert(array): 
    n = len(array)
    return sum(array) / n


def arithmetischer_varianz(array): 
    n = len(array)
    mn = sum(array) / n
    var = (1 / (n)) * sum(map(lambda xi: (xi-mn) ** 2 , array)) 
    return var

def arithmetischer_standard_abweichung(array): 
    n = len(array)
    mn = sum(array) / n
    var = (1 / (n)) * sum(map(lambda xi: (xi-mn) ** 2 , array)) 
    std = math.sqrt(var)
    return std

# Berechne arithmetische Statistik
arithm_mittelwert = arithmetischer_mittelwert(t_sec.to_numpy().flatten())
arithm_varianz = arithmetischer_varianz(t_sec.to_numpy().flatten())
arithm_stdabweichung = arithmetischer_standard_abweichung(t_sec.to_numpy().flatten())

# DataFrame für die Zusammenfassungsstatistiken erstellen
zusammenfassung_data = {
    'Statistische Größe': ['Mittelwert (s)', 'Varianz (s^2)', 'Standardabweichung (s)'],
    'Arithmetisch': [arithm_mittelwert, arithm_varianz, arithm_stdabweichung]
}

zusammenfassung_df = pd.DataFrame(zusammenfassung_data)
# Histogramm-Daten als Tabelle ausgeben
print("\nZusammenfassungsstatistiken:")
print(tabulate(zusammenfassung_df, headers='keys', tablefmt='pretty'))
Zusammenfassungsstatistiken:
+---+------------------------+-----------------------+
|   |   Statistische Größe   |     Arithmetisch      |
+---+------------------------+-----------------------+
| 0 |     Mittelwert (s)     |  1.4022727272727271   |
| 1 |     Varianz (s^2)      | 0.0017902892561983434 |
| 2 | Standardabweichung (s) | 0.042311809890364455  |
+---+------------------------+-----------------------+

Stichprobe (endliche Anzahl von Messwerten)#

Bei einer Stichprobe liegt nur eine limitierte Anzahl von Messwerten vor. Dies ist bei jeder Messreihe der Fall, da niemals die komplette Gesamtheit gemessen werden kann. Der Mittelwert der kompletten Gesamtheit entspräche dem arithmetischen Erwartungswert und in der Messtechnik somit der wahren Messgröße. Bei Messungen (Stichproben) liegt uns nur eine begrenzte Anzahl von empirisch (experimentell) ermittelten Messwerten vor.

Empirische Stichprobenmittelwert#

Der Stichprobenmittelwert oder auch empirische Mittelwert berechnet sich genauso wie der Erwartungswert:

\[\overline x = \frac{1}{m}\sum_{j=1}^m x_j\]

Empirische Varianz#

Du wirst bei deinen Messungen in der Regel weniger an der Streuung um den Mittelwert, sondern mehr an der (geschätzten) Streuung der Messwerte um den (unbekannten) wahren Wert interessiert sein. Diese Unsicherheit schätzt man durch die empirische Varianz \(s^2(x)\) der Messwerte der \(x_j\) ab. Diese ist etwas größer als die Varianz \(\sigma^2\), nämlich um den Faktor \(m/(m − 1)\):

\[s^2 = \frac{1}{m-1} \sum_{j=1}^m (x_j - \overline x)^2\]

Empirische Standardabweichung#

Die empirische Standardabweichung \(s(x)\) der Messwerte ist wieder die Wurzel aus der Varianz:

\[s = \sqrt{\frac{1}{m-1} \sum_{j=1}^m (x_j - \overline x)^2}\]
Hide code cell source
# Mittelwert, Varianz und Standardabweichung berechnen
emp_mittelwert = t_sec.mean().values[0]
emp_varianz = t_sec.var().values[0]
emp_stdabweichung = t_sec.std().values[0]

# DataFrame für die Zusammenfassungsstatistiken erstellen
zusammenfassung_data = {
    'Statistische Größe': ['Mittelwert (s)', 'Varianz (s^2)', 'Standardabweichung (s)'],
    'Arithmetisch': [arithm_mittelwert, arithm_varianz, arithm_stdabweichung],
    'Empirisch': [emp_mittelwert, emp_varianz, emp_stdabweichung]
}

zusammenfassung_df = pd.DataFrame(zusammenfassung_data)
# Histogramm-Daten als Tabelle ausgeben
print("\nZusammenfassungsstatistiken:")
print(tabulate(zusammenfassung_df, headers='keys', tablefmt='pretty'))
Zusammenfassungsstatistiken:
+---+------------------------+-----------------------+-----------------------+
|   |   Statistische Größe   |     Arithmetisch      |       Empirisch       |
+---+------------------------+-----------------------+-----------------------+
| 0 |     Mittelwert (s)     |  1.4022727272727271   |  1.4022727272727271   |
| 1 |     Varianz (s^2)      | 0.0017902892561983434 | 0.0018755411255411217 |
| 2 | Standardabweichung (s) | 0.042311809890364455  | 0.043307518118002576  |
+---+------------------------+-----------------------+-----------------------+

Die Größen \(\sigma\) und \(s\) unterscheiden sich aufgrund von \(m \rightarrow m-1\)! Je weniger Messwerte \(m\), desto signifikanter ist der Unterschied. Welche Größe, s oder \(\sigma\), als Messunsicherheit für die Einzelmessung \(x\) verwendet wird hängt vom Einzelfall ab. Wichtig ist, dass man dazu schreibt, welcher Wert verwendet wurde, damit die Argumentation nochvollzogen werden kann. Generell sollte \(s\) insbesondere bei wenigen Messwerten verwendet werden, denn mit \(s\) ist auch der etwas seltsame Fall einer Einzelmessung abgedeckt: für m = 1 wäre \(\sigma\) = 0, \(s\) dagegen nicht definiert. Die zweite Aussage ist, bezogen auf die statistische Interpretation, sicher sinnvoller.

Hide code cell source
# DataFrame für die Zusammenfassungsstatistiken erstellen
zusammenfassung_data = {
    'Statistische Größe': ['Mittelwert (s)', 'Varianz (s^2)', 'Standardabweichung (s)'],
    'Arithmetisch': [arithm_mittelwert, arithm_varianz, arithm_stdabweichung],
    'Empirisch': [emp_mittelwert, emp_varianz, emp_stdabweichung],
    'Differenz (%)': [(arithm_mittelwert-emp_mittelwert)*100, (arithm_varianz-emp_varianz)*100, (arithm_stdabweichung-emp_stdabweichung)*100]
}

zusammenfassung_df = pd.DataFrame(zusammenfassung_data)
# Histogramm-Daten als Tabelle ausgeben
print("\nZusammenfassungsstatistiken:")
print(tabulate(zusammenfassung_df, headers='keys', tablefmt='pretty'))
Zusammenfassungsstatistiken:
+---+------------------------+-----------------------+-----------------------+-----------------------+
|   |   Statistische Größe   |     Arithmetisch      |       Empirisch       |     Differenz (%)     |
+---+------------------------+-----------------------+-----------------------+-----------------------+
| 0 |     Mittelwert (s)     |  1.4022727272727271   |  1.4022727272727271   |          0.0          |
| 1 |     Varianz (s^2)      | 0.0017902892561983434 | 0.0018755411255411217 | -0.008525186934277826 |
| 2 | Standardabweichung (s) | 0.042311809890364455  | 0.043307518118002576  | -0.09957082276381216  |
+---+------------------------+-----------------------+-----------------------+-----------------------+

Messunsicherheit des Mittelwertes#

Als Messergebnis benutzen wir den Mittelwert. Wie berechnet sich jedoch die Unsicherheit des Mittelwertes? Die oben berechneten Standardabweichungen geben nämlich lediglich die Unsicherheit eines Messwertes an, aber nicht die des Mittelwertes!

Dank des sogenannten Grenzwertsatzes können wir dies einfach herleiten. Der Grenzwertsatz sagt aus, wenn man eine ausreichend große Stichprobe aus einer Grundgesamtheit nimmt, so wird der Mittelwert der Stichprobe näherungsweise dem Mittelwert der Grundgesamtheit entsprechen und sich somit dem wahren Wert annähern.

Angenommen, wir nehmen viele (\(k\)) Stichproben (mit jeweils \(j\) Messwerten) auf und berechnen jedes mal den Mittelwert (dann haben wir \(k\) Mittelwerte). Dann sind laut Grenzwertsatz diese \(k\) Mittelwerte normalverteilt! Das heißt aus den \(k\) Mittelwerten könnte wir wieder einen Mittelwert berechnen und folglich auch die Standardabweichung der Mittelwerte:

\[s(\overline x) = \frac{s}{\sqrt{m}} = \sqrt{\frac{1}{m(m-1)} \sum_{j=1}^m (x_j - \overline x)^2}\]
Hide code cell source
# MatplotLib Settings:
plt.style.use('default') # Matplotlib Style wählen
plt.figure(figsize=(6,4)) # Plot-Größe
#plt.xkcd()
plt.rcParams['font.size'] = 10; # Schriftgröße

n = len(t_sec)
data=np.array(t_sec)
mean=data.mean()
std=data.std(ddof=1)

x_volt_2 = np.random.normal(mean, std, n)
x_volt_3 = np.random.normal(mean, std, n)
x_volt_4 = np.random.normal(mean, std, n)
x_volt_5 = np.random.normal(mean, std, n)
x_volt_6 = np.random.normal(mean, std, n)
x_volt_7 = np.random.normal(mean, std, n)
x_volt_8 = np.random.normal(mean, std, n)
x_volt_9 = np.random.normal(mean, std, n)
data_2=np.array(x_volt_2)
data_3=np.array(x_volt_3)
data_4=np.array(x_volt_4)
data_5=np.array(x_volt_5)
data_6=np.array(x_volt_6)
data_7=np.array(x_volt_7)
data_8=np.array(x_volt_8)
data_9=np.array(x_volt_9)

means = [data.mean(), data_2.mean(), data_3.mean(),data_4.mean(),data_5.mean(),data_6.mean(),data_7.mean(),data_8.mean(),data_9.mean(),]
data_means = np.array(means)
#bconts, bedges, _p = plt.hist(x_volt, density=True, bins=np.linspace(0.95, 1.05, 6), label = "Messwerte, Sichprobe 1")
#xmin, xmax = plt.xlim()
xmin = mean-5*std
xmax = mean+5*std
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, data.mean(), data.std(ddof=1))
p_2 = norm.pdf(x, data_2.mean(), data_2.std(ddof=1))
p_3 = norm.pdf(x, data_3.mean(), data_3.std(ddof=1))
p_4 = norm.pdf(x, data_4.mean(), data_4.std(ddof=1))
p_5 = norm.pdf(x, data_5.mean(), data_5.std(ddof=1))
p_6 = norm.pdf(x, data_6.mean(), data_6.std(ddof=1))
p_7 = norm.pdf(x, data_7.mean(), data_7.std(ddof=1))
p_8 = norm.pdf(x, data_8.mean(), data_8.std(ddof=1))
p_9 = norm.pdf(x, data_9.mean(), data_9.std(ddof=1))
p_means = norm.pdf(x, data_means.mean(), data_means.std(ddof=1))
plt.plot(x, p, linewidth=2, label = 'Stichprobe 1', color="tab:blue", alpha = 1.0)
plt.plot(x, p_2, linewidth=2, label = 'Stichprobe 2', color="tab:blue", alpha = 0.8)
plt.plot(x, p_2, linewidth=2, label = 'Stichprobe 3', color="tab:blue", alpha = 0.6)
plt.plot(x, p_3, linewidth=2, label = 'Stichprobe 4', color="tab:blue", alpha = 0.4)
plt.plot(x, p_4, linewidth=2, label = 'Stichprobe 5', color="tab:blue", alpha = 0.2)
plt.plot(x, p_5, linewidth=2, label = 'Stichprobe 6', color="tab:green", alpha = 0.4)
plt.plot(x, p_6, linewidth=2, label = 'Stichprobe 7', color="tab:green", alpha = 0.6)
plt.plot(x, p_7, linewidth=2, label = 'Stichprobe 8', color="tab:green", alpha = 0.8)
plt.plot(x, p_8, linewidth=2, label = 'Stichprobe 9', color="tab:green", alpha = 1.0)
plt.plot(x, p_means, linewidth=2, label = 'Mittelwert-Verteilung', color="tab:red", alpha = 1.0)

plt.axvline(x=data_means.mean(), color="tab:red", ls='--', label='wahrer (?) Wert')
plt.ylabel('Häufigkeitsdichte d(x)')
plt.xlabel('Klassenverteilung der Zeit (s)')
plt.legend(bbox_to_anchor=(1,1), loc="upper left")
plt.show()
../_images/4e801bc33f01fedbc5071f4d10a56b47933adb8676aa8109c7a94eedcdbbddd1.png

Warnung

Die Standardabweichung des Mittelwertes \(s(\overline x)\) einer Messreihe ist gegenüber der Abweichung der Einzelmessungen \(s(x)\) um den Faktor \(\sqrt{m}\) reduziert. Der Grund dafür ist, dass sich statistisch ermittelte Unsicherheiten teilweise herausmitteln.

Bei einer großen Anzahl Messungen (>30) liegen etwa 68% der Einzel-Messungen im Intervall \(\pm s(x)\) um den Mittelwert der Messreihe herum. Würden man den wahren Wert kennen, könnte man weiter herausfinden, dass etwa 68% der Mittelwerte im Intervall \(\pm s(\overline x)\) um den wahren Wert lägen.

Standardabweichung des Mittelwertes

Für die Standardabweichung des Mittelwertes des obigen Zeitmessreihe erhalten wir dadurch

\[u_{\overline x} = \frac{s}{\sqrt{m}} = \frac{0,0433\,\mathrm s}{\sqrt{22}} = 0,009\,\mathrm s\]

Andere Verteilungen#

Gleichverteilung (Rechteck)#

In den meisten Fällen können Sie eine Normalverteilung der Messwerte annehmen. Manchmal lässt sich nur eine Ober- und Untergrenze \(a_+\) und \(a_-\) angeben, innerhalb deren ein Messwert \(x\) liegt. Alle Werte innerhalb der Grenzen sind jetzt gleich wahrscheinlich, und folgen einer rechteckförmigen Wahrscheinlichkeitsdichte (Gleichverteilung).

In Datenblättern von Messinstrumenten werden häufig nur Ober- und Untergrenzen definiert, innerhalb welcher sich ein zu messender Wert aufhalten wird. Sollte dies der Fall sein, werden die Unsicherheiten wiefolgt berechnet:

Für den Mittelwert/Erwartungswert wird das Mittel berechnet:

\[\mu = \frac{a_- + a_+}{2}\]

Für die Varianz gilt:

\[s^2 = \frac{(a_- + a_+)^2}{12} = \frac{a^2}{3}\]

und für die Standardabweichung:

\[s = \frac{a}{\sqrt{3}}\]

wobei \(a\) die Abweichung ist.

rechteck_abw

Abb. 20 Gleichverteilung / Rechteckverteilung von Messwerten wird angenommen, wenn nur Ober- und Untergrenzen bekannt sind.#

Trapez- bzw. Dreiecksverteilung#

Step-Funktionen wir die gleichverteilung sind häufig unphysikalisch, da die Funktion außerhalb der Grenzen plötzlich auf Null abfällt. Realistischer hingegen ist die Annahme, dass die Messwerte in der Nähe der Grenze weniger wahrscheinlicher sind als Messwerte, die nah am Mittelwert liegen. Daher wird die Gleichverteilung an den Grenzen angeschrägt, wodurch ein Trapez, oder im extremsten Fall, ein Dreieck entsteht.

Unter der Annahme einer symmetrischen Trapezverteilung mit den Ober- und Untergrenzen \(\pm a\), hat die Grundseite des Trapezes die Länge \(2a\) und die Höhe \(2 a \beta\). Für \(\beta \rightarrow 0\) wird das Trapez zu einem Dreieck, womit \(\beta\) die Stärke der Trapez Seitenlängen angibt und nur Werte zwischen 0 und 1 annehmen kann.

Für den Mittelwert/Erwartungswert wird das Mittel berechnet:

\[\mu = \frac{a_- + a_+}{2}\]

Für die Varianz gilt:

\[s^2 = a^2 \frac{(1+\beta)^2}{6} = \frac{a^2}{6}\]

wobei für den letzten Schritt angenommen wurde, dass \(\beta = 0\) ist.

Für die Standardabweichung gilt entsprechend:

\[s = \frac{a}{\sqrt{6}}\]

wobei \(a\) die Abweichung ist, wenn eine symmetrische Verteilung angenommen wird.

dreieck_abw

Abb. 21 Eine Dreiecksverteilung wird angenommen, um eine zu berücksichtigen, dass Messwerte nahe der Ober- und Untergrenze unwahrscheinlicher sind.#

Vertrauensintervalle#

Wir haben eben bereits erwähnt, dass 68% der Messwerte innerhalb des Intervalls \(\pm \sigma(x)\) liegen.

Weitere Sigma-Umbegbungen, die man kennen sollte:

Bei einer echten Normalverteilung gilt folgendes:

  • 68,3% aller Messwerte liegen im Bereich \(\pm \sigma\)

  • 95,5% aller Messwerte liegen im Bereich \(\pm 2\sigma\)

  • 99,7% aller Messwerte liegen im Bereich \(\pm 3\sigma\)

  • Im Abstand \(\pm \sigma\) sind die Wendestellen

  • Die Normalverteilung reicht von \(-\infty\) bis \(+\infty\)

Bei bekannter Wahrscheinlichkeitsverteilung \(p(x)\) der Messwerte \(x\) um den Mittelwert \(\overline x\), lässt sich die Wahrscheinlichkeit dafür berechnen, einen Messwert im Intervall \([x_1, x_2]\) um den Mittelwert zu finden. Wir nehmen im Folgenden eine Normalverteilung, mit Standardabweichung \(\sigma\), der Messwerte an, dann ist die Wahrscheinlichkeit für

  • einen Messwert innerhalb \(x\pm dx\):

\[p(x)dx = \frac{1}{\sigma \sqrt{2\pi}}\mathrm{exp}\left(-\frac{(x-\overline x)^2}{2\sigma^2}\right) dx\]
  • irgendeinen Messwerte zwischen \(\pm \infty:\)

\[P(-\infty < x < \infty) = \int_{-\infty}^\infty p(x)dx = 1\]
  • einen Messwert im Intervall \([x_1, x_2]\):

\[P(x_1 < x < x_2) = \int_{x_1}^{x_2} p(x)dx = \frac{1}{\sigma \sqrt{2\pi}}\int_{x_1}^{x_2} \mathrm{exp}\left(-\frac{(x-\overline x)^2}{2\sigma^2}\right) dx\]

Das hier auftretende Integral ist nicht elementar berechenbar und man findet stattdessen Tabellen, aus denen man die zugehörigen Wahrscheinlichkeitswerte ablesen kann:

Mit \(x_1 = \mu - t\cdot \sigma\) und \(x_2 = \mu + t\cdot \sigma\) findet man die Wahrscheinlichkeit \(P(\mu-t\cdot\sigma \leq x \leq \mu+t\cdot\sigma)\) dafür, dass der Messwert innerhalb einer \(t\cdot\sigma\)-Umgebung um den Mittelwert liegt.

Aufgabe: Wahrscheinlichkeit im Intervall \(P(x_1 < x < x_2)\) berechnen

Es soll im Folgenden ein Messsystem einer Abfüllanlage überprüft werden, die Flaschen sind jeweils mit 0,7 l Saftgetränk befüllt. Aus Kalibrierungen ist bekannt, dass die Messwerte des Messsystems der Abfüllanlage normalverteilt mit einem Erwartungswert \(\mu\) = 0,7 l und Standardabweichung \(\sigma\) = 5 ml sind. Wie groß ist die Wahrscheinlichkeit, dass die Saftflaschen mit einen Inhalt zwischen 0,69 l und 0,71 l befüllt werden?

Normierte Normalverteilung#

Um verschiedene Messungen miteinander zu vergleichen, benutzt man häufig die normierte Normalverteilung. Dadurch können die Verteilungen verschiedener Messwerte miteinander verglichen werden, unabhängig von deren physikalischen Einheit.

Jede Normalverteilung kann in eine normierte Gaußverteilung transformiert werden. Der Übergang erfolgt mit einer Transformation, die die Messwerte normiert. Die Differenz aus Messwert und Mittelwert, \(x-\mu\), wird auf die Standardabweichung \(\sigma\) bzw. \(s\) normiert:

\[z = \frac{x-\mu}{\sigma}\]

Dadurch erhält man folgende Funktion für \(\mu = 0\) und \(\sigma = 1\) und \(-1\):

\[p(z) = \frac{1}{\sqrt{2\pi}}\mathrm e^{-\frac{z^2}{\sigma^2}} \]
normal_normiert_trafo

Abb. 22 Transformation der Normalverteilung in eine normierte Normalverteilung.#

Der Flächeninhalt unterhalb dieser Verteilungsfunktion ist wieder auf 100% normiert, wenn von \(\pm \infty\) integriert wird. Die maximale Amplitude ist jetzt \(1/\sqrt{2 \pi}\). Die \(z\)-Achse (vorher Messwerte \(x\)) ist jetzt dimensionslos (einheitenlos). Somit können mit normierten Gaußverteilungen verschiedene physikalische Größen auch von verschiedenen Messgeräten bezüglich ihrer Streuung verglichen werden.

Güteklassen von Messgeräten#

Durch die Intervallgrenzen des Vertrauensbereichs werden Güteklassen von Messeinrichtungen definiert. Andersherum können auch Anforderungen an Messgeräte gestellt werden: Die Anforderungen werden umso höher, je höher die Wahrscheinlichkeit sein soll, dass sich die Messwerte dem richtigen Wert annähern. Der Messtechniker kann somit mit der gegebenen Wahrscheinlichkeit abschätzen, ob ermittelte Messwerte innerhalb einer durch Fertigungsunterlagen zugelassenen Toleranz für die Maße eines Werkstücks liegen. Übliche Werte für Invervallgrenzen (meist symmetrisch, also Abweichungen sowohl nach unten als auch nach oben im gleichen Maße).

Intervallgrenzen

Transformation

\(P(x) = \Phi(z)\)

Bezeichnung

Wahrscheinlichkeit

\(\mu \pm 1 \cdot \sigma\)

1

0,6827

Orientierende Messung

68,27%

\(\mu \pm 1{,}96 \cdot \sigma\)

1,96

0,95

Betriebsmessung

95%

\(\mu \pm 2 \cdot \sigma\)

2

0,9545

Betriebsmessung

95,45%

\(\mu \pm 2{,}58 \cdot \sigma\)

2,58

0,99

Präzisionsmessung

99%

\(\mu \pm 3 \cdot \sigma\)

3

0,9973

Präzisionsmessung

99,73%

\(\mu \pm 4 \cdot \sigma\)

4

0,9999

Präzisionsmessung

99,99%

Angabe des Messergebnisses mit Unsicherheit#

Als Messtechniker gehen wir immer daher davon aus, dass innerhalb \(\pm 3s\) alle Messwerte liegen. Auf dieser Basis wird entsprechend auch die Messabweichung berechnet, also A = \(\pm 3s\).

Das Endergebnis der oben dargestellten Messreihe von \(m\) Messwerten wird in der Regel wiefolgt angegeben. Als Messwert wird nicht das Ergebnis einer Einzelmessung angegeben, sondern stets der Mittelwert der Messreihe inkl. seiner Unsicherheit:

\[ s(\overline x) = \frac{s}{\sqrt{m}} u_{\overline x}\]

Der Mittelwert ist der beste Schätzwert, den wir für den wahren Wert ermitteln können. Die Angabe des Messergebnisses erfolgt also wiefolgt:

\[x = \overline x \pm t \cdot u_{\overline x}\]

wobei \(t\) ein Maß für den Vertrauensbereich \(v\) ist:

\[v = \pm \frac{t}{\sqrt{m}}\cdot s = u_v\]

Der Vertrauensbereich beschreibt die Aufspreizung des Mittelwertes einer Messreihe zu einem Vertrauensband, das umso breiter ist, je weniger Messwerte zur Auswertung zur Verfügung stehen und je größer das geforderte Vertrauensniveau ist. Der Vertrauensbereich gilt als Qualitätsmaß für die Genauigkeit einer durchgeführten Messung. Für \(t=1\) wählen wir also die \(\pm 1s\)-Umgebung, in der 68% der Messwerte liegen. Für \(t = 2\), also die \(\pm 2s\)-Umgebung, werden schon 95% aller Messwerte in diesem Bereich erwartet. Die Messabweichung ist dadurch erhöht, das Vertrauen allerdings auch.

Aufgabe: Gib das Messergebnis für obige Zeitmessreihe an!

Gib das Messergebnis für die obige Zeitmessung für die 68,27%, 95,45% und 99,73% Vertrauensintervalle an (1-, 2- und 3-sigma).

Hide code cell content
# DataFrame für die Zusammenfassungsstatistiken erstellen
zusammenfassung_data = {
    'Statistische Größe': ['Mittelwert (s)', 'Varianz (s^2)', 'Standardabweichung (s)'],
    'Empirisch': [emp_mittelwert, emp_varianz, emp_stdabweichung]
}

zusammenfassung_df = pd.DataFrame(zusammenfassung_data)
# Histogramm-Daten als Tabelle ausgeben
print("\nZusammenfassungsstatistiken:")
print(tabulate(zusammenfassung_df, headers='keys', tablefmt='pretty'))

print('Das Messergebnis für ein Vertrauensintervall von 68,27% (1-sigma-Umgebung) ist: ', round(emp_mittelwert,5), 's +- ', 1*round(emp_stdabweichung/np.sqrt(len(t_sec)),5), 's')
print('Das Messergebnis für ein Vertrauensintervall von 95,45% (2-sigma Umgebung) ist: ', round(emp_mittelwert,5), 's +- ', 2*round(emp_stdabweichung/np.sqrt(len(t_sec)),5), 's')
print('Das Messergebnis für ein Vertrauensintervall von 99,73% (3-sigma Umgebung) ist: ', round(emp_mittelwert,5), 's +- ', 3*round(emp_stdabweichung/np.sqrt(len(t_sec)),5), 's')
Zusammenfassungsstatistiken:
+---+------------------------+-----------------------+
|   |   Statistische Größe   |       Empirisch       |
+---+------------------------+-----------------------+
| 0 |     Mittelwert (s)     |  1.4022727272727271   |
| 1 |     Varianz (s^2)      | 0.0018755411255411217 |
| 2 | Standardabweichung (s) | 0.043307518118002576  |
+---+------------------------+-----------------------+
Das Messergebnis für ein Vertrauensintervall von 68,27% (1-sigma-Umgebung) ist:  1.40227 s +-  0.00923 s
Das Messergebnis für ein Vertrauensintervall von 95,45% (2-sigma Umgebung) ist:  1.40227 s +-  0.01846 s
Das Messergebnis für ein Vertrauensintervall von 99,73% (3-sigma Umgebung) ist:  1.40227 s +-  0.02769 s

Student-t (kleine Stichproben)#

Ist die Zahl der Messwerte nur klein (\(m \leq 25\)) werden die aus der Normalverteilung berechneten Parameter ziemlich unsicher. Anfang des 20. Jh. veröffentlichte WILLIAM SEALY GOSSET unter dem Pseudonym „Student“ eine Verteilungsfunktion, die eine zuverlässigere Parameterschätzung auch für kleine Stichprobengrößen erlaubt. Für die Messwertanalyse ist folgender Teilaspekt von Bedeutung: Aus der Zahl \(m\) der Messwerte und einem vorgegebenen Vertrauensbereich berechnen Sie einen Faktor \(t(s=m-1, p=1-\alpha/2)\), der die Unsicherheitsintervalle aus der Normalverteilung korrigiert. Die unten stehende Quantil-Tabelle zeigt die zugehörigen Werte von \(t\) in Abhängigkeit von der Messwertanzahl, und dem gewählten Vertrauensniveau, dass die geforderte statistische Sicherheit beschreibt:

Die Interpretation der Quantil-Tabelle der Student-t Verteilung kann verwirrend sein. Statt der Anzahl der Messwerte \(m\) wird die Anzahl der Freiheitsgrade \(s = m-1\) angegeben. Und statt des zweiseitigen Vertrauensbereich \(P = 1-\alpha\) wird der halbseitige Vertrauensbereich \(p = 1-\alpha/2\) gewählt. Beide Quantile können aber über die eben angegebenen Formel einfach bestimmt werden.

Aus der empirischen Standardabweichung des Mittelwertes \(s(\overline x)\) berechnet man beispielsweise:

\[u_v = t(s,p) \cdot s(\overline x) = t(s,p) \cdot \frac{s(x)}{\sqrt{m}}\]

Umrechnung von Vertrauensintervallen#

Desweiteren können Vertrauensbereiche unterschiedlicher Wahrscheinlichkeiten ineinander umgerechnet werden:

Umrechnung von Vertrauensbereichen

\[\frac{u_{\alpha 1}}{t_{m-1; 1-\frac{\alpha_1}{2}}} = \frac{u_{\alpha 2}}{t_{m-1; 1-\frac{\alpha_2}{2}}}\]

Hierbei ist \(\alpha\) das zweiseitige Signifikanzniveau, also die Irrtumswahrscheinlichkeit \(\alpha = 1-P\), wobei \(P\) die Wahrscheinlichkeit bzw. die geforderte statistische Sicherheit ist. Der halbseitige (einseitige) Vertrauensbereich wird in manchen Tabellen gewählt und lautet \(p = 1-\alpha/2\).

Zusammenfassung#

Bild