Можно решить уравнение R, которые не являются линейными? - PullRequest
0 голосов
/ 25 марта 2020

Я хочу построить функцию, которая принимает E [x] и Var [X] и дает мне среднее значение и стандартную ошибку одномерной логнормальной переменной.

E[x] = exp(mu + theta) 
Var[x] =  exp(2*mu + theta)*(exp(theta) - 1)

Функция будет принимать E[x] и Var[x] в качестве ввода и вывода даст мне theta и mu

1 Ответ

0 голосов
/ 25 марта 2020

Существует несколько пакетов, которые предоставляют способы и средства для решения системы нелинейных уравнений. Одним из них является nleqslv.

. Вам необходимо предоставить функцию, которая возвращает разницу между фактическим значением уравнений и желаемым значением.

Загрузка пакета nleqslv и определите следующую функцию

library(nleqslv)

f <- function(x,Ex,Varx) {
    y<- numeric(length(x))    
    mu <- x[1]
    theta <- x[2]
    y[1] <- exp(mu+theta) - Ex
    y[2] <- exp(2*mu+theta)*(exp(theta)-1) - Varx

    y
}

Вектор x в функции содержит значения mu и theta. Пример с Ex=2 и Varx=3 и некоторыми случайными начальными значениями

xstart <- c(1,1)
nleqslv(xstart,f,Ex=2,Varx=3)

дает следующее

$x
[1] -0.6931472  1.3862944

$fvec
[1] -8.095125e-11 -8.111645e-11

$termcd
[1] 1

$message
[1] "Function criterion near zero"

$scalex
[1] 1 1

$nfcnt
[1] 31

$njcnt
[1] 2

$iter
[1] 22

См. В руководстве по nleqslv значение различных элементов возвращаемого значения nleqslv.

Если вы хотите исследовать влияние различных методов решения, попробуйте это

testnslv(xstart,f,Ex=2,Varx=3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...