(не забудьте прочитать РЕДАКТИРОВАТЬ в конце поста, прежде чем читать слишком глубоко в источник)
Я строю гистограмму населения, которое, кажется,из log Laplacian дистрибуция:
Я пытаюсь нарисовать линию, наиболее подходящую для этого, чтобы проверить мою гипотезу, но у меня возникают проблемы с получением значимых результатов.
Я использую лапласовское определение PDF из Википедии и беру 10 к степени PDF (чтобы "обратить" эффект гистограммы журнала).
Что такоеЯ делаю не так?
Вот мой код.Я передаю данные через стандартный ввод (cat pop.txt | python hist.py
) - вот выборка населения.
from pylab import *
import numpy
def laplace(x, mu, b):
return 10**(1.0/(2*b) * numpy.exp(-abs(x - mu)/b))
def main():
import sys
num = map(int, sys.stdin.read().strip().split(' '))
nbins = max(num) - min(num)
n, bins, patches = hist(num, nbins, range=(min(num), max(num)), log=True, align='left')
loc, scale = 0., 1.
x = numpy.arange(bins[0], bins[-1], 1.)
pdf = laplace(x, 0., 1.)
plot(x, pdf)
width = max(-min(num), max(num))
xlim((-width, width))
ylim((1.0, 10**7))
show()
if __name__ == '__main__':
main()
EDIT
ОК, вотпопытка сопоставить его с регулярным распределением Лапласа (в отличие от логарифмического Лапласа).Отличия от вышеуказанной попытки:
- гистограмма нормирована
- гистограмма линейна (не лог)
laplace
функция определена точно так, как указано в статье Википедии
Вывод:
Как видите, это не лучшее совпадение, но цифры (гистограмма и PDF Лапласа), по крайней мере, теперь находятся в одном поле,Я думаю, что бревно Лапласа будет соответствовать намного лучше.Мой подход (источник выше) не сработал.Кто-нибудь может предложить способ сделать это, что работает?
Источник:
from pylab import *
import numpy
def laplace(x, mu, b):
return 1.0/(2*b) * numpy.exp(-abs(x - mu)/b)
def main():
import sys
num = map(int, sys.stdin.read().strip().split(' '))
nbins = max(num) - min(num)
n, bins, patches = hist(num, nbins, range=(min(num), max(num)), log=False, align='left', normed=True)
loc, scale = 0., 0.54
x = numpy.arange(bins[0], bins[-1], 1.)
pdf = laplace(x, loc, scale)
plot(x, pdf)
width = max(-min(num), max(num))
xlim((-width, width))
show()
if __name__ == '__main__':
main()