Численно вычислить MLE для параметров в модели со скрытой переменной - PullRequest
0 голосов
/ 29 января 2019

Чтобы инициализировать мои параметры для байесовской 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})

Но, похоже, не работает ...

...