300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python求偏度系数_python模拟概率论中偏度和峰度计算

python求偏度系数_python模拟概率论中偏度和峰度计算

时间:2024-08-09 18:48:34

相关推荐

python求偏度系数_python模拟概率论中偏度和峰度计算

在概率学中我们用偏度和峰度去刻画分布的情况:

偏度描述的是分布的对称性程度,如上面,右偏表示在u值的右侧分布占多数,左偏则反向,并且通过阴影的面积去刻画概率。而峰度是描述分布的最高值的情况,在常用情况下,减去3的原因在于正态分布的超值峰度恰好为3。

下面使用python代入公式计算和调用函数库计算进行比较:

#!/usr/bin/python

#coding:utf8

#coding=utf8

#encoding:utf8

#encoding=utf8

#_*_ coding:utf8 _*_

# -*- coding:utf-8 -*-

import numpy as np

from scipy import stats

import math

import matplotlib as mpl

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from matplotlib import cm

def calc_statistics(x):

n = x.shape[0] # 样本个数

# 手动计算

# 分别表示各个k阶矩

m = 0

m2 = 0

m3 = 0

m4 = 0

for t in x:

m += t

m2 += t*t

m3 += t**3

m4 += t**4

m /= n

m2 /= n

m3 /= n

m4 /= n

# 代入公式求个值

mu = m

sigma = np.sqrt(m2 - mu*mu)

skew = (m3 - 3*mu*m2 + 2*mu**3) / sigma**3

kurtosis = (m4 - 4*mu*m3 + 6*mu*mu*m2 - 4*mu**3*mu + mu**4) / sigma**4 - 3

print('手动计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)

# 使用系统函数验证

mu = np.mean(x, axis=0)

sigma = np.std(x, axis=0)

skew = stats.skew(x)

kurtosis = stats.kurtosis(x)

return mu, sigma, skew, kurtosis

if __name__ == '__main__':

d = np.random.randn(100000)

print(d)

mu, sigma, skew, kurtosis = calc_statistics(d)

print('函数库计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)

# 一维直方图

mpl.rcParams[u'font.sans-serif'] = 'SimHei'

mpl.rcParams[u'axes.unicode_minus'] = False

y1, x1, dummy = plt.hist(d, bins=50, normed=True, color='g', alpha=0.75)

t = np.arange(x1.min(), x1.max(), 0.05)

y = np.exp(-t**2 / 2) / math.sqrt(2*math.pi)

plt.plot(t, y, 'r-', lw=2)

plt.title(u'高斯分布,样本个数:%d' % d.shape[0])

plt.grid(True)

plt.show()

d = np.random.randn(100000, 2)

mu, sigma, skew, kurtosis = calc_statistics(d)

print('函数库计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)

# 二维图像

N = 30

density, edges = np.histogramdd(d, bins=[N, N])

print('样本总数:', np.sum(density))

density /= density.max()

x = y = np.arange(N)

# 高斯分布

t = np.meshgrid(x, y)

fig = plt.figure(facecolor='w')

ax = fig.add_subplot(111, projection='3d')

ax.scatter(t[0], t[1], density, c='r', s=15*density, marker='o', depthshade=True)

ax.plot_surface(t[0], t[1], density, cmap=cm.Accent, rstride=2, cstride=2, alpha=0.9, lw=0.75)

ax.set_xlabel(u'X')

ax.set_ylabel(u'Y')

ax.set_zlabel(u'Z')

plt.title(u'二元高斯分布,样本个数:%d' % d.shape[0], fontsize=20)

plt.tight_layout(0.1)

plt.show()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。