Ton*_*vel 34 python scipy statsmodels
似乎scipy曾经提供了一个函数mad
来计算一组数字的平均绝对偏差:
http://projects.scipy.org/scipy/browser/trunk/scipy/stats/models/utils.py?rev=3473
但是,我无法在当前版本的scipy中找到它.当然可以从存储库中复制旧代码,但我更喜欢使用scipy的版本.我在哪里可以找到它,或者它已被替换或删除?
mhs*_*ith 46
[编辑]因为这继续被投票:我知道中位数绝对偏差是一个更常用的统计数据,但提问者要求平均绝对偏差,这里是如何做到的:
from numpy import mean, absolute
def mad(data, axis=None):
return mean(absolute(data - mean(data, axis)), axis)
Run Code Online (Sandbox Code Playgroud)
Lee*_*Lee 31
为了它的价值,我将它用于MAD:
def mad(arr):
""" Median Absolute Deviation: a "Robust" version of standard deviation.
Indices variabililty of the sample.
https://en.wikipedia.org/wiki/Median_absolute_deviation
"""
arr = np.ma.array(arr).compressed() # should be faster to not use masked arrays.
med = np.median(arr)
return np.median(np.abs(arr - med))
Run Code Online (Sandbox Code Playgroud)
sfj*_*jac 22
当前版本的statsmodels具有mad
在statsmodels.robust
:
>>> import numpy as np
>>> from statsmodels import robust
>>> a = np.matrix( [
... [ 80, 76, 77, 78, 79, 81, 76, 77, 79, 84, 75, 79, 76, 78 ],
... [ 66, 69, 76, 72, 79, 77, 74, 77, 71, 79, 74, 66, 67, 73 ]
... ], dtype=float )
>>> robust.mad(a, axis=1)
array([ 2.22390333, 5.18910776])
Run Code Online (Sandbox Code Playgroud)
注意,默认情况下,通过将结果缩放比例因子,假设正态分布,计算标准偏差的稳健估计值; 来自help
:
Signature: robust.mad(a,
c=0.67448975019608171,
axis=0,
center=<function median at 0x10ba6e5f0>)
Run Code Online (Sandbox Code Playgroud)
版本R
进行了类似的规范化.如果你不想要这个,显然只是设置c=1
.
(之前的评论提到了这一点statsmodels.robust.scale
.实现在statsmodels/robust/scale.py
(参见github)但是robust
包没有导出scale
,而是scale.py
明确地导出公共函数.)
mat*_*att 16
看起来scipy.stats.models 在2008年8月因烘焙不足而被删除.发展已迁移到statsmodels
.
如果你喜欢在Pandas工作(就像我一样),它对平均绝对偏差有一个很有用的功能:
import pandas as pd
df = pd.DataFrame()
df['a'] = [1, 1, 2, 2, 4, 6, 9]
df['a'].mad()
Run Code Online (Sandbox Code Playgroud)
输出:2.3673469387755106
归档时间: |
|
查看次数: |
41368 次 |
最近记录: |