Matplotlib: вероятностный массовый график - PullRequest
0 голосов
/ 08 января 2020

Почему общая вероятность превышает 1?

import matplotlib.pyplot as plt    

figure, axes = plt.subplots(nrows = 1, ncols = 1)
axes.hist(x = [0.1, 0.2, 0.3, 0.4], density = True)
figure.show()

enter image description here

Ожидаемые значения y: [0,25, 0,25, 0,25, 0,25]

1 Ответ

1 голос
/ 08 января 2020

Следующее - мое понимание согласно документации. Я не претендую на звание эксперта по матплотлибам и не являюсь одним из авторов. Ваш вопрос заставил меня задуматься, а затем я прочитал документацию и предпринял несколько логических шагов, чтобы понять ее. Так что это не экспертное мнение .

========================== ===============================================

С Вы не передали информацию о бункерах, Matplotlib пошел дальше и создал свои собственные бункеры. В этом случае ячейки выглядят так, как показано ниже.

bins = [0.1 , 0.13, 0.16, 0.19, 0.22, 0.25, 0.28, 0.31, 0.34, 0.37, 0.4 ]

Вы видите, что ширина привязки равна 0,03 .

Теперь в соответствии с документацией .

плотность: bool, необязательный Если True, то первым элементом возвращаемого кортежа будет число, нормализованное для формирования плотность вероятности, т. е. площадь (или интеграл) под гистограммой будет равна 1. Это достигается путем деления счетчика на количество наблюдений, умноженное на ширину ячейки, а не делением на общее количество наблюдений.

Чтобы сделать сумму равной 1, это нормализует подсчет, так что при умножении результирующих нормализованных подсчетов в каждом бине на ширину бина полученная сумма отдельного продукта становится равной 1. Ваше значения приведены ниже для X = [0.1,0.2,0.3,0.4]

OriginalCounts = [1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1]

Как вы можете видеть, если вы умножите массив OriginalCounts на ширину ячейки и суммируете их все, он будет получен до 4 * 0,03 = 0,12 .. что меньше единицы.

Таким образом, в соответствии с документацией нам нужно разделить массив OriginalCounts с коэффициентом, который равен (количество наблюдений * ширина бина).

В этом случае количество наблюдений равно 4, а ширина ячейки равна 0,03. Таким образом, 4 * 0,03 равно 0,12. Таким образом, вы делите каждый элемент OriginalCounts на 0,12, чтобы получить массив значений нормализованной гистограммы.

Это означает, что пересмотренные значения приведены ниже

NormalizedCounts = [8.33333333, 0. , 0. , 8.33333333, 0. , 0. , 8.33333333, 0. , 0. , 8.33333333]

Обратите внимание, что теперь, если вы сложите нормализованные значения, умноженные на ширину ячейки, она будет равна 1. Вы можете быстро проверьте это: 8.333333 * 4 * 0.03 = 0.9999999 .. , что очень близко к 1.

Этот нормализованный подсчет окончательно показан на графике. Это причина, по которой высота столбцов на гистограмме близка к 8 для четырех положений.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...