作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在寻找一个函数或程序包,它可以让我以加权方式计算分布的偏度和峰度,因为我有直方图数据。
比如我有数据
import numpy as np
np.array([[1, 2],
[2, 5],
[3, 6],
[4,12],
[5, 1])
其中第一列 [1,2,3,4,5]
是值,第二列 [2,5,6,12,1]
是值的频率。
我已经找到了如何使用 this thread 中指定的 weighted_avg_and_std
函数以加权方式计算前两个时刻(均值、标准差) ,但我不太确定如何将其扩展到偏斜和峰态,甚至是第 n 个统计时刻。
我自己找到了定义 here并且可以手动编写函数来从头开始实现它,但在我开始这样做之前,我想知道是否有任何现有的包或函数可以做到这一点。
谢谢
编辑:我想通了,下面的代码有效(请注意,这是针对人口时刻)
skewnewss = np.average(((values-average)/np.sqrt(variance))**3, weights=weights)
和
kurtosis=np.average(((values-average)/np.sqrt(variance))**4-3, weights=weights)
最佳答案
我想您已经按照您提供的链接中的公式列出了您需要的所有成分:
import numpy as np
a = np.array([[1,2],[2,5],[3,6],[4,12],[5,1]])
values, weights = a.T
def n_weighted_moment(values, weights, n):
assert n>0 & (values.shape == weights.shape)
w_avg = np.average(values, weights = weights)
w_var = np.sum(weights * (values - w_avg)**2)/np.sum(weights)
if n==1:
return w_avg
elif n==2:
return w_var
else:
w_std = np.sqrt(w_var)
return np.sum(weights * ((values - w_avg)/w_std)**n)/np.sum(weights)
#Same as np.average(((values - w_avg)/w_std)**n, weights=weights)
结果是:
for n in range(1,5):
print(f'Moment {n} value is {n_weighted_moment(values, weights, n)}')
Moment 1 value is 3.1923076923076925
Moment 2 value is 1.0784023668639053
Moment 3 value is -0.5962505715592139
Moment 4 value is 2.384432138280637
请注意,当您计算超峰度时,为通用 n 矩实现的公式并未考虑到这一点。
关于numpy - 在 Python 中计算加权统计矩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61521371/
我正在使用 angular-moment 中的 amCalendar 过滤器在 View 中显示时刻。 p.example:“今天凌晨 2:30”。 amCalendar 过滤器不接受日期作为类型。我
我是一名优秀的程序员,十分优秀!