Statistics::LineFit - Lineare Regression ganz einfach

Veröffentlicht von Thomas Fahle am (Permalink)

Gewicht eines Babys in Abhängigkeit vom Lebenstag

Statistics::LineFit von Richard Anderson ist eine einfach zu bedienende Bibliothek zur Berechnung einfacher linearer Regressionen.

Beispiel

Für das nachfolgende Beispiel habe ich das R Beispiel aus GNU R: Regression als Vorlage genutzt.

Zu erst werden die Koeffizienten der Regressionsgraden ermittelt und ausgegeben.

Im nächsten Schritt werden die gemessenen und berechneten Werte und deren Abweichung (Residuen) ausgegeben.

 

#!/usr/bin/perl
use strict;
use warnings;

use Statistics::LineFit;

# Datensatz Lebensalter und Gewicht siehe
# https://de.wikibooks.org/wiki/GNU_R:_Anwendungsbeispiele#Beispiel_5

# Lebensalter in Tagen - X-Achse
my @xValues = ( 1, 3, 6, 11, 12, 15, 19, 23, 28, 33, 35, 39, 47, 60, 66, 73 );

# Gewicht in Gramm - Y-Achse
my @yValues = (
    3180, 2960, 3220, 3270, 3350, 3410, 3700, 3830,
    4090, 4310, 4360, 4520, 4650, 5310, 5490, 5540
);

my $lineFit = Statistics::LineFit->new();

$lineFit->setData( \@xValues, \@yValues ) or die "Invalid data";

$lineFit->regress() or die "Regression failed";

my ( $intercept, $slope ) = $lineFit->coefficients();

print "f(x) = $slope * x + $intercept\n";
print "\n";

my @predictedYs = $lineFit->predictedYs();
my @residuals   = $lineFit->residuals();

for ( my $i = 0 ; $i <= $#xValues ; $i++ ) {
    printf "X: %2s Y: %4s Y pred: %-16s Residual: %s\n", $xValues[$i],
      $yValues[$i],
      $predictedYs[$i], $residuals[$i];
}

Das Programm erzeugt folgende Ausgabe:

f(x) = 37.4774195124732 * x + 2971.13346310157

X:  1 Y: 3180 Y pred: 3008.61088261404 Residual: 171.389117385957
X:  3 Y: 2960 Y pred: 3083.56572163899 Residual: -123.565721638989
X:  6 Y: 3220 Y pred: 3195.99798017641 Residual: 24.0020198235916
X: 11 Y: 3270 Y pred: 3383.38507773877 Residual: -113.385077738775
X: 12 Y: 3350 Y pred: 3420.86249725125 Residual: -70.862497251248
X: 15 Y: 3410 Y pred: 3533.29475578867 Residual: -123.294755788668
X: 19 Y: 3700 Y pred: 3683.20443383856 Residual: 16.7955661614396
X: 23 Y: 3830 Y pred: 3833.11411188845 Residual: -3.11411188845341
X: 28 Y: 4090 Y pred: 4020.50120945082 Residual: 69.4987905491803
X: 33 Y: 4310 Y pred: 4207.88830701319 Residual: 102.111692986814
X: 35 Y: 4360 Y pred: 4282.84314603813 Residual: 77.1568539618675
X: 39 Y: 4520 Y pred: 4432.75282408803 Residual: 87.2471759119744
X: 47 Y: 4650 Y pred: 4732.57218018781 Residual: -82.5721801878108
X: 60 Y: 5310 Y pred: 5219.77863384996 Residual: 90.2213661500373
X: 66 Y: 5490 Y pred: 5444.6431509248  Residual: 45.3568490751977
X: 73 Y: 5540 Y pred: 5706.98508751211 Residual: -166.985087512115

 

Siehe auch:

 

Bildnachweis

By Karsten Adam (Own work) [GFDL or CC BY-SA 3.0], via Wikimedia Commons