質問概要
pythonを用いて、list型のデータ(x_sample)のヒストグラムとそのフィッティング曲線(正規分布曲線)を表示したいです。
ヒストグラム表示の際にdensity=Trueを書けば、ヒストグラムの標準化(全面積=1となる)ができると言われていますが、なぜか標準化できません。
どうすればできますでしょうか。
実際に書いたコード
Python
1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4 5x_sample=[0.26390308, 0.30237182, 0.27755142, … (1000個ある)] 6x_sample=np.array(x_sample) 7 8#平均μと標準偏差σを代入するとガウス分布の確率密度関数P(x)の値を返す関数を定義 9def gauss(x, mu, sigma): 10 return np.exp(- (x - mu) ** 2 / (2 * sigma ** 2)) / np.sqrt(2 * np.pi * sigma ** 2) 11 12#最尤推定法でガウス分布のパラメータmuとsigmaをもとめる 13mu_ML = x_sample.mean() 14sigma_ML = x_sample.std() 15 16x_ML = np.arange(0, 2.5, 0.001) 17y_ML = gauss(x_ML, mu_ML, sigma_ML) 18 19#x_sampleのヒストグラムと、最尤推定法で決定した正規分布曲線を表示する 20plt.hist(x_sample, bins=40, density=True, label='sample') 21plt.plot(x_ML, y_ML, label='fitted') 22plt.xlim(0, 0.6) 23plt.show()
表示されるグラフ
横軸はx_sampleの値、縦軸はその値をとる確率です。
青色がヒストグラム、オレンジ色が正規分布曲線です。
一見うまくいっているように見えますが、縦軸が大きすぎます。ヒストグラムの面積が1になるとは思えないです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/01 03:03