2013-04-17 18 views
0

我寫了一個自定義的em算法函數。我有三個參數需要估計。這三個參數都在0和1之間,加起來就是1.所以我認爲我只需要在函數中放入兩個參數alpha和beta,第三個參數就是1-alpha-beta。我的問題是如何讓函數知道這兩個輸入只能取0到1之間的值?如何在R中限制自定義函數中的輸入值?

+4

你想在函數的一個參數超出該範圍的情況下做什麼? – joran

+2

或者你想要一些約束優化嗎? –

回答

1

我不太清楚有問題的功能是否依賴於這些值(α,β)或返回他們...

難道是這麼簡單:

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如果你想停止執行,由於輸入值,並返回一個錯誤。

0

如果你不使用R封裝之一,像mixtools,實現EM(期望最大化)算法,你的問題其實不是R.

你必須要對如何限制的算法決定您的參數值,alphabeta。您可能正在尋找所謂的約束優化,因爲建議使用Paul Hiemstra。這個決定將取決於你試圖解決的問題的統計(或數學或物理等)含義。

如果您處於初學者級別,我建議從最簡單和嚴格的方法開始:在迭代過程中,如果參數超出允許的時間間隔,請將其值設置爲相應的限制。類似這樣的:

alpha = min(1, max(0, alpha)) 
相關問題