Statistics::LineFit - Lineare Regression ganz einfach
Veröffentlicht von Thomas Fahle am (Permalink)
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:
- Statistics::LineFit
- Lineare Regression
- GNU R: Regression
- Statistics::GaussHelmert
- Statistics::Regression
- Statistics::OLS
- Math::GSL::Fit
- PDL::Stats::GLM
- Statistics::Basic::LeastSquareFit
- Statistics::Cook
- Perl-Snapshot 01/2015 - Perl-Skript überwacht Besucherstatistik von Youtube-Videos
Bildnachweis
By Karsten Adam (Own work) [GFDL or CC BY-SA 3.0], via Wikimedia Commons