亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一起繪制伯努利樣本和伯努利 pmf 的密度直方圖

一起繪制伯努利樣本和伯努利 pmf 的密度直方圖

縹緲止盈 2023-06-27 14:45:55
問題摘要:為什么我的樣本密度與 pmf 如此不同,如何執行此模擬以使 pmf 和樣本估計值相似。問題:我使用 模擬了獨立伯努利試驗的樣本scipy。我現在嘗試獲取我創建的樣本的密度直方圖,并將其與 pmf(概率質量函數)進行比較。我希望密度直方圖顯示兩個箱,每個箱懸停在 pmf 附近,但相反,我有 2 個箱高于 pmf 值 5。有人可以告訴我如何創建一個不為伯努利執行此操作的密度直方圖嗎?我嘗試了一些其他發行版的類似模擬,它似乎工作得很好。我在這里缺少什么,你能告訴我如何操作我的代碼來完成這項工作嗎?import numpy as npimport matplotlib.pyplot as pltimport scipy.stats as statstrials = 10**3p = 0.5sample_bernoulli = stats.bernoulli.rvs(p, size=trials) # Generate benoulli RVplt.plot((0,1), stats.bernoulli.pmf((0,1), p), 'bo', ms=8, label='bernoulli pmf')# Density histogram of generated valuesplt.hist(sample_bernoulli, density=True, alpha=0.5, color='steelblue', edgecolor='none')plt.show()如果這是一個簡單或微不足道的問題,我必須道歉,但我無法在網上找到解決方案并發現這個問題很有趣。任何幫助將不勝感激。
查看完整描述

1 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

原因是這plt.hist主要是為了處理連續分布。如果您不提供明確的 bin 邊界,plt.hist則只需在最小值和最大值之間創建 10 個等距的 bin。這些垃圾箱大部分都是空的。如果只有兩個可能的數據值,則應該只有兩個 bin,因此有 3 個邊界:


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', bins=np.linspace(-0.5, 1.5, 3))

plt.show()

http://img1.sycdn.imooc.com//649a861100010f8706230390.jpg

以下是默認 bin 邊界以及樣本如何放入 bin 的可視化。請注意density=True,使用 時,直方圖已標準化,所有條形的面積之和為 1。在本例中,兩個條形寬且0.1高5.0,而其他 8 個條形的高度為零。所以,總面積為2*0.1*5 + 8*0.0 = 1。


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


# Density histogram of generated values with default bins

values, binbounds, bars = plt.hist(sample_bernoulli, density=True, alpha=0.2, color='steelblue', edgecolor='none')

# show the bin boundaries

plt.vlines(binbounds, 0, max(values) * 1.05, color='crimson', ls=':')

# show the sample values with a random displacement

plt.scatter(sample_bernoulli * 0.9 + np.random.uniform(0, 0.1, trials),

            np.random.uniform(0, max(values), trials), color='lime')

# show the index of each bin

for i in range(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()

http://img1.sycdn.imooc.com//649a86240001ecdc08850256.jpg

查看完整回答
反對 回復 2023-06-27
  • 1 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號