Статистика Perl :: Описательное и усеченное стандартное отклонение - PullRequest
3 голосов
/ 27 января 2011

Модуль Statistics::Descriptive предоставляет класс Full, который позволяет вычислять усеченное среднее.Есть ли способ получить из этого усеченное стандартное отклонение?Он уже сортирует данные, чтобы получить усеченное среднее, поэтому сложная часть выполнена.

1 Ответ

3 голосов
/ 28 января 2011

Если все ваши данные положительные или все отрицательные числа, то вы можете просто сохранить 2 объекта $ stat, один для простых значений и один для квадратов, и объединить результаты 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...