我编写了一个定制的em算法函数。我有三个参数需要估计。这三个参数都在0到1之间,加起来等于1。所以我认为我只需要在函数中加入两个参数,和,第三个参数是1-。我的问题是如何让函数知道这两个输入只能取0到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
。如果您没有使用R软件包之一,如mixtools
,实现EM(期望最大化)算法,那么您的问题实际上不是关于R的
你必须通过算法决定如何限制你的参数alpha
和beta
的值。您可能正在寻找所谓的约束优化,正如Paul Hiemstra建议的那样。这个决定将取决于你试图解决的问题的统计(或数学或物理等)意义。
如果您是初学者,我建议您从最简单和最严格的方法开始:在迭代期间,如果您的参数超出了允许的间隔,则将其值设置为相应的限制。像这样:
alpha = min(1, max(0, alpha))