我正在尝试使用R中的约束最大似然来估计一些参数,更具体地说,使用R中的stata包中的constrOptim()
。我正在使用Python语言编程,并通过RPy2使用R。
在我的模型中,我假设数据服从Beta分布,因此我使用预先指定的参数值创建了一个模拟数据集,现在我正在尝试估计这些参数,以验证我的估计程序运行良好。
我观察到的是,我的估计对初始参数非常敏感。例如,我有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"))
发布于 2014-05-09 16:08:43
我在R中遇到了一个函数,它做的正是我想要的。包‘Rsolnp’具有函数"gosolnp“,描述为执行随机初始化和多次重新启动solnp求解器。
它非常高效,文档中提供了如何使用它的示例。
更多信息:http://cran.r-project.org/web/packages/Rsolnp/Rsolnp.pdf
https://stackoverflow.com/questions/15275479
复制相似问题