Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 同时绘制伯努利样本和伯努利pmf的密度直方图_Python_Matplotlib_Scipy_Statistics_Bernoulli Probability - Fatal编程技术网

Python 同时绘制伯努利样本和伯努利pmf的密度直方图

Python 同时绘制伯努利样本和伯努利pmf的密度直方图,python,matplotlib,scipy,statistics,bernoulli-probability,Python,Matplotlib,Scipy,Statistics,Bernoulli Probability,问题摘要: 为什么我的样本密度与pmf如此不同,我如何执行此模拟以使pmf和样本估计值相似 问题: 我使用scipy模拟了一个独立的伯努利试验样本。我现在尝试获取我创建的样本的密度直方图,并将其与pmf(概率质量函数)进行比较。我希望密度直方图显示两个箱子,每个箱子都在pmf附近徘徊,但是相反,我有两个箱子在5的pmf值上方。有人能告诉我如何创建一个密度直方图,而不这样做的伯努利?我尝试了一个类似的模拟与其他几个分布,它似乎工作得很好。我在这里遗漏了什么,你能告诉我如何操作我的代码使其工作吗 i

问题摘要:

为什么我的样本密度与pmf如此不同,我如何执行此模拟以使pmf和样本估计值相似

问题:

我使用
scipy
模拟了一个独立的伯努利试验样本。我现在尝试获取我创建的样本的密度直方图,并将其与pmf(概率质量函数)进行比较。我希望密度直方图显示两个箱子,每个箱子都在pmf附近徘徊,但是相反,我有两个箱子在5的pmf值上方。有人能告诉我如何创建一个密度直方图,而不这样做的伯努利?我尝试了一个类似的模拟与其他几个分布,它似乎工作得很好。我在这里遗漏了什么,你能告诉我如何操作我的代码使其工作吗

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

trials = 10**3
p = 0.5


sample_bernoulli = stats.bernoulli.rvs(p, size=trials) # Generate benoulli RV
plt.plot((0,1), stats.bernoulli.pmf((0,1), p), 'bo', ms=8, label='bernoulli pmf')

# Density histogram of generated values
plt.hist(sample_bernoulli, density=True, alpha=0.5, color='steelblue', edgecolor='none')
plt.show()


如果这是一个简单或琐碎的问题,我必须道歉,但我无法在网上找到解决方案,并且发现这个问题很有趣。任何帮助都将不胜感激。

原因是
plt.hist
主要用于连续分发。如果不提供明确的存储箱边界,
plt.hist
只会在最小值和最大值之间创建10个等间距的存储箱。这些垃圾箱大部分都是空的。由于只有两个可能的数据值,因此应该只有两个箱子,因此有3个边界:

将numpy导入为np
将matplotlib.pyplot作为plt导入
将scipy.stats导入为stats
试验=10**3
p=0.5
样本(u bernoulli=stats.bernoulli.rvs(p,size=trials)#生成贝努利RV
plt.plot((0,1),stats.bernoulli.pmf((0,1),p),'bo',ms=8,label='bernoulli-pmf')
#生成值的密度直方图
plt.hist(样本_bernoulli,密度=真,α=0.5,颜色='steelblue',边色='none',箱子=np.linspace(-0.5,1.5,3))
plt.show()

以下是默认箱子边界的可视化,以及样本如何装入箱子。请注意,当密度=真时,直方图被标准化,以便所有条的面积总和为1。在这种情况下,两个条形图的宽度约为
0.1
,高度约为
5.0
,而其他8个条形图的高度为零。因此,总面积为
2*0.1*5+8*0.0=1

将numpy导入为np
将matplotlib.pyplot作为plt导入
将scipy.stats导入为stats
试验=10**3
p=0.5
样本(u bernoulli=stats.bernoulli.rvs(p,size=trials)#生成贝努利RV
#具有默认存储箱的生成值的密度直方图
值,b边界,条=plt.hist(样本_bernoulli,密度=真,α=0.2,颜色='steelblue',边缘颜色='none')
#显示垃圾箱边界
plt.vlines(二进制边界,0,最大值)*1.05,颜色='crimson',ls=':')
#显示带有随机位移的采样值
plt.散射(样本+伯努利*0.9+np.随机均匀(0,0.1,试验),
np.随机.均匀(0,最大值,试验),颜色='石灰')
#显示每个箱子的索引
对于范围内的i(len(binbounds)-1):
plt.text((binbounds[i]+binbounds[i+1])/2,max(values)/2,i,ha='center',va='center',fontsize=20,color='crimson')
plt.show()