Как подобрать целочисленную функцию с плотностью вероятности в питоне? - PullRequest
0 голосов
/ 20 октября 2019

Я использую Python v> 3.0. У меня есть вопрос, касающийся подгонки для интегральной функции. У меня есть функция с независимой переменной и два параметра для оценки. Допустим, независимой переменной является 'X', а параметрами являются a и b.

X - данные в сетке (2-мерные). В каждой точке сетки 'i' X изменяется от X [i] -4 до X [i] +4, тем самым вызывая функцию плотности вероятности, связанную с каждой сеткой 'i', которая может быть X [i] PDF. X [i] _pdf - массив с nbins от X [i] -4 до X [i] + 4

Функция, которую нужно решить: E [i] = целое {(X [i]_Pdf) * a * (X [i] ** b))

Когда я решаю это, я получаю c0 = nan, p0 = inf. Мои данные не содержат нан. Буду признателен за любую помощь в этом отношении.

Я проверил другие вопросы по схожим вопросам, но ни один из них не содержит PDF, что делает его сложным.

Я пытаюсь использовать подбор кривой для интегральной функции, которая включает произведение независимой переменной и ее pdf в каждой точке. Pdf рассчитывается исходя из предположения о 2 сигма-разбросе с сигмой = 2,0 (x [j] - от 2 * 2,0 до x [j] + 2 * 2.0 в «предсказанном» уравнении ниже).

Когда я решаю это, я получаю c0 = nan, p0 = inf. Мои данные не содержат нан. Буду признателен за любую помощь в этом отношении.

Параметры a и b должны быть оценены. Вот фрагмент моего кода.

    import numpy as np
from scipy.integrate import quad
from scipy.optimize import curve_fit
from scipy.stats import norm

X = np.arange(0,30,0.05) # independent variable
y = np.arange(0,3.0,0.005) # dependent variable 


    def integrand(w,a,b):
        return norm.pdf(w) * a* (w**b)

    def fun1_var(X,a,b):
        x = X
        predicted = np.zeros(len(x))
        for j in range(0,len(x)):
            predicted[j] = quad(integrand, x[j]-4,x[j]+4, args=(a, b))[0]
        return predicted

c0,p0 = curve_fit(fun1_var,(X),y)
...