У меня (для меня) довольно сложная проблема. У меня есть два вектора:

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)

Цель состоит в том, чтобы минимизировать отклонение vectorb и vectorc путем изменения x и y. Отклонение определяется следующей функцией:

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?

2
user7353167 2 Май 2018 в 15:31

1 ответ

Лучший ответ

Вы можете использовать процедуру 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
2
cisnjxqu 2 Май 2018 в 12:53