excel中NORM.DIST 的python实现

NORM.DIST

NORMDIST函数的主要作用是返回指定平均值和标准偏差的正态分布函数。此函数在统计方面应用范围广泛(包括假设检验)。

NORMDIST(x,mean,standard_dev,cumulative)

参数说明

  • 如果 mean 或 stand_dev 为非数值型,函数 NORMDIST 返回错误值 #VALUE!。

  • 如果 standard_dev ≤ 0,函数 NORMDIST 返回错误值 #NUM!。

  • 如果 mean = 0,standard_dev = 1,且 cumulative = TRUE,则函数 NORMDIST 返回标准正态分布,即函数 NORMSDIST。

  • 正态分布密度函数 (cumulative = FALSE) 的计算公式如下:
    在这里插入图片描述

  • 如果 cumulative = TRUE,则公式为从负无穷大到公式中给定的 X 的积分。

此处用python 实现上面的最后两个逻辑:

  • 正态分布密度函数 (cumulative = FALSE) 的计算公式如下:
    在这里插入图片描述

  • 如果 cumulative = TRUE,则公式为从负无穷大到公式中给定的 X 的积分。


import numpy as np



_std = np.std(data_list, ddof=1)

_mean = np.mean(data_list)



def norm_dist_func(x, _mean, _std, cumulative):
	if cumulative:
		result = norm_dist_func_true(x, _mean, _std)
	else:
		result = norm_dist_func_false(x, _mean, _std)
	return result


def norm_dist_func_true(x, _mean, _std):
	oor2pi = 1/ np.sqrt(2.0* np.pi)
	x2 = (x-_mean)/_std
	if x2== 0:
		res =0.5
	else:
		t = 1/ (1.0 + 0.2316419 * np.abs(x2))
		t = t * oor2pi * np.exp(-0.5 * x2 *x2)
			* (0.31938153 + t 
			* (-0.356563782 + t
			* (1.781477937 + t
			* (-1.821255978 + t * 1.330274429))))
		if x2 > 0:
			res = 1.0-t
		else:
			res =t
	return res



def norm_dist_func_false(x, _mean, _std):
	exponent = (x - _mean)**2.0 / (2.0 * _std**2.0)
	return np.exp(-exponent) / (np.sqrt(2.0 * np.pi) * _std)


你可能感兴趣的:(python)