Я пытаюсь написать код для создания доверительных интервалов для количества разных книг в библиотеке (а также создать информативный сюжет).
Мой двоюродный брат в начальной школе, и каждую неделю ему дается книга его учителя. Затем он читает его и возвращает его вовремя, чтобы получить еще одну на следующей неделе. Через некоторое время мы начали замечать, что он получал книги, которые он читал раньше, и со временем это стало более распространенным.
Скажите, что истинное количество книг в библиотеке равно N, и учитель выбирает один случайным образом (с заменой), чтобы дать вам каждую неделю. Если в течение недели t число случаев, когда вы получили прочитанную книгу, равно x, я могу дать оценку максимального правдоподобия для количества книг в библиотеке, следующих за https://math.stackexchange.com/info/615464/how-many-books-are-in-a-library.
Пример: Рассмотрим библиотеку с пятью книгами A, B, C, D и E. Если вы получаете книги [A, B, A, C, B, B, D] в семи последовательные недели, то значение для x (количество дубликатов) будет [0, 0, 1, 1, 2, 3, 3] после каждой из этих недель, то есть через семь недель вы получили книгу, которую вы уже читать три раза.
Чтобы визуализировать функцию правдоподобия (при условии, что я понял, что правильно), я написал следующий код, который, по моему мнению, отображает функцию правдоподобия. Максимум составляет около 135, что действительно является максимальной оценкой правдоподобия в соответствии с вышеприведенной ссылкой MSE.
from __future__ import division
import random
import matplotlib.pyplot as plt
import numpy as np
#N is the true number of books. t is the number of weeks.unk is the true number of repeats found
t = 30
unk = 3
def numberrepeats(N, t):
return t - len(set([random.randint(0,N) for i in xrange(t)]))
iters = 1000
ydata = []
for N in xrange(10,500):
sampledunk = [numberrepeats(N,t) for i in xrange(iters)].count(unk)
ydata.append(sampledunk/iters)
print "MLE is", np.argmax(ydata)
xdata = range(10, 500)
print len(xdata), len(ydata)
plt.plot(xdata,ydata)
plt.show()
Выход выглядит как
Мои вопросы таковы:
- Есть ли простой способ получить доверительный интервал 95% и построить его на диаграмме?
- Как вы можете наложить сглаженную кривую на график?
- Есть ли лучший способ написать мой код? Он не очень изящный и довольно медленный.
Поиск 95% -ного доверительного интервала означает поиск диапазона оси х, так что 95% времени эмпирическая оценка максимального правдоподобия, которую мы получаем с помощью выборки (которая теоретически должна быть 135 в этом примере), попадет в нее. Ответ @mbatchkarov дал в настоящее время не так правильно.
Теперь есть математический ответ на https://math.stackexchange.com/info/656101/how-to-find-a-confidence-interval-for-a-maximum-likelihood-estimate.