Я пытался свести к минимуму настраиваемую вероятность с помощью statsmodel, изменив класс GenericLikelihoodModel. Согласно веб-сайту (https://www.statsmodels.org/dev/examples/notebooks/generated/generic_mle.html) вам необходимо предоставить функцию nloglikeobs: «nloglikeobs: эта функция должна возвращать одну оценку функции отрицательного логарифмического правдоподобия на наблюдение в наборе данных». Однако форма моей вероятности зависит от каждого наблюдения (процесс Пуассона - нет общей вероятности), и я изо всех сил пытаюсь найти способ заставить программу использовать это различие.
Вот мой код:
def neg_ll_individual(x,theta):
a=theta[0]
b=theta[1]
#find the bin where the measurement is from
j=np.argmax(Mean_expression_bins>x)
return(-np.log(stats.poisson.pmf(Sij[1,j],intensity_parameter(1,j,a,b)))/Sij[1,j])
class CustomGammaPoissonModel(GenericLikelihoodModel):
def __init__(self, endog, exog=None, **kwds):
if exog is None:
exog = np.zeros_like(endog)
super(CustomGammaPoissonModel, self).__init__(endog, exog, **kwds)
def nloglikeobs(self, params):
return(neg_ll_individual(self.endog,params))
def fit(self, start_params=None, maxiter=1000, maxfun=5000, **kwds):
if start_params is None:
ab = self.endog.mean()
abb=self.endog.var()
start_params = np.array([(ab**2)/abb,abb/ab])
return super(CustomGammaPoissonModel, self).fit(start_params=start_params,
maxiter=maxiter, maxfun=maxfun, **kwds)
model = CustomGammaPoissonModel(data_transformation_bins(Sij[1,:]))
theta_start=starting_point_binned(Sij[1,:])
results = model.fit(start_params=theta_start)
Мои входные данные (матрица endog / X) data_transformation_bins(Sij[1,:])
- это массив (604,) numpy, и в идеале мне бы хотелось, чтобы statsmodel обрабатывал каждую точку данных последовательно. Проблема заключается в том, как я создал функцию правдоподобия. neg_ll_individual
: поиск индекса j приводит к проблеме широковещания, поскольку модель статистики подает во всей матрице data_transformation_bins(Sij[1,:])
как x
вместо одного числового элемента данных, что приводит к несовместимости во время операции np.argmax
(Mean_expression_bins - это ( 16,) матрица). Хотели бы вы дать совет по этой проблеме?
<ipython-input-92-43c31aa5830a> in neg_ll_individual(x, theta)
13 b=theta[1]
14 #find the bin where the measurement is from
---> 15 j=np.argmax(Mean_expression_bins>x)
16 return(-np.log(stats.poisson.pmf(Sij[1,j],intensity_parameter(1,j,a,b)))/Sij[1,j])
17
ValueError: operands could not be broadcast together with shapes (16,) (604,)