2

Birnbaum-Saunders distrからサンプルのパラメータを近似する必要があります。ここに私のコードは次のとおりです。RのNewtonraphsonコードが異なる結果につながる

x =c(6.7508, 1.9345, 4.9612, 22.0232, 0.2665, 66.7933, 5.5582, 60.2324, 72.5214, 1.4188, 4.6318, 61.8093, 11.3845, 1.1587, 22.8475, 8.3223, 2.6085, 24.0875, 4.6762, 8.2369) 
l.der1 = function(theta,x) { 
gamma <- theta[1] 
beta <- theta[2] 
n <- length(x) 
ausdruck1=sum((sqrt(x/beta)-sqrt(beta/x))^2) 
ausdruck2=sqrt(x/beta)+sqrt(beta/x) 
matrix(c(-n/gamma+ausdruck1/gamma^3, sum((1/(2*x*sqrt(beta/x))-x/(2*beta^2*sqrt(x/beta)))/ausdruck2)-1/(2*gamma^2)*sum(1/x-x/beta^2)),2, 1) 
} 

l.der2 = function(theta,x) { 
gamma <- theta[1] 
beta <- theta[2] 
n <- length(x) 
ausdruck1=sum((sqrt(x/beta)-sqrt(beta/x))^2) 
ausdruck2=sqrt(x/beta)+sqrt(beta/x) 
ausdruck3=(1/gamma^3)*sum(1/x-x/beta^2) 
matrix(c(n/gamma^2-(3*ausdruck1)/gamma^4,ausdruck3,ausdruck3,sum((2-beta/x+x/beta)/(2*beta^2*ausdruck2^2))-(1/(2*gamma^2))*sum(2*x/beta^3)),2, 2, byrow=T) 
} 

newtonraphson = function(theta,l.der1,l.der2,x,col=2,epsilon=10^(-6)) { 
I <- l.der2(theta,x) 
thetastar <- theta - solve(I) %*% l.der1(theta,x) 
repeat {theta=thetastar 
    thetastar <- theta - solve(I) %*% l.der1(theta,x) 
    if (((thetastar[1]-theta[1])^2)/thetastar[1]^2 < 10^(-6) && ((thetastar[2]-theta[2])^2)/thetastar[2]^2 < 10^(-6)) #calculating relative convergence 
    return(thetastar) 
} 
} 

theta = c(1,4) #starting point 
theta= newtonraphson(theta,l.der1,l.der2,x=x) 
theta 

問題は収束の条件が満たされているようだが、私の近似値は、私は出発点として選択したシータに応じて、大幅に、私の意見では、異なることがあります。したがって、私は、わずかに異なる出発点を選択することによってどの結果を得るのか分かりません。

なぜ方法が非常に不安定であるかのアイデアはありますか?

答えて

4

私はこの種の問題のためにホイールを再発明しておらず、カスタムアルゴリズムを使用します。私はNewton-raphsonアルゴリズムを実装している複数のRパッケージの中にすでに組み込まれている関数を使用します。

例えば、ここにrootSolveパッケージを使用して:

library(rootSolve) 
theta <- c(1,4) 
multiroot(l.der1,theta,jacfunc=l.der2,x=x) 
$root 
[1] 1.87116 6.83414 

$f.root 
      [,1] 
[1,] 2.168992e-08 
[2,] 6.425832e-09 

$iter 
[1] 8 

$estim.precis 
[1] 1.405788e-08 

私は theta2 <- c(1,3)と同じ結果を得ました。

+0

ありがとうございます。問題は、コンバージェンスが10 ^( - 6)に達したときに、私が特に止まってしまったことです。私は問題が "繰り返し"ループにあると思う。 – Lola

+0

私のリピートループをもう一度見てもらえますか?私は本当にそれが失敗する理由を知る必要があります、そうでなければ私は同じミスを犯し続けます。そして、私は何が間違っているかを見るのに苦労します... – Lola

関連する問題