Решение просто нелинейной системы - PullRequest
0 голосов
/ 05 января 2019

Например, у меня есть эти данные:

x-c(73,6,77,81,91,120,150,61,65,68,18,20,23,12,14,18,23,26
+26,27,2,3,3,40,41,41,6,10,11,12,37,38,38,6,73,6,51)

и я хочу вычислить параметры a = shape и b = scale гамма-распределения. Я хочу решить эту нелинейную систему

a*b=m1
a*b^2+(a^2)*(b^2)=m2

m1 и m2 это:

m1<-sum(x)/length(x)
m2<-sum((x)^2)/length(x)

Я могу решить это вручную и с помощью калькулятора, но я хочу знать, как мгновенно решить эту проблему с помощью R

1 Ответ

0 голосов
/ 06 января 2019

R может сделать это довольно легко

library(nleqslv)
f <- function(x) {
  a<-x[1]
  b<-x[2]
  c(a*b-m1,a*b^2+(a^2)*(b^2)-m2)
}
nleqslv(c(1,30), f)

Вывод должен выглядеть так:

$`x`
[1]  1.286486 30.595840

$fvec
[1] -9.663381e-13 -1.396074e-10

$termcd
[1] 1

$message
[1] "Function criterion near zero"

$scalex
[1] 1 1

$nfcnt
[1] 11

$njcnt
[1] 2

$iter
[1] 10

Вы можете сделать вещи более надежными, предоставляя градиенты. Конечно, R также может оценивать параметры для гамма-распределения напрямую (например, fitdistr из пакета MASS).

...