我写了一个定制的em算法函数。我要估计三个参数。这三个参数都在0到1之间,加起来等于1。所以我想我只需要在我的函数中放两个参数,alpha和beta,第三个参数就是1-alpha-beta。我的问题是如何让函数知道这两个输入只能取 0 到 1 之间的值?
user1946504
问问题
2729 次
2 回答
1
我不太清楚所讨论的函数是依赖于这些值(alpha,beta)还是返回它们......
可以这么简单吗:
fun1 <- function(a,b){
if(a<=0 | b<=0) warning("value of a or b <=0")
if(a>=1 | b>=1) warning("value of a or b >=1")
### function does something
a1 <- a
b1 <- b
return(c(a1,b1,(1-a1-b1)))
}
在这里,您在运行函数之前检查输入。
该功能仍将运行,但会警告用户,例如
> fun1(0.25,0.5)
[1] 0.25 0.50 0.25
但
> fun1(1.25,-0.5)
[1] 1.25 -0.50 0.25
Warning messages:
1: In fun1(1.25, -0.5) : value of a or b <=0
2: In fun1(1.25, -0.5) : value of a or b >=1
查看?stop
是否要因输入值而停止执行并返回错误。
于 2013-04-18T01:29:50.533 回答
0
如果您没有使用mixtools
实现 EM(期望最大化)算法的 R 包之一,那么您的问题实际上与 R 无关。
您必须对如何限制参数值做出算法决定,alpha
并且beta
. 正如Paul Hiemstra建议的那样,您可能正在寻找所谓的constrained optimization 。该决定将取决于您尝试解决的问题的统计(或数学或物理等)含义。
如果您处于初学者级别,我建议您从最简单和最严格的方法开始:在迭代过程中,如果您的参数超出允许的区间,请将其值设置为相应的限制。像这样的东西:
alpha = min(1, max(0, alpha))
于 2016-06-17T06:35:35.247 回答