FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: andies am 12 Oktober 2020, 10:04:54

Titel: TimeSeries.pm und Standardabweichung: Falsch?
Beitrag von: andies am 12 Oktober 2020, 10:04:54
Ich habe eine Frage zur Berechnung der Standardabweichung in TeimSeries.pm. Ich vermute, dass die Berechnung dort falsch ist. Der (sehr gut dokumentierte) Text lautet ab Zeile 243
# see Donald Knuth, The Art of Computer Programming, ch. 4.2.2, formulas 14ff.
  my $n= ++$self->{n};
  if($n> 1) {
    my $M= $self->{_M};
    $self->{_M}= $M + ($V - $M) / $n;
    $self->{_S}= $self->{_S} + ($V - $M) * ($V - $M);
    $self->{integral}+= $V;
    #main::Debug("V= $V M= $M _M= ".$self->{_M}." _S= " .$self->{_S}." int= ".$self->{integral});
  } else {
    $self->{_M}= $V;
    $self->{_S}= 0;
    $self->{integral}= $V;
  }

Donald Knuths Rechnung ist aber mE eine andere, siehe zum Beispiel https://gist.github.com/musically-ut/1502045/106af3cf8bd4db0c8581218759040b058da778d3 (https://gist.github.com/musically-ut/1502045/106af3cf8bd4db0c8581218759040b058da778d3) oder https://www.johndcook.com/blog/standard_deviation/ (https://www.johndcook.com/blog/standard_deviation/). Der Unterschied besteht, glaube ich, darin, dass in der Zeile
$self->{_S}= $self->{_S} + ($V - $M) * ($V - $M);
einmal der vorige und einmal der gerade erst ermittelte Mittelwert genutzt wird. Ich kann zu wenig Perl um zu klären, wie man das nun schreiben muss.  Mit meinen naiven Kenntnissen würde ich jetzt
$self->{_S}= $self->{_S} + ($V - $self->{_M}) * ($V - $M);
vermuten.

Kann da jemand, der sich auskennt, feedback geben?
Titel: Antw:TimeSeries.pm und Standardabweichung: Falsch?
Beitrag von: Dr. Boris Neubert am 13 Oktober 2020, 21:37:07
Hallo,

das Schöne an Open Source ist, dass kein Bug unentdeckt bleiben kann.

Ich habe gerade die Stelle in "meinem" Knuth nicht wiedergefunden, aber in den beiden zitierten Webquellen steht die Formel anders als implementiert, nämlich wie von Dir vorgeschlagen.

Ich schaue gelegentlich nochmal in den Knuth und korrigiere das dann im Code.

Danke, dass Du Dir die Mühe gemacht hast, das anzuschauen.

Viele Grüße
Boris
Titel: Antw:TimeSeries.pm und Standardabweichung: Falsch?
Beitrag von: andies am 14 Oktober 2020, 08:37:11
Ich habe mal die Seite rausgesucht (die war online, https://doc.lagout.org/science/0_Computer%20Science/2_Algorithms/The%20Art%20of%20Computer%20Programming%20%28vol.%202_%20Seminumerical%20Algorithms%29%20%283rd%20ed.%29%20%5BKnuth%201997-11-14%5D.pdf (https://doc.lagout.org/science/0_Computer%20Science/2_Algorithms/The%20Art%20of%20Computer%20Programming%20%28vol.%202_%20Seminumerical%20Algorithms%29%20%283rd%20ed.%29%20%5BKnuth%201997-11-14%5D.pdf), ist das überhaupt zulässig?)
Titel: Antw:TimeSeries.pm und Standardabweichung: Falsch?
Beitrag von: Dr. Boris Neubert am 17 Oktober 2020, 11:22:17
gefixt und eingespielt