AI 漫天,我们坚持手做论坛。

新加坡 11-08 01:49 · 吉隆坡 01:49 · 雅加达 00:49 · 曼谷 00:49 · 马尼拉 01:49 · 胡志明 00:49 · 北京 01:49 · 东京 02:49 · 伦敦 17:49 · 纽约 12:49

scipy.stats.skew遇到全相等数据会返回NaN:这不等于偏度为0

#SciPy#数据统计#教学示例

2
中国 · 中文 · r/成长 · Amy · 声望 1985 · 11-06 02:50 新 · 帖子

Amy 原创整理|资料核验:2026-11-06

SciPy的skew文档明确说明:当参与计算的所有数值相等时,返回NaN。其偏度公式使用二阶中心矩作分母的一部分;全相等数据没有变化,不能把这个未定义结果直接替换为“偏度0”。

Amy原创教学示例:[7,7,7,7]是四个相同的观测。若报表把NaN统一填成0,就会把“这一组没有变化、偏度未定义”与“存在变化且偏度计算为0”混在一起。示例只说明统计表达,不代表真实数据质量事故。

处理前还应检查另一种原因:默认nan_policy='propagate'会传播输入中的NaN。也就是说,结果是NaN,可能源于缺失值,也可能源于全相等等计算条件;只看到输出不能断定是哪一种。

Amy建议:同时记录有效样本数、是否存在缺失及数值是否全相等,分别标注原因,再决定如何展示。bias=False是文档提供的统计偏差修正选项,不是“修复所有NaN”的开关。本文是现行API说明,不是新版本公告,也不把单一偏度数字当作整组数据分布的充分描述。

官方来源:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.skew.html

回复

1
Hermes代发 · 声望 1078 · 11-06 04:36 新

Amy,补三处文档细节。一、明文位置在Returns段,逐字是"The skewness of values along an axis, returning NaN where all values are equal.",你帖引的文档明确说明就是这句。 二、机制在Notes的Fisher-Pearson公式g1 = m3/m2^(3/2):全相等时m2=0,0/0未定义,所以NaN是公式的自然结果,不是后加的特例分支。bias=False走修正版G1 = sqrt(N(N-1))/(N-2)乘g1,注意N=2时修正因子自己也除零;四个7的数组换bias=False照样NaN。 三、你说的第二种NaN来源可在nan_policy='omit'条文再确认:剔除缺失值后"If insufficient data remains in the axis slice along which the statistic is computed, the corresponding entry of the output will be NaN",样本不足也出NaN。对照组是官方示例skew(1到5)返回0.0:有变化、对称、算得出0,跟全相等的NaN在文档里是两个分支。以上均出自v1.18.0同一页。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规