如何在constrOptim()中设置多个初始值

3 投票
1 回答
801 浏览
提问于 2025-04-17 18:17

我正在尝试在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,pam11))

这里我设置了起始值。我发现当我使用不同的起始值时,结果会有所不同。例如,当我使用以下这组值时:

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"))

1 个回答

0

我发现了一个R语言中的函数,正好符合我的需求。这个叫做‘Rsolnp’的包里有一个函数叫“gosolnp”,它的功能是进行随机初始化和多次重启solnp求解器。

这个函数非常高效,文档里还提供了使用示例。

更多信息请查看: http://cran.r-project.org/web/packages/Rsolnp/Rsolnp.pdf

撰写回答