如何在R中使用fminsearch(或替代)约束参数值

时间:2014-03-08 21:13:42

标签: r mathematical-optimization

有没有办法在pracma中强制fminsearch将其搜索约束到指定的参数子空间?如果没有,是否有替代fminsearch可以做到这一点?

我的实际案例有很多与此问题无关的复杂性,所以这里只是一个简单的案例。由于参数值不受约束,因此fminsearch会在底部的第二个示例中尝试无效值,这会导致错误。如果有办法告诉fminsearch第一个参数必须是非负的,但是怎么做呢?

可以避免这些错误。
library( pracma )

fit_param   = function(D) {
    return( fminsearch( error_fn, c(5,1), D=D ) )
}

error_fn    = function( params, D ) {
    pred_y  = replicate( nrow(D), predict(params,D) )
    SSE     = sum((D$y-pred_y)^2)
    return( SSE )
}

predict     = function( params, D ) {
    if ( params[1]<0 ) {
        writeLines( paste( "invalid parameter value for parameter 1:", params[1] ) )
    }
    pred    = sqrt(params[1]) * D$x + params[2]
    return( pred )
}

true_model  = function( D, params ) {
    return( predict( params, D ) )
}

D   = data.frame( x=replicate(100,rand()) )
D$y = true_model( D, c( 5, 1 ) )
    fit_param( D ) # works
    D$y = true_model( D, c( .5, 1 ) )
fit_param( D ) # doesn't work - comes too close to zero and tries out negative values, resulting in errors

0 个答案:

没有答案