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)
这是我找到lambda最大似然估计的代码。 但是,我收到了这个错误:
Error in while ((abs(fx[1]) >= tol) & (iter <= max.iter)) { :
missing value where TRUE/FALSE needed
我似乎无法解决问题。有人可以帮忙吗? 谢谢!
答案 0 :(得分:1)
您正在寻找泊松分布中lambda
的MLE。
但是,您正在解决ftn(lambda)=0
,它没有给出最大可能性(假设参数p实际上是lambda
的值)。
来自Poisson distribution in Wikipedia来自lambda
的MLE为sum(X)/length(X)
。
您应该将ftn
的导数设置为零并求解lambda
。您不需要newtonraphson
。
解决(1/lambda)*sum(X[i]) - 10=0
,它将为您提供维基百科的表达。 (10是length(X)
)。