首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gsl_stats_skew返回错误的结果

gsl_stats_skew返回错误的结果
EN

Stack Overflow用户
提问于 2021-03-02 09:57:03
回答 1查看 48关注 0票数 0

我在一个C应用程序上使用GSL库1.15,我对计算数据集的偏斜感兴趣。理论:

根据matlab,应将其翻译为:

在我看来,gsl专用函数gsl_stats_skew的输出返回错误的结果。考虑到以下代码:

代码语言:javascript
复制
const double array[] = { 2.5, 3.7, 6.6, 9.1, 9.5, 10.7, 11.9, 21.5, 22.6, 25.2 };
const skewness = gsl_stats_skew(array, 1, 10);
printf("result : %f\n", skewness);

  • 预期的结果是0.5751
  • 返回的结果是0.41408

F 214

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-03-05 09:25:32

原因是有不同的方法来实现偏斜函数,特别是:

  • biased偏度:它是matlab的默认值,也是excel的SKEW.P函数,在以前的dataset
  • unbiased偏度中等于0.4850 :matlab在添加flag=0时计算它,它是excel的倾斜函数,也是在线计算器计算它的=> 0.57551
  • gsl偏差的常用方法:它是有偏差的版本,有一定的变化:标准差是用1/(N1)因子而不是1/N => 0.41408

来计算的。

下面是我的偏置版本的C实现,希望它能有所帮助:

代码语言:javascript
复制
double skewness(const double elements[], const int numElements){
  const double media = gsl_stats_mean(elements, 1, numElements);
  const double stDev = gsl_stats_sd_with_fixed_mean(elements, 1, numElements, media); // use 1/N normalization factor instead of 1/(N-1)
  double sum_numerator=0;
  for(int i=0; i<numElements; i++) sum_numerator += pow((elements[i] - media),3);
  const double numerator = sum_numerator / numElements;
  const double denominator = pow(stDev,3);
  return numerator / denominator; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66437110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档