2016-02-15 4 views
-5

Как решить уравнение y = x^a в R, чтобы получить оптимизирующее значение для 'a'. Здесь y и x - матрица (n x 1), а «a» - неизвестный параметр. Как это решить в R ??Как решить нелинейное уравнение в R

+0

Вы хотите поместиться? Самый простой способ - взять 'log' для каждой стороны и получить' log (y) = a * log (x) '. Таким образом, «наилучший» 'a' будет найден как' lm (log (y) ~ log (x) - 1) '. –

ответ

2

Это довольно легко с помощью функции цифровой нелинейной минимизации nlm(). Вы определяете функцию потерь, которая должна быть минимизирована. В вашем примере, например,

Это простая функция потери квадратов квадратов. Вы должны округлить разницу между y и x^a, в противном случае минимальным будет -Inf.

Теперь вы можете просто использовать nlm() найти минимум:

x <- runif(1000) 
y <- x^(0.8) + rnorm(1000,0,0.1) 

nlm(f, p=1) 

дает:

$minimum 
[1] 0.01004981 

$estimate 
[1] 0.8033611 

$gradient 
[1] 6.322894e-08 

$code 
[1] 1 

$iterations 
[1] 6 

Таким образом, оценка именно то, что вы могли бы подумать.

Других возможности включают optimize() для одномерных фитинга, но для этого вы должны указать интервал, в котором для поиска:

> optimize(f, interval =c(-100,100)) 
$minimum 
[1] 0.8033645 

$objective 
[1] 0.01004981 

Более общий подход будет использовать функцию optim(), которая позволяет вам свести к минимуму по нескольким параметрам:

> optim(0, f) 
$par 
[1] 0.8035156 

$value 
[1] 0.01004981 
... 

Обратите внимание, что это приведет к предупреждению. Эта функция не оптимизирована для одномерной оптимизации. Вы можете указать method = "Brent, но тогда вам нужно установить нижний и верхний пределы.

Так много возможностей в R для этого :)

+0

Спасибо @Joris Meys за ваши ценные предложения, и я попробую эти вещи в R. –

Смежные вопросы