Ограничить коэффициент модели скрытого выбора класса, чтобы он был положительным в пакете gmnl в R - Ошибка в constrOptim2, начальное значение не допустимая область - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь использовать пакет gmnl для построения модели выбора скрытого класса. Я хотел бы ограничить коэффициент (скидка в 50 долларов за просмотр GP, т.е. class.1. Дисконт в размере 50 $, как показано ниже), чтобы он был положительным (означает лучше, чем скидка не предоставляется). Тем не менее появляется сообщение об ошибке:

Ошибка в constrOptim2 (theta = c (class.1.MedProviderGP = 0.513279040827413,: начальное значение, а не допустимая область

Coefficients:
                                 Estimate Std. Error  z-value  Pr(>|z|)    
class.1.MedProviderGP          -0.2171971  0.1563375  -1.3893 0.1647466    
class.1.FacilityAllAvailable    2.1752389  0.2011631  10.8133 < 2.2e-16 ***
class.1.Discount$50Discount    -0.1849808  0.1874791  -0.9867 0.3238024    
class.1.DiscountEntire_for_50  -0.1649310  0.2735538  -0.6029 0.5465622    
class.1.DiscountEntire_for_100 -0.3601621  0.2389666  -1.5072 0.1317684    
class.1.DiscountEntire_for_200 -0.4968307  0.3203479  -1.5509 0.1209234 

В то же время я могу добавить другие ограничения, такие как полная скидка> скидка 50 долл. Нет никаких сообщений об ошибках для этих ограничений. Есть ли способ сделать скидку 50 долл. Ограничения> 0? Или это означает, что невозможно установить этот коэффициентбыть позитивным?

1 Ответ

0 голосов
/ 14 ноября 2019

Спасибо за разъяснения. Похоже, что это связано с проблемой начального значения. Вы можете указать вектор начальных значений следующим образом:

# Fill in with the correct values. 
param_start <- c()

# And then add it to your model call with the start option
LC3.constraint <- gmnl(ConceptChoice + MedProvider + Facility + Discount + Wait + Payment| 0 | 0 | 0 | 
                       Age40above + EmployPart + EmployOther + TravelDiff + PerceptionHigh + GPCompetenceLow,
                       data = Scenario, model = "lc", Q = 2, panel = T,
                       method = "bfgs", constraints = list(ineqA = A, ineqB = B),
                       start = param_start)

Это позволит вам указать набор начальных значений, который удовлетворяет вашим ограничениям, и должен гарантировать, что оценка не провалится при начальных значениях.

А теперь небольшой совет. Вы пытаетесь оценить ненаблюдаемую неоднородность в своей выборке, оценивая вероятность того, что выбор пациента может быть описан тем или иным классом. С максимальной вероятностью модель будет выбирать параметры, которые максимизируют вероятность данных. Введение таких ограничений, основанных на вашей интуиции как исследователя, приведет к неэффективной оценке и может даже привести к проблемам с идентификацией. Почему бы не позволить данным сказать вам, если люди восприняли скидку таким образом? Если он не отображается в ваших данных, даже когда вы увеличиваете количество классов, возможно, люди не думают об этом так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...