0

我写了一个定制的em算法函数。我要估计三个参数。这三个参数都在0到1之间,加起来等于1。所以我想我只需要在我的函数中放两个参数,alpha和beta,第三个参数就是1-alpha-beta。我的问题是如何让函数知道这两个输入只能取 0 到 1 之间的值?

4

2 回答 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 回答