3
Statistics::Descriptive
模塊提供了Full
類,允許您計算修剪平均值。有沒有辦法從它得到一個修剪的標準偏差?它已經對數據進行排序以獲得修剪的意思,所以最難的部分就完成了。Perl統計信息::描述性和修剪標準差
Statistics::Descriptive
模塊提供了Full
類,允許您計算修剪平均值。有沒有辦法從它得到一個修剪的標準偏差?它已經對數據進行排序以獲得修剪的意思,所以最難的部分就完成了。Perl統計信息::描述性和修剪標準差
如果你的數據都是正的,或全部負數,那麼你可以只保留2個$統計對象,一個普通的價值和一個用於平方值,並結合trimmed_mean結果產生修剪STDDEV:
my $stat_x = Statistics::Descriptive::Full->new();
my $stat_xx = Statistics::Descriptive::Full->new();
sub add_x {
$stat_x->add_data(@_);
$stat_xx->add_data(map {$_*$_} @_);
}
sub trimmed_stddev {
my $lower = shift;
my $upper = @_ ? shift : $lower;
my $trm_x = $stat_x->trimmed_mean($lower, $upper);
my $trm_xx = $stat_xx->trimmed_mean($lower, $upper);
my $nn = int($stat_x->count() * (1.0 - $lower - $upper));
return ($nn <= 1 ? 0.0 : sqrt(($trm_xx - $trm_x * $trm_x) * $nn/($nn -1)));
}
# add some data
add_x(1, 5, 12, 29, 10, 11, 2);
print trimmed_stddev(0.0);
print trimmed_stddev(0.05);
print trimmed_stddev(0.2);
# output
# 9.45163125250522
# 9.58570364061576
# 4.44222166638871
你看過源代碼嗎?也許在那裏有一個沒有文檔或私有的方法來做你想要的。 – toolic 2011-01-27 20:44:50
@toolic只是做了。我明白我該如何爲此編寫我自己的方法,但看起來好像沒有一個無證的人爲我做這件事。 – 2011-01-27 21:19:52