Als Wessi entlarvt bei einer R-Schulung!

Bei einer R-Schulung wurde ich als Wessi entlarvt in einer Situation, in der ich das absolut nicht erwartet hätte. Es ging ums Runden.

Hättet Ihr das gewusst? Habt Ihr ähnliche Überraschungen mit interkulturellen Unterschieden in vermeintlich unverdächtigen Situationen erlebt?

Kaufmännisches vs. mathematisches Runden

Zu der Zeit hatte ich mich noch nicht weiter mit den Details des Rundens beschäftigt und zeigte etwas naiv in einem R-Einführungskurs:

round(3.5)
[1] 4

Für mich war das Thema damit erledigt. Eine Teilnehmerin, die in der DDR Mathematik studiert hatte, fragte mich daraufhin, welches Ergebnis R liefert, wenn man 2.5 auf Ganzzahl rundet. Ich war überrascht über die Frage, es erschien mir trivial. Aber gut, wenn sie meint …

round(2.5)
[1] 2

Als sie meine Überraschung bemerkte, sagte sie mir (freundlich) ins Gesicht: „Ah, ein Wessi!“. Nun war ich von den Socken, das traf mich gänzlich unvorbereitet. Sie erläuterte weiterhin sehr freundlich, dass im Westen kaufmännisches Runden gelehrt wurde, bei dem bei x,5 immer aufgerundet wird – genauer gesagt gilt das für positive Zahlen. Bei negativen Zahlen wird von der Null weggerundet, also -2.5 wird auf -3 gerundet.

Nachteil des kaufmännischen Rundens: Es bringt Verzerrungen. Habe ich nur oder überwiegend positive Zahlen mit x,5-Werten, dann erhöht diese Rundungsart Kennzahlen wie Summe und Mittelwert.

Beim mathematischen Runden wird hingegen zur nächsten geraden Zahl gerundet. Dadurch können sich Auf- und Abrundungen statistisch ausgleichen, Mittelwerte und Summen werden nicht systematisch verzerrt.

Runden von Dezimalzahlen auf binären Rechenmaschinen

Das Thema ist bei genauerem Hinsehen viel komplizierter und weniger trivial, als man auf den ersten Blick meinen möchte. Interessanterweise wurde die Implementierung der Rundung in Base R vor nicht allzu langer Zeit verändert: R 4.0 rundet anders als R 3.6. Hier gibt es eine ausführliche Diskussion dazu. Es gibt ein R-Paket namens round, das das Rundungsverhalten älterer R-Versionen reproduziert.

Ein wesentlicher Grund, warum das Runden auf Computern nicht-trivial ist, liegt in der Herausforderung, das übliche Dezimalsystem auf einem binären System abzubilden:

Fast alle endlichen Dezimalbrüche können nicht (exakt) als binäre Zahlen mit doppelter Genauigkeit (binary double precision numbers) ausgedrückt werden.

Vignette des R-Pakets round

Ein Beispiel aus den FAQs der R-Dokumentation: 7.31 Why doesn’t R think these numbers are equal?

Genauigkeit bei Dezimalzahlen in R: Wurzel und Quadrat
Quelle: FAQs der R-Dokumentation, 7.31

Hier ein zwar etwas älteres, aber auch heute noch lesenswertes Buch. Sehr gut geschrieben mit den Verweisen auf Dantes Göttliche Komödie: „Das R-Inferno“

Ein Gedanke zu „Als Wessi entlarvt bei einer R-Schulung!“

Freue mich über Kommentare!