0
newtonraphson <- function(ftn, x0, tol = 1e-9, max.iter = 100) {
x <- x0
fx <- ftn(x)
iter <- 0
while ((abs(fx[1]) > tol) & (iter < max.iter)) {
x <- x - fx[1]/fx[2]
fx <- ftn(x)
iter <- iter + 1
cat("At iteration", iter, "value of x is:", x, "\n")
}
if (abs(fx[1]) > tol) {
cat("Algorithm failed to converge\n")
return(NULL)}
else {
cat("Algorithm converged\n")
return(x)}
}
X <- c(3,1,2,0,6,8,4,5,7,0)
n <- 10
lambda <- seq(0,10,0.01)
ftn <- function(p) {
for (i in 1:10){
fp <- sum(X[i])*log(lambda) - 10*lambda
dfp <- (1/lambda)*sum(X[i]) - 10
}
return(c(fp,dfp))
}
newtonraphson(ftn, 0.1, 1e-06)
これは私のコードでラムダの最尤推定値です。私はこの問題を解決することができないようMLEのニュートンラフソンコード - TRUE/FALSEが必要なTRUE/FALSEが必要です。
Error in while ((abs(fx[1]) >= tol) & (iter <= max.iter)) { :
missing value where TRUE/FALSE needed
: しかし、私はこのエラーを得ました。誰でも助けることができますか? ありがとう!
「lambda」は0で始まらないようにしてください。 'lambda < - seq(0.1,10,1e-06)'のようにしてください。 'X'とは何ですか?なぜ 'sum(X [i])'? 'sum(X)'はそれを行うべきですが、 'X'のためのデータはありません。 – Bhas
入力いただきありがとうございます。 Xは 'X < - c(3,1,2,0,6,8,4,5,7,0)'です。 'sum([i])'については、私はポアソンの対数尤度を表現しようとしていました: 'log(λ)=logλΣXi - nλ - ΣLogXi! ' –
本当にありません。なぜ 'lambda < - seq(...)'をやっているのですか?第1項では 'ftn'の括弧を使います。なぜあなたは 'ftn'で関数引数' p'を使わないのですか?これは動作しません。 – Bhas