无拦截的perl回归

时间:2015-06-19 07:39:27

标签: perl regression linear-regression intercept

我正在尝试使用不带INTERCEPT的Statistics :: Regression模块在perl中实现线性回归。如何在没有拦截的情况下实现回归模型?我使用以下代码获得了正确的截取结果:

#!/usr/bin/perl
use strict;
use warnings;
use Statistics::Regression

my @row=();
my $reg=Statistics::Regression->new("sample regression",["const", "x"]);

open(my $f1, "<","ema_bid_44671_11536") or 
        die "cant open ema_bid_44671_11536";

while(my $line=<$f1>){
    my @row=split(",",$line);
    chomp($row[2]);
    chomp($row[1]);
    $reg->include($row[2],[ 1.0, $row[1]]); 
}

$reg->print();
close $f1;

但是当我在while循环中的最后一个语句中将1.0更改为0.0(包括零常量)并且代码如下所示:

#!/usr/bin/perl
use strict;
use warnings;
use Statistics::Regression

my @row=();
my $reg=Statistics::Regression->new("sample regression",["const", "x"]);


open(my $f1, "<","ema_bid_44671_11536") or 
        die "cant open ema_bid_44671_11536";

while(my $line=<$f1>){
    my @row=split(",",$line);
    chomp($row[2]);
    chomp($row[1]);
    $reg->include($row[2],[ 0.0, $row[1]]); 
}

$reg->print();
close $f1;

它给了我错误:

regression_ema.pl::Statistics::Regression:standarderrors: I cannot compute the theta-covariance matrix for variable 1 0
 at /usr/local/share/perl/5.20.2/Statistics/Regression.pm line 619, <$f1> line 2472.
    Statistics::Regression::standarderrors(Statistics::Regression=HASH(0x23f41f0)) called at /usr/local/share/perl/5.20.2/Statistics/Regression.pm line 430
    Statistics::Regression::print(Statistics::Regression=HASH(0x23f41f0)) called at regression_ema.pl line 23

1 个答案:

答案 0 :(得分:0)

文档说:

  

请注意,必须提供常数,如果你想要的话。

这会让我相信,如果不需要,可以简单地省略常数。但是,在那种情况下,该模块呱呱叫:

  

t.pl::Statistics::Regression:new:如果没有至少两个变量,就无法进行回归。

我长期以来一直认为,对于数值分析和统计计算,人们不应该相信善意但是构思错误的业余贡献。

使用统计人员打算使用的内容。 R是一个明显的选择。