Sollten Fehler in einer Messgröße normal verteilt sein?
Ich habe ein physikalisches Experiment, bei dem ich die Geschwindigkeiten eines Objekts gemessen habe. Es gab viele Wiederholungen des Experiments mit der Annahme, dass der erwartete Wert der Variablen der Mittelwert aller Messungen ist.
Im Rahmen der Datenanalyse habe ich ein Histogramm von erstellt $v_i - \bar{v}$dh die Abweichung jedes Datenpunktes vom erwarteten Wert. Das Histogramm stellte sich als solches heraus:
Meine Frage ist, ist es wahr, dass ich nur behaupten kann, dass meine Variable einen zufälligen Fehler hat und nicht systematisch, wenn und nur wenn die obige Fehlerverteilung eine Normalverteilung ist? Ich vermute, dass dies der Fall ist und je näher das Obige an einer Normalverteilung liegt, desto geringer ist der systematische Fehler und die Auswirkung anomaler Messungen im Datensatz und desto besser kann eine echte Vorhersage getroffen werden.
Darüber hinaus ist die Frequenzspitze in der $[0.02,0.04]$ein Zeichen dafür, dass es eine vorhersehbare Verzerrung der Ergebnisse gab? Wenn ja, gibt es Methoden, dies zu korrigieren, um einen besseren erwarteten Wert zu erhalten?
Antworten
Grundsätzlich ist es nicht unbedingt richtig, dass zufällige Messfehler mittlere Null oder normale oder konstante Varianz sind. Einige Beispiele
- Szintillationszähler und Geigerzähler weisen Fehler auf, die von einem Poisson-Prozess herrühren, der nicht symmetrisch ist
- der wahre Wert der Lungenfunktionsmessung FEV$_1$ wird als das vom Einzelnen erreichbare Maximum definiert, sodass der Messfehler immer negativ ist
- Bei an sich nicht negativen Größen mit großem Bereich können Fehler auf einer logarithmischen Skala näher an der normalen und konstanten Varianz liegen
Allerdings setzen die Menschen viel Mühe in die Messprotokolle und Geräte, vor allem in den Naturwissenschaften, die sie etwa Mittelwert von Null und konstanter Varianz Fehler. Bei einigen Protokollen werden Unterschiede zwischen zwei Messungen entweder vor und nach der Probenentnahme oder der Exposition gegenüber der Kontrolle vorgenommen. Diese sollten einen fehlerhaften Fehler um Null ergeben, wenn dies gut gemacht wird. Wenn Sie sehen, dass etwas nicht symmetrisch ist und Null bedeutet, sollten Sie sich fragen, warum.
Sie sagen nicht, wie die Messungen in Ihren Daten durchgeführt wurden, aber ich denke, die Spitze für kleine positive Werte deutet auf ein Problem hin. Ohne weitere Informationen möchte ich nicht kommentieren, ob Sie erwarten sollten, dass die Residuen schwerere oder leichtere Schwänze als eine Normalverteilung haben.
Ich stimme @ThomasLumley (+1) zu, dass es sich lohnt zu fragen, warum Ihre Daten nicht normal verteilt sind. Insbesondere könnten Sie darüber nachdenken, warum es eine Spitze direkt über dem Mittelwert gibt. Vielleicht erklärt eine Literaturrecherche zu ähnlichen Messungen, was los ist, und schlägt sogar vor, mit welcher Art von Verteilung Sie rechnen sollten.
Ich habe (grob) Daten rekonstruiert, die den Daten ähnlich sein könnten, die Sie vor dem Subtrahieren des Stichprobenmittelwerts hatten, und spekuliert, dass der Mittelwert bei 20 liegt. (Natürlich ist der Wert 20 völlig phantasievoll, aber ich musste etwas verwenden, um dies zu tun Geben Sie eine nützliche Diskussion darüber, wie Sie mit Ihren tatsächlichen Daten umgehen sollen.) Ich habe die Daten in meiner R-Sitzung als Vektor vvon$n = 202$Messungen. Zusammenfassende Statistiken und ein Frequenzhistogramm lauten wie folgt:
summary(v)
Min. 1st Qu. Median Mean 3rd Qu. Max.
18.90 19.70 19.91 19.96 20.30 20.70
length(v); sd(v)
[1] 202
[1] 0.385954
hist(v, ylim=c(0,50), label=T)
Teilweise aufgrund der "Spitze" ist es keine Überraschung, dass diese Daten einen Shapiro-Wilk-Normalitätstest mit einem P-Wert weit unter 5% nicht bestehen.
shapiro.test(d)
Shapiro-Wilk normality test
data: d
W = 0.94772, p-value = 1.025e-06
Ein Dichtehistogramm der Daten mit der Normalkurve "am besten passend" ist unten gezeigt. [Bei einer Stichprobengröße von so klein wie$n=200,$Sie sollten nicht erwarten, dass ein Histogramm, selbst von normalen Daten, eine perfekte Anpassung an eine normale Dichtekurve zeigt, aber Ihre Daten sind eindeutig weit vom Normalen entfernt.]
hist(v, prob=T, col="skyblue2")
curve(dnorm(x, mean(v), sd(v)), add=T, col="red")
Wenn die Daten nahezu normal waren, dann ein 95% -Konfidenzintervall (CI) für den Mittelwert $\mu_v$ der Bevölkerung, aus der diese Daten entnommen wurden, wäre vom Stil $\bar V \pm t^*S_v/\sqrt{n},$ wo $t^*$ verringert die Wahrscheinlichkeit $0.025 = 2.5\%$ vom oberen Ende der Student-t-Verteilung mit 201 Freiheitsgraden und $S_v$ist die Standardabweichung der Stichprobe. (Hier$t^* \approx 2.0$ und $S_v = 0.386$ wird in der obigen Datenzusammenfassung angegeben.) In R berechnet der 95% -KI zu $(19.91, 20.01).$ Die Daten sind jedoch so weit vom Normalen entfernt, dass man sich fragt, ob dieses CI gültig ist.
t.test(v)$conf.int
[1] 19.90788 20.01497
attr(,"conf.level")
[1] 0.95
Ein zu 95% nichtparametrischer CI verwendet nur die Daten und die Annahme, dass die Population einen Mittelwert hat. Durch wiederholtes "erneutes Abtasten" der Größe $ n = 202 $ mit Ersetzen aus dem vDatenvektor bewertet das Bootstrap-Verfahren die Variabilität der Daten über den Stichprobenmittelwert, um eine nützliche Intervallschätzung des Populationsmittelwerts zu erhalten. Das resultierende nichtparametrische Bootstrap-CI von 95% für $ \ mu_v $ ist $ (19.91, 20.02). $ Es stimmt eng mit dem obigen CI überein (das Normalität voraussetzt).
set.seed(902)
a.obs = mean(v)
d.re = replicate(3000, mean(sample(v,202,rep=T)) - a.obs)
a.obs - quantile(d.re, c(.975,.025))
97.5% 2.5%
19.90853 20.01564
Hinweis: Ich habe gefälschte Daten simuliert, von denen ich hoffe, dass sie sich nicht zu sehr von Ihren tatsächlichen Daten unterscheiden. (Wenn Sie später statistische Fragen stellen möchten, sollten Sie Ihre tatsächlichen Daten zusätzlich zu Ihren Zusammenfassungen oder Ihrem Histogramm angeben - es sei denn, Sie haben gute Gründe, diese Informationen nicht preiszugeben.)
set.seed(2020)
dif = seq(-11,7, by=2)/10; f = c(1,1,13,30,29,29,27,47,22,3)
di = rep(dif, f); u = round(runif(202, -.01, .01),3); d = di + u
v = 20 + d