2013-03-07 3 views
3

Я пытаюсь оценить несколько параметров, используя константу максимального правдоподобия в 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")) 
+3

Я не думаю, что есть вариант, но вы можете просто вызвать функцию несколько раз, в цикле, с различными (случайным образом) отправными точками, и сохранить результат с лучшим значением , –

ответ

0

я наткнулся на функцию в R, который делает именно то, что я искал. Пакет «Rsolnp» имеет функцию «госолпп», которая описана для выполнения случайной инициализации и множественных перезапусков solnp-решателя.

Это довольно эффективно, и в документации приведены примеры того, как его использовать.

Подробнее: http://cran.r-project.org/web/packages/Rsolnp/Rsolnp.pdf