我正在尝试使用不带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
答案 0 :(得分:0)
文档说:
请注意,你必须提供常数,如果你想要的话。
这会让我相信,如果不需要,可以简单地省略常数。但是,在那种情况下,该模块呱呱叫:
t.pl::Statistics::Regression:new:如果没有至少两个变量,就无法进行回归。
我长期以来一直认为,对于数值分析和统计计算,人们不应该相信善意但是构思错误的业余贡献。
使用统计人员打算使用的内容。 R是一个明显的选择。