Я пытаюсь оценить несколько параметров, используя константу максимального правдоподобия в R и, более конкретно, constrOptim()
из пакета stata в R. Я программирую на Python и используя R через RPy2 ,Как установить несколько стартовых значений в constrOptim()
В моей модели я предполагаю, что данные следуют за бета-распределением, поэтому я создал имитированный набор данных с использованием заданных значений параметров, и теперь я пытаюсь оценить эти параметры, чтобы проверить, что моя программа оценки работает отлично.
Я заметил, что моя оценка довольно чувствительна к исходным параметрам. Например, у меня есть 11 параметров для оценки (назовём параметры как pam1..pam11) и их истинное значение:
pam1=0.2 pam2=0.3 pam3=0.4 pam4=0.7 pam5=0.55 pam6=0.45 pam7=0.1 pam8=0.01 pam9=0.01 pam10=45 pam11=45
В constrOptim()
я устанавливаю исходные параметры, как:
start_param = FloatVector ((pam1, pam2, pam3, pam4, pam5, pam6, pam7, pam8, pam9, pam10, pam, 11))
где я устанавливаю начальные значения. Я заметил, что, когда я использую разные стартовые значения, результаты меняются. Например, когда я использую множество
start_param=FloatVector((0.2,0.3,0.4,0.6,0.7,0.8,0.3,0.011,0.011,15,15))
и я получаем следующие оценки
$par
[1] 0.20851065 0.30348571 0.43616932 0.73695654 0.58287221
0.45541506
[7] 0.11191879 0.02233908 0.01988878 46.57249043 45.48544918
$value
[1] -215.9711
$convergence
[1] 0
, но когда я использую другой комплект, как, например:
start_param=FloatVector((0.2,0.3,0.4,0.75,0.55,0.45,0.3,0.05,0.05,59,59))
результаты изменения и кажется, что я теряю конвергенцию
$par
[1] 0.17218738 0.27165359 0.48458978 0.80295773 0.62618983 0.43254786
[7] 0.12426385 0.02991442 0.01853252 57.78269692 59.35376216
$value
[1] -146.9858
$convergence
[1] 1
Мой вопрос: Я видел, что в Stata есть опция, которая ищет лучшие начальные значения для алгоритма численной оптимизации. Я попытался установить несколько стартовых значений, установив матрицу, но это не сработало. Есть ли опция в constrOptim
, которая позволит мне сделать что-то вроде этого?
Большое спасибо заранее.
Для получения дополнительной информации, спецификация я использую для constrOptim()
является:
res=statsr.constrOptim(start_param,Rmaxlikelihood,grad='NULL',ui=ui,ci=ci,method="Nelder-Mead",control=list("maxit=3000,trace=F"))
Я не думаю, что есть вариант, но вы можете просто вызвать функцию несколько раз, в цикле, с различными (случайным образом) отправными точками, и сохранить результат с лучшим значением , –