2011-01-27 6 views
3

Statistics::Descriptiveモジュールは、調整済み平均を計算するためのFullクラスを提供します。そこからトリミングされた標準偏差を得る方法はありますか?それは既にトリミングされた平均を得るためにデータをソートしているので、難しい部分は完了です。Perl統計::説明とトリム標準偏差

+0

ソースコードを見ましたか?たぶん、あなたが探していることを行う、文書化されていない方法やプライベートな方法があります。 – toolic

+0

@toolicしました。私はこのために自分の方法を書くことができる方法を見ていますが、それは私のためにそれを行うための文書化されていないものがあるようには見えません。 –

+0

メソッドを作成し、それをCPAN作成者用のパッチとして送信します。 – toolic

答えて

3

あなたのデータはすべて正、またはすべて負の数値である場合、あなたはわずか2つの$スタットオブジェクト、無地の値の1と乗値のための1つを維持し、トリミングSTDDEVを生成するtrimmed_mean結果を組み合わせることができます。

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 
+1

これは動作しますが、ソートには2倍の時間がかかります。大規模なデータセットの場合は多少不幸です。すでにソートされたデータが元の構造にある場合 –

+0

@ pythonic-metaphor私は同意し、率直に言って、Statistics :: Descriptiveは使用しません。非常に制限されたインターフェイスにあなたをロックしながら、便利な機能はほとんど提供していません。私の解決策は主にハックバリューだった。 Perlの世界にとどまっている間にあなたの統計にパフォーマンスが必要な場合は、PDL – ivancho