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 용 Newton Raphson 코드 - TRUE/FALSE가 필요한 누락 값
Error in while ((abs(fx[1]) >= tol) & (iter <= max.iter)) { :
missing value where TRUE/FALSE needed
: 그러나, 나는이 오류가 발생했습니다. 아무도 도와 줄 수 있니? 감사합니다.
음 '람다'가 0에서 시작하도록하지 마십시오.'lambda <- seq (0.1,10,1e-06)'와 같은 것을하십시오. 'X' 란 무엇입니까? 왜'sum (X [i])'인가? 'sum (X)'는 그것을 수행해야하지만'X'를위한 데이터가 없어야합니다. 그래서 추측 할 수 있습니다. – Bhas
입력 해 주셔서 감사합니다. X는'X <- c (3,1,2,0684570)'입니다. 'sum ([i])'에 대해서, 나는 poisson의 로그 가능성을 표현하려고 노력했다 :'log (λ) = logλΣXi - nλ - ΣLogXi! ' –
아닙니다. 왜'lambda <- seq (...)'를하고 있습니까? 첫 번째 용어에서'ftn'에 괄호를 사용하십시오. 왜 ftn에서 함수 인자'p'를 사용하지 않습니까? 이것은 작동하지 않습니다. – Bhas