【发布时间】:2015-02-27 00:59:46
【问题描述】:
我正在自学如何在 R 中运行一些马尔可夫模型,方法是阅读教科书“时间序列的隐马尔可夫模型:使用 R 的介绍”。我对如何实施文中提到的东西有点困惑。
所以,我有以下功能:
f <- function(samples,lambda,delta) -sum(log(outer(samples,lambda,dpois)%*%delta))
我可以使用以下方法对 lambda 进行优化:
optim(par, fn=f, samples=x, delta=d)
where "par" is the initial guess for lambda, for some x and d.
效果很好。但是,在与我试图重现的示例相对应的文本部分中,他们指出:“参数 delta 和 lambda 受 sum(delta_i)=1 for i=1,...m, delta_i>0 的约束,和 lambda_i>0。因此,如果希望使用无约束的优化器(例如 nlm),则有必要重新参数化。一种可能性是最大化关于 2m-1 无约束参数的可能性”。
无约束参数由
给出eta<-log(lambda)
tau<-log(delta/(1-sum(delta))
我不完全明白如何去实现它。我将如何编写一个函数来优化这个转换后的参数空间?
【问题讨论】:
-
我不清楚这里涉及的对象的确切形状。带有示例输入数据的清晰 reproducible example 将非常有帮助。
-
将不受约束的参数合并到目标函数中,即用
eta和tau表示。正如@MrFlick 建议的那样,提供一个可重现的示例。
标签: r optimization constraints