Нахождение свертки двух гистограмм

Распределение вероятностей суммы двух случайных величин, x и y, задается сверткой отдельных распределений. У меня возникли проблемы с численным определением. В следующем примере x и y распределены равномерно, а их соответствующие распределения аппроксимированы в виде гистограмм. Мои рассуждения говорят о том, что гистограммы должны быть свернуты, чтобы получить распределение x+y.

from numpy.random import uniform
from numpy import ceil,convolve,histogram,sqrt
from pylab import hist,plot,show

n = 10**2

x,y = uniform(-0.5,0.5,n),uniform(-0.5,0.5,n)

bins = ceil(sqrt(n))

pdf_x = histogram(x,bins=bins,normed=True)
pdf_y = histogram(y,bins=bins,normed=True)

s = convolve(pdf_x[0],pdf_y[0])

plot(s)
show()

что дает следующее,

введите здесь описание изображения

Другими словами, треугольное распределение, как и ожидалось. Однако я понятия не имею, как найти значения x. Буду признателен, если кто-нибудь поправит меня здесь.


person lafras    schedule 29.06.2011    source источник
comment
Как x-значения были бы правильными, если бы вы даже не указали их на графике? Кроме того, строго говоря, histogram не даст вам pdf такого простого способа. Но, пожалуйста, сначала рассмотрите число вашего bins уважения к n. Спасибо   -  person eat    schedule 29.06.2011


Ответы (1)


Чтобы двигаться дальше (к более темным деталям), я дополнительно адаптировал ваш код следующим образом:

from numpy.random import uniform
from numpy import convolve, cumsum, histogram, linspace

s, e, n= -0.5, 0.5, 1e3
x, y, bins= uniform(s, e, n), uniform(s, e, n), linspace(s, e, n** .75)
pdf_x= histogram(x, normed= True, bins= bins)[0]
pdf_y= histogram(y, normed= True, bins= bins)[0]
c= convolve(pdf_x, pdf_y); c= c/ c.sum()
bins= linspace(2* s, 2* e, len(c))
# a simulation
xpy= uniform(s, e, 10* n)+ uniform(s, e, 10* n)
c2= histogram(xpy, normed= True, bins= bins)[0]; c2= c2/ c2.sum()

from pylab import grid, plot, show, subplot
subplot(211), plot(bins, c)
plot(linspace(xpy.min(), xpy.max(), len(c2)), c2, 'r'), grid(True)
subplot(212), plot(bins, cumsum(c)), grid(True), show()

Таким образом, давая графики примерно так: введите здесь описание изображенияГде верхняя часть представляет PDF (синяя линия), который действительно выглядит довольно треугольным и симуляция (красные точки), которая отражает треугольную форму. Нижняя часть представляет собой CDF, которая также хорошо соответствует ожидаемой кривой S.

person eat    schedule 29.06.2011
comment
Спасибо за ответ. Следуя статье в Википедии о свертке, я ожидаю, что новый диапазон x будет начинаться с - 1 к 1. Это та часть, с которой я борюсь. - person lafras; 30.06.2011
comment
Это (pdf_x = гистограмма (x) ** [0] **) игнорирует местоположения ячеек для гистограмм, преобразуя гистограмму в PDF перед сверткой. Итак, для реальных данных убедитесь, что ваши гистограммы двух наборов данных выровнены, чтобы иметь точно такие же ячейки (используя этот аргумент bins=bins), прежде чем делать это. Вы бы заполнили любые неперекрывающиеся промежутки или поля нулевыми отсчетами (пустыми ячейками). В противном случае результирующий PDF (и CDF) будет неправильным, даже если они выглядят как S-образные кривые и треугольники. - person hobs; 11.04.2013