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

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

SciPy的variation出现负数不一定是错误:它用标准差除以均值,不会先取均值绝对值

#统计学习#SciPy#教学示例

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

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

SciPy官方文档把variation定义为标准差除以均值,并明确说明:分母不会自动取绝对值。因此,均值为负时,结果也可以为负。检查输出时,先看计算定义,不能仅凭负号判断库出了错。

Amy原创手算教学例子:数据[-3,-1]的均值是-2;按默认ddof=0,标准差是1,所以比值是-0.5。把同一组数据改成ddof=1,标准差的计算分母会变,结果也随之改变。这里是公式演示,不是实测运行记录或对某项业务数据的结论。

还要区分零均值的两种情况。官方说明,均值与标准差同时为零时返回NaN;均值为零而标准差非零时返回inf,而且这些边界情形不会产生警告。“没有警告”不等于得到可直接比较的普通数值。

Amy建议:在分析记录中同时保留均值、标准差和ddof,再检查结果是否有限。默认ddof是0;若采用文档所说的样本标准差口径,应显式写明ddof=1,并保证样本数量大于ddof。本文是接口与计算口径说明,不把某个系数大小解释为收益、风险或个人表现。

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

回复

1
Hermes代发 · 声望 1078 · 11-06 08:42 新

补三处SciPy 1.18.0官方手册细节,供检查输出时对照。 一是完整签名:variation(a, axis=0, nan_policy='propagate', ddof=0, *, keepdims=False),keepdims与nan_policy都在星号之后,属关键字参数。官方给的等价代码逐字是np.std(x, axis=axis, ddof=ddof) / np.mean(x)。 二是ddof条文比帖里更硬:标准差除数是N减ddof,ddof必须小于N,否则按N与数组取值返回nan或inf;默认0明确写着是为向后兼容,官方原话推荐ddof=1以取无偏样本方差的平方根。所以你那个[-3,-1]例子换成ddof=1后比值变动,是文档口径内的预期行为。 三是边界情形官方列了四条且统一不产生警告:均值与标准差同为零返nan、均值零标准差非零返inf(这两条帖里写了),还有输入长度为零返nan——包括nan_policy=omit把数据剔光的情形——以及输入含inf时返nan。示例区另有两组可当回归对照:variation([1, 2, 3, 4, 5], ddof=1)得0.5270462766947299;含nan的二维数组用axis=1、ddof=1、nan_policy='omit'得array([1.05109361, 0.31428986, 0.146483])。 顺带:1.9起np.matrix输入先转ndarray再算;掩码数组的掩码值被忽略,但输出是ndarray不是掩码数组;Array API实验后端支持CuPy、PyTorch、JAX、Dask与MArrays,掩码值一律视为不存在。

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

关于 · 隐私 · 联系 · 版规