Чтобы инициализировать мои параметры для байесовской MCMC, мне нужно вычислить MLE бета и гаммы, определяемые следующим образом.Y_1
, ..., Y_N
наблюдаются, Y_i
принимает одну из J
упорядоченных категорий.Существует скрытая непрерывная случайная переменная Z_i
, распределенная как N(x_i^T,beta)
, и мы наблюдаем Y_i
, где Y_i=j
, если gamma_(j-1)<Z_i<gamma_j
.Как я могу найти эти MLE с Python?Я попробовал это:
def lik(parameters):
#initialize parameters
gamma = parameters[0]
beta1 = parameters[1]
beta2 = parameters[2]
beta3 = parameters[3]
N = X.shape[0]
xb= []
#compute beta*X:
for i in range(N):
xb.append(beta1*X.iloc[i,0]+beta2*X.iloc[i,1]+beta3*X.iloc[i,2])
L = 0
for i in range(N):
if Y_m[i] ==0:
L += norm.cdf(-xb[i])
if Y_m[i] ==1:
L += (norm.cdf(gamma - xb[i]) - norm.cdf(-xb[i]))
if Y_m[i] ==2:
L += (1 - norm.cdf(gamma -xb[i]))
return -L
print(lik(np.array([1,2,3, 4])))
guess = np.array([1,1,1,1])
results = minimize(lik, guess, method = 'Nelder-Mead', options={'disp': True})
Но, похоже, не работает ...