尽管我已经找了两天的相关问题,我还没有真正找到这个问题的答案。。。在
在下面的代码中,我生成n个正态分布的随机变量,然后用直方图表示:import numpy as np
import matplotlib.pyplot as plt
n = 10000 # number of generated random variables
x = np.random.normal(0,1,n) # generate n random variables
# plot this in a non-normalized histogram:
plt.hist(x, bins='auto', normed=False)
# get the arrays containing the bin counts and the bin edges:
histo, bin_edges = np.histogram(x, bins='auto', normed=False)
number_of_bins = len(bin_edges)-1
在此基础上,建立了曲线拟合函数及其参数。
它与参数a1和b1正态分布,并用比例因子缩放,以满足样本不正态化的事实。
它确实非常符合柱状图:
^{pr2}$
之后,我想用卡方检验来测试这个函数与直方图的匹配程度。
本测试使用这些点的观察值和期望值。为了计算期望值,我首先计算每个箱子中间的位置,这个信息包含在数组x\u middle中。然后计算每个bin的中间点处拟合函数的值,得到期望的_值数组:observed_values = histo
bin_width = bin_edges[1] - bin_edges[0]
# array containing the middle point of each bin:
x_middle = np.linspace( bin_edges[0] + 0.5*bin_width,
bin_edges[0] + (0.5 + number_of_bins)*bin_width,
num = number_of_bins)
expected_values = scaling_factor*sp.stats.norm.pdf(x_middle,a1,b1)
将其插入Scipy的chisquare函数,得到的p值大约为e-5到e-15个数量级,这说明拟合函数没有描述直方图:print(sp.stats.chisquare(observed_values,expected_values,ddof=2))
但这不是真的,这个函数很适合直方图!在
有人知道我在哪里犯了错误吗?在
非常感谢!!
查尔斯
注:我将delta自由度的数量设置为2,因为这两个参数a1和b1是从样本中估计出来的。我尝试使用其他ddof,但结果仍然很差!在