我有一个(对我来说)非常复杂的问题。我有两个向量:

vectora <- c(111, 245, 379, 516, 671)
vectorb <- c(38, 54, 62, 67, 108)


此外,我有两个变量

x = 80
y = 0.8


第三个向量通过以下方式基于变量x和y:

vectorc <- vectora^y/(1+(vectora^y-1)/x)


目的是通过改变x和y来最小化vectorb和vectorc的偏差。偏差由以下功能定义:

deviation <- (abs(vectorb[1]-vectorc[1])) + (abs(vectorb[2]-vectorc[2])) + (abs(vectorb[3]-vectorc[3])) + (abs(vectorb[4]-vectorc[4])) + (abs(vectorb[5]-vectorc[5]))


我如何在R中做到这一点?

最佳答案

您可以使用optim过程!

运作方式如下:



vectora <- c(111, 245, 379, 516, 671)
vectorb <- c(38, 54, 62, 67, 108)
fn <- function(v) {
    x = v[1]
    y = v[2]
    vectorc <- vectora^y/(1+(vectora^y-1)/x);
    return <- sum(abs(vectorb - vectorc))
}
optim(c(80, 0.8), fn)


输出为:

$par
[1] 91.4452617  0.8840952

$value
[1] 37.2487

$counts
function gradient
     151       NA

$convergence
[1] 0

$message
NULL

关于r - R中的Excel Solver-最小化功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50134750/

10-11 04:19