找回密码
 注册
查看: 7936|回复: 1

比较两个perl统计包求中位数的差别

[复制链接]
发表于 2010-8-26 10:23:34 | 显示全部楼层 |阅读模式
本帖最后由 六出 于 2010-8-26 10:26 编辑

转载请注明出处,来自生物统计家园:http://www.biostatistic.net
用perl进行计算的时候,要构建个@array,然后计算@array的中位数,有几个包可以用,下面比较2个包Statistics::Basic和Statistics::Descriptive的差别:

均使用windows active perl进行测试
安装统一使用:
c:\perl\bin>ppm-shell
ppm>install Statistics::Basic
ppm>install Statistics::Descriptive

1、求整数的中位数
(1)Statistics::Basic
#!/usr/bin/perl
use strict;

my @array;
$array[0]=1;
$array[1]=2;
$array[2]=3;
$array[3]=4;
  use Statistics::Basic qw(:all);
  my $median2= median(@array);
  print "$median2 \n";


屏幕输出结果:2.5

(2)Statistics::Descriptive
#!/usr/bin/perl
use strict;

my @array;
$array[0]=1;
$array[1]=2;
$array[2]=3;
$array[3]=4;
use Statistics::Descriptive;
my $stat = Statistics::Descriptive::Full->new();
  $stat->add_data(@array);
my $ median = $stat->median();
  print "$median \n";

屏幕输出结果:2.5

评论:从上面两个结果看,对于一串整数,求中位数返回的结果是一致的

2、求小数的中位数
(1)Statistics::Basic
#!/usr/bin/perl
use strict;

my @array;
$array[0]=0.0001;
$array[1]=0.00021;
$array[2]=0.0003;
$array[3]=0.0004;
  use Statistics::Basic qw(:all);
  my $median2= median(@array);
  print "$median2 \n";

屏幕输出结果:0

2、Statistics::Descriptive

#!/usr/bin/perl
use strict;

my @array;
$array[0]=0.0001;
$array[1]=0.00021;
$array[2]=0.0003;
$array[3]=0.0004;
use Statistics::Descriptive;
my $stat = Statistics::Descriptive::Full->new();
  $stat->add_data(@array);
my $ median = $stat->median();
  print "$median";

屏幕输出结果:0.000255


比较分析:从结果可以看出对于小数的输出,Statistics::Basic的精确度只能控制到小数点后2位,多于2位的将会被舍掉,而Statistics::Descriptive则会返回更高的精度。

结论:
因此如果你的数据都是在两位小数以内的,用Statistics::Basic和Statistics::Descriptive都可以
如果你的数据和多是多于两位小数,用用Statistics::Descriptive,以满足对精度的要求
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 19:34 , Processed in 0.023095 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表